Cod sursa(job #1392248)

Utilizator cristian.caldareaCaldarea Cristian Daniel cristian.caldarea Data 18 martie 2015 15:23:48
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<fstream>
#include<deque>
#include<cstdio>
using namespace std;

deque<pair<int, int> > deq;

const int Dim = 500001;



int n, k;
int p, a[Dim], x, v;
char s[Dim*7];

void read(){

    int i = 0, sgn = 1, j = 1, nr = 0;
    gets(s);
    while( s[i] != NULL )
    {
        if ( s[i] == ' ' )
        {
            a[j] = nr*sgn;
            sgn = 1;
            nr = 0;
            j++;
        }
        else
        if (s[i]=='-') sgn=-1;
        else nr=nr*10+s[i]-'0';

        i++;
    }
    a[j]=nr*sgn;
}

void read();
void write();

int main()
{
    freopen("secventa.in", "r", stdin);
    freopen("secventa.out", "w", stdout);
    scanf ("%d%d\n",&n,&k);
    read();
    for ( int i = 1; i <= n; ++i)
        printf("%d ", a[i]);
    printf("\n");
    for ( int i = 1; i <= k; ++i)
    {

		while (!deq.empty() && deq.front().first > a[i])
			deq.pop_front();

		deq.push_front(make_pair(a[i], i));
	}
	v = deq.back().first;
	p = k;
	for ( int i = k + 1; i <= n; ++i)
	{
		if (i - deq.back().second >= k)
			deq.pop_back();

        while (!deq.empty() && deq.front().first > a[i])
			deq.pop_front();

		deq.push_front(make_pair(a[i], i));

		if (deq.back().first > v) {
			v = deq.back().first;
			p = i;
		}
	}
	fclose(stdin);
	read();
	write();

	return 0;
}



void write()
{

	printf("%d %d %d",  p - k + 1, p, v);
	fclose(stdout);

}