题目:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1216
模板题
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<algorithm> #include<vector> #include<queue> #include<stack> #include<map> #include<set> using namespace std; const int N=1e5+5; int ch[32*N][2]; int val[32*N]; int a[N]; int tot; void init() { tot=0; memset(ch[0],0,sizeof(ch[0])); } void Insert(int x) { int now=0; for(int i=31;i>=0;i--) { int t=x>>i&1; if (!ch[now][t]) { ch[now][t]=++tot; memset(ch[tot],0,sizeof(ch[tot])); } now=ch[now][t]; } val[now]=x; } int query(int x) { int now=0; for(int i=31;i>=0;i--) { int t=x>>i&1; if (ch[now][t^1]) now=ch[now][t^1]; else now=ch[now][t]; } return val[now]; } int main() { int n; while(scanf("%d",&n)!=EOF) { init(); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); Insert(a[i]); } int ans=0; for(int i=1;i<=n;i++) { int t=query(a[i]); ans=max(ans,a[i]^t); } printf("%d ",ans); } return 0; }