社区讨论
81pts WA#2 #11 求调
P4735最大异或和参与者 3已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @lo2a0nv0
- 此快照首次捕获于
- 2023/10/23 10:26 2 年前
- 此快照最后确认于
- 2023/11/03 10:38 2 年前
CPP
#include<iostream>
#include<algorithm>
const int sz=3e5+10;
int arr[sz<<1],root[sz<<1];
struct Trie{
struct node{
int cnt,son[2];
}tree[sz<<8];
int num=0;
void insert(int p,int srt,int val){
for(int i=23;i>=0;i--){
int v=(val>>i)&1;
if(tree[p].son[v]==0)tree[p].son[v]=++num;
tree[p].son[v^1]=tree[srt].son[v^1];
p=tree[p].son[v],srt=tree[srt].son[v];
tree[p].cnt=tree[srt].cnt+1;
}
}
int query(int urt,int vrt,int val){
int ans=0;
for(int i=23;i>=0;i--){
int v=(val>>i)&1;
if(tree[tree[vrt].son[v^1]].cnt!=tree[tree[urt].son[v^1]].cnt)
ans+=1<<i,urt=tree[urt].son[v^1],vrt=tree[vrt].son[v^1];
else urt=tree[urt].son[v],vrt=tree[vrt].son[v];
}
return ans;
}
}trie;
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int n,q;
std::cin>>n>>q;
for(int i=1;i<=n;i++)
std::cin>>arr[i],arr[i]^=arr[i-1];
root[0]=++trie.num;
for(int i=1;i<=n;i++)
root[i]=++trie.num,trie.insert(root[i],root[i-1],arr[i]);
while(q--){
char op;
std::cin>>op;
if(op=='A'){
++n,std::cin>>arr[n];
arr[n]^=arr[n-1];
root[n]=++trie.num;
trie.insert(root[n],root[n-1],arr[n]);
}else{
int l,r,x;
std::cin>>l>>r>>x;
l--,r--;
if(l==0)std::cout<<trie.query(root[0],root[r],arr[n]^x)<<"\n";
else std::cout<<trie.query(root[l-1],root[r],arr[n]^x)<<"\n";
}
}
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...