Cod sursa(job #793335)

Utilizator gallexdAlex Gabor gallexd Data 2 octombrie 2012 16:47:41
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <cstdio>
#include <deque>
using std::deque;

deque<int> deck;
int v[5000010];
int N, K;
long long suma=0;

void push (int i, int x) {
    while (!deck.empty() && v[deck.back()]>x)
        deck.pop_back();
    deck.push_back(i);
}

long long query(int i) {
    while (!deck.empty() && deck.front()<=i-K)
        deck.pop_front();
    return v[deck.front()];
}

int main () {

    freopen("deque.in","rt",stdin);
    freopen("deque.out","wt",stdout);

    scanf("%d %d\n", &N, &K);
    for (int i=0; i<N; ++i) {
        scanf("%d", &v[i]);
        push(i,v[i]);
        if (i>K-2) suma += query(i);
    }
    printf("%lld", suma);

    return 0;
}