Cod sursa(job #3257368)

Utilizator marelucaMare Luca Ghita mareluca Data 17 noiembrie 2024 14:26:15
Problema Deque Scor 15
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#include <vector>
#include <deque>

std::string file_name = "deque";
std::ifstream fin(file_name + ".in");
std::ofstream fout(file_name + ".out");

unsigned long long sum;
std::vector<int> A;
std::deque<int> dq;

int main() {
    int n, k;
    fin >> n >> k;

    A.resize(n + 1);
    for (int i = 1; i <= n; ++i) {
        fin >> A[i];
    }

    for (int i = 1; i <= n; ++i) {
        // Verificam daca ultimul element este in intervalul [i, i + k]
        if (!dq.empty() && dq.front() < i - k + 1) {
            // Daca nu, il eliminam
            dq.pop_front();
        }

        // Acum eliminam toate elementele mai mici ca v[i]
        // Facem acest lucru pentru ca vrem sa aflam doar minimul
        // Si astfel minimul va fi la pozitia A[dq.front()]
        while (!dq.empty() && A[dq.back()] >= A[i]) {
            dq.pop_back();
        }

        // Adaugam noul indice in deque
        dq.push_back(i);

        // Verificam daca am parcurs cele k elemente
        if (i >= k) {
            sum += A[dq.front()];
        }
    }

    fout << sum;
    return 0;
}