Cod sursa(job #2676179)

Utilizator andrei_ciobanuciobanu andrei andrei_ciobanu Data 23 noiembrie 2020 17:40:25
Problema Deque Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <stdio.h>
#include <stdlib.h>

#define LEN 5000001
#define VALMAX 10000000


int left=1, right=0;
int dequeue[LEN], a[LEN];

void pop_left() {
    left=(left+1)%LEN;
}

void pop_right(){
    right=right-1;
    if (right<0) right=LEN-1;
}

void push_left(int val){
    left=left-1;
    if (left<0) left=LEN-1;
    dequeue[left]=val;
}

void push_right(int val){
    right=(right+1)%LEN;
    dequeue[right]=val;
}


int main()
{
    FILE *fin, *fout;
    fin=fopen("dequue.in", "r");
    fout=fopen("deqeue.out", "w");
    int n, k;
    fscanf(fin, "%d %d", &n, &k);
    int i, s=0;
    for (i=1; i<=n; i++){
        fscanf(fin, "%d", &a[i]);
    }
    for (i=1; i<=n; i++){
        while (right>=left && a[i]<=a[dequeue[right]]){
            pop_right();
        }
        push_right(i);
        if (dequeue[left]==i-k) pop_left();
        if (i>=k) s+=a[dequeue[left]];
    }
    fprintf(fout, "%d", s);
    return 0;
}