社区讨论

性感代码,在线求条(45pts)

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

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@lp0zqxap
此快照首次捕获于
2023/11/16 17:30
2 年前
此快照最后确认于
2023/11/16 19:27
2 年前
查看原帖
rt,hack数据也行
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=3e5+10,mod=1e9+7,top=30;
inline int read(){
	int n=0,c,x=0;
	while((c=getchar())<'0'||c>'9') x=c==45;
	do (n*=10)+=c-'0';while((c=getchar())>='0'&&c<='9');
	return x?-n:n;
}
int write(int n){
	if(n<0) putchar('-'),n=-n;
	if(n>9) write(n/10);
	putchar(n%10+'0');
	return n;
}

int n=read(),m=read(),a[maxn],root[maxn],tot;
struct node{int p[3],l;}trie[maxn*60];
int nw(int &x){
	if(!x) x=++tot;
	else trie[++tot]=trie[x],x=tot;
	return x;
}
void insert(int x,int id){
	int now=nw(root[id]);
	if(id) trie[now]=trie[root[id-1]];
	for(int i=top;~i;--i){
		trie[now].l=id;
		now=nw(trie[now].p[(x>>i)&1]);
	}
	trie[now].l=id;
}

signed main(){
	insert(0,0);
	for(int i=1;i<=n;++i) a[i]=a[i-1]^read(),insert(a[i],i);
	for(int k=1;k<=m;++k){
		string opt;
		cin>>opt;
		if(opt=="A"){
			int x=read();
			a[++n]=a[n-1]^x,insert(a[n],n);
		}
		else{
			int l=read()-1,r=read()-1,x=read()^a[n],now=root[r],ans=0;
			for(int i=top;~i;--i){
				int sub=((x>>i)&1)^1,nxt=trie[now].p[sub];
				if(nxt&&l<=trie[nxt].l) now=nxt;
				else now=trie[now].p[sub^=1];
				ans^=(sub<<i);
			}
			write(ans^x),puts("");
		}
	}
	return 0;
}

回复

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

正在加载回复...