Cod sursa(job #1801794)

Utilizator dragomirmanuelDragomir Manuel dragomirmanuel Data 9 noiembrie 2016 17:01:25
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <iostream>
#include <deque>
#include <cstdio>

using namespace std;

const int NMax = 500005;
long long sum=0;
int N,K;
int A[NMax];

deque < int > Dq;

void Read()
{

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

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

void Solve()
{
    Dq.push_back(1);

    for(int i=2; i<=N; ++i)
    {
        if(Dq.front()==i-K)
            Dq.pop_front();

        while(A[i]<=A[Dq.back()] && !Dq.empty())
             Dq.pop_back();


        Dq.push_back(i);

        if(i>=K)
            sum+=A[Dq.front()] * 1LL;
    }

    printf("%lld\n", sum);

}

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

    Read();
    Solve();


    return 0;
}