奶牛异或

奶牛异或

关键

很明显的找异或最大值的问题,从前面开始往后面找一个最大值。
但如果直接模拟,就需要一个删除操作,所以可以从后面开始操作,先确定右端点就可以了
也就是稍微转换一下就可以了

代码

#include <bits/stdc++.h>
using namespace std;
const int M=1e5+5;
int ch[M*21][2],tot;
void insert(int x) {
int p=0;
for(int i=20;i>=0;i--) {
int v=x>>i&1;
if(ch[p][v]==0)ch[p][v]=++tot;
p=ch[p][v];
}
}
int find(int x) {
int p=0,ans=0;
for(int i=20;i>=0;i--) {
int v=x>>i&1;
if(ch[p][v^1])p=ch[p][v^1],ans|=1<<i;
else p=ch[p][v];
}
return ans;
}
int a[M];
int main() {
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n;cin>>n;
int ans=-1,l,r;
insert(0);
//先确定右端点,这样子就可以避免删除的操作
for(int i=1;i<=n;i++) {
int x;cin>>x;
a[i]=a[i-1]^x;
}
for(int i=1;i<=n;i++) {
int x=find(a[i]);
if(x>ans)ans=x,r=i;
insert(a[i]);
}
for(int i=r-1;i>=0;i--)
if((a[i]^a[r])==ans){l=i+1;break;}
cout<<ans<<' '<<l<<' '<<r<<endl;
return 0;
}
posted @   basicecho  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示