代码:
#include <string.h>
#include <algorithm>
#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;
int a[100005], vnode[1600005][2];
class Tiretree {
public:
Tiretree() : vcnt(0) { memset(vnode, 0, sizeof(vnode)); }
void GetMax() {
int n;
scanf("%d", &n);
for (int _ = 0; _ < n; _++) {
scanf("%d", &a[_]);
insert(a[_]);
}
int ans = 0;
for (int _ = 0; _ < n; _++) {
ans = max(ans, search(a[_]));
}
printf("%d\n", ans);
}
private:
int vcnt;
void insert(int val) {
int kt = 0;
for (int i = 30; i >= 0; i--) {
int jp = (val >> i) & 1;
if (!vnode[kt][jp]) {
vnode[kt][jp] = ++vcnt;
}
kt = vnode[kt][jp];
}
}
int search(int val) {
int kt = 0, ans = 0;
for (int i = 30; i >= 0; i--) {
int jp = (val >> i) & 1;
if (vnode[kt][jp ^ 1]) {
kt = vnode[kt][jp ^ 1];
ans |= (1 << i);
} else {
kt = vnode[kt][jp];
}
}
return ans;
}
};
int main() {
Tiretree obj;
obj.GetMax();
return 0;
}