Cod sursa(job #909619)

Utilizator TeodoraTanaseTeodora Tanase TeodoraTanase Data 10 martie 2013 16:22:21
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <cstdio>
#include <deque>
#include <algorithm>

#define NMAX 5000001

using namespace std;

deque <int> D;

int n;
int k;
int a[NMAX];
long long s;

void read()
{
    freopen("deque.in", "r", stdin);

    scanf("%d %d\n", &n, &k);

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

void solve()
{
    for(int i = 1; i <= n; ++ i)
    {
        while(!D.empty() && a[D.back()] > a[i])
            D.pop_back();

        D.push_back(i);

        if(D.front() <= i - k)
            D.pop_front();

        if(i >= k)
            s += a[D.front()];
    }
}

int main()
{
    read();
    solve();

    freopen("deque.out", "w", stdout);
    printf("%lld\n", s);

    return 0;
}