loj 10050 连续子段最大异或和

时间:2023-03-08 22:08:07
#include<bits/stdc++.h>
#define rep(i,x,y) for(register int i=x;i<=y;i++) using namespace std;
const int N=; int ch[N][],a[N];
int tot,n,ans; inline void insert(int x){
int u=;
for(int k=;k>=;k--){
int c=(x>>k)&;
if(!ch[u][c]) ch[u][c]=++tot;
u=ch[u][c];
}
}
inline int query(int x){
int u=,v=,ans=;
for(int k=;k>=;k--){
int c=(x>>k)&,o=c?:;
if(ch[v][o]) v=ch[v][o],ans=(ans<<)|;
else v=ch[v][c],ans<<=;
u=ch[u][c];
}return ans;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]),insert(a[i]);
for(int i=;i<=n;i++)
ans=max(ans,query(a[i]));
printf("%d\n",ans);return ;
}