最大异或对
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
输入样例
3
1 2 3
输出样例
3
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int n, a[N], f[N*31][2], idx;
void minsert(int num){
int p = 0;
for(int i=30; i>=0; i--){ //右移i位
int x = (num >> i) & 1;
if(!f[p][x]) f[p][x]= ++idx;
p = f[p][x];
}
}
int mfind(int num){
int p = 0;
int ans = 0;
for(int i=30; i>=0; i--){
int x = (num >> i) & 1;
if(f[p][!x]){
ans += (1 << i);
p = f[p][!x];
}
else p = f[p][x];
}
return ans;
}
int main(){
cin >> n;
for(int i=1; i<=n; i++){
cin >> a[i];
minsert(a[i]); //构建trip树
}
int ans = 0;
for(int i=1; i<=n; i++) ans = max(ans, mfind(a[i]));
cout << ans;
return 0;
}