Submission #1163368

#TimeUsernameProblemLanguageResultExecution timeMemory
1163368LmaoLmaoKlasika (COCI20_klasika)C++17
0 / 110
308 ms295544 KiB
#include <bits/stdc++.h> using namespace std; int d[200005]; int val[6000001]; vector<int> adj[200005]; bool trie[6000001][2]; set<int> a[6000001]; int timer = 0; int kien=1; int st[200005],ed[200005]; int t = 0; void elt(int u){ st[u] = ++t; for(int v : adj[u]){ elt(v); } ed[u] = t; } int get(int x,int l,int r){ int u = 0; for(int i = 30;i >= 0;i--){ int v = (d[x] >> i)&1; if(!v){ auto it = a[trie[u][1]].lower_bound(l); if(it!=a[trie[u][1]].end() && *it <= r){ u = trie[u][1]; }else{ u = trie[u][0]; } }else{ auto it = a[trie[u][0]].lower_bound(l); if(*it <= r){ u = trie[u][0]; }else{ u = trie[u][1]; } } } return val[u] ^ d[x]; } void add(int x){ int u = 0; for(int i = 30;i >= 0;i--){ int v = (d[x] >> i)&1; if(!trie[u][v]) trie[u][v] = ++timer; u = trie[u][v]; a[u].insert(st[x]); } val[u] = d[x]; } int query[200005][3]; signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int q; cin >> q; for(int i = 1;i <= q;i++){ string s; cin >> s; int a, b; cin >> a >> b; query[i][1] = a; query[i][2] = b; if (s == "Add"){ query[i][0] = 0; d[++kien]= d[a] ^ b; adj[a].push_back(kien); }else{ query[i][0] = 1; } } elt(1); kien = 1; for(int i = 1;i <= q;i++){ if(!query[i][0]){ add(++kien); }else{ cout << get(query[i][1],st[query[i][2]],ed[query[i][2]]) << "\n"; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...