Submission #889416

#TimeUsernameProblemLanguageResultExecution timeMemory
889416AlishKlasika (COCI20_klasika)C++17
33 / 110
1738 ms524288 KiB
#include <bits/stdc++.h> using namespace std; typedef long long int ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; #define F first #define S second #define pb push_back #define endl '\n' #define Mp make_pair #define all(x) x.begin(), x.end() #define debug(x) cerr << #x << " = " << x << endl; #define fast_io ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define file_io freopen("in.txt" , "r" , stdin) ; freopen("out.txt" , "w" , stdout); ll mod = 1e9+7 ; const int N = 2e5+23, L=31; ll h[N]; vector<vector<int> > ch; vector<set<int> > ss; set<int> emt; int st[N], ft[N], tim=0; vector<int> g[N]; vector<pair<int, pii> > Q; int cnt=1; int tr; void dfs(int v){ st[v]=tim++; for (int u: g[v]) dfs(u); ft[v]=tim; } void add(int x, int pp){ int cur=0; for (int i=L-1; i>=0; i--){ int t=(x>>i&1); if(!ch[cur][t]) { ch[cur][t]=++tr; ch.pb({0, 0}); ss.pb(emt); } cur=ch[cur][t]; ss[cur].insert(pp); } } int get(int x, int v){ int cur=0; int ans=0; for (int i=L-1; i>=0; i--){ int t=(x>>i&1); t=1-t; if(ch[cur][t]){ auto x=ss[ch[cur][t]].lower_bound(st[v]); if(x==ss[ch[cur][t]].end() || *x>=ft[v]){ cur=ch[cur][1-t]; } else{ ans+=(1<<i); cur=ch[cur][t]; } } else{ cur=ch[cur][1-t]; } } return ans; } int main() { fast_io ch.pb({0, 0}); set<int> emt; ss.pb(emt); int q; cin>>q; for (int i=0; i<q; i++){ string s; cin>>s; if(s=="Add"){ ll u, w; cin>>u>>w; cnt++; h[cnt]=h[u]^w; g[u].pb(cnt); Q.pb({0, {cnt, u}}); } else{ int u, v; cin>>v>>u; Q.pb({1, {v, u}}); } } dfs(1); add(0, st[1]); for (auto pp: Q){ int t=pp.F, v=pp.S.F, u=pp.S.S; if(!t){ add(h[v], st[v]); } else{ cout<<get(h[v], u)<<endl; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...