28pts WA 可持久化tire求调
查看原帖
28pts WA 可持久化tire求调
287411
_脑波_楼主2023/4/2 10:33
#include<bits/stdc++.h>
#define edp (x>>i)&1//end position
const int N=11451481;
int n,m,a[N],s[N],rt[N],cnt,tr[N][2],ed[N];
void insert(int p,int q,int x,int len){
	for(int i=len;i>=0;i--){
		if(p)tr[q][0]=tr[p][0],tr[q][1]=tr[p][1];
		cnt=-~cnt;
		tr[q][edp]=cnt;
		p=tr[p][edp],q=tr[q][edp];
	}
	ed[q]=x;
}
int query(int p,int x,int l,int r){
	for(int i=23;i>=0;i--){
		if(tr[p][edp^1]!=0&&(tr[p][edp^1]-tr[p][edp^1]%23)/23>=l-1)p=tr[p][edp^1];
		else p=tr[p][edp];
	}
	return ed[p]^x;
}
int main(){
	std::cin>>n>>m;
	rt[0]=1;
	insert(0,1,0,23);
	ed[0]=-1;
	for(int i=1;i<=n;i=-~i){
		std::cin>>a[i];
		s[i]=s[i-1]^a[i];
		rt[i]=++cnt;
		insert(rt[i-1],rt[i],s[i],23);
	}
	while(m--){
		char opt;
		std::cin>>opt;
		if(opt=='A'){
			int x;
			std::cin>>x;
			n=-~n;
			s[n]=s[n-1]^x;
			rt[n]=++cnt;
			insert(rt[n-1],rt[n],s[n],23);
		}
		else{
			int l,r,x;
			std::cin>>l>>r>>x;
			std::cout<<query(rt[r-1],s[n]^x,l,r)<<std::endl;
		}
	}
}
2023/4/2 10:33
加载中...