#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=100505;
ll a[N];
ll son[32*N][2],idx=1,tail[N*32];
void insert(ll x)
{
ll p=0;
for(int i=32;i>=0;i--)
{
int u=x>>i&1;//取x的二进制第i位上的数
if(son[p][u]==0)
{
son[p][u]=idx++;
}
p=son[p][u];
}
tail[p]=1;
}
ll ask(ll x)
{
ll p=0,ans=0;
for(int i=32;i>=0;i--)
{
int u=x>>i&1;
if(son[p][!u])
{
p=son[p][!u];
ans=ans*2+1;
}
else
{
p=son[p][u];
ans=ans*2;
}
}
return ans;
}
void solve()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
insert(a[i]);
}
ll ans=0;
for(int i=1;i<=n;i++)
{
ans=max(ans,ask(a[i]));
}
cout<<ans<<'\n';
}
int main()
{
int t=1;
//cin>>t;
while(t--)
{
solve();
}
}
01字典树求最大异或对
最新推荐文章于 2024-07-15 22:53:16 发布