Pagini recente » Cod sursa (job #1000436) | Cod sursa (job #2349150) | Cod sursa (job #1117278) | Cod sursa (job #219122) | Cod sursa (job #518935)
Cod sursa(job #518935)
#include <stdio.h>
struct tree
{
int Q,L,R;
tree()
{
Q=L=R=0;
}
}T[262144];
int N,P,x,y,aux,i,c;
inline int max(int a,int b)
{
if(a>b) return a;
else return b;
}
inline void update(int nod,int L,int R)
{
int M=(L+R)/2;
if(x<=L&&R<=y)
{
if(c==2) T[nod].Q=T[nod].L=T[nod].R=R-L+1;
else T[nod].Q=T[nod].L=T[nod].R=0;
}
else
{
if(T[nod].Q==R-L+1)
{
T[2*nod].Q=T[2*nod].L=T[2*nod].R=M-L+1;
T[2*nod+1].Q=T[2*nod+1].L=T[2*nod+1].R=R-M;
}
if(x<=M) update(2*nod,L,M);
if(M<y) update(2*nod+1,M+1,R);
T[nod].L=T[2*nod].L;
if(T[nod].L==M-L+1) T[nod].L+=T[2*nod+1].L;
T[nod].R=T[2*nod+1].R;
if(T[nod].R==R-M) T[nod].R+=T[2*nod].R;
T[nod].Q=max(T[2*nod].Q,T[2*nod+1].Q);
T[nod].Q=max(T[nod].Q,T[2*nod].R+T[2*nod+1].L);
}
}
int main()
{
freopen("hotel.in","r",stdin);
freopen("hotel.out","w",stdout);
scanf("%d%d",&N,&P);
T[1].L=T[1].R=T[1].Q=N;
for(i=1;i<=P;i++)
{
scanf("%d",&c);
if(c==3) printf("%d\n",T[1].Q);
else
{
scanf("%d%d",&x,&aux);
y=aux+x-1;
update(1,1,N);
}
}
return 0;
}