Cod sursa(job #2071703)

Utilizator Andrei17Andrei Pascu Andrei17 Data 20 noiembrie 2017 21:58:26
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#define NMAX 5000001

using namespace std;

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

int n, k;
long long v[NMAX], Deque[NMAX];
long long S = 0;

void deq() {
    int st = 0, dr = -1;

    for (int i = 0; i < n; i++) {
        in >> v[i];

        // Daca ala din stanga nu mai este valabil, iese.
        if (st <= dr && Deque[st] == i - k) {
            st++;
        }

        // Cat timp elementele din stanga nu sunt bune/potentiale, eliminam.
        while (st <= dr && v[i] <= v[Deque[dr]]) {
            dr--;
        }

        // Adaugam deque-ului elementul potential.
        Deque[++dr] = i;

        // Adaugam la suma cel mai bun element din deque - Deque[st].
        if (i >= k - 1) {
            S += v[Deque[st]];
            //for (int j = st; j < dr + 1; j++) {
            //    out << Deque[j] << ' ';
            //}
            //out << '\n';
        }
    }

    out << S;
}

int main()
{
    in >> n >> k;
    deq();
    return 0;
}