Pagini recente » Cod sursa (job #2697695) | Cod sursa (job #1331526) | Cod sursa (job #126607) | Cod sursa (job #713539) | Cod sursa (job #1095519)
#include <cstdio>
#include <deque>
#include <utility>
#include <vector>
using namespace std;
void deque_add(deque<pair<int, int>>& d, int i, int x) {
while(d.back().second >= x) d.pop_back();
d.push_back(make_pair(i, x));
}
void deque_del(deque<pair<int, int>>& d, int i, int K) {
while(i - d.front().first >= K) d.pop_front();
}
int main(int argc, char *argv[]) {
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
int N, K;
scanf("%d%d", &N, &K);
vector<int> v;
for(int i = 0; i < N; ++i) {
int x;
scanf("%d", &x);
v.push_back(x);
}
long long s = 0;
deque<pair<int, int>> d;
d.push_back(make_pair(0, v[0]));
for(int i = 1; i < K; ++i) {
deque_add(d, i, v[i]);
}
s += d.front().second;
for(int i = K; i < N; ++i) {
deque_add(d, i, v[i]);
deque_del(d, i, K);
s += d.front().second;
}
printf("%lld\n", s);
return 0;
}