Cod sursa(job #1760172)

Utilizator FlameingoAiordachioaei Marius Flameingo Data 20 septembrie 2016 14:04:41
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <iostream>
#include <cstdio>
#include <deque>
using namespace std;

const int NMAX = 5000003;

int n, k;
int A[NMAX];
long long answer;

deque<int> dq;

int main() {

    freopen("deque.in", "r", stdin);
    freopen("deque.out", "w", stdout);

    scanf ("%d%d", &n, &k);
    int i;

    for (i = 1; i <= n; ++i) {
        scanf ("%d", A + i);
    }

    for (i = 1; i < k; ++i) {

        while (!dq.empty () && A[dq.back()] >= A[i])
            dq.pop_back();

        dq.push_back(i);

    }

    for (i = k; i <= n; ++i) {

        while (!dq.empty() && A[dq.back()] >= A[i])
            dq.pop_back();

        dq.push_back(i);

        int dq_front = dq.front();
        if (i - dq_front >= k) {
            dq.pop_front();
            dq_front = dq.front();
        }

        answer += A[dq_front];

    }

    printf ("%lld", answer);

}