Pagini recente » Cod sursa (job #1835790) | Cod sursa (job #2643757) | Cod sursa (job #496553) | Cod sursa (job #1465770) | Cod sursa (job #2180867)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define SIZE 5000000
#define CHUNK (1 << 25)
struct dqe {
int x;
int i;
};
static struct dqe dq[SIZE];
static char buf[CHUNK];
static ssize_t blen, bpos = CHUNK;
static inline int read_int(int end)
{
int x = 0, sgn = 1;
while (1) {
if (bpos == CHUNK) {
blen = read(0, buf, CHUNK);
bpos = 0;
}
if (buf[bpos] == '-') {
sgn = -1;
} else if ('0' <= buf[bpos] && buf[bpos] <= '9') {
x = x * 10 + (buf[bpos] - '0');
} else if (buf[bpos] == end) {
bpos++;
return sgn * x;
}
bpos++;
}
}
int main(void)
{
int n, k, x, i, t, h;
long long r;
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
n = read_int(' ');
k = read_int('\n');
t = h = 0;
r = 0;
for (i = 0; i < n; i++) {
x = read_int('\n');
while (t - 1 >= h && dq[t-1].x >= x) {
t--;
}
dq[t].x = x;
dq[t].i = i;
t++;
if (i - k >= dq[h].i) {
h++;
}
if (i >= k - 1) {
r += dq[h].x;
}
}
printf("%lld\n", r);
return 0;
}