#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <map>
using namespace std;
#define pb push_back
const int N = 2e5 + 5, BT = 30;
int g[BT * N][2];
int cnt[BT * N];
int root = 0, vl = 0;
int n = 1;
int st[N];
void add(int x)
{
int cur = root;
for (int i = BT - 1; i >= 0; i--)
{
int cb = (x >> i) & 1;
if (!g[cur][cb])
{
g[cur][cb] = ++vl;
cnt[g[cur][cb]] = 1;
}
else
{
cnt[g[cur][cb]]++;
}
cur = g[cur][cb];
}
}
void del(int x)
{
int cur = root;
for (int i = BT - 1; i >= 0; i--)
{
int cb = (x >> i) & 1;
cnt[g[cur][cb]]--;
cur = g[cur][cb];
}
}
int get(int x)
{
int cur = root;
int ans = 0;
for (int i = BT - 1; i >= 0; i--)
{
int cb = (x >> i) & 1;
int odw = cb ^ 1;
if (cnt[g[cur][odw]])
{
ans += (1 << i);
cur = g[cur][odw];
}
else
{
cur = g[cur][cb];
}
}
return ans;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
add(0);
st[1] = 0;
int q; cin >> q;
while (q--) {
string s; cin >> s;
int x, b; cin >> x >> b;
if (s[0] == 'A') {
++n;
st[n] = st[x] ^ b;
add(st[n]);
}
else {
cout << get(st[x]) << "\n";
}
}
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |