Pagini recente » Diferente pentru utilizator/usureluflorian intre reviziile 211 si 157 | Diferente pentru problema/kbetray intre reviziile 4 si 3 | Diferente pentru fmi-no-stress-2012 intre reviziile 17 si 2 | Diferente pentru utilizator/freak93 intre reviziile 42 si 41 | Cod sursa (job #1760172)
#include <iostream>
#include <cstdio>
#include <deque>
using namespace std;
const int NMAX = 5000003;
int n, k;
int A[NMAX];
long long answer;
deque<int> dq;
int main() {
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
scanf ("%d%d", &n, &k);
int i;
for (i = 1; i <= n; ++i) {
scanf ("%d", A + i);
}
for (i = 1; i < k; ++i) {
while (!dq.empty () && A[dq.back()] >= A[i])
dq.pop_back();
dq.push_back(i);
}
for (i = k; i <= n; ++i) {
while (!dq.empty() && A[dq.back()] >= A[i])
dq.pop_back();
dq.push_back(i);
int dq_front = dq.front();
if (i - dq_front >= k) {
dq.pop_front();
dq_front = dq.front();
}
answer += A[dq_front];
}
printf ("%lld", answer);
}