Cod sursa(job #258360)

Utilizator SheepBOYFelix Liviu SheepBOY Data 15 februarie 2009 09:17:37
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<stdio.h>
struct DEQUE{
	short int v,p;
	DEQUE()
	{
		v=p=30001;
	}
};
int sq,eq;
DEQUE dq[1000000];
int v[500000];
int main()
{
	int i,j,n,k,minim=-30001,pm=0;
	freopen("secventa.in","r",stdin);
	freopen("secventa.out","w",stdout);
	scanf("%d %d",&n,&k);
	int nq=0;
	if(k>2)
	{
	while(nq<k-1)
	{
		scanf("%d",&v[0]);
		j=sq;
		while(dq[j].v<v[0])
			++j;
		dq[j].v=v[0];
		dq[j].p=0;
	++nq;
	}
	for(i=nq;i<n;++i)
	{
		scanf("%d",&v[i]);
		j=sq;
		while(dq[j].v<v[i])
			++j;
		dq[j].v=v[i];
		dq[j].p=i;
		nq++;
		if(minim<dq[sq].v&&i)
			{
				minim=dq[sq].v;
				pm=dq[sq].p;
				
			}
		if((i+1)-dq[sq].p+1>=k)
		++sq;
	}
	printf("%d %d %d",pm+1,pm+k,minim);
	}
	if(k==1)
	{
		for(i=0;i<n;++i)
		{
			scanf("%d",&v[i]);
			if(v[i]>minim)
			{
				minim=v[i];
				pm=i;
			}
		}
		printf("%d %d %d",pm+1,pm+1,minim);
	}
	if(k==2)
	{
		scanf("%d",&v[i]);
		for(i=1;i<n;++i)
		{
			scanf("%d",&v[i]);
			if(v[i]>minim)
			{
				minim=v[i];
				pm=i-1;
			}
			if(v[i-1]<v[i])
			{
				minim=v[i-1];
				pm=i-1;
			}
		}
		printf("%d %d %d",pm+1,pm+2,minim);
	}
		return 0;
}