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