奶牛异或
关键
很明显的找异或最大值的问题,从前面开始往后面找一个最大值。
但如果直接模拟,就需要一个删除操作,所以可以从后面开始操作,先确定右端点就可以了
也就是稍微转换一下就可以了
代码
#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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现