Cod sursa(job #2173012)

Utilizator marcdariaDaria Marc marcdaria Data 15 martie 2018 19:47:03
Problema Secventa Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <cstdio>
#include<deque>
using namespace std;

void read();
void write();

deque<pair<int, int> > deq;
int n, k;
int p, v;
void Get(int &x);


int main()
{
    freopen("secventa.in", "r", stdin);
    freopen("secventa.out", "w", stdout);

    read();
    write();
    return 0;
}

void read()
{
    Get(n); Get(k);

    int i, aux;
    for (i = 1; i <= k; ++i)
    {
        Get(aux);
        while (!deq.empty() && deq.front().first > aux)
            deq.pop_front();

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

        Get(aux);
        while (!deq.empty() && deq.front().first > aux)
            deq.pop_front();

        deq.push_front(make_pair(aux, i));

        if (deq.back().first > v) {
            v = deq.back().first;
            p = i;
        }
    }

}

void write()
{
    printf("%d %d %d", p - k + 1, p, v);

}

const int Lim = 100000;
int p1 =  Lim - 1;
char s[Lim];

void Next()
{
    if (++p1 == Lim)
        fread(s, 1, Lim, stdin), p1 = 0;
}

void Get (int &x) {
 bool semn = false;
    for (; s[p1] < '0' || s[p1] > '9'; Next());
    for (x = 0; s[p1] >= '0' && s[p1] <= '9'; Next())
       { if ( s[p1-1] == '-')
            semn = true;
           x = x * 10 + s[p1] - '0';
        }
if( semn == true)
    x*=-1;
}