Submission #998409

#TimeUsernameProblemLanguageResultExecution timeMemory
998409amirhoseinfar1385Monkey and Apple-trees (IZhO12_apple)C++17
100 / 100
50 ms3164 KiB
#include<bits/stdc++.h> using namespace std; int c; struct node{ int cl,cr; int res=0,f=0; node(){ cl=cr=-1; res=f=0; } }fakenode; vector<node>all(1); int getl(int u){ if(all[u].cl==-1){ all[u].cl=(int)all.size(); all.push_back(fakenode); } return all[u].cl; } int getr(int u){ if(all[u].cr==-1){ all[u].cr=(int)all.size(); all.push_back(fakenode); } return all[u].cr; } void upd(int u,int l,int r,int tl,int tr){ if(l>r||l>tr||r<tl||tl>tr||all[u].f==1){ return ; } if(l>=tl&&r<=tr){ all[u].cl=all[u].cr=-1; all[u].res=r-l+1; all[u].f=1; return ; } int m=(l+r)>>1; upd(getl(u),l,m,tl,tr); upd(getr(u),m+1,r,tl,tr); all[u].res=(all[getr(u)]).res+(all[getl(u)].res); } int pors(int u,int l,int r,int tl,int tr){ if(l>r||l>tr||r<tl||tl>tr||all[u].res==0){ return 0; } if((all[u].f)==1){ return min(r,tr)-max(l,tl)+1; } int m=(l+r)>>1; return pors(getl(u),l,m,tl,tr)+pors(getr(u),m+1,r,tl,tr); } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t; cin>>t; for(int asd=0;asd<t;asd++){ int qq; cin>>qq; int l,r; cin>>l>>r; l+=c; r+=c; if(qq==1){ int res=pors(0,0,1073741824-1,l,r); cout<<res<<"\n"; c=res; }else{ upd(0,0,1073741824-1,l,r); } } }
#Verdict Execution timeMemoryGrader output
Fetching results...