Cod sursa(job #66729)

Utilizator peanutzAndrei Homorodean peanutz Data 20 iunie 2007 20:23:35
Problema Secventa Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <stdio.h>
#include <string.h>

#define NMAX 500010
#define SORTMAX 70000
#define after 30303

long n, k;
int a[NMAX];
int sort[SORTMAX];
int max, begin, end;

char c[NMAX*15];

#define sort (sort + after)

void read()
{
	int i, h;

	scanf("%ld %ld\n", &n, &k);
///*
	fgets(c, NMAX*15, stdin);

	for(i = 0, h = 1; c[i] != NULL;)
	{
		if(c[i] == '-')
		{
			a[h] = -(c[i+1]-'0');
			i += 2;
		}
		else if(c[i] >= '0' && c[i] <= '9')
		{
			if(a[h] >= 0)
				a[h] = a[h]*10 + (c[i]-'0');
			else
				a[h] = a[h]*10 - (c[i]-'0');
			++i;
		}
		else
			++h, ++i;
	}

//..*/

	//for(i = 1; i <= n; ++i)
	  //	scanf("%d ", &a[i]);
}

void solve()
{
	int i;
	int inc, sf, ok;
	int min = 32000;
	//int h = 1;

	for(inc = sf = 1; sf <= k; ++sf)
	{
		//scanf("%d ", &a[h++]);

		++sort[ a[sf] ];

		if(min > a[sf])
		{
			min = a[sf];
		}
	}
	max = min;
	begin = 1;
	end = --sf;

	//scanf("%d ", &a[h++]);

	while(sf+1 <= n)
	{
		//scanf("%d ", &a[h++]);

		++sort[ a[++sf] ];

		if(min > a[sf])
			min = a[sf];

		--sort[ a[inc] ];

		if((a[inc] == min) && !sort[ a[inc] ])
		{
			for(i = a[inc]; ; ++i)
			{
				if(sort[ i ])
				{
					min = i;
					break;
				}
			}
		}
		++inc;

		if(min > max)
		{
			max = min;
			begin = inc;
			end = sf;
		}

	}
}

int main()
{
	freopen("secventa.in", "r", stdin);
	freopen("secventa.out", "w", stdout);

	read();

	solve();

	printf("%d %d %d\n", begin, end, max);

	fclose(stdin);
	fclose(stdout);

	return 0;
}