Cod sursa(job #154465)

Utilizator RockManIzsak Istvan RockMan Data 11 martie 2008 11:05:12
Problema Secventa Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<stdio.h>

int N,K,Secv[500001];
int RezInceput,RezSfarsit,RezBaza;

void citire()
{
	FILE *f=fopen("secventa.in","r");
	fscanf(f,"%d%d",&N,&K);
	for(int i = 1; i <= N; i++)
		fscanf(f,"%d",Secv + i);
	fclose(f);
}
void solutie()
{
	int min,minp,min2,min2p,St,Sf,i;
	RezInceput = St = 1;
	RezSfarsit = Sf = K;
	min = min2 = 30001;
	for(i = 1; i <= Sf; i++)
		if(Secv [i] < min)
			RezBaza = min = Secv [minp = i];
	for(i = 1; i <= Sf; i++)
		if(Secv [i] < min2 && i != minp)
			min2 = Secv [min2p = i];
	while(Sf < N)
	{
		St++;
		Sf++;
		if(minp == St - 1)
		{
			if(Secv [Sf] < min2)
			{
				min = Secv [minp = Sf];
			}
			else
			{
				min = min2;
				minp = min2p;
				min2 = 30001;
				for(i = St; i < Sf; i++)
					if(Secv [i] < min2 && i != minp)
						min2 = Secv [min2p = i];
			}
		}
		else if(min2p == St - 1)
		{
			min2 = 30001;
			for(i = St; i <= Sf; i++)
				if(Secv [i] < min2 && i != minp)
					min2 = Secv [min2p = i];
		}
		else if(Secv [Sf] < min)
		{
			min2 = min;
			min2p = minp;
			min = Secv [minp = Sf];
		}
		else if(Secv [Sf] < min2)
			min2 = Secv [min2p = Sf];
		if(min > RezBaza)
		{
			RezBaza = min;
			RezInceput = St;
			RezSfarsit = Sf;
		}
	}
}
void afisare()
{
	FILE *f=fopen("secventa.out","w");
	fprintf(f,"%d %d %d",RezInceput,RezSfarsit,RezBaza);
	fclose(f);
}
int main()
{
	citire();
	solutie();
	afisare();
	return 0;
}