제출 #1281980

#제출 시각아이디문제언어결과실행 시간메모리
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...