NKOJ 1873 Cow XOR奶牛异或【Trie】

注意一下初始化、

#include <bits/stdc++.h>
using namespace std;

const int N=2e5+5;

int n,st,ed,ans,a[N],sum[N];
int tot=1,ch[N*21][2],val[N*21];

void ins(int s) {
	int p=1;
	
	for(int i=21;i>=0;i--) {
		int q=(sum[s]>>i)&1;
		
		if(!ch[p][q]) ch[p][q]=++tot;
		
		p=ch[p][q];
	}
	
	val[p]=s;
}

int find(int s) {
	int p=1;
	
	for(int i=21;i>=0;i--) {
		int q=((sum[s]>>i)&1);
		
		if(!ch[p][1^q]) p=ch[p][q];
		else p=ch[p][1^q];
	}
	
	return val[p];
}

int main() {
	scanf("%d",&n);
	
	for(int i=1;i<=n;i++) scanf("%d",&a[i]),sum[i]=sum[i-1]^a[i];
		
	ins(1);ans=sum[1],st=1,ed=1;
	
	for(int i=2;i<=n;i++) {
		int p=find(i);
		
		if((sum[i]^sum[p])>ans) ans=sum[i]^sum[p],st=p+1,ed=i;
	
		ins(i);
	}
	
	printf("%d %d %d",ans,st,ed);
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/yanzhenhuai/article/details/83544348