Cod sursa(job #651865)

Utilizator vendettaSalajan Razvan vendetta Data 21 decembrie 2011 22:02:11
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <cstdio>
#include <deque>

using namespace std;

const int nmax = 5000001;

int n, k;
int a[nmax];
long long s=0;
deque<int> dq;

void citeste(){

    scanf("%d %d\n", &n, &k);
    for(int i=1; i<=n; ++i){
        scanf("%d\n", &a[i]);
    }

}

void rezolva(){

    for(int i=1; i<=n; ++i){
        while (!dq.empty() && a[i] <= a[ dq.back() ]) dq.pop_back();
        dq.push_back(i);
        if (i-k == dq.front()) dq.pop_front();
        if (i >= k) s += a[ dq.front() ];
    }

}

void scrie(){

    printf("%lld", s);

}

int main(){

    freopen("deque.in", "r", stdin);
    freopen("deque.out", "w", stdout);

    citeste();
    rezolva();
    scrie();

    fclose(stdin);
    fclose(stdout);

    return 0;

}