Pagini recente » Cod sursa (job #2752360) | Cod sursa (job #2175048) | Cod sursa (job #935676) | Cod sursa (job #577672) | Cod sursa (job #2231631)
#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()
{
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;
}