Pagini recente » Cod sursa (job #1891529) | Cod sursa (job #2704228) | Cod sursa (job #696142) | Cod sursa (job #1980707) | Cod sursa (job #2708404)
#include <stdio.h>
#include <inttypes.h>
#include <deque>
using namespace std;
int main() {
FILE * f;
int n, k, x;
f = fopen("deque.in", "r");
fscanf(f, "%d%d", &n, &k);
// process the first k elements
deque<pair<int, int> > index_value_deque;
for (int i = 0; i < k; i++) {
fscanf(f, "%d", &x);
while (!index_value_deque.empty() && x < index_value_deque.back().second) {
index_value_deque.pop_back();
}
index_value_deque.push_back(make_pair(i, x));
}
// process the remaining elements
int64_t result = index_value_deque.front().second;
for (int i = k; i < n; i++) {
fscanf(f, "%d", &x);
while (!index_value_deque.empty() && x < index_value_deque.back().second) {
index_value_deque.pop_back();
}
index_value_deque.push_back(make_pair(i, x));
if (i - index_value_deque.front().first == k) {
index_value_deque.pop_front();
}
result += index_value_deque.front().second;
}
fclose(f);
f = fopen("deque.out", "w");
fprintf(f, "%lld", result);
fclose(f);
return 0;
}