Pagini recente » Cod sursa (job #2914840) | Cod sursa (job #823573) | Cod sursa (job #2095141) | Cod sursa (job #19518) | Cod sursa (job #3172495)
#include <bits/stdc++.h>
using namespace std;
#ifndef LOCAL
ifstream in("deque.in");
ofstream out("deque.out");
#define cin in
#define cout out
#endif
const int nmax = 5e6 + 7;
int v[nmax];
struct MinDeque {
deque<int> indexes;
void add_element(int index) {
while(!indexes.empty() && v[indexes.back()] >= v[index]) {
indexes.pop_back();
}
indexes.push_back(index);
}
void remove_element(int index) {
if(!indexes.empty() && indexes.front() == index) {
indexes.pop_front();
}
}
int get_min() {
return v[indexes.front()];
}
};
int main() {
int n, k; cin >> n >> k;
for(int i = 1; i <= n; i++) cin >> v[i];
// initialize the window from [1 ... k]
MinDeque md;
for(int i = 1; i <= k; i++) {
md.add_element(i);
}
long long ans = md.get_min();
for(int i = k + 1; i <= n; i++) {
md.add_element(i);
md.remove_element(i - k);
ans += md.get_min();
}
cout << ans << endl;
}