在给定的N个整数选出两个进行xor(异或)运算,得到的结果最大是多少?
#include<bits/stdc++.h> using namespace std; const int N=4e6+10; int ch[N][2],n,a,ans,tot=1; void insert() { int u=1; for(int i=30;i>=0;i--) { int v=(a>>i)&1; if(!ch[u][v])ch[u][v]=++tot; u=ch[u][v]; } } void query() { int u=1,tmp=0; for(int i=30;i>=0;i--) { int v=(a>>i)&1?0:1; if(ch[u][v])tmp+=(1<<i),u=ch[u][v]; else u=ch[u][!v]; } ans=max(ans,tmp); } int main() { cin>>n; for(int i=1;i<=n;i++) { scanf("%d",&a); query(); insert(); } cout<<ans<<endl; return 0; }