Pagini recente » Cod sursa (job #772921) | Cod sursa (job #3227447) | Cod sursa (job #2933275) | Cod sursa (job #1761408) | Cod sursa (job #904980)
Cod sursa(job #904980)
#include<stdio.h>
#define nmax 100005
#define pmax 263000
long a, b, n, p, i, op, rez, lg;
long lgst[pmax], lgdr[pmax];
void update(long st, long dr, long nod)
{
long mjc;
if ((a<=st)&&(dr<=b))
if (op==1)
lgst[nod]=lgdr[nod]=0;
else
lgst[nod]=lgdr[nod]=dr-st+1;
mjc=(st+dr)/2;
if (st<dr)
{
if ((a<=mjc)&&(b>=st))
update(st,mjc,2*nod);
if ((a<=dr)&&(b>=mjc+1))
update(mjc+1,dr,2*nod+1);
lgst[nod]=lgst[2*nod];
if (lgst[2*nod]==mjc-st+1) //gol
lgst[nod]=lgst[2*nod]+lgst[2*nod+1];
lgdr[nod]=lgdr[2*nod+1];
if (lgdr[2*nod+1]==dr-(mjc+1)+1) //gol
lgdr[nod]=lgdr[2*nod]+lgdr[2*nod+1];
if (rez<lgst[nod])
rez=lgst[nod];
if (rez<lgdr[nod])
rez=lgdr[nod];
if (rez<lgdr[2*nod]+lgst[2*nod+1])
rez=lgdr[2*nod]+lgst[2*nod+1];
}
}
int main()
{
freopen("hotel.in","r",stdin);
freopen("hotel.out","w",stdout);
scanf("%ld %ld",&n,&p);
op=2; a=1; b=n; update(1,n,1);
for (i=1;i<=p;i++)
{
scanf("%ld",&op);
if (op==1)
{
scanf("%ld %ld",&a,&lg);
b=a+lg-1; rez=0;
update(1,n,1);
}
if (op==2)
{
scanf("%ld %ld",&a,&lg);
b=a+lg-1; rez=0;
update(1,n,1);
}
if (op==3)
{
printf("%ld\n",rez);
}
}
return 0;
}