Cod sursa(job #1104202)

Utilizator 2dorTudor Ciurca 2dor Data 10 februarie 2014 16:18:30
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <fstream>
#include <deque>
using namespace std;

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

const int MAXN = 5000003;
deque<int> Deck;
long long Sol;
int N, K, v[MAXN];

void Read() {
    fin >> N >> K;
    for (int i = 0; i < N; ++i)
        fin >> v[i];
}

void Solve() {
    for (int i = 0; i < N; ++i) {
        while (!Deck.empty() && v[Deck.back()] >= v[i])
            Deck.pop_back();
        Deck.push_back(i);
        if (i < K - 1) continue;
        if (Deck.front() == i - K)
            Deck.pop_front();
        Sol += v[Deck.front()];
    }
}

int main() {
    Read();
    Solve();
    fout << Sol << '\n';
    fin.close();
    fout.close();
    return 0;
}