Pagini recente » Cod sursa (job #2301259) | Cod sursa (job #2168403) | Cod sursa (job #1146002) | Cod sursa (job #2237385) | Cod sursa (job #199682)
Cod sursa(job #199682)
#include<stdio.h>
#define N 1<<18
#define fs nod<<1
#define fd (nod<<1)|1
struct stare{ long pc;long uc;long ls;long le;long li;long lm;long s;};
stare x[N];
long n,p,cod,a,b;
void init ();
void citire();
void init(long nod,long pp,long uu);
void ocupa(long nod);
void elibereaza(long nod);
int main()
{ citire();
init(1,1,n);
for (;p;p--)
{ scanf("%ld",&cod);
if(cod==3){printf("%ld\n",x[1].lm);continue;}
scanf("%ld%ld",&a,&b);b+=a-1;
if(cod==1)ocupa(1);
else elibereaza(1);
}
return 0;
}
void citire()
{
freopen("hotel.in","r",stdin);
freopen("hotel.out","w",stdout);
scanf("%ld%ld",&n,&p);
}
void init(long nod,long pp,long uu)
{ long mm=(pp+mm)>>1;
x[nod].pc=pp;
x[nod].uc=uu;
x[nod].ls=uu-pp+1;
x[nod].le=uu-pp+1;
x[nod].li=0;
x[nod].s=0;
if(pp==uu)return;
mm=(pp+uu)>>1;
init(fs,pp,mm);
init(fd,mm+1,uu);
}
void ocupa(long nod)
{
if(a<=x[nod].pc&&x[nod].uc<=b)
{ x[nod].ls=0;x[nod].le=0;x[nod].li=0;x[nod].lm=0;x[nod].s=1;return;}
if(a>x[nod].uc)return;
if(b<x[nod].pc)return;
ocupa(fs);
ocupa(fd);
if(x[fs].s==0)
{ if(x[fd].s==1)
{ x[nod].ls=x[fs].ls;
x[nod].le=0;
x[nod].li=0;
x[nod].lm=x[fs].ls;
x[nod].s=2;
return;
}
if(x[fd].s==2)
{ x[nod].ls=x[fs].ls+x[fd].ls;
x[nod].le=x[fd].le;
x[nod].li=x[fd].li;
x[nod].lm=(x[nod].ls>x[nod].le)?x[nod].ls:x[nod].le;
x[nod].lm=(x[nod].lm>x[nod].li)?x[nod].lm:x[nod].li;
x[nod].s=2;
return;
}
x[nod].ls=x[nod].le=x[nod].li=x[nod].lm=x[nod].uc-x[nod].pc+1;
x[nod].s=0;
return;
}
if(x[fs].s==1)
{ if(x[fd].s==0)
{ x[nod].ls=0;
x[nod].le=x[fd].le;
x[nod].li=0;
x[nod].lm=x[fd].lm;
x[nod].s=2;
return;
}
if(x[fd].s==2)
{ x[nod].ls=0;
x[nod].le=x[fd].le;
x[nod].li=(x[fd].li>x[fd].ls)?x[fd].li:x[fd].ls;
x[nod].lm=(x[nod].li>x[nod].le)?x[nod].li:x[nod].le;
x[nod].s=2;
return;
}
x[nod].ls=x[nod].le=x[nod].li=x[nod].lm=0;
x[nod].s=0;
return;
}
if(x[fd].s==0)
{ x[nod].ls=x[fs].ls;
x[nod].le=x[fs].le+x[fd].lm;
x[nod].li=x[fs].li;
x[nod].lm=(x[nod].ls>x[nod].le)?x[nod].ls:x[nod].le;
x[nod].lm=(x[nod].lm>x[nod].li)?x[nod].lm:x[nod].li;
x[nod].s=2;
return;
}
if(x[fd].s==1)
{ x[nod].ls=x[fs].ls;
x[nod].le=0;
x[nod].li=(x[fs].li>x[fs].le)?x[fs].li:x[fs].le;
x[nod].lm=(x[nod].ls>x[nod].li)?x[nod].ls:x[nod].li;
x[nod].s=2;
return;
}
x[nod].ls=x[fs].ls;
x[nod].le=x[fd].le;
x[nod].li=x[fs].le+x[fd].ls;
x[nod].li=(x[nod].li>x[fs].li)?x[nod].li:x[fs].li;
x[nod].li=(x[nod].li>x[fd].li)?x[nod].li:x[fd].li;
x[nod].s=2;
}
void elibereaza(long nod)
{
if(a<=x[nod].pc&&x[nod].uc<=b)
{ x[nod].ls=x[nod].le=x[nod].li=x[nod].lm=x[nod].uc-x[nod].pc+1;
x[nod].s=1;return;
}
if(a>x[nod].uc)return;
if(b<x[nod].pc)return;
ocupa(fs);
ocupa(fd);
if(x[fs].s==0)
{ if(x[fd].s==1)
{ x[nod].ls=x[fs].ls;
x[nod].le=0;
x[nod].li=0;
x[nod].lm=x[fs].ls;
x[nod].s=2;
return;
}
if(x[fd].s==2)
{ x[nod].ls=x[fs].ls+x[fd].ls;
x[nod].le=x[fd].le;
x[nod].li=x[fd].li;
x[nod].lm=(x[nod].ls>x[nod].le)?x[nod].ls:x[nod].le;
x[nod].lm=(x[nod].lm>x[nod].li)?x[nod].lm:x[nod].li;
x[nod].s=2;
return;
}
x[nod].ls=x[nod].le=x[nod].li=x[nod].lm=x[nod].uc-x[nod].pc+1;
x[nod].s=0;
return;
}
if(x[fs].s==1)
{ if(x[fd].s==0)
{ x[nod].ls=0;
x[nod].le=x[fd].le;
x[nod].li=0;
x[nod].lm=x[fd].lm;
x[nod].s=2;
return;
}
if(x[fd].s==2)
{ x[nod].ls=0;
x[nod].le=x[fd].le;
x[nod].li=(x[fd].li>x[fd].ls)?x[fd].li:x[fd].ls;
x[nod].lm=(x[nod].li>x[nod].le)?x[nod].li:x[nod].le;
x[nod].s=2;
return;
}
x[nod].ls=x[nod].le=x[nod].li=x[nod].lm=0;
x[nod].s=0;
return;
}
if(x[fd].s==0)
{ x[nod].ls=x[fs].ls;
x[nod].le=x[fs].le+x[fd].lm;
x[nod].li=x[fs].li;
x[nod].lm=(x[nod].ls>x[nod].le)?x[nod].ls:x[nod].le;
x[nod].lm=(x[nod].lm>x[nod].li)?x[nod].lm:x[nod].li;
x[nod].s=2;
return;
}
if(x[fd].s==1)
{ x[nod].ls=x[fs].ls;
x[nod].le=0;
x[nod].li=(x[fs].li>x[fs].le)?x[fs].li:x[fs].le;
x[nod].lm=(x[nod].ls>x[nod].li)?x[nod].ls:x[nod].li;
x[nod].s=2;
return;
}
x[nod].ls=x[fs].ls;
x[nod].le=x[fd].le;
x[nod].li=x[fs].le+x[fd].ls;
x[nod].li=(x[nod].li>x[fs].li)?x[nod].li:x[fs].li;
x[nod].li=(x[nod].li>x[fd].li)?x[nod].li:x[fd].li;
x[nod].s=2;
}