Cod sursa(job #562895)
#include <stdio.h>
#define NMAX 5000005
int N, K;
int A[NMAX], deque[NMAX];
int front, back;
long long sum;
int main(void)
{
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
int i;
scanf("%d%d", &N, &K);
for (i = 1; i <= N; ++i)
scanf("%d", A+i);
front = 1, back = 0; // deque vid
for (i = 1; i <= N; ++i)
{
while (front <= back && A[i] <= A[ deque[back] ]) back--;
deque[++back] = i;
if (deque[front] == i-K) front++;
if (i >= K) sum += A[ deque[front] ];
}
printf("%lld\n", sum);
return 0;
}