蒟蒻可持久化trie板子全WA求条,样例已过
查看原帖
蒟蒻可持久化trie板子全WA求条,样例已过
612567
Kazeno_Akina楼主2023/11/11 11:56

code:

#include <bits/stdc++.h>
using namespace std;
const int N=6e5+5,L=30;
struct node{int lasvis,c[2];};
int n,m,s,l,r,x,tot,init,stot,roottot,ch[L],root[N];
char opt;
node tr[N*25];
inline void change(int k){for(int i=25;i>=1;--i) ch[i]=(k&1),k>>=1;}
inline void insert(int rootord,int init,int lasvis){
	change(init);
	int p=root[rootord-1],q=root[rootord];
	for(int i=1;i<=26;++i){
		tr[q].lasvis=lasvis;
		if(i==26) break;
		if(p!=0) tr[q].c[0]=tr[p].c[0],tr[q].c[1]=tr[p].c[1];
		tr[q].c[ch[i]]=++tot;
		p=tr[p].c[ch[i]],q=tr[q].c[ch[i]];
	}
}
inline int find(int l,int rootord,int val){
	int p=root[rootord],ans=0;
	change(val);
	for(int i=1;i<=25;++i){
		if(tr[tr[p].c[!ch[i]]].lasvis>=l) ans+=1<<(25-i),p=tr[p].c[!ch[i]];
		else p=tr[p].c[ch[i]];
	}
	return ans;
}
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin >> n >> m,stot=n;
	for(int i=1;i<=n;++i){
		cin >> init;
		s^=init;
		root[++roottot]=++tot;
		insert(roottot,s,i);
	}
	while(m--){
		cin >> opt;
		if(opt=='A') cin >> init,s^=init,++stot,root[++roottot]=++tot,insert(roottot,s,stot);
		else{
			cin >> l >> r >> x;
			cout << find(l-1,r-1,s^x) << '\n';
		}
	}
	return 0;
}

全部WA但是都错在好几千行的位置。求条qwq

2023/11/11 11:56
加载中...