Cod sursa(job #2059000)

Utilizator Andrei17Andrei Pascu Andrei17 Data 6 noiembrie 2017 15:57:58
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#define NMAX 5000000

using namespace std;

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

int n, k, A[NMAX], Deque[NMAX], st = 0, dr = -1;
long long sum;

int main()
{
    in >> n >> k;

    for (int i = 1; i <= n; i++)
    {
        in >> A[i];

        // Cat timp elementul curent este mai mic decat ultimul element din deque,
        //    eliminam pozitia ultimului element din deque
        while (st <= dr && A[i] <= A[ Deque[dr] ]) dr--;

        // Adaugam pozitia elementului curent in deque
        Deque[++dr] = i;

        // Daca elementul minim coincide cu cel de pe pozita i-K, ii eliminam pozitia din deque,
        //    deoarece acesta nu mai conteaza pentru pasii >= i
        if (Deque[st] == i - k) st++;

        // Afisam minimul, acesta aflandu-se in varful deque-ului
        if (i >= k) sum += A[ Deque[st]];

        /*
        in >> v[i];

        if (st <= dr && poz[st] == i - k) {
            st++;
        }

        while (st <= dr && v[i] <= v[poz[dr]]) {
            dr--;
        }

        poz[++dr] = i;

        if (i >= k - 1) {
            sum += v[poz[st]];
        }
        */
    }

    out << sum;
    return 0;
}