Submission #1281980

#TimeUsernameProblemLanguageResultExecution timeMemory
1281980paronmanukyanKlasika (COCI20_klasika)C++20
33 / 110
93 ms27484 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...