Cod sursa(job #3175813)

Utilizator Andrei_EmanuelPuiu Andrei Stefan Emanuel Andrei_Emanuel Data 26 noiembrie 2023 13:48:40
Problema Deque Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <deque>
using namespace std;

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

int main()
{
    int const MAX = 5 * 1e6 + 1;
    int n, k, a[MAX], i;

    fin >> n >> k;
    for(i = 1; i <= n; i ++)
        fin >> a[i];

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

    for(i = 1; i <= k; i ++)   /// Analizez prima secv
    {
        while(!dq.empty() && a[i] <= a[ dq.back() ])
            dq.pop_back();   /// Elimin elem mai mari
        /// Obs: voi aveam elem luate pe sarite, in ord cresc

        dq.push_back(i);
    }

    sum += dq.front();   /// Adaug in sum primul min

    for(; i <= n; i ++)
    {
        while(!dq.empty() && a[i] <= a[ dq.back() ])
            dq.pop_back();   /// Elimin elem mai mari
        if(!dq.empty() && dq.front() <= i - k)
            dq.pop_front();   /// Elimin elem care iese din secv analizata

        dq.push_back(i);
        sum += dq.front();
    }

    fout << sum;
    return 0;
}