#include <bits/stdc++.h>
using namespace std;
const int N=5e5+5;
struct sparse
{
int l,r;
int st,dr;
long long val,lz;
} aint[4*N];
int noduri=0;
void create_new(int noduri,int st,int dr)
{
aint[noduri].st=st;
aint[noduri].dr=dr;
}
void propaga(int nod)
{
int mij=(aint[nod].st+aint[nod].dr)/2;
if(aint[nod].lz)
{
if(aint[nod].l==0)
{
noduri++;
aint[nod].l=noduri;
create_new(noduri,aint[nod].st,mij);
}
if(aint[nod].r==0)
{
noduri++;
aint[nod].r=noduri;
create_new(noduri,mij+1,aint[nod].dr);
}
aint[aint[nod].l].val=(aint[aint[nod].l].dr-aint[aint[nod].l].st+1);
aint[aint[nod].r].val=(aint[aint[nod].r].dr-aint[aint[nod].r].st+1);
aint[aint[nod].l].lz=1;
aint[aint[nod].r].lz=1;
//aint[nod].lz=0;
}
}
void update(int nod,int st,int dr,int l,int r)
{
//cout<<st<<" "<<dr<<'\n';
if(l<=st&&dr<=r)
{
//cout<<st<<" "<<dr<<" "<<"blud"<<" "<<l<<" "<<r<<'\n';
aint[nod].val=(dr-st+1);
aint[nod].lz=1;
return;
}
else if(l>dr||st>r)
return;
else
{
int mij=(st+dr)/2;
if(aint[nod].l==0)
{
noduri++;
aint[nod].l=noduri;
create_new(noduri,st,mij);
}
if(aint[nod].r==0)
{
noduri++;
aint[nod].r=noduri;
create_new(noduri,mij+1,dr);
}
propaga(nod);
update(aint[nod].l,st,mij,l,r);
update(aint[nod].r,mij+1,dr,l,r);
// cout<<st<<" "<<mij<<" "<<aint[aint[nod].l].val<<" "<<"stop"<<'\n';
aint[nod].val=aint[aint[nod].l].val+aint[aint[nod].r].val;
}
}
long long query(int nod,int st,int dr,int l,int r)
{
if(l<=st&&dr<=r)
{
return aint[nod].val;
}
else if(l>dr||st>r)
return 0;
else
{
propaga(nod);
int mij=(st+dr)/2;
long long s=0;
if(aint[nod].l)
s+=query(aint[nod].l,st,mij,l,r);
if(aint[nod].r)
s+=query(aint[nod].r,mij+1,dr,l,r);
return s;
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
noduri++;
int ct=1e9;
create_new(noduri,1,ct);
long long constanta=0;
int n;
cin>>n;
for(int i=1; i<=n; i++)
{
int ev;
cin>>ev;
if(ev==2)
{
int l,r;
cin>>l>>r;
l+=constanta,r+=constanta;
//cout<<aint[1].val<<'\n';
update(1,1,ct,l,r);
}
else
{
int l,r;
cin>>l>>r;
l+=constanta,r+=constanta;
long long ans=query(1,1,ct,l,r);
cout<<ans<<'\n';
constanta=ans;
}
}
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |