社区讨论

萌新刚学OI,一直80分

P4735最大异或和参与者 7已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@mi7x77sa
此快照首次捕获于
2025/11/21 05:05
4 个月前
此快照最后确认于
2025/11/21 05:05
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
int n,m;
const int maxn=600005;
int ch[maxn<<5][2],cnt[maxn<<5];int din=1;
void ins(int&pos,int x,int i=26){
	din++;
	rep(j,0,1)ch[din][j]=ch[pos][j];
	cnt[din]=cnt[pos];
	pos=din;
	cnt[pos]++;
	if(i<0)return;
	int fx=(x>>i)&1;
	ins(ch[pos][fx],x,i-1);
}
int vv[maxn];int din2=0;
int rec[maxn];
int maxyh(int x,int y,int ta,int i=26){
	if(i<0)return 0;
	//cout<<"$"<<x<<" "<<y<<" "<<ta<<" "<<i<<endl;
	rep(j,0,1){
		int fx=((ta>>i)&1)^j^1;
		if(cnt[ch[y][fx]]>cnt[ch[x][fx]]){
			return maxyh(ch[x][fx],ch[y][fx],ta,i-1)|((j^1)<<i);
		}
	}
return 0;}
void pr(){
	return;
	cout<<endl<<endl;
	cout<<"digraph{";
	rep(i,1,din)cout<<i<<"[label=\""<<i<<" "<<cnt[i]<<"\"];";
	rep(i,1,din)rep(j,0,1)if(ch[i][j])
		cout<<i<<"->"<<ch[i][j]<<"[label=\""<<j<<"\"];";
	cout<<"}";
	cout<<endl<<endl;
}
int main(){
	cin>>n>>m;
	int las=0;
	vv[0]=1;
	pr();
	rep(i,1,n){
		int x;cin>>x;vv[din2+1]=vv[din2];din2++;
		x^=las;
		rec[din2]=x;
		ins(vv[din2],x);
		pr();
		las=x;
	}
	rep(i,1,m){
		string ty;cin>>ty;
		if(ty=="A"){
			int x;cin>>x;vv[din2+1]=vv[din2];din2++;
			x^=las;
			rec[din2]=x;
			ins(vv[din2],x);
			pr();
			las=x;
		}else{
			int l,r,x;cin>>l>>r>>x;
			int ta=rec[din2]^x;
			cout<<(l>1?maxyh(vv[l-2],vv[r-1],ta):max(maxyh(0,vv[r-1],ta),ta))<<endl;
		}
	}
	return 0;
}

回复

7 条回复,欢迎继续交流。

正在加载回复...