Pagini recente » Cod sursa (job #2716667) | Cod sursa (job #1079267) | Cod sursa (job #1031360) | Cod sursa (job #2880682) | Cod sursa (job #362551)
Cod sursa(job #362551)
#include <stdio.h>
#define Nmax 5000100
int A[Nmax], deque[Nmax];
int p, u, i, n, k;
long long sol;
int main() {
FILE *f = fopen("deque.in", "r");
FILE *g = fopen("deque.out", "w");
fscanf(f, "%d %d", &n, &k);
for (i = 1; i <= n; i++)
fscanf(f, "%d", &A[i]);
p = 1, u = 0;
for (i = 1; i <= n; i++) {
//elimin elementele mai mari din deque
while (p <= u && A[i] <= A[ deque[u] ]) u--;
//adaug elementul curent
deque[++u] = i;
//avansez cu o pozitie in fata
if (deque[p] == i-k) p++;
//adun minimul la solutie
if (i >= k) sol += A[ deque[p] ];
}
fprintf(g, "%lld", sol);
fclose(f);
fclose(g);
return 0;
}