Cod sursa(job #1810148)

Utilizator PaulStighiStiegelbauer Paul-Alexandru PaulStighi Data 19 noiembrie 2016 17:32:02
Problema Deque Scor 25
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<iostream>
#include<fstream>
#include<deque>
#define NMax 5000005
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");

int N,K,Sol;
int A[NMax],Min[NMax];

deque <int> D;

void Read()
{
    fin>>N>>K;

    Min[0] = 1<<30;

    for(int i = 1 ; i <= N ; ++i)
    {
        fin>>A[i];
        Min[i] = min(Min[i-1],A[i]);
    }
}

void Solve()
{
    for(int i = 1 ; i <= N ; ++i)
    {
        while(!D.empty() && A[i] <= A[D.back()])
            D.pop_back();

        D.push_back(i);

        if(D.front() == i - K)
            D.pop_front();

        if(i >= K)
            Sol += A[D.front()];
    }
}

void Print()
{
    fout<<Sol<<"\n";
}

int main()
{
    Read();
    Solve();
    Print();

    fin.close();
    fout.close();
    return 0;
}