Cod sursa(job #1360198)

Utilizator danalex97Dan H Alexandru danalex97 Data 25 februarie 2015 12:39:13
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>
#include <deque>
using namespace std;

ifstream F("deque.in");
ofstream G("deque.out");

const int N = 5000010;

int n,k,a[N];
deque<int> dq;
long long ans;

int main()
{
    F>>n>>k;
    for (int i=1;i<=n;++i)
        F>>a[i];
    for (int i=1;i<=k;++i)
    {
        if ( !dq.empty() )
        {
            while ( a[i] < a[dq.back()] )
            {
                dq.pop_back();
                if ( dq.empty() ) break;
            }
        }
        dq.push_back( i );
    }
    ans += a[dq.front()];
    for (int i=k+1;i<=n;++i)
    {
        if ( !dq.empty() )
            if ( dq.front() <= i-k )
                dq.pop_front();
        if ( !dq.empty() )
        {
            while ( a[i] < a[dq.back()] )
            {
                dq.pop_back();
                if ( dq.empty() ) break;
            }
        }
        dq.push_back( i );
        ans += a[dq.front()];
    }
    G<<ans<<'\n';
}