제출 #1116585

#제출 시각아이디문제언어결과실행 시간메모리
1116585boris_7Monkey and Apple-trees (IZhO12_apple)C++17
0 / 100
1 ms336 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; struct node{ ll l=-1,r=-1; ll sum = 0; ll rem = 0; }; vector<node>seg(1); void push(ll u){ if(seg[u].l==-1){ seg[u].l=seg.size(); seg.emplace_back(); } if(seg[u].r==-1){ seg[u].r=seg.size(); seg.emplace_back(); } seg[seg[u].l].rem+=seg[u].rem/2; seg[seg[u].r].rem+=seg[u].rem/2; seg[seg[u].l].sum+=seg[u].rem/2; seg[seg[u].r].sum+=seg[u].rem/2; seg[u].rem=0; } void update(ll l,ll r,ll u,ll lx,ll rx){ if(l>=lx && r<=rx){ seg[u].rem=r-l+1; seg[u].sum=r-l+1; return; } if(l>rx || r<lx){ return; } ll mid = (l+r)/2; push(u); update(l,mid,seg[u].l,lx,rx); update(mid+1,r,seg[u].r,lx,rx); seg[u].sum=seg[seg[u].l].sum+seg[seg[u].r].sum; } ll get(ll l,ll r,ll u,ll lx,ll rx){ if(l>=lx && r<=rx){ return seg[u].sum; } if(l>rx || r<lx){ return 0; } ll mid = (l+r)/2; push(u); return get(l,mid,seg[u].l,lx,rx)+get(mid+1,r,seg[u].r,lx,rx); } void solve(){ ll q; cin>>q; ll c = 0; ll s = (1ll<<35)-1; while(q--){ ll type,l,r; cin>>type>>l>>r; l--,r--; l+=c; r+=c; if(type==2){ update(0,s,0,l,r); } else { c = get(0,s,0,l,r); cout<<c<<endl; } } } signed main(){ ios_base::sync_with_stdio(0); cin.tie(nullptr); // ll t;cin>>t;while(t--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...