Cod sursa(job #2033677)

Utilizator k.bruenDan Cojocaru k.bruen Data 7 octombrie 2017 09:58:56
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>

std::ifstream in("deque.in");
std::ofstream out("deque.out");

int lungime, elemente;

int element[5000000];
int indice[5000000];
int start = 0, stop = 0;

long long rezultat = 0;

void add(int minLimit, int i) {
    while (indice[start] < minLimit) start++;

    if (start == stop) {
        indice[start] = i;
        stop++;
        return;
    }

    while(start != stop && element[i] <= element[indice[stop - 1]]) stop--;
    indice[stop] = i;
    stop++;
}

int main() {
    in >> lungime >> elemente;

    for (int i = 0; i < lungime; i++) in >> element[i];

    for (int i = 0; i < elemente - 1; i++) add(0, i);
    for (int i = elemente - 1; i < lungime; i++) {
        add(i - elemente + 1, i);
        rezultat += element[indice[start]];
    }

    out << rezultat;

    return 0;
}