不理解为什么样例都过不了,悬关
查看原帖
不理解为什么样例都过不了,悬关
538683
Enoch006楼主2024/4/12 12:12

rt,请各位大佬解释一下代码为什么错了。

#include <bits/stdc++.h>
#define int long long
#define maxm 15000005
#define maxn 1005
#define inf 0x3f3f3f3f3f3f
using namespace std;
int n,m,cnt,Xor;
int a[maxm],ver[maxm];
struct Trie{
	int ch[2];
	int sz;
}t[maxm]; 
void Insert(int k,int &rt,int x){
	rt=++cnt;
	int root=rt;
	for(int i=5;i>=0;i--){
		int y=(x>>i)&1;
		t[root].ch[y^1]=t[k].ch[y^1];
		t[root].ch[y]=++cnt;
		t[root].sz=t[k].sz+1;
		root=t[root].ch[y],k=t[k].ch[y];
	}
	//cout<<"-------------------------------------------------------------\n";
}
int Ask(int l,int r,int x){
	int sum=0;
	for(int i=5;i>=0;i--){
		int y=(x>>i)&1;
		//cout<<i<<" "<<y<<": \n";
		//cout<<l<<" "<<r<<" "<<sum<<"\n";
		//cout<<t[t[r].ch[y^1]].sz<<" "<<t[t[l].ch[y^1]].sz<<"\n";
		if(t[t[r].ch[y^1]].sz-t[t[l].ch[y^1]].sz>0){
			sum+=(1<<i);
			l=t[l].ch[y^1],r=t[r].ch[y^1];
		}
		else l=t[l].ch[y],r=t[r].ch[y];
	}
	return sum;
}
int Check(int k){
	int sum=0,x=5;
	while(k){
		if(t[k].ch[0])k=t[k].ch[0];
		else if(t[k].ch[1])k=t[k].ch[1],sum+=1<<x;
		else return sum;
		x--;
	} 
} 
signed main(){
//    ios::sync_with_stdio(0);
//    cin.tie(0);
//    cout.tie(0);
	cin>>n>>m;
    for(int i=1;i<=n;i++){
		cin>>a[i];
		a[i]^=a[i-1];
	//	cout<<a[i]<<" ";
	}
//	cout<<"\n";
	for(int i=1;i<=n;i++)Insert(ver[i-1],ver[i],a[i]);
	//for(int i=1;i<=n;i++)cout<<Check(ver[i])<<" ";
	//cout<<"\n";
	for(int i=1;i<=m;i++){
		char op;
		int x,y,z;
		cin>>op>>x;
		if(op=='A'){
			n++;
			a[n]=a[n-1]^x;
			Insert(ver[n-1],ver[n],a[n]);
		}
		else{
			cin>>y>>z;
			//cout<<z<<" "<<Xor<<" ";
			z^=a[n];
			//cout<<z<<"\n";
			//cout<<Ask(ver[4],ver[5],z)<<"\n";
			//for(int i=x-2;i<=y-1;i++)cout<<Check(ver[i])<<" ";
			//cout<<"\n";
			cout<<Ask(ver[max(0ll,x-2)],ver[y-1],z)<<"\n";
		}
		//for(int i=1;i<=50;i++)cout<<i<<" "<<t[i].ch[0]<<" "<<t[i].ch[1]<<" "<<t[i].sz<<"\n";
	}
    return 0;
}
2024/4/12 12:12
加载中...