Pagini recente » Borderou de evaluare (job #3367872) | Cod sursa (job #3366946) | Cod sursa (job #3367965) | Cod sursa (job #3368016) | Cod sursa (job #3366893)
#include <stdio.h>
#include <stdlib.h>
#define NMAX 5000000
int v[NMAX+1];
int rasp[NMAX+1];
int main()
{
FILE *fin,*fout;
long long sum;
int n,k,i,st,dr;
fin=fopen("deque.in","r");
fout=fopen("deque.out","w");
fscanf(fin,"%d%d",&n,&k);
st=dr=sum=0;
for(i=1;i<=n;i++){
while(st<dr && rasp[st]<=i-k)
st++;
fscanf(fin,"%d",&v[i]);
while(st<dr && v[rasp[dr-1]]>v[i])
dr=(dr-1+NMAX)%NMAX;
rasp[dr]=i;
dr++;
if(i>k-1)
sum+=v[rasp[st]];
}
fclose(fin);
fprintf(fout,"%lld",sum);
fclose(fout);
return 0;
}