#include <iostream>
using namespace std;
const int N=1e5+10;
int a[N*31][2],s[N],idx;
void Insert(int x)
{
int p=0;
for(int i=30; i>=0; i--)
{
int u=x>>i&1;
if(a[p][u]==0) a[p][u]=++idx;
p=a[p][u];
}
}
int Querry(int x)
{
int p=0,res=0;
for(int i=30; i>=0; i--)
{
int u=x>>i&1;
if(a[p][!u])
{
p=a[p][!u];
res=res*2+!u;
}
else
{
p=a[p][u];
res=res*2+u;
}
}
return res;
}
int main()
{
int n;
scanf("%d",&n);
int res=0;
for(int i=1; i<=n; i++)
{
scanf("%d",&s[i]);
Insert(s[i]);
res=max(res,s[i]^Querry(s[i]));
}
printf("%d",res);
return 0;
}
参考:yxc算法讲解第二章第二讲视频内容