Pagini recente » Cod sursa (job #386841) | Cod sursa (job #1587321) | Cod sursa (job #462641) | Cod sursa (job #2621379) | Cod sursa (job #1373006)
#include<iostream>
#include<fstream>
#define NMAX 100001
using namespace std;
ifstream fin("hotel.in");
ofstream fout("hotel.out");
struct nod{int val,s,p,uz;};
nod arb[NMAX];
int n,m,x,y,op;
void build(int nod,int st,int dr)
{
if(st==dr)
{
arb[nod].val=1;
arb[nod].s=1;
arb[nod].p=1;
return ;
}
int mij=(st+dr)>>1;
build(2*nod,st,mij);
build(2*nod+1,mij+1,dr);
arb[nod].val=arb[nod].s=arb[nod].p=arb[2*nod].val+arb[2*nod+1].val;
}
void update(int nod,int st,int dr)
{
if(x<=st&&dr<=y)
{
if(op==1)
arb[nod].p=arb[nod].s=arb[nod].val=0;
else
arb[nod].p=arb[nod].s=arb[nod].val=dr-st+1;
return;
}
int mij;
mij=(st+dr)/2;
if(arb[nod].val==0)
{
arb[2*nod].val=arb[2*nod].s=arb[2*nod].p=0;
arb[2*nod+1].val=arb[2*nod+1].s=arb[2*nod+1].p=0;
}else
if(arb[nod].val==dr-st+1)
{
arb[2*nod].val=arb[2*nod].s=arb[2*nod].p=mij-st+1;
arb[2*nod+1].val=arb[2*nod+1].s=arb[2*nod+1].p=dr-mij;
}
if(x<=mij)update(2*nod,st,mij);
if(y>mij)update(2*nod+1,mij+1,dr);
if(arb[2*nod].p==mij-st+1)arb[nod].p=arb[2*nod].p+arb[2*nod+1].p;
else arb[nod].p=arb[2*nod].p;
if(arb[2*nod+1].s==dr-mij)arb[nod].s=arb[2*nod+1].s+arb[2*nod].s;
else arb[nod].s=arb[2*nod+1].s;
arb[nod].val=max(max(arb[2*nod].val,arb[2*nod+1].val),arb[2*nod].s+arb[2*nod+1].p);
}
int main()
{ int a,b;
fin>>n>>m;
build(1,1,n);
for(int i=1;i<=m;i++)
{
fin>>op;
if(op<=2)
{
fin>>a>>b;
x=a;y=a+b-1;
update(1,1,n);
}
else
{
fout<<arb[1].val<<'\n';
}
}
fin.close();
fout.close();
return 0;
}