Pagini recente » Cod sursa (job #2479011) | Cod sursa (job #2325391) | Cod sursa (job #1032179) | Cod sursa (job #3164881) | Cod sursa (job #1660269)
#include <cstdio>
#define nmax 400000
int n, p, v[nmax], l[nmax], r[nmax], st, dr;
void update(int nod, int a, int b, int c)
{
if (st<=a && b<=dr)
{
if (c==1) l[nod]=r[nod]=v[nod]=0; else
l[nod]=r[nod]=v[nod]=b-a+1;
} else
{
int m=(a+b)/2;
if (!v[nod]) v[2*nod]=v[2*nod+1]=l[2*nod]=l[2*nod+1]=r[2*nod]=r[2*nod+1]=0; else
if (v[nod]==b-a+1)
{
v[2*nod]=l[2*nod]=r[2*nod]=m-a+1;
v[2*nod+1]=l[2*nod+1]=r[2*nod+1]=b-m;
}
if (st<=m) update(2*nod, a, m, c);
if (m<dr) update(2*nod+1, m+1, b, c);
l[nod]=l[2*nod];
if (l[nod]==m-a+1) l[nod]+=l[2*nod+1];
r[nod]=r[2*nod+1];
if (r[nod]==b-m) r[nod]+=r[2*nod];
v[nod]=r[2*nod]+l[2*nod+1];
if (v[2*nod]>v[nod]) v[nod]=v[2*nod];
if (v[2*nod+1]>v[nod]) v[nod]=v[2*nod+1];
}
}
int main()
{
freopen("hotel.in","r",stdin);
freopen("hotel.out","w",stdout);
scanf("%d %d",&n,&p);
int c, i;
v[1]=l[1]=r[1]=n;
while (p--)
{
scanf("%d",&c);
if (c==1)
{
scanf("%d %d",&st,&dr);
dr+=st-1;
update(1, 1, n, 1);
} else
if (c==2)
{
scanf("%d %d",&st, &dr);
dr+=st-1;
update(1, 1, n, 2);
} else
printf("%d\n",v[1]);
}
}