Pagini recente » Cod sursa (job #1552439) | Cod sursa (job #3201538) | Cod sursa (job #826736) | Cod sursa (job #678804) | Cod sursa (job #1171437)
//code by Vasilut
#include <fstream>
#define l first.first
#define r first.second
#define t second
using namespace std;
ifstream fin("hotel.in");
ofstream fout("hotel.out");
typedef pair<pair<int,int>,int > Tree;
Tree arb[4*100001];
int n, m, op, x, y;
void Update(int nod, int st, int dr, int lq, int rq, int op)
{
int m=(st+dr)/2;
if(lq<=st&&dr<=rq)
{
arb[nod].t=arb[nod].r=arb[nod].l=(!(op-1)?0:dr-st+1);
return;
}
if(arb[nod].t==0)
{
arb[2*nod].t=arb[2*nod].l=arb[2*nod].r=0;
arb[2*nod+1].t=arb[2*nod+1].l=arb[2*nod+1].r=0;
}
if(arb[nod].t==dr-st+1)
{
arb[2*nod].t=arb[2*nod].l=arb[2*nod].r=m-st+1;
arb[2*nod+1].t=arb[2*nod+1].l=arb[2*nod+1].r=dr-m;
}
if(lq<=m)
Update(2*nod,st,m,lq,rq,op);
if(rq>m)
Update(2*nod+1,m+1,dr,lq,rq,op);
arb[nod].t=max(arb[2*nod].t,arb[2*nod+1].t);
arb[nod].t=max(arb[nod].t,arb[2*nod].r+arb[2*nod+1].l);
arb[nod].l=arb[2*nod].l;
if(arb[2*nod].t==m-st+1)
arb[nod].l=arb[2*nod].t+arb[2*nod+1].l;
arb[nod].r=arb[2*nod+1].r;
if(arb[2*nod+1].t==dr-m)
arb[nod].r=arb[2*nod+1].t+arb[2*nod].r;
}
int main()
{
fin>>n>>m;
Update(1,1,n,1,n,2);
for(int i = 1; i<= m; i++ )
{
fin>>op;
if(op!=3)
{
fin>>x>>y;
Update(1,1,n,x,y+x-1,op);
}
else
{
fout<<arb[1].t<<'\n';
}
}
fin.close();
fout.close();
return 0;
}