Submission #473602

#TimeUsernameProblemLanguageResultExecution timeMemory
473602HaidaraMonkey and Apple-trees (IZhO12_apple)C++17
0 / 100
113 ms262148 KiB
/** * * * * * * * * * * * * * **\ * * * Author: Haidara Nassour * * Coded in: YYYY\M\D HH:MM:SS * * Lang: C++ * * * \** * * * * * * * * * * * * * **/ #include<bits/stdc++.h> #pragma GCC optimize("O3") #include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/tree_policy.hpp> #define fast ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); #define int long long #define itn int #define rep(i,x,n) for(int i=(x);i<(n);i++) #define FOR(i,n) rep(i,0,n) #define per(i,x,n) for(int i=(x);i>(n);i--) #define ROF(i,x) for(int i=x;i>=0;i--) #define v(i) vector< i > #define p(i,j) pair< i , j > #define pii pair<int,int> #define m(i,j) map< i , j > #define um(i,j) unordered_map< i , j > #define max_heap(i) priority_queue< i > #define min_heap(i) priority_queue< i , vector< i > ,greater< i > > #define ff first #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(),x.rend() #define ss second #define pp push_back #define mini(x,y) x=min(x,y) #define maxi(x,y) x=max(x,y) #define debug(x) cout<<#x<<" "; using namespace std; using namespace __gnu_pbds; void SIO(string name="") { if(name!="") { freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout); } } template <class T> using o_set = tree<T, null_type, less<T>,rb_tree_tag, tree_order_statistics_node_update>; ///order_of_key = find index of element x ( returned val is integer ) ///find_by_order = find value at index x ( returned val is pointer ) const double pi=2.0*acos(0.0); const int inf=1LL<<62LL; const int mod=1e9+7; const int maxn=2000500; struct node { int sum,lazy,lc,rc,l,r; node():sum(0),lazy(0),rc(-1),lc(-1),l(0),r(1e9) {} } st[maxn*4]; 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() { SIO(""); fast; 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:53:21: warning: 'node::rc' will be initialized after [-Wreorder]
   53 |     int sum,lazy,lc,rc,l,r;
      |                     ^~
apple.cpp:53:18: warning:   'long long int node::lc' [-Wreorder]
   53 |     int sum,lazy,lc,rc,l,r;
      |                  ^~
apple.cpp:54:5: warning:   when initialized here [-Wreorder]
   54 |     node():sum(0),lazy(0),rc(-1),lc(-1),l(0),r(1e9) {}
      |     ^~~~
apple.cpp: In function 'void pull(long long int)':
apple.cpp:80:17: warning: unused variable 'mid' [-Wunused-variable]
   80 |             int mid=(st[inx].l+st[inx].r)/2;
      |                 ^~~
apple.cpp: In function 'void SIO(std::string)':
apple.cpp:40:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   40 |         freopen((name+".in").c_str(),"r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
apple.cpp:41:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   41 |         freopen((name+".out").c_str(),"w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...