Cod sursa(job #386202)

Utilizator Cristi09Cristi Cristi09 Data 24 ianuarie 2010 12:36:35
Problema Hotel Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<stdio.h>
long arb[200100],n,p,m,pos,val,nr,max;
void update(long nod,long left,long right)
{
	if(left==right)
	{		
		arb[nod]=val;
		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");
	int c;
	for(;p;--p)
	{
		fscanf(f,"%d",&c);
		if(c!=3)
		{
			fscanf(f,"%ld %ld",&pos,&m);
			val=!(c-1);
			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;
}