template/学习路径/算法/最大区间异或和.cpp
2025-03-17 00:29:43 +08:00

64 lines
871 B
C++

#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
int ch[25*600005][2],idx;
using namespace std;
void insert(int &x)
{
int p=0;
for(int i=8;i>=0;i--)
{
int j=x >> i & 1;
if(!ch[p][j])ch[p][j]=++idx;
p=ch[p][j];
}
}
int query(int x)
{
int p=0,res=0;
for(int i=8;i>=0;i--)
{
int j=x >> i & 1;
if(ch[p][!j]){
res+= 1 << i;
p=ch[p][!j];
}
else p=ch[p][j];
}
return res;
}
void solve(){
int n,res1;
cin>>n;
vector <int> preres(n,0);
for(int i=0;i<=n-1;i++)
{
if(i==0)cin>>res1;
else {
int x;
cin>>x;
res1 ^= x;
}
preres[i]=res1;
}
for_each(preres.begin(),preres.end(),insert);
int ans=0;
for(int i=0;i<=n-1;i++)
{
ans=max(ans,query(preres[i]));
ans=max(ans,preres[i]);
}
cout<<ans<<"\n";
}
int main()
{
int t;
cin>>t;
for(int i=1;i<=t;i++)
{
memset(ch,0,sizeof ch);
solve();
}
}