Cod sursa(job #82203)

Utilizator flionIonescu Ionut Florin flion Data 5 septembrie 2007 21:53:08
Problema Hotel Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <stdio.h>

#define nmax 1000000

int STG[nmax], DRE[nmax], MAX[nmax], PLI[nmax];

int ocu[nmax];

int M, N;

void baga(int i, int j)
{
	for (int k = i; k <= j; k++)
	  ocu[k] = 1;
}

void scoate(int i, int j)
{
	for (int k = i; k <= j; k++)
	  ocu[k] = 0;
}

int cere()
{
	ocu[0] = ocu[N+1] = 1;

	int left = 0, maxim = 0;

	for (int i = 1; i <= N+1; i++)
	{
	  if (ocu[i] == 0 && ocu[i-1] == 1)
	    left = i;
	  else if (ocu[i] == 1 && ocu[i-1] == 0)
	    if (i-left > maxim) maxim = i-left;
       }

       return maxim;
}

int main()
{
	int t, c, a, b;

	freopen("hotel.in", "r", stdin);
	freopen("hotel.out", "w", stdout);

	scanf("%d%d", &N, &M);

//	fa(1, 1, N);

	scoate(1, N);

	for (t = 1; t <= M; ++t)
	{
	  scanf("%d", &c);

	  switch(c)
	  {
	    case 1:
	    {
	      scanf("%d%d", &a, &b);
//	      baga(1, 1, N, a, a+b-1);

	      baga(a, a+b-1);

	      break;
	    }
	    case 2:
	    {
	      scanf("%d%d", &a, &b);
//	      scoate(1, 1, N, a, a+b-1);

	      scoate(a, a+b-1);

	      break;
	    }
	    case 3:
	    {
//	      printf("%d\n", MAX[1]);

	      printf("%d\n", cere());

	      break;
	    }
	  }
	}

	return 0;
}