0
点赞
收藏
分享

微信扫一扫

acwing 最大异或对


代码:

#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;
}


举报

相关推荐

0 条评论