Pagini recente » Cod sursa (job #373863) | Cod sursa (job #1377048) | Cod sursa (job #614918) | Cod sursa (job #2725879) | Cod sursa (job #3258431)
#include <fstream>
#include <deque>
#include <vector>
using namespace std;
ifstream cin("deque.in");
ofstream cout("deque.out");
deque<int> window;
int n, k, nr;
long long sum = 0;
vector<int> nums, result;
int main() {
cin >> n >> k;
for (int i = 0; i < n; ++i) {
cin >> nr;
nums.push_back(nr);
}
// initial deque - first window
for (int i = 0; i < k; ++i) {
while (!window.empty() && nums[i] < nums[window.back()])
window.pop_back();
window.push_back(i);
}
// the maximum value of the first window
// is the front element of the deque
result.push_back(nums[window.front()]);
if (window.front() == 0) // first element of array
window.pop_front();
for (int i = k; i < nums.size(); ++i) {
while (!window.empty() && nums[i] < nums[window.back()])
window.pop_back();
window.push_back(i);
result.push_back(nums[window.front()]);
if (window.front() == i - k + 1)
window.pop_front();
}
for (auto &num : result)
sum += num;
cout << sum;
cin.close();
cout.close();
return 0;
}