Cod sursa(job #2509826)

Utilizator dey44andIoja Andrei-Iosif dey44and Data 14 decembrie 2019 22:18:40
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#include <deque>

#define input "deque.in"
#define output "deque.out"
#define NMAX 5000005

using namespace std;

ifstream in(input);
ofstream out(output);

deque < int > decc;
int N, K;
int sir[NMAX];

void Read_Data()
{
    in >> N >> K;
    for(int i = 1; i <= N; i++)
        in >> sir[i];
}

void Solve()
{
    long long sol = 0;
    for(int i = 1; i <= N; i++)
    {
        int x = sir[i]; // extrag elementul din coada
        // Verific daca elementele din varful listei nu sunt depasite de limita
        while(!decc.empty())
        {
            if(i - K >= decc.front()) decc.pop_front();
            else break;
        }
        // Verific si scot elementele mai mari decat x
        while(!decc.empty())
        {
            if(sir[decc.back()] > x) decc.pop_back();
            else break;
        }
        decc.push_back(i);
        if(i >= K)
        {
            sol += (long long)sir[decc.front()];
            //out << sir[decc.front()] << "\n";
        }
    }
    out << sol << "\n";
}

int main()
{
    Read_Data();
    Solve();
    return 0;
}