求助细节
查看原帖
求助细节
147441
Godzilla楼主2021/6/15 17:17
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>

#define PR pair<int,int>

using namespace std;

const int kN=6e5+5;

int n,m,a[kN];
int rt[kN],last[kN*20],sum[kN],trie[kN*20][2],cnt;

void Insert(int k,int i,int p1,int &p2){
	p2=++cnt;
	if(k<0){
		last[p2]=i;
		return;
	}
	int ar=(sum[i]>>k)&1;
	if(p1){
		trie[p2][ar^1]=trie[p1][ar^1];
	}
	Insert(k-1,i,trie[p1][ar],trie[p2][ar]);
	last[p2]=max(last[trie[p2][0]],last[trie[p2][1]]);
}

int Query(int l,int x,int p){
	int now=p;
	for(int i=23;i>=0;--i){
		int ar=(x>>i)&1;
		if(last[trie[now][ar^1]]>=l){
			now=trie[now][ar^1];
		}
		else{
			now=trie[now][ar];
		}
	}
	return x^sum[last[now]];
}

signed main(){
	scanf("%d%d",&n,&m);
	Insert(23,0,0,rt[0]);
	last[0]=-1;
	for(int i=1;i<=n;++i){
		scanf("%d",&a[i]);
		sum[i]=sum[i-1]^a[i];
		Insert(23,i,rt[i-1],rt[i]);
	}
	for(int i=1;i<=m;++i){
		char op;int l,r,x;
		scanf(" %c",&op);
		if(op=='A'){
			scanf("%d",&x);
			n++;
			sum[n]=sum[n-1]^x;
			Insert(23,n,rt[n-1],rt[n]);
		}
		else{
			scanf("%d%d%d",&l,&r,&x);
			printf("%d\n",Query(l-1,sum[n]^x,rt[r-1]));
		}
	}
	return 0;
}

加了代码中的 last[0]=1 AC ,没加就全WA

看了半天没看懂,求大佬看看是什么问题

2021/6/15 17:17
加载中...