Cod sursa(job #3233236)

Utilizator MirceaDonciuLicentaLicenta Mircea Donciu MirceaDonciuLicenta Data 2 iunie 2024 20:24:34
Problema Deque Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
#include <deque>
#include <vector>

using namespace std;

int main() {
    ifstream infile("deque.in");
    ofstream outfile("deque.out");

    if (!infile || !outfile) {
        cerr << "Error opening file" << endl;
        return 1;
    }

    long long N, K;
    infile >> N >> K;

    vector<long long> nums(N);
    for (long long i = 0; i < N; ++i) {
        infile >> nums[i];
    }

    deque<long long> dq;
    long long sum_min = 0;

    for (long long i = 0; i < N; ++i) {
        // Eliminăm elementele care nu mai fac parte din fereastra curentă
        if (!dq.empty() && dq.front() == i - K) {
            dq.pop_front();
        }

        // Eliminăm elementele mai mari decât elementul curent
        while (!dq.empty() && nums[dq.back()] >= nums[i]) {
            dq.pop_back();
        }

        dq.push_back(i);

        // Adăugăm minimul la sumă după ce am procesat cel puțin K elemente
        if (i >= K - 1) {
            sum_min += nums[dq.front()];
        }
    }

    outfile << sum_min << endl;

    infile.close();
    outfile.close();

    return 0;
}