Cod sursa(job #798112)

Utilizator dariusdariusMarian Darius dariusdarius Data 15 octombrie 2012 19:16:32
Problema Secventa Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include<stdio.h>
int a[500005];
int f[60005];
int reset(int a)
{
	int i;
	for(i=a+1;i<=30000;i++)
		if(f[i+30000])
			return i;
	return -1;
}
int main()
{
	freopen("secventa.in","r",stdin);
	freopen("secventa.out","w",stdout);
	int n,k,i,start,end,max,min;
	scanf("%d%d",&n,&k);
	for(i=1;i<=n;i++)
		scanf("%d",&a[i]);
	start=1;end=k;min=30001;
	for(i=1;i<=k;i++)
	{
		if(a[i]<min)
			min=a[i];
		f[a[i]+30000]++;
	}
	max=min;start=1;end=k;
	for(i=k+1;i<=n;i++)
	{
		f[a[i]  +30000]++;
		if(a[i]<min) min=a[i];
		f[a[i-k]+30000]--;
		if(a[i-k]==min && f[a[i-k]+30000]==0)
			min=reset(min);
		if(min>max)
			{max=min;start=i-k;end=i;}
	}
	printf("%d %d %d\n",start+1,end,max);
	return 0;
}