挺可持久化的实现过程
#include<bits/stdc++.h>
#define int long long
#define F(i,i0,n) for(int i=i0;i<=n;i++)
using namespace std;
inline int rd(){
int f=0,x=0;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=1;ch=getchar();}
while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-48;ch=getchar();}
return f?-x:x;
}
const int N=2e7+5,inf=1e9;
int n,m;
struct Trie{
int ch[N][2],val[N],rt[N],tot,cnt[N],num;
void ins(int x){
rt[++num]=++tot;val[num]=x;
int l=rt[num-1],r=rt[num];
for(int i=30;~i;--i){
int k=(x>>i)&1;
ch[r][k^1]=ch[l][k^1];
ch[r][k]=++tot;
l=ch[l][k],r=ch[r][k];
cnt[r]=cnt[l]+1;
}
}
int que(int o1,int o2,int x){
int ans=0;
o1=rt[o1],o2=rt[o2];
for(int i=30;~i;--i){
int k=(x>>i)&1;
if(cnt[ch[o1][k^1]]-cnt[ch[o2][k^1]]){
ans+=(1<<i);
o1=ch[o1][k^1];
o2=ch[o2][k^1];
}
else {
o1=ch[o1][k];
o2=ch[o2][k];
}
}
return ans;
}
}trie;
signed main(){
n=rd(),m=rd();
trie.ins(0);
int sum=0;
F(i,1,n){
int x=rd();
trie.ins(sum^=x);
}
while(m--){
char op;cin>>op;
if(op=='A'){
int x=rd();
trie.ins(sum^=x);
}
else {
int l=rd(),r=rd(),x=rd();
cout<<trie.que(r,l-1,sum^x)<<'\n';
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】