Cod sursa(job #1691839)

Utilizator Coroian_DavidCoroian David Coroian_David Data 19 aprilie 2016 16:10:11
Problema Deque Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <iostream>
#include <cstdio>
#define N 50000001


using namespace std;
FILE *f, *g;



long long v[N], d[N], sum;
int k , n, st, dr = -1;
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, "%lld", &v[i]);


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

        dreapta(i);

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

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

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