Cod sursa(job #3303746)

Utilizator AbC_LTAVPopovici Andrei AbC_LTAV Data 17 iulie 2025 16:04:05
Problema Deque Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <deque>

using namespace std;

int main()
{
    const int Max = 1e6;
    int n, lungSecv, v[Max + 5];
    long long sumMin = 0;
    deque <int> Minim;

    freopen("deque.in", "r", stdin);
    freopen("deque.out", "w", stdout);

    ios_base::sync_with_stdio(false);
    cin.tie(0);

    cin >> n >> lungSecv;

    for (int i = 1; i <= n; i++)
       cin >> v[i];


    for (int i = 1; i <= n; i++)
    {
        while (!Minim.empty() && v[Minim.back()] >= v[i])
            Minim.pop_back();

        Minim.push_back(i);

        while (!Minim.empty() && Minim.front() < i - lungSecv + 1)
            Minim.pop_front();

        if (i >= lungSecv)
            sumMin += v[Minim.front()];
    }

    cout << sumMin;

    return 0;
}

/*
Introducem elementele din vector in deque pe parcursul parcurgerii
Scoatem elementele mai mari decat cele din dreapta lor
Scoatem elementele care nu mai apartin subsecventei curente

K = 3
-7 9 2 4 -1 5 6 7 1

1
*/