Cod sursa(job #3258431)

Utilizator md_kosminGlod Cosmin Stefan md_kosmin Data 22 noiembrie 2024 13:39:52
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#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;
}