显示原始代码
#include <iostream>
using namespace std;
struct node {
int sum, num, son[2], value;
} T[200005 * 20];
int cnt;
void print(int now) {
}
void update(int now) {
T[now].sum = 0;
if (T[now].son[1] && T[T[now].son[1]].num)
T[now].sum = T[now].value;
for (int i = 0; i <= 1; ++i) {
if (T[now].son[i])
T[now].sum ^= T[T[now].son[i]].sum;
}
}
void insert(int x, int now) {
print(now);
T[now].num ^= 1;
if (!x) {
update(now);
return;
}
int tmp = x & 1;
x >>= 1;
if (!T[now].son[tmp]) {
T[now].son[tmp] = ++cnt;
T[cnt].sum = T[cnt].num = 0;
T[cnt].value = T[now].value << 1;
}
int to = T[now].son[tmp];
insert(x, to);
update(now);
print(now);
}
void add(int now) {
print(now);
if (!T[now].son[0] && !T[now].son[1]) {
T[now].son[1] = ++cnt;
T[cnt].num = 1;
T[cnt].sum = 0;
T[cnt].value = T[now].value << 1;
update(now);
print(now);
return;
}
swap(T[now].son[0], T[now].son[1]);
if (T[now].son[0])
add(T[now].son[0]);
update(now);
print(now);
}
int main() {
T[0].value = 1;
int n;
cin >> n;
for (int i = 1; i <= n; ++i) {
int t;
cin >> t;
if (t == 1)
add(0);
else {
int x;
cin >> x;
insert(x, 0);
}
cout << T[0].sum << "\n";
}
return 0;
}