Cod sursa(job #303694)
Utilizator | Data | 10 aprilie 2009 10:54:58 | |
---|---|---|---|
Problema | Deque | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.49 kb |
#include <stdio.h>
#define maxN 5000100
int V[maxN], Deque[maxN], N, K;
int main () {
long long Sol = 0;
int i, st, dr;
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
scanf("%d%d", &N, &K);
for (i = 1; i <= N; ++ i)
scanf("%d", &V[i]);
st = dr = 1;
for (i = 1; i <= N; ++ i) {
while (st != dr && V[Deque[dr - 1]] > V[i]) dr --;
Deque[dr ++] = i;
while (Deque[st] <= i - K) st ++;
if (i >= K)
Sol += V[Deque[st]];
}
printf("%lld\n", Sol);
return 0;
}