显示原始代码
#include <map>
#include <ctime>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
struct trp {
int lrp[2];
bool dta;
};
int tn, oc, onm, nwp = 0, ntp = 0;
int pows[32], sum[32];
vector<trp> wtr;
void adep() { wtr.push_back(trp({ { -1, -1 }, 0 })); }
void adp(int onm) {
for (int i = 0; i < 32; i++) {
int lnm = (onm / pows[i]) % 2;
if (wtr.at(nwp).lrp[lnm] == -1) {
wtr.at(nwp).lrp[lnm] = ++ntp;
adep();
nwp = ntp;
wtr.at(nwp).dta ^= 1;
} else {
nwp = wtr.at(nwp).lrp[lnm];
wtr.at(nwp).dta ^= 1;
}
if (lnm)
sum[i] ^= 1;
}
nwp = 0;
}
void aoap() {
for (int i = 0; i < 32; i++) {
if (nwp == -1)
return;
swap(wtr.at(nwp).lrp[0], wtr.at(nwp).lrp[1]);
if (wtr.at(nwp).lrp[1] != -1)
sum[i] ^= wtr.at(wtr.at(nwp).lrp[1]).dta;
if (wtr.at(nwp).lrp[0] != -1) {
nwp = wtr.at(nwp).lrp[0];
sum[i] ^= wtr.at(nwp).dta;
} else
return;
}
}
int uda() {
int ans = 0;
for (int i = 0; i < 32; i++) ans += sum[i] * pows[i];
return ans;
}
int main() {
adep();
pows[0] = 1;
for (int i = 1; i < 32; i++) pows[i] = 2 * pows[i - 1];
scanf("%d", &tn);
for (int i = 0; i < tn; i++) {
scanf("%d", &oc);
if (oc == 1) {
aoap();
} else {
scanf("%d", &onm);
adp(onm);
}
printf("%d\n", uda());
}
system("pause");
return 0;
}