奶牛异或

奶牛异或

https://ac.nowcoder.com/acm/problem/22998

奶牛异或

分析

  1. 先假设s [ i ] = a [ 1 ] ^ a [ 2 ] ^ ... ^ a [ i ],那么
    图片说明
  1. 在每次将 a [ i ] 加入树的时候,记录它的尾节点对应的是哪一个下标

代码

/*
(写点什么吧...)
*/
#include<bits/stdc++.h>

#define R register
#define ll long long
#define inf INT_MAX

using namespace std;

const int N=1e5+10;

int n,tot,sum;
int a[N],tr[2][N*20],be[20*N];

inline void insert(int x,int id)
{
    int rt=0;
    for (int i=20;i>=0;i--)
    {
        bool c=((x>>i)&1);
        if(!tr[c][rt]) tr[c][rt]=++tot;
        rt=tr[c][rt];
    }

    be[rt]=id;//记录rt节点对应的下标
}

inline int find(int x)
{
    int ret=0,rt=0;
    for (int i=20;i>=0;i--)
    {
        bool c=((x>>i)&1);
        if(tr[c^1][rt])
            ret+=(1<<i),rt=tr[c^1][rt];
        else rt=tr[c][rt];
    }

    sum=ret;
    return be[rt];
}

int main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++) scanf("%d",&a[i]);
    for (int i=2;i<=n;i++) a[i]^=a[i-1];
//先处理异或前缀和
    insert(0,0);//因为可能选到s[1~i]
    int ans=-1,x=0,y=1;
    for (int i=1;i<=n;i++)
    {
        int now=find(a[i]);//找到使结果最小的值的下标
        if(sum>ans) ans=sum,y=i,x=now;//判断大小
//        else if(ans==sum&&(i-now<y-x)) y=i,x=now;
//否则选择一个最短的区间
        insert(a[i],i);
    }

    printf("%d %d %d\n",ans,x+1,y);

    return 0;
}
每日一题 文章被收录于专栏

每天的题,为了牛币

全部评论

相关推荐

joe2333:怀念以前大家拿华为当保底的日子
点赞 评论 收藏
分享
评论
3
收藏
分享
正在热议
# 25届秋招总结 #
443173次浏览 4517人参与
# 春招别灰心,我们一人来一句鼓励 #
42122次浏览 537人参与
# 阿里云管培生offer #
120406次浏览 2220人参与
# 地方国企笔面经互助 #
7973次浏览 18人参与
# 同bg的你秋招战况如何? #
77083次浏览 569人参与
# 实习必须要去大厂吗? #
55804次浏览 961人参与
# 北方华创开奖 #
107468次浏览 600人参与
# 虾皮求职进展汇总 #
116163次浏览 886人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11668次浏览 289人参与
# 实习,投递多份简历没人回复怎么办 #
2454912次浏览 34860人参与
# 提前批简历挂麻了怎么办 #
149924次浏览 1978人参与
# 在找工作求抱抱 #
906096次浏览 9421人参与
# 如果公司给你放一天假,你会怎么度过? #
4762次浏览 55人参与
# 你投递的公司有几家约面了? #
33209次浏览 188人参与
# 投递实习岗位前的准备 #
1196021次浏览 18550人参与
# 机械人春招想让哪家公司来捞你? #
157643次浏览 2267人参与
# 双非本科求职如何逆袭 #
662359次浏览 7397人参与
# 发工资后,你做的第一件事是什么 #
12798次浏览 62人参与
# 工作中,努力重要还是选择重要? #
35896次浏览 384人参与
# 简历中的项目经历要怎么写? #
86935次浏览 1516人参与
# 参加完秋招的机械人,还参加春招吗? #
20148次浏览 240人参与
# 我的上岸简历长这样 #
452049次浏览 8089人参与
牛客网
牛客企业服务