Pagini recente » Cod sursa (job #2462888) | Cod sursa (job #414452) | Cod sursa (job #2553811) | Cod sursa (job #3038773) | Cod sursa (job #2742119)
#include <bits/stdc++.h>
using namespace std;
int main() {
// freopen("stdin", "r", stdin);
freopen("deque.in", "r", stdin);
freopen("deque.out", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, k;
cin >> n >> k;
vector< int > v(n + 1);
for(int i = 1; i <= n; ++i) {
cin >> v[i];
}
deque< pair< int, int > > dq; // valoarea, timpul la care il scot
for (int i = 1; i < k; ++i) {
while(dq.size() > 0 && dq.back().first > v[i]) {
dq.pop_back();
}
dq.push_back({v[i], i});
}
long long ans = 0;
for(int i = k; i <= n; ++i) {
while(dq.size() > 0 && dq.back().first > v[i]) {
dq.pop_back();
}
dq.push_back({v[i], i});
// daca secventa mea se termina cu indicele i
// cel mai din stanga element continut in secventa este i - k + 1
if(dq.front().second < i - k + 1) dq.pop_front();
ans += dq.front().first;
}
cout << ans << '\n';
return 0;
}