作者:
fangy
,
2023-03-18 00:18:01
,
所有人可见
,
阅读 2
#include <iostream>
using namespace std;
const int N = 100010, M = 3100010;
int a[N];
int son[M][2], idx;
void insert(int x)
{
int p = 0;
for (int i = 30; i >= 0; --i)
{
int t = x >> i & 1;
if (!son[p][t]) son[p][t] = ++idx;
p = son[p][t];
}
}
int query(int x)
{
int p = 0, res = 0;
for (int i = 30; i >= 0; --i)
{
int t = x >> i & 1;
if (son[p][!t])
{
p = son[p][!t];
res = res * 2 + !t;
}
else
{
p = son[p][t];
res = res * 2 + t;
}
}
return res;
}
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; ++i)
{
scanf("%d", &a[i]);
insert(a[i]);
}
int res = 0;
for (int i = 0; i < n; ++i)
{
int t = query(a[i]);
res = max(res, t ^ a[i]);
}
cout << res << endl;
return 0;
}