Cod sursa(job #259642)

Utilizator drag0shSandulescu Dragos drag0sh Data 15 februarie 2009 16:39:39
Problema Deque Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.52 kb
#include <stdio.h>

#define maxn 5000010
#define in "deque.in"
#define out "deque.out"

FILE *f=fopen(in,"r"),*g=fopen(out,"w");

int n,k,a[maxn],deque[maxn],front,back;
long long suma;


int main(){
  int i;
  fscanf(f,"%d%d",&n,&k);
  for(i=1;i<=n;i++)fscanf(f,"%d",&a[i]);
  front=1;back=0;
  for(i=1;i<=n;i++){
    while(front<=back&&a[i]<=a[deque[back]])back--;
    deque[++back]=i;
    if(deque[front]==i-k)front++;
    if(i>=k)suma+=a[deque[front]];
  }
  fprintf(g,"%lld\n",suma);

  fclose(f);
  fclose(g);
  return 0;
}