Pagini recente » Borderou de evaluare (job #2809229) | Cod sursa (job #2622747)
#include <iostream>
#include <fstream>
int main()
{
std::ifstream f("deque.in");
std::ofstream g("deque.out");
unsigned int n, k;
f >> n >> k;
long long* a = new long long[n + 1] {0};
long long* deque = new long long[n + 1] {0};
unsigned int front = 0, back = 0;
for (unsigned int i = 1; i <= n; i++) {
f >> a[i];
}
long long s = 0;
for (unsigned int i = 1; i <= n; i++) {
while (front <= back && a[i] <= a[deque[back]]) {
back--;
}
back++;
deque[back] = i;
int pos = i - k;
if (deque[front] == pos) {
front++;
}
if (k <= i) {
s += a[deque[front]];
}
}
std::cout << s;
delete[] a;
delete[] deque;
}