Cod sursa(job #2708404)

Utilizator vnedelcuVictor Andrei Nedelcu vnedelcu Data 18 februarie 2021 17:49:02
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#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;
}