Cod sursa(job #2057198)

Utilizator alexge50alexX AleX alexge50 Data 4 noiembrie 2017 14:52:43
Problema Deque Scor 25
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <stdio.h>

#define MAX_K 5000000

struct elem
{
    int pos, val;


    elem() {}

    elem(int _pos, int _val): pos(_pos), val(_val) {}
};

elem deque[MAX_K + 1];
int left_head, right_head;

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

    int n, k;
    int sum = 0;

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

    sum = 0;

    left_head = 0;
    right_head = -1;
    for(int i = 0; i < n; i++)
    {
        int x;

        fscanf(fin, "%d ", &x);

        if(left_head <= right_head && deque[left_head].pos == i - k)
            left_head ++;

        while(left_head <= right_head && x <= deque[right_head].val)
            right_head --;

        deque[++ right_head] = elem(i, x);

        if(i >= k - 1) sum += deque[left_head].val;
    }

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

    return 0;
}