Submission #1122663

#TimeUsernameProblemLanguageResultExecution timeMemory
1122663imarnKlasika (COCI20_klasika)C++20
110 / 110
1872 ms194284 KiB
#include<bits/stdc++.h> #define ll long long #define pii pair<int,int> #define pll pair<ll,ll> #define plx pair<ll,int> #define f first #define s second #define pb push_back #define all(x) x.begin(),x.end() #define szz(r) (ll)r.size() #define vi vector<int> #define vvi vector<vi> #define pp pair<ll,int> #define ub(x,i) upper_bound(all(x),i)-x.begin() using namespace std; const int mxn=2e5+5; vector<int>g[mxn]; int d[mxn]{0},tin[mxn]{0},tout[mxn]{0},cu=0,n; void dfs(int u){ tin[u]=++cu; for(auto v:g[u]){ dfs(v); }tout[u]=cu; } multiset<int>t[4*mxn]; void update(int i,int l,int r,int idx,int v){ if(r<idx||l>idx)return; if(l==r){ t[i].insert(v);return; }int m=(l+r)>>1; update(2*i,l,m,idx,v);update(2*i+1,m+1,r,idx,v); t[i].insert(v); } bool qr(int i,int l,int r,int tl,int tr,int rs,int id){ if(r<tl||l>tr)return 0; if(r<=tr&&l>=tl){ auto it = t[i].lower_bound(rs); if(it==t[i].end())return 0; return ((rs>>id)==((*it)>>id)); } int m=(l+r)>>1; return (qr(2*i,l,m,tl,tr,rs,id)||qr(2*i+1,m+1,r,tl,tr,rs,id)); } void solve(int a,int b){ int ans = 0; for(int i=30;i>=0;i--){ int x=((d[a]>>i)&1)^1; int y=x*(1<<i); ans|=y; bool rs=qr(1,1,n,tin[b],tout[b],ans,i); if(!rs)ans^=(1<<i); }cout<<(d[a]^ans)<<'\n'; } int main(){ ios_base::sync_with_stdio(0);cin.tie(0); int x;cin>>n;x=1; vector<pair<int,pii>>qr; for(int i=1;i<=n;i++){ string s;int a,b;cin>>s>>a>>b; if(s=="Add"){ x++;d[x]=d[a]^b;g[a].pb(x); qr.pb({1,{x,b}}); } else qr.pb({2,{a,b}}); }dfs(1);n=x; update(1,1,n,tin[1],d[1]); for(auto it : qr){ auto [a,b] = it.s; if(it.f==1)update(1,1,n,tin[a],d[a]); else solve(a,b); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...