Cod sursa(job #590307)

Utilizator maritimCristian Lambru maritim Data 16 mai 2011 18:44:02
Problema Secventa Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<stdio.h>

long int n;
long int k;
int a;
int Deck[500001];
int P[500001];
int Front = 1;
long int Back = 0;
long int mar = -30001;
long int poz;

void citire(void)
{
	FILE *f = fopen("secventa.in","r");
	
	fscanf(f,"%d %d",&n,&k);
	P[0] = 1;	
	for(int i=1;i<=n;i++)
	{
		fscanf(f,"%d",&a);
		Back ++;
		while(Back>=Front && Deck[--Back]>a);
		Deck[++Back] = a;
		P[Back] = i;
		if(P[Front]<=i-k)
			Front ++;
		if(P[Back] >= k && Deck[Front]>mar)
		{
			poz = P[Front-1] + 1;
			mar = Deck[Front];
			if(poz>i-k)
				poz = i-k+1;
		}
	}
	
	fclose(f);
}

int main()
{
	FILE *f = fopen("secventa.out","w");
	
	citire();
	fprintf(f,"%d %d %d",poz,poz + k-1,mar);
	
	fclose(f);
	return 0;
}