Pagini recente » Cod sursa (job #2329192) | Cod sursa (job #176526) | Cod sursa (job #2735215) | Cod sursa (job #1893) | Cod sursa (job #386224)
Cod sursa(job #386224)
#include<stdio.h>
long arb[400100],n,p,m,pos,val,nr,max;
int c;
void update(long nod,long left,long right)
{
if(left==right)
{
arb[nod]=val;
if(c==1&&nod%2==0&&m>0)
{
arb[nod+1]=1;
++pos;
--m;
}
return;
}
long div=(left+right)/2;
if(pos<=div)update(nod*2,left,div);
else update(nod*2+1,div+1,right);
}
void cross(long nod,long left,long right)
{
if(left==right)
{
if(!arb[nod])
{
++nr;
if(nr>max)max=nr;
}
else nr=0;
return;
}
long div=(left+right)/2;
cross(nod*2,left,div);
cross(nod*2+1,div+1,right);
}
int main()
{
FILE*f=fopen("hotel.in","r");
fscanf(f,"%ld %ld",&n,&p);
FILE*g=fopen("hotel.out","w");
for(;p;--p)
{
fscanf(f,"%d",&c);
if(c!=3)
{
fscanf(f,"%ld %ld",&pos,&m);
val=!(c-1);
if(c==1)
{
while(m-->0)
{
update(1,1,n);
++pos;
}
}
else
while(m-->0)
{update(1,1,n);++pos;}
}
else
{
nr=0;
max=-1;
cross(1,1,n);
fprintf(g,"%ld\n",max);
}
}
fclose(f);
fclose(g);
return 0;
}