Cod sursa(job #504713)

Utilizator mraresMardare Rares mrares Data 28 noiembrie 2010 15:30:04
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.6 kb
#include <cstdio>
#define nmax 5000010

using namespace std;

FILE *fin=fopen("deque.in", "r");
FILE *fout=fopen("deque.out", "w");

long long suma;
int v[nmax], deque[nmax];
int n, k, front, back;

int main()
{
    int i;
    fscanf(fin, "%d%d", &n, &k);
    for(i=1;i<=n;++i)
        fscanf(fin, "%d", &v[i]);
    front = 1;
    back = 0;
    for(i=1;i<=n;++i)
    {
        while(front<=back && v[i]<=v[deque[back]]) --back;
        deque[++back]=i;

        if(deque[front]==i-k) ++front;
        if(i>=k) suma+=v[deque[front]];
    }
    fprintf(fout,"%lld",suma);
    return 0;
}