Pagini recente » Cod sursa (job #1562390) | ONIS 2014, Runda 1 | Cod sursa (job #603755) | Cod sursa (job #322514) | Cod sursa (job #2057198)
#include <stdio.h>
#define MAX_K 5000000
struct elem
{
int pos, val;
elem() {}
elem(int _pos, int _val): pos(_pos), val(_val) {}
};
elem deque[MAX_K + 1];
int left_head, right_head;
int main()
{
FILE *fin = fopen("deque.in", "r"),
*fout = fopen("deque.out", "w");
int n, k;
int sum = 0;
fscanf(fin, "%d %d", &n, &k);
sum = 0;
left_head = 0;
right_head = -1;
for(int i = 0; i < n; i++)
{
int x;
fscanf(fin, "%d ", &x);
if(left_head <= right_head && deque[left_head].pos == i - k)
left_head ++;
while(left_head <= right_head && x <= deque[right_head].val)
right_head --;
deque[++ right_head] = elem(i, x);
if(i >= k - 1) sum += deque[left_head].val;
}
fprintf(fout, "%d", sum);
return 0;
}