0
点赞
收藏
分享

微信扫一扫

最大异或对


题解:

最大异或对_#include


题解:

用trie树存储每一个数,从最大位开始,每次选择不同的

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
const int M=31*N;
int son[M][2],idx;
int a[N];
int qurry(int x)
{
int p=0;
int ans=0;
for(int i=30;i>=0;i--)
{
int u=x>>i&1;
if(son[p][!u])
{
p=son[p][!u];
ans=ans*2+!u;
}
else
{
p=son[p][u];
ans=ans*2+u;
}
}
return ans;
}
void insert(int x)
{
int p=0;
for(int i=30;i>=0;i--)
{
int u=x>>i&1;
if(!son[p][u]) son[p][u]=++idx;
p=son[p][u];
}
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int ans=0;
for(int i=1;i<=n;i++)
{
insert(a[i]);
int t=qurry(a[i]);
ans=max(ans,t^a[i]);
}
cout<<ans<<endl;
return 0;
}


举报

相关推荐

0 条评论