Cod sursa(job #2502246)

Utilizator hurjui12AlexandruHurjui Alexandru-Mihai hurjui12Alexandru Data 30 noiembrie 2019 15:41:08
Problema Secventa Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <fstream>
#include <cstdio>
#include <cctype>
#include <queue>
using namespace std;

FILE *fin = fopen("secventa.in", "r");
ofstream fout("secventa.out");

const int bsize = 1<<16;
char buff[bsize];
int poz = bsize;

inline char next()
{
    if (poz == bsize)
    {
        fread(buff, 1, bsize, fin);
        poz = 0;
    }
    return buff[poz++];
}

int nr()
{
    char x;
    int nr = 0, s = 1;
    do
    {
        x = next();
    } while (x!='-' && isdigit(x) == 0);
    if (x == '-')
    {
        s = -1;
        x = next();
    }
    while (isdigit(x))
    {
        nr = nr*10 +  x-48;
        x = next();
    }
    return s*nr;
}

int main()
{
    int n, k, i, x;
    int bmax, ibmax;
    deque <pair <int, int>> d;
    n = nr();
    k = nr();
    for (i = 1; i<=k; i++)
    {
        x = nr();
        while (d.empty() == 0 && d.front().first > x)
            d.pop_front();
        d.push_front({x, i});
    }
    ibmax = k;
    bmax = d.back().first;
    for (i = k+1; i<=n; i++)
    {
        x = nr();
        while (d.empty() == 0 && d.front().first > x)
            d.pop_front();
        d.push_front({x, i});
        if (i - d.back().second == k)
            d.pop_back();
        if (d.back().first > bmax)
        {
            bmax = d.back().first;
            ibmax = i;
        }
    }
    fout << ibmax - k + 1 << ' ' << ibmax << ' ' << bmax;
    return 0;
}