Cod sursa(job #3323893)

Utilizator horatiu.avramAvram Popa Cristian Horatiu horatiu.avram Data 20 noiembrie 2025 11:35:48
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <stdio.h>
#include <stdlib.h>

#define MAXN (int)5e6

int dq[MAXN+1],v[MAXN+1];

int pop_front(int f) {
    f=f+1;
    return f%MAXN;
}

int pop_back(int l) {
    l=(l-1+MAXN);
    return l%MAXN;
}

int push_back(int l,int h) {
    dq[l]=h;
    l=l+1;
    return l%MAXN;
}

int main() {
    FILE *fin,*fout;
    int l,r,n,k;
    long long sum=0;

    fin=fopen("deque.in","r");
    fout=fopen("deque.out","w");
    fscanf(fin,"%d%d",&n,&k);
    for(int i=1; i<=n; i++) {
        fscanf(fin,"%d",&v[i]);
    }

    l=0;
    r=0;
    r=push_back(r,1);
    for(int i=2; i<=n; i++) {
        if(l!=r&&dq[l]<i-k+1) {
            l=pop_front(l);
        }
        while(l!=r&&v[i]<v[dq[(r-1+MAXN)%MAXN]]) {
            r=pop_back(r);
        }
        r=push_back(r,i);
        if(i>=k) {
            sum+=v[dq[l]];
        }
    }

    fprintf(fout,"%lld\n",sum);

    fclose(fin);
    fclose(fout);

    return 0;
}