Cod sursa(job #2596592)

Utilizator k2e0e0w3qDumitrescu Gheorghe k2e0e0w3q Data 9 aprilie 2020 23:19:36
Problema Deque Scor 60
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <stdio.h>
#define N 5000000

struct pos {
    long long val,
              pos;
} dq[N], constr;

long long v[N];
int main (void) {
    FILE *fin=fopen("deque.in", "r"),
         *fout=fopen("deque.out", "w");
    long long n, k, i, x, front, back;
    fscanf(fin, "%lld%lld%lld", &n, &k, &x);

    constr.val=x, constr.pos=0;
    dq[front=back=0]=constr;
    for (i=1; i<k; i++) {
        fscanf(fin, "%lld", &x);
        while (front<=back && x<dq[back].val)
            --back;
        constr.val=x, constr.pos=i;
        dq[++back]=constr;
    }

    long long s=dq[front].val;
    for (; i<n; ++i) {
        if (dq[front].pos+k<=i)
            ++front;
        fscanf (fin, "%lld", &x);
        while (front<=back && x<dq[back].val)
            --back;
        constr.val=x, constr.pos=i;
        dq[++back]=constr;
        s+=dq[front].val;
    }
    fprintf(fout, "%lld", s);
    return 0;
}