# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
848602 | Darren0724 | Monkey and Apple-trees (IZhO12_apple) | C++17 | 203 ms | 96076 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;
struct segtree{
struct seg{
int lz,val,lc,rc;
};
vector<seg> v;
int cnt1=0;
int New(){
return cnt1++;
}
segtree(){
New();
v.resize(3000000,{0,0,-1,-1});
}
int rv(seg &s,int l,int r){
return (s.lz?r-l:s.val);
}
void check(seg &s){
if(s.lc==-1){
s.lc=New();
}
if(s.rc==-1){
s.rc=New();
}
}
void push(seg &s){
v[s.lc].lz|=s.lz;
v[s.rc].lz|=s.lz;
}
void pull(seg &s,int l,int m,int r){
s.val=rv(v[s.lc],l,m)+rv(v[s.rc],m,r);
}
void add(seg &s,int a,int b,int l,int r){
if(a<=l&&b>=r){
s.lz=1;
return;
}
check(s);
push(s);
int m=(l+r)>>1;
if(a<m){
add(v[s.lc],a,b,l,m);
}
if(b>m){
add(v[s.rc],a,b,m,r);
}
pull(s,l,m,r);
}
int ask(seg &s,int a,int b,int l,int r){
if(a<=l&&b>=r){
return rv(s,l,r);
}
int m=(l+r)>>1;
int ans=0;
check(s);
push(s);
if(a<m){
ans+=ask(v[s.lc],a,b,l,m);
}
if(b>m){
ans+=ask(v[s.rc],a,b,m,r);
}
pull(s,l,m,r);
return ans;
}
};
int32_t main() {
int n;cin>>n;
segtree tr;
int ans=0;
const int p=1e9+1;
for(int i=0;i<n;i++){
int id;cin>>id;
if(id==2){
int a,b;cin>>a>>b;
a+=ans,b+=ans;
tr.add(tr.v[0],a,b+1,0,p);
}
else{
int a,b;cin>>a>>b;
a+=ans,b+=ans;
ans=tr.ask(tr.v[0],a,b+1,0,p);
cout<<ans<<endl;
}
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |