Submission #888574

#TimeUsernameProblemLanguageResultExecution timeMemory
888574WhiteMonkey and Apple-trees (IZhO12_apple)C++14
100 / 100
145 ms83864 KiB
#pragma GCC optimize ("O3") #include <bits/stdc++.h> #define endl "\n" using namespace std; bitset<4000000000>onlyOne,hasOne; void update_tree(int l,int r,int L,int R,int now){ //cout<<now<<" "<<l<<" "<<r<<endl; if(l>R || r<L || onlyOne[now]==1)return ; if(l>=L && r<=R){ onlyOne[now]=1; hasOne[now]=1; return; } int mid=(l+r)/2; update_tree(l,mid,L,R,now*2+1); update_tree(mid+1,r,L,R,now*2+2); if(onlyOne[now*2+1]==1 && onlyOne[now*2+2]==1)onlyOne[now]=1; if(hasOne[now*2+1]==1 || hasOne[now*2+2]==1 || onlyOne[now*2+2]==1 || onlyOne[now*2+1]==1)hasOne[now]=1; } int ans_tree(int l,int r,int L,int R,int now){ if(l>R || r<L || hasOne[now]==0)return 0; if(onlyOne[now]==1){ //cout<<l<<" )_( "<<r<<endl; return (min(r,R)-max(l,L)+1); } int mid=(l+r)/2; return ans_tree(l,mid,L,R,now*2+1)+ans_tree(mid+1,r,L,R,now*2+2); } int main(){ //ios_base::sync_with_stdio(false); //cin.tie(NULL); int n,c=0; cin>>n; for(int t=0;t<n;t++){ int l,r,type; cin>>type>>l>>r; l--;r--; l+=c; r+=c; //cout<<l<<"-"<<r<<endl; if(type==2)update_tree(0,999999999,l,r,0); else { c=ans_tree(0,999999999,l,r,0); cout<<c<<endl; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...