#include<bits/stdc++.h>
using namespace std;
const int N=100010,M=N*31;
int son[M][2],idx,a[N];
void add(int x){
int p=0;
for(int i=30;i>=0;i--){
int t=x>>i&1;
if(!son[p][t]){
son[p][t]=++idx;
}
p=son[p][t];
}
}
int search(int x){
int p=0,res=0;
for(int i=30;i>=0;i--){
int u=x>>i&1;
if(son[p][!u]){
res=res+(1<<i);//左右移运算符的优先级比加减滴(最低级)
p=son[p][!u];
}
else{
p=son[p][u];
}
}
return res;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
add(a[i]);
}
int res=0;
for(int i=1;i<=n;i++){
res=max(res,search(a[i]));
}
cout<<res;
return 0;
}
AcWing 143. 最大异或对(trie+贪心)
最新推荐文章于 2024-06-15 23:36:03 发布