Cod sursa(job #849539)

Utilizator KONT_testekobol Vasile KONT_teste Data 7 ianuarie 2013 09:53:21
Problema Secventa Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<cstdio>
#include<queue>
using namespace std;
const int Nmax = 500001;
int n, k, a[Nmax],pb,vb,p,semn;
char s[10000001];
deque <int> d;
int main()
{
	freopen("secventa.in", "r", stdin); 
	freopen("secventa.out", "w", stdout);
	scanf("%d %d ", &n, &k);
	fgets(s,10000001,stdin);
    for(int i=1; i<=n; ++i) 
	{
		//scanf("%d ", &a[i]);
		semn=1; 
        if(s[p]==' ') ++p;
        if(s[p]=='-') {semn=-1; ++p;}
        while('0'<=s[p] && s[p]<='9') a[i]=a[i]*10+s[p]-'0', ++p;
        a[i] *= semn;
	}

	for(int i=1; i<=k; ++i)
	{
		while(!d.empty() &&  a[i] <= a[d.back()]) d.pop_back();
	    d.push_back(i);
	}
	vb=a[d.front()];
	pb=k;
	for(int i=k+1; i<=n; ++i)
	{	if(d.front()==i-k) d.pop_front();
		while(!d.empty() &&  a[i] <= a[d.back()]) d.pop_back();
	    d.push_back(i);
		if(a[d.front()]>vb)
		{
			vb=a[d.front()];
			pb=i;
		}
	}
	printf("%d %d %d\n", pb-k+1,pb,vb);
    return 0;
}