Pagini recente » Cod sursa (job #692210) | Cod sursa (job #3262416) | Cod sursa (job #3032416) | Cod sursa (job #1089452) | Cod sursa (job #819016)
Cod sursa(job #819016)
#include <cstdio>
using namespace std;
int main()
{
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
int N, K, start_deq, end_deq;
int* Array;
int* Deque;
long long sum = 0;
scanf("%d %d", &N, &K);
Array = new int[N];
Deque = new int[N];
start_deq = 0, end_deq = -1;
for (int i = 0; i < N; i++)
scanf("%d ", &Array[i]);
for (int i = 0; i < N; i++) {
/* verify if top of deque is outside the range */
if (start_deq <= end_deq && Deque[start_deq] <= i - K)
start_deq++;
/* insert current element into deque */
while (end_deq >= start_deq && Array[Deque[end_deq]] > Array[i])
end_deq--;
Deque[++end_deq] = i;
if (i + 1 >= K)
sum += Array[Deque[start_deq]];
}
printf("%lld\n", sum);
return 0;
}