只过T11祭并且求调教
查看原帖
只过T11祭并且求调教
995117
pineappler楼主2024/5/17 01:10

别人都在讨论为什么#11过不去,只有我看着我只过了#11的代码陷入沉思……

哥,要不咱俩的杂交一下?

有记录有真相

#include <bits/stdc++.h>
using namespace std;
const long long Len=15,N=3e5,Num=Len*N*2;
long long a[N*2+5],s[N*2+5];
long long tr[Num+5][2],id[Num+5],idx;
long long root[N*2+5];
void insert(long long u,long long v,long long k){
	for(long long i=Len;i>=0;i--){
		long long c = (s[k]>>i)&1;
		tr[u][c] = ++idx;
		id[idx]=k;
		tr[u][!c] = tr[v][!c];
		u = tr[u][c];
		v = tr[v][c];
	}
}
long long query(long long u,long long l,long long x){
	long long ans = 0;
	for(long long i=Len;i>=0;i--){
		long long c = (x>>i)&1;
		if(tr[u][!c] and id[tr[u][!c]]>=l){
			u=tr[u][!c];
			ans+=(1<<i)*(!c);
		}else{
			u=tr[u][c];
			ans+=(1<<i)*c;
		}
	}
	return ans;
}
int main(){
	long long n,m;
	scanf("%lld%lld",&n,&m);
	root[0]=++idx;
	insert(root[0],0,0);
	for(long long i=1;i<=n;i++){
		long long x;
		scanf("%lld",&x);
		s[i]=s[i-1] xor x;
		root[i]=++idx;
		insert(root[i],root[i-1],i);
	}
	for(long long t=1;t<=m;t++){
		char op[2];
		scanf("%s",op);
		if(op[0]=='A'){
			long long x;
			n++;
			scanf("%lld",&x);
			s[n]=s[n-1] xor x;
			root[n]=++idx;
			insert(root[n],root[n-1],n);
		}else{
			long long l,r,x;
			scanf("%lld%lld%lld",&l,&r,&x);
			printf("%lld\n",query(root[r-1],l-1,x xor s[n]) xor x xor s[n]);
		}
	}
	return 0;
}
/*
5 5
2 6 4 3 6
A 1 
Q 3 5 4 
A 4
Q 5 7 0 
Q 3 6 6 
*/
2024/5/17 01:10
加载中...