#include <bits/stdc++.h>
using namespace std;
const int N = 2e6+5;
struct TrieTree {
int idx;
int tr[N][2], cnt[N];
void init() {
idx = 1;
tr[0][0] = tr[0][1] = 0;
memset(cnt, 0, sizeof cnt);
}
void insert(int x, int v) {
int p = 1;
for (int i = 31; i >= 0; i--) {
int u = x>>i&1;
if (!tr[p][u]) {
tr[p][u] = ++idx;
tr[idx][0] = tr[idx][1] = 0;
}
p = tr[p][u];
cnt[p] += v;
}
}
int query(int x, int y) {
int res = 0, p = 1;
for (int i = 31; i >= 0; i--) {
int u1 = x>>i&1, u2 = y>>i&1;
if (u1) {
if (u2) {
res += cnt[tr[p][1]];
p = tr[p][0];
} else {
p = tr[p][1];
}
} else {
if (u2) {
res += cnt[tr[p][0]];
p = tr[p][1];
} else {
p = tr[p][0];
}
}
}
return res;
}
}tree;
signed main() {
tree.init();
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
int op;
scanf("%d", &op);
if (op == 1) {
int x;
scanf("%d", &x);
tree.insert(x, 1);
} else if (op == 2) {
int x;
scanf("%d", &x);
tree.insert(x, -1);
} else if (op == 3) {
int x, y;
scanf("%d%d", &x, &y);
cout << tree.query(x, y) << '\n';
}
}
return 0;
}
比如对于这道题的这份代码,如果将idx和p的值从0开始就会wa掉,但是从1开始就可以ac