Cod sursa(job #345269)
#include<stdio.h>
#define MAX 5000005
FILE *fin=fopen("deque.in","r"),
*fout=fopen("deque.out","w");
int dq[MAX],A[MAX],N,K;
int S,min,li,lf;
int main()
{
fscanf(fin,"%d %d",&N,&K);
for(int i=1;i<=N;i++)
fscanf(fin,"%d",&A[i]);
A[0]=10000100;
li=lf=0;
for(int i=1;i<=K;i++)
{
while(A[dq[lf]]>=A[i] && li<=lf)
--lf;
dq[++lf]=i;
}
li=1;S+=A[dq[li]];
for(int i=K+1;i<=N;i++)
{
if(i-dq[li]>=K)
++li;
while(A[dq[lf]]>=A[i] && li<=lf)
--lf;
dq[++lf]=i;
S+=A[dq[li]];
}
fprintf(fout,"%d\n",S);
return 0;
}