Cod sursa(job #3368714)

Utilizator Sustac_RaresSustac Rares Sustac_Rares Data 15 octombrie 2026 13:13:45
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#include <vector>
#include <deque>

using namespace std;

int main() {
    ifstream fin("deque.in");
    ofstream fout("deque.out");

    int n, k;
    if (!(fin >> n >> k)) return 0;

    vector<long long> v(n + 1);
    for (int i = 1; i <= n; ++i) {
        fin >> v[i];
    }

    deque<int> dq;
    long long suma_minime = 0;

    for (int i = 1; i <= n; ++i) {
        // 1. Eliminam elementele mai mari sau egale din spatele deque-ului
        while (!dq.empty() && v[dq.back()] >= v[i]) {
            dq.pop_back();
        }

        // 2. Adaugam indicele curent
        dq.push_back(i);

        // 3. Eliminam elementele care au iesit din fereastra de lungime K
        if (dq.front() <= i - k) {
            dq.pop_front();
        }

        // 4. Adaugam minimul ferestrei curente la suma (doar cand avem o fereastra completa)
        if (i >= k) {
            suma_minime += v[dq.front()];
        }
    }

    fout << suma_minime << "\n";

    return 0;
}