Pagini recente » Cod sursa (job #1698616) | Cod sursa (job #1571691) | Cod sursa (job #2646596) | Cod sursa (job #1901760) | Cod sursa (job #2127237)
#include<fstream>
#include<vector>
#include<iostream>
#include<queue>
#define pb push_back
#define x first
#define y second
#define DN 100005
using namespace std;
ifstream fin("hotel.in");
ofstream fout("hotel.out");
int n,a[4*DN],f,l,p,r[DN],val,type,ma,b[4*DN];
void update(int nod,int st,int dr,int semn)
{
if(st>=f&&dr<=l)
{
a[nod]=val;
return;
}
if(semn==2)
semn=a[nod];
int mij=(st+dr)/2;
if(mij>=f)
update(2*nod,st,mij,semn);
else
if(semn!=2)
a[2*nod]=semn;
if(mij<l)
update(2*nod+1,mij+1,dr,semn);
else
if(semn!=2)
a[2*nod+1]=semn;
if(a[2*nod]==0&&a[2*nod+1]==0)
{
a[nod]=0;
return;
}
if(a[2*nod]==1&&a[2*nod+1]==1)
{
a[nod]=1;
return;
}
a[nod]=2;
}
void query(int nod,int st,int dr)
{
if(a[nod]==1)
{
r[dr]=r[st-1]+dr-st+1;
ma=max(ma,r[dr]);
return;
}
if(a[nod]==0)
{
r[st]=0;
r[dr]=0;
return;
}
int mij=(st+dr)/2;
if(a[2*nod]!=0)
query(2*nod,st,mij);
else
r[mij]=0;
if(a[2*nod+1]!=0)
query(2*nod+1,mij+1,dr);
else
r[dr]=0;
}
int main()
{
fin>>n>>p;
for(int i=1;i<=n;i++)
{
f=l=i;
val=1;
update(1,1,n,2);
}
for(int i=1;i<=p;i++)
{
fin>>type;
if(type==1)
{
fin>>f>>l;
l=f+l-1;
val=0;
update(1,1,n,2);
continue;
}
if(type==2)
{
fin>>f>>l;
l=f+l-1;
val=1;
update(1,1,n,2);
continue;
}
ma=0;
query(1,1,n);
fout<<ma<<'\n';
}
}