Cod sursa(job #1013310)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 20 octombrie 2013 19:34:00
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <cstdio>
#include <deque>
#include <algorithm>

using namespace std;

deque <int> DQ;
int N,K,v[ 5000005 ];
long long ans;

void scan(int &A)
{
    char c = 0; A = 0;
    int flag = 1;
    do
    {
        c = fgetc(stdin);
        if('1'<=c && c <= '9' || c == '-')
            if( c =='-') flag = -1;
            else A = A * 10 + c - 48;
    }while('1'<=c && c <= '9'||c=='-');
    A = A * flag;
}

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

    int a;

    scan(N),scan(K);
    for(int i = 1; i <= N;++i)
    {
        scan(v[i]);
        while(!DQ.empty() && v[i] <= v[DQ.back()]) DQ.pop_back();
        DQ.push_back(i);
        if(i - DQ.front() >= K) DQ.pop_front();

        if(i>=K)ans += v[DQ.front()];
    }
    printf("%lld",ans);
    return 0;
}