题目描述
在给定的N个整数A1,A2,…,AN中选出两个进行异或运算得到的结果最大是多少?
输入格式
第一行一个整数 N。
第二行 N 个整数 Ai。
输出格式
一个整数表示答案。
样例输入
5
2 9 5 7 0
样例输出
14
提示
对于100%的数据
#include<bits/stdc++.h>
using namespace std;
struct node{
int ch[2];
int val;
}tr[3000005];
int n,tot=1,a[100005];
void insert(int x){
int u=1;
for(int i=30;i>=0;i--){
int child;
if(x&(1<<i)) child=1; else child=0;
if(!tr[u].ch[child]) tr[u].ch[child]=++tot;
u=tr[u].ch[child];
}
tr[u].val=x;
}
int find(int x){
int u=1;
for(int i=30;i>=0;i--){
int child;
if(x&(1<<i)) child=0; else child=1;
if(tr[u].ch[child]){
u=tr[u].ch[child];
}else{
u=tr[u].ch[1-child];
}
}
return tr[u].val;
}
int ans=0;
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
insert(a[i]);
}
for(int i=0;i<n;i++){
ans=max(ans,find(a[i])^a[i]);
}
cout<<ans;
return 0;
}
,1≤N≤105, 0≤Ai<231。