Cod sursa(job #1688896)

Utilizator Tyler_BMNIon Robert Gabriel Tyler_BMN Data 13 aprilie 2016 19:49:25
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
/*
#include <fstream>

#define maxn 5000010

using namespace std;

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

int n,k,a[maxn],Deque[maxn],Front,Back;
long long Sum;

int main()
{
    fin>>n>>k;
    for(int i=1;i<=n;i++)
        fin>>a[i];
    Front=1,Back=0;
    for(int i=1;i<=n;i++)
    {
        while(Front<=Back && a[i]<=a[Deque[Back]])
            Back--;
        Deque[++Back]=i;

        if(Deque[Front]==i-k)
            Front++;

        if(i>=k)
            Sum+=a[Deque[Front]];
    }

    fout<<Sum;
    return 0;
}
*/

#include <fstream>
#include <deque>

#define maxn 5000010

using namespace std;

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

int n,k,a[maxn];
long long sum;
deque <int> dq;

int main()
{
    fin>>n>>k;
    for(int i=1;i<=n;i++)
        fin>>a[i];

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