Cod sursa(job #560039)

Utilizator lau08Laurentiu Capatina lau08 Data 18 martie 2011 12:01:05
Problema Secventa Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<stdio.h>
#define NMax 500001
#define Inf 30001
FILE *f=fopen("secventa.in","r");
FILE *g=fopen("secventa.out","w");
int n,k,x[NMax],aux,st,dr,a[NMax],max=-Inf,pozmax,b;

void Read()
{int i;
fscanf(f,"%d %d",&n,&k);
for(i=1;i<=n;i++)
	fscanf(f,"%d",&x[i]);
}

void Solve()
{int i,min,j;
min=x[1];
for(i=2;i<=k;i++)
	if(min > x[i]) {min = x[i]; aux = 2;}
a[k] = min;//retinem minimul pt fiecare pereche
	if(a[k] > max) {max = a[k]; pozmax = k; }
for(i=k+1;i<=n;i++)
{	if(x[i] < a[i-1])
			a[i] = x[i]; 
			
	else 
			{
				min = x[i];
				for(j=i; j>=i-k+1; j--)
					if(min > x[j]) min = x[j];
				a[i] = min;
			}
	if(a[i] > max) {max = a[i]; pozmax = i;}
	aux = i-k+1;
}
}

void Reverse()
{int i,aux;
for(i=1;i<=n/2;i++)
{
	aux = x[i];
	x[i] = x[n-i+1];
	x[n-i+1] = aux;
}
}

int main()
{
Read();
Solve();
dr = pozmax;
b = max;
max = -Inf;

Reverse();
Solve();
st=n - pozmax+1;

fprintf(g,"%d %d %d",st,dr,b);
return 0;
}