Cod sursa(job #1494432)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 1 octombrie 2015 08:13:40
Problema Deque Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.9 kb
#include <stdio.h>
#define lim 5000000
int v[lim+1],deck[lim+1];
int main(){
    FILE *fin,*fout;
    fin=fopen("deque.in","r");
    fout=fopen("deque.out","w");
    int i,first=0,last=-1,k,n;
    long long s=0;
    fscanf(fin,"%d%d",&n,&k);
    for(i=0;i<k;i++){
        last++;
        fscanf(fin,"%d",&v[i]);
        deck[last]=i;
        while(last>first&&v[deck[last]]<=v[deck[last-1]]){
            deck[last-1]=deck[last];
            last--;
        }
    }
    s=v[deck[first]];
    for(i=k;i<n;i++){
        last++;
        fscanf(fin,"%d",&v[i]);
        deck[last]=i;
        while(deck[last]-deck[first]+1>k)
            first++;
        while(last>first&&v[deck[last]]<=v[deck[last-1]]){
            deck[last-1]=deck[last];
            last--;
        }
        s=s+(long long)v[deck[first]];
    }
    fprintf(fout,"%lld",s);
    fclose(fin);
    fclose(fout);
return 0;
}