Pagini recente » Cod sursa (job #1082527) | Cod sursa (job #1236785) | Cod sursa (job #113808) | Cod sursa (job #1266037) | Cod sursa (job #2676169)
#include <stdio.h>
#include <stdlib.h>
#define LEN 524287
#define VALMAX 10000000
int left=1, right=0;
int dequeue[LEN], a[LEN];
void pop_left() {
left=(left+1)&LEN;
}
void pop_right(){
right=right-1;
if (right<0) right=LEN-1;
}
void push_left(int val){
left=left-1;
if (left<0) left=LEN-1;
dequeue[left]=val;
}
void push_right(int val){
right=(right+1)&LEN;
dequeue[right]=val;
}
int main()
{
FILE *fin, *fout;
fin=fopen("dequeue.in", "r");
fout=fopen("dequeue.out", "w");
int n, k;
fscanf(fin, "%d %d", &n, &k);
int i, s=0;
for (i=1; i<=n; i++){
fscanf(fin, "%d", &a[i]);
}
for (i=1; i<=n; i++){
while (right>=left && a[i]<=a[dequeue[right]]){
pop_right();
}
push_right(i);
if (dequeue[left]==i-k) pop_left();
if (i>=k) s+=a[dequeue[left]];
}
fprintf(fout, "%d", s);
return 0;
}