Cod sursa(job #1785398)

Utilizator BLz0rDospra Cristian BLz0r Data 21 octombrie 2016 11:03:45
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
#include <deque>
using namespace std;

#define Nmax 5000002

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

deque<int> Q;
int v[Nmax];

int main() {

    int N, K;
    long long S = 0;

    fin >> N >> K; //citesc

    for (int i = 1; i <= N; ++i) {
        fin >> v[i]; // citesc elementele

        while (!Q.empty() && v[i] <= v[Q.back()]) // scot toate elementele mai mari decat elementul curent
            Q.pop_back();                         // deoarece nu pot fi minime pt viitoarele secvente

        Q.push_back(i); // adaug elementul curent ( prin indice )

        if (Q.front() <= i - K) // daca primul element nu se mai afla in cele K curente, il scot
            Q.pop_front();

        if (i >= K) //daca am macar K elemente
            S += v[Q.front()]; // adaug minimul din secventa

    }

    fout << S; //afisez

    return 0;
}