Pagini recente » Cod sursa (job #1946765) | Cod sursa (job #2107641) | Cod sursa (job #469155) | Cod sursa (job #2484671) | Cod sursa (job #2231633)
#include <stdio.h>
#define nmax 5000010
using namespace std;
struct date {
int value;
int pos;
};
int n, k, front_pointer, rear_pointer;
int t[nmax];
date deq[nmax];
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", &t[i]);
front_pointer = rear_pointer = 1; deq[1].value = t[1]; deq[1].pos = 1;
long long int answer = 0;
for (int i = 2; i <= n; i++) {
rear_pointer++; deq[rear_pointer] = { t[i], i };
while (rear_pointer - 1 >= front_pointer && deq[rear_pointer].value < deq[rear_pointer - 1].value) {
deq[rear_pointer - 1] = deq[rear_pointer]; rear_pointer--;
}
if (i >= k) answer += deq[front_pointer].value;
if (i - deq[front_pointer].pos + 1 >= k) front_pointer++;
}
printf("%lld", answer);
return 0;
}