显示原始代码
#include <cstdio>
#include <algorithm>
#include <vector>
#define ULL unsigned long long
#define LL long long
using namespace std;
char ch;
bool fh;
inline void read(int &a) {
for (fh = 0, ch = getchar(); ch < '0' || ch > '9'; ch = getchar())
if (ch == '-')
fh = 1;
for (a = 0; ch >= '0' && ch <= '9'; ch = getchar()) (a *= 10) += ch - '0';
if (fh)
a = -a;
}
struct node {
int s[2];
};
node Trie[32 * 200010];
int Ttop;
int n;
int A[32];
int cnt;
inline void insert(int x) {
int u, l, p;
for (p = 1, l = 0; x; p = Trie[p].s[u], x >>= 1, l++) {
u = x & 1;
if (!Trie[p].s[u])
Trie[p].s[u] = ++Ttop, A[l] ^= u;
}
}
void Plus(int p, int l) {
if (!(Trie[p].s[0] | Trie[p].s[1])) {
Trie[p].s[1] = ++Ttop;
A[l] ^= 1;
return;
}
swap(Trie[p].s[0], Trie[p].s[1]);
A[l] ^= cnt;
if (Trie[p].s[0])
Plus(Trie[p].s[0], l + 1);
}
inline int Count() {
int vi, l, x = 0;
for (vi = 0, l = 1; vi < 31; vi++, l <<= 1)
if (A[vi])
x += l;
return x;
}
int main() {
int vi, opt, x;
Ttop = 1;
read(n);
for (vi = 1; vi <= n; vi++) {
read(opt);
if (opt == 2) {
read(x);
insert(x);
cnt ^= 1;
} else
Plus(1, 0);
x = Count();
printf("%d\n", x);
}
}