Cod sursa(job #2090377)

Utilizator AlexGAlexandru Gheorghe AlexG Data 17 decembrie 2017 23:34:06
Problema Secventa Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <fstream>
#include <deque>
#include <iostream>
#include <cstring>

using namespace std;

struct Numar
{
    int valoare;
    int pozitie;
};

char sirNumere[3000000];
int main()
{
    int numarNumere, lungimeSecventa;
    freopen("secventa.in", "r", stdin);
    scanf("%d %d", &numarNumere, &lungimeSecventa);
    int inceputSecventa=0, sfarsitSecventa=0, bazaMaxima=-30001;
    getchar();
    fgets(sirNumere, 3000000, stdin);
    deque<Numar> dequeCrescator;
    char *p = strtok(sirNumere, " ");
    for(int i=1; i<=numarNumere; ++i)
    {
        Numar numar;
        sscanf(p, "%d", &numar.valoare);
        p=strtok(NULL, " ");
        cout << numar.valoare << ' ';
        numar.pozitie = i;
        while(!dequeCrescator.empty() && numar.valoare <= dequeCrescator.front().valoare)
            dequeCrescator.pop_front();
        dequeCrescator.push_front(numar);
        if(dequeCrescator.back().pozitie == i-lungimeSecventa)
            dequeCrescator.pop_back();
        if(i>=lungimeSecventa && dequeCrescator.back().valoare>bazaMaxima)
        {
            bazaMaxima = dequeCrescator.back().valoare;
            inceputSecventa = i-lungimeSecventa+1;
            sfarsitSecventa = i;
        }
    }
    ofstream fout("secventa.out");
    fout << inceputSecventa << ' ' << sfarsitSecventa << ' ' << bazaMaxima;
    return 0;
}