Cod sursa(job #1753826)

Utilizator AplayLazar Laurentiu Aplay Data 7 septembrie 2016 11:12:15
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <bits/stdc++.h>

#define NMAX 5000000

using namespace std;

int N, K, numbers[NMAX];
long long sum = 0;
deque<int> dq;

void addDQ(int index) {
    while (!dq.empty() && numbers[dq.back()] > numbers[index]) dq.pop_back();
    dq.push_back(index);
}

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

    scanf("%d%d", &N, &K);

    for (int it = 0; it < K; ++it) {
        scanf("%d", &numbers[it]);
        addDQ(it);
    }

    sum += (long long) numbers[dq.front()];

    for (int it = K; it < N; ++it) {
        if (numbers[dq.front()] == numbers[it - K]) dq.pop_front();
        scanf("%lld", &numbers[it]);
        addDQ(it);
        sum += numbers[dq.front()];
    }

    printf("%lld", sum);

    return 0;
}