Cod sursa(job #249391)

Utilizator vlad_popaVlad Popa vlad_popa Data 28 ianuarie 2009 12:39:11
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.59 kb
#include <cstdio>

#define ll long long

int N, K;
int Dq[5000005], V[5000005];
ll ans;

int main () {
    freopen ("deque.in", "r", stdin);
    freopen ("deque.out", "w", stdout);
    
    scanf ("%d %d", &N, &K);
    for (int i = 1; i <= N; ++ i) scanf (" %d", V + i);
    
    for (int st = 1, dr = 0, i = 1; i <= N; ++ i) {
        while (st <= dr && V[Dq[dr]] >= V[i]) -- dr;
        Dq[++dr] = i;
        while (st <= dr && i - Dq[st] >= K) ++ st;
        
        if (i >= K) ans += (ll)V[Dq[st]];        
    }
    
    printf ("%lld\n", ans);
    
    return 0;
}