Cod sursa(job #2636299)

Utilizator cyg_dawidDavid Ghiberdic cyg_dawid Data 17 iulie 2020 14:39:03
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.51 kb
// var STL

//#include <iostream>
#include <fstream>
#include <deque>

using namespace std;

deque <int> deck;

const int NMAX = 5000005;
int v[NMAX], k, n;

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

int main()
{
    int i;
    long long s=0;
    fin >> n >> k;
    for(i = 1; i <= n; i++){
        fin >> v[i];
        while(deck.size() > 0 && v[i] <= v[ deck.back() ])
            deck.pop_back();
        deck.push_back(i);
        if(deck.front() == i - k)
            deck.pop_front();
        if(i >= k)
            s += v[ deck.front() ];
    }
    fout << s;
    return 0;
}

/*
https://infoarena.ro/problema/deque?fbclid=IwAR1bZ_PV-czMzhX5on8pNmMLUkSk00MOZS0Dm0ao2UYciVcGXiZmqW2lLLo
http://www.cplusplus.com/reference/deque/deque/#:~:text=deque%20(usually%20pronounced%20like%20%22deck,its%20front%20or%20its%20back).
*/

// var VECTOR


/*
//#include <iostream>
#include <fstream>
#include <deque>

using namespace std;

const int NMAX = 5000005;
int v[NMAX], deck[NMAX], k, n, fr, bk;

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

int main()
{
    int i;
    long long s=0;
    fin >> n >> k;
    for(i = 1; i <= n; i++){
        fin >> v[i];
    }
    bk = 0; fr = 1;
    for(i = 1; i <= n; i++){
        while(v[i] <= v[ deck[bk] ] && fr <= bk)
            bk--;
        deck[++bk] = i;
        if(deck[fr] == i - k)
            fr++;
        if(i >= k)
            s += v[ deck[fr] ];
    }
    fout << s;
    return 0;
}
*/