This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3,unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
// Ofast, O0, O1, O2, O3, unroll-loops, fast-math, trapv
typedef long long ll;
typedef pair<ll, ll> pll;
typedef pair<int, int> pii;
#define Mp make_pair
#define sep ' '
#define endl '\n'
#define F first
#define S second
#define pb push_back
#define all(x) (x).begin(),(x).end()
#define kill(res) cout << res << '\n', exit(0);
#define set_dec(x) cout << fixed << setprecision(x);
#define fast_io ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define file_io freopen("input.txt", "r", stdin) ; freopen("output.txt", "w", stdout);
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const ll L = 31;
const ll N = 2e5 + 50;
const ll M = 3e6 + 50;
const ll Mod = 1e9 + 7;
int n, q, sum[N], st[N], ft[N], timer = 1;
vector<int> adj[N];
vector<pair<char, pii>> qu;
void dfs(int v){
st[v] = timer++;
for(int u: adj[v]) dfs(u);
ft[v] = timer;
}
int trieInd = 1, child[M][2];
set<int> idx[M];
void add(int x){
int cur = 0;
for(int i = L-1; i >= 0; i--){
int th = sum[x] >> i & 1;
if(!child[cur][th]) child[cur][th] = trieInd++;
cur = child[cur][th]; idx[cur].insert(st[x]);
}
}
bool ok(int l, int r, int id){
auto y = idx[id].lower_bound(l);
return (y != idx[id].end() && (*y) < r);
}
int get(int x, int l, int r){
int cur = 0, ans = 0;
for(int i = L-1; i >= 0; i--){
int th = x >> i & 1;
if(child[cur][1-th] && ok(l, r, child[cur][1-th])){
ans += (1 << i); cur = child[cur][1-th];
}
else cur = child[cur][th];
}
return ans;
}
int main(){
fast_io;
cin >> q;
n = 1;
for(int i = 1; i <= q; i++){
string t; int a, b;
cin >> t >> a >> b;
if(t[0] == 'A'){
adj[a].pb(++n);
sum[n] = sum[a] ^ b;
}
qu.pb({t[0], {a, b}});
}
dfs(1);
int m = 1; add(1);
for(auto [t, e]: qu){
int a = e.F, b = e.S;
if(t == 'A') add(++m);
else cout << get(sum[a], st[b], ft[b]) << endl;
}
}
Compilation message (stderr)
klasika.cpp: In function 'int main()':
klasika.cpp:92:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
92 | for(auto [t, e]: qu){
| ^
# | 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... |