Cod sursa(job #1691837)

Utilizator Coroian_DavidCoroian David Coroian_David Data 19 aprilie 2016 16:08:07
Problema Deque Scor 25
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <iostream>
#include <cstdio>
#define N 50000001


using namespace std;
FILE *f, *g;



int v[N], d[N],k , n, st, dr = -1, sum;

void stanga(int i)
{
    if (i - k == d[st])
        st++;
}

void dreapta(int i)
{
    while (st <= dr && v[i] <= v[d[dr]])
        dr--;
    d[++dr] = i;
}

int main()
{
    //cout << "Hello world!" << endl;


    f = fopen("deque.in", "r");
    g = fopen("deque.out", "w");

    fscanf(f, "%d%d", &n, &k);

    int i;

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


    for (i = 1; i <= n; i ++)
    {
        if (i > k)
            stanga(i);

        dreapta(i);

        if (i >= k)
            sum += v[d[st]];
    }

    fprintf(g, "%d", sum);

    fclose(f);
    fclose(g);
    return 0;
}