Submission #473604

#TimeUsernameProblemLanguageResultExecution timeMemory
473604HaidaraMonkey and Apple-trees (IZhO12_apple)C++17
100 / 100
586 ms186844 KiB
/** * * * * * * * * * * * * * **\ * * * Author: Haidara Nassour * * Coded in: YYYY\M\D HH:MM:SS * * Lang: C++ * * * \** * * * * * * * * * * * * * **/ #include<bits/stdc++.h> #pragma GCC optimize("O3") using namespace std; const int maxn=123456; struct node { int sum,lazy,lc,rc,l,r; node():sum(0),lazy(0),rc(-1),lc(-1),l(0),r(1e9) {} } st[maxn*64]; int nodecnt=2; void create(int inx,int child) { int mid=(st[inx].l+st[inx].r)/2; if(child==1) { st[inx].lc=nodecnt++; st[st[inx].lc].l=st[inx].l; st[st[inx].lc].r=mid; } else { st[inx].rc=nodecnt++; st[st[inx].rc].l=mid+1; st[st[inx].rc].r=st[inx].r; } } void pull(int inx) { if(st[inx].lazy) { st[inx].sum=st[inx].r-st[inx].l+1; if(st[inx].l!=st[inx].r) { int mid=(st[inx].l+st[inx].r)/2; if(st[inx].lc==-1) create(inx,1); if(st[inx].rc==-1) create(inx,2); st[st[inx].lc].lazy=1; st[st[inx].rc].lazy=1; } } st[inx].lazy=0; } int push_up(int inx) { int res1=st[st[inx].lc].sum; int res2=st[st[inx].rc].sum; if(st[st[inx].lc].lazy) res1=(st[inx].l+st[inx].r)/2-st[inx].l+1; if(st[st[inx].rc].lazy) res2=st[inx].r-(st[inx].l+st[inx].r)/2; return res1+res2; } void update(int ul,int ur,int inx) { pull(inx); if(ul==st[inx].l&&st[inx].r==ur) { st[inx].lazy=1; pull(inx); return ; } int mid=(st[inx].l+st[inx].r)/2; if(st[inx].lc==-1) create(inx,1); if(st[inx].rc==-1) create(inx,2); if(ul>mid) update(ul,ur,st[inx].rc); else if(ur<mid+1) update(ul,ur,st[inx].lc); else { update(ul,mid,st[inx].lc); update(mid+1,ur,st[inx].rc); } st[inx].sum=push_up(inx); } int query(int ql,int qr,int inx) { pull(inx); if(ql==st[inx].l&&st[inx].r==qr) return st[inx].sum; int mid=(st[inx].l+st[inx].r)/2; if(st[inx].lc==-1) create(inx,1); if(st[inx].rc==-1) create(inx,2); int res=0; if(ql>mid) res=query(ql,qr,st[inx].rc); else if(qr<mid+1) res=query(ql,qr,st[inx].lc); else res=query(ql,mid,st[inx].lc)+query(mid+1,qr,st[inx].rc); st[inx].sum=push_up(inx); return res; } signed main() { int q; cin>>q; int c=0; while(q--) { int t; cin>>t; if(t==1) { int j,k; cin>>j>>k; c=query(j+c,k+c,1); cout<<c<<endl; } else { int j,k; cin>>j>>k; update(j+c,k+c,1); } } }

Compilation message (stderr)

apple.cpp: In constructor 'node::node()':
apple.cpp:14:21: warning: 'node::rc' will be initialized after [-Wreorder]
   14 |     int sum,lazy,lc,rc,l,r;
      |                     ^~
apple.cpp:14:18: warning:   'int node::lc' [-Wreorder]
   14 |     int sum,lazy,lc,rc,l,r;
      |                  ^~
apple.cpp:15:5: warning:   when initialized here [-Wreorder]
   15 |     node():sum(0),lazy(0),rc(-1),lc(-1),l(0),r(1e9) {}
      |     ^~~~
apple.cpp: In function 'void pull(int)':
apple.cpp:41:17: warning: unused variable 'mid' [-Wunused-variable]
   41 |             int mid=(st[inx].l+st[inx].r)/2;
      |                 ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...