Cod sursa(job #234178)

Utilizator filipbFilip Cristian Buruiana filipb Data 20 decembrie 2008 10:38:19
Problema Deque Scor Ascuns
Compilator cpp Status done
Runda Marime 0.78 kb
#include <stdio.h>
#include <assert.h>

#define ll long long
#define NMax 5000005

int N, K;
int poz[NMax], v[NMax];
ll Res;

int main()
{
    int i, f, l, j;
    
    freopen("deque.in", "r", stdin);
    freopen("deque.out", "w", stdout);
    
    scanf("%d %d", &N, &K);
    assert(1 <= N && N <= 5000000);
    assert(1 <= K && K <= N);
    for (i = 1; i <= N; ++i)
    {
        scanf("%d", &v[i]);
        assert(-10000000 <= v[i] && v[i] <= 10000000);
    }

    f = 1; l = 0;
    for (i = 1; i <= N; ++i)
    {
        for (; f <= l && poz[f] <= i-K; ++f);
        for (; f <= l && v[i] <= v[poz[l]]; --l);
        poz[++l] = i;
        if (i >= K)
           Res += v[poz[f]];           
    }  
    
    printf("%lld\n", Res);
  
    return 0;
}