Submission #1135229

#TimeUsernameProblemLanguageResultExecution timeMemory
1135229damoonKlasika (COCI20_klasika)C++17
0 / 110
879 ms285192 KiB
#include<bits/stdc++.h> using namespace std; //#pragma GCC optimize("O3,unroll-loops") //main //#pragma GCC target("avx2") //cf... //#pragma GCC target("sse4") //Quera #define ll long long typedef pair<ll,ll> pii; typedef pair<ll,pii> pip; typedef pair<pii,ll> ppi; #define f first #define s second #define all(x) x.begin(),x.end() #define unicorn(x) x.resize(unique(x.begin(),x.end())-x.begin()) #define pb(x) push_back(x) #define pp() pop_back() #define lc id<<1 #define rc lc|1 const ll L = 2e5+10,lg = 30; const ll inf = 1e9+10; ll n,q; ll parv[L],root[L]; vector<ll> ch[L],tr; ll st[L],fn[L]; void pr(int* vv,int l,int r){for(int i=l;i<r;i++){cout<<vv[i]<<" ";}cout<<endl;} void pr(long long* vv,int l,int r){for(int i=l;i<r;i++){cout<<vv[i]<<" ";}cout<<endl;} void pr(pii* vv,int l,int r){for(int i=l;i<r;i++){cout<<"("<<vv[i].f<<" , "<<vv[i].s<<") ";}cout<<endl;} void pr(vector<int> vv){for(auto i:vv){cout<<i<<" ";}cout<<endl;} void pr(vector<long long> vv){for(auto i:vv){cout<<i<<" ";}cout<<endl;} void pr(vector<pii> vv){for(auto i:vv){cout<<"("<<i.f<<" , "<<i.s<<") ";}cout<<endl;} struct que{ ll mode,u,v; }ask[L]; bool dig(ll x,ll d){ return (((1<<d)&x) > 0); } struct trie{ set<ll> ind; trie* ch[2]; trie(){ ch[0] = nullptr; ch[1] = nullptr; ind.insert(inf); } void spread(){ if(ch[0] == nullptr){ ch[0] = new trie(); ch[1] = new trie(); } } void update(ll x,ll d,ll idx){ ind.insert(idx); if(d == -1){ return; } spread(); bool c = dig(x,d); ch[c]->update(x,d-1,idx); } ll get(ll x,ll d,ll l,ll r){ if(ch[0] == nullptr and ch[1] == nullptr) return 0; bool c = dig(x,d); if(ch[1-c] != nullptr){ if(*ch[1-c]->ind.lower_bound(l) <= r) return (1<<d) + ch[1-c]->get(x,d-1,l,r); else return ch[c]->get(x,d-1,l,r); } else return ch[c]->get(x,d-1,l,r); } }T; void dfs(ll v){ st[v] = tr.size(); tr.pb(v); for(auto u:ch[v]){ root[u] = root[v]^parv[u]; dfs(u); } fn[v] = tr.size(); tr.pb(v); } int main(){ //ofstream cout ("out.txt"); //ifstream cin ("in.txt"); ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); n = 1; cin>>q; for(ll i=1;i<=q;i++){ string mode; ll x,y; cin>>mode>>x>>y; if(mode == "Add"){ n++; ask[i].mode = 0; ask[i].u = n; parv[n] = y; ch[x].pb(n); } else{ ask[i].mode = 1; ask[i].u = x; ask[i].v = y; } } ch[0].pb(1); dfs(0); for(ll t=1;t<=q;t++){ ll u = ask[t].u; ll v = ask[t].v; if(ask[t].mode == 0){ T.update(root[u],lg,st[u]); T.update(root[u],lg,fn[u]); } else{ cout<<T.get(root[u],lg,st[v],fn[v])<<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...