01tire算法


#include<bits/stdc++.h>
using namespace std;
#define maxn 210000
int a[maxn], ch[maxn][2], val[maxn], n, ans, tot;
void insert(int x)
{int now = 0;for (int j = 31; j >= 0; j -- ){int pos = ((x >> i) & 1);if (!ch[now][pos])ch[now][pos] = ++ tot;now = ch[now][pos];}val[now] = x;return ;
}
int query(int x)
{int now = 0;for (int j = 31; j >= 0; -- j ){int pos = ((x >> j) & 1);if (ch[now][pos ^ 1])now = ch[now][pos ^ 1];elsenow = ch[now][pos];}return val[now];
}
int main()
{scanf("%d", &n);for (int i = 1; i <= n; ++ i ){int x;scanf("%d", &x);insert(x);}for (int i = 1; i <= n; ++ i ){ans = max(ans, query(a[i]));}cout << ans << endl;return 0;
}

