Cod sursa(job #868966)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 31 ianuarie 2013 20:24:53
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <cstdio>
#include <deque>

using namespace std;

#define Nmax 5000001

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

long long N, K, S;

void citire(){

    freopen("deque.in", "r", stdin);

    scanf("%d %d", &N, &K);

    for(int i = 1; i <= N; ++i)
        scanf("%d", (v + i));
}

void rezolva(){

    for(int i = 1; i <= N; ++i){

        while(!deck.empty() && 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()];
    }
}

void afis(){

    freopen("deque.out", "w", stdout);

    printf("%lld\n", S);
}

int main(){

    citire();
    rezolva();
    afis();

    return 0;
}