# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
701772 | EthanKim8683 | Monkey and Apple-trees (IZhO12_apple) | C++17 | 13 ms | 5932 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
using I=int;
using Lli=long long int;
using B=bool;
const I Q=1e5;
const I LOGP=30;
const Lli FIXP=1ll<<LOGP;
I chds[2*Q+1][2];
I vals[2*Q+1];
B dels[2*Q+1];
I t=1;
void psh(Lli low,Lli upp,I j){
if(upp-low>1){
chds[j][0]=chds[j][0]?:++t,chds[j][1]=chds[j][1]?:++t;
if(dels[j])vals[chds[j][0]]=vals[chds[j][1]]=(upp-low)/2;
dels[chds[j][0]]|=dels[j],dels[chds[j][1]]|=dels[j];
}
dels[j]=0;
}
void pll(Lli low,Lli upp,I j){
vals[j]=vals[chds[j][0]]+vals[chds[j][1]];
}
void upd(Lli l,Lli r,Lli low=-FIXP,Lli upp=FIXP,I j=1){
if(l>=upp||r<=low)return;
if(l<=low&&r>=upp){vals[j]=upp-low,dels[j]=1;return;}
Lli mid=low+(upp-low)/2;
psh(low,upp,j);
upd(l,r,low,mid,chds[j][0]=chds[j][0]?:++t);
upd(l,r,mid,upp,chds[j][1]=chds[j][1]?:++t);
pll(low,upp,j);
}
I qry(Lli l,Lli r,Lli low=-FIXP,Lli upp=FIXP,I j=1){
if(l>=upp||r<=low)return 0;
if(l<=low&&r>=upp)return vals[j];
Lli mid=low+(upp-low)/2;
psh(low,upp,j);
I res=0;
res+=qry(l,r,low,mid,chds[j][0]=chds[j][0]?:++t);
res+=qry(l,r,mid,upp,chds[j][1]=chds[j][1]?:++t);
return res;
}
I main(){
cin.tie(0)->sync_with_stdio(0);
I q;cin>>q;
Lli c=0;
while(q--){
I t;cin>>t;
if(t==1){
Lli l,r;cin>>l>>r;
c=qry(l+c,r+c+1);
printf("%i\n",c);
}
if(t==2){
Lli l,r;cin>>l>>r;
upd(l+c,r+c+1);
}
}
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |