Pagini recente » Cod sursa (job #2343474) | Cod sursa (job #1984808) | Cod sursa (job #2252975) | Cod sursa (job #3222163) | Cod sursa (job #2532187)
#include <stdio.h>
#include <stdlib.h>
#define NMAX 5000000
int v[NMAX+1], deque[NMAX+1];
int inceput,sfarsit;
void pop_front(){
inceput++;
}
void push_back(int x){
deque[sfarsit]=x;
sfarsit++;
}
void pop_back(){
sfarsit--;
}
char empty(){
return(inceput>=sfarsit);
}
int main()
{
FILE *fin,*fout;
fin=fopen("deque.in","r");
fout=fopen("deque.out","w");
long long n,k,i,S=0;
fscanf(fin,"%lld%lld",&n,&k);
for(i=1;i<=n;i++){
fscanf(fin,"%d",&v[i]);
}
for(i=1;i<=n;i++){
if(i>k)
S+=v[deque[inceput]];
if(deque[inceput]<=i-k){
pop_front();
}
while(!empty()&&v[i]<v[deque[sfarsit-1]]&&i!=1){
pop_back();
}
push_back(i);
}
S+=v[deque[inceput]];
fprintf(fout,"%lld",S);
fclose(fin);
fclose(fout);
return 0;
}