Cod sursa(job #386221)

Utilizator Cristi09Cristi Cristi09 Data 24 ianuarie 2010 13:08:35
Problema Hotel Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#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(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;
}