Cod sursa(job #794500)

Utilizator TeodoraTanaseTeodora Tanase TeodoraTanase Data 6 octombrie 2012 14:04:35
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <cstdio>
#include <deque>

#define LGMAX 5000001

using namespace std;

FILE *inFile = fopen ("deque.in", "r");
FILE *outFile = fopen ("deque.out", "w");

deque <int> D;

int n;
int k;
long long a[LGMAX];

void read()
{
    fscanf (inFile, "%d %d\n", &n, &k);

    for (int i = 0; i < n; ++i)
        fscanf (inFile, "%lld\n", &a[i]);
}

long long sum()
{
    long long s = 0;

    for (int i = 0; i < n; ++i)
    {
        while (!D.empty() && a[D.back()] > a[i])
            D.pop_back();

        D.push_back(i);

        if (D.front() <= i - k)
            D.pop_front();

        if (i >= k - 1)
            s += a[D.front()];
    }

    return s;
}

int main()
{
    read();
    fprintf (outFile, "%lld\n", sum());

    return 0;
}