Cod sursa(job #1694494)

Utilizator silkMarin Dragos silk Data 25 aprilie 2016 15:27:01
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <cstdio>
#define NMax 5000005

int v[NMax];
int coada[NMax];

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

int n,k,i,inc,sf;
long long smin=0;

    scanf("%d %d",&n,&k);
    for( i = 1; i <= n; ++i ) scanf("%d",&v[i]);

    inc = 1;
    sf = 0;
    for( i = 1; i <= k ; ++i )
    {
        while( inc <= sf && v[i] <= v[ coada[sf] ] )
        sf--;

        coada[++sf] = i;
    }


    for(; i <= n; ++i)
    {
        smin += v[ coada[inc] ];

        while( inc <= sf && coada[inc] <= i - k )
        inc++;

        while( inc <= sf && v[i] <= v[ coada[sf] ] )
        sf--;

        coada[++sf] = i;
    }
    smin += v[ coada[inc] ];

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



return 0;
}