Pagini recente » Cod sursa (job #1476414) | Cod sursa (job #3320722) | Cod sursa (job #1472382) | Atasamentele paginii Profil vladz071 | Cod sursa (job #3323893)
#include <stdio.h>
#include <stdlib.h>
#define MAXN (int)5e6
int dq[MAXN+1],v[MAXN+1];
int pop_front(int f) {
f=f+1;
return f%MAXN;
}
int pop_back(int l) {
l=(l-1+MAXN);
return l%MAXN;
}
int push_back(int l,int h) {
dq[l]=h;
l=l+1;
return l%MAXN;
}
int main() {
FILE *fin,*fout;
int l,r,n,k;
long long sum=0;
fin=fopen("deque.in","r");
fout=fopen("deque.out","w");
fscanf(fin,"%d%d",&n,&k);
for(int i=1; i<=n; i++) {
fscanf(fin,"%d",&v[i]);
}
l=0;
r=0;
r=push_back(r,1);
for(int i=2; i<=n; i++) {
if(l!=r&&dq[l]<i-k+1) {
l=pop_front(l);
}
while(l!=r&&v[i]<v[dq[(r-1+MAXN)%MAXN]]) {
r=pop_back(r);
}
r=push_back(r,i);
if(i>=k) {
sum+=v[dq[l]];
}
}
fprintf(fout,"%lld\n",sum);
fclose(fin);
fclose(fout);
return 0;
}