Cod sursa(job #3211174)

Utilizator susanEmily Susan susan Data 8 martie 2024 17:50:17
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#pragma GCC optimize("O3,unroll-loops")

#include <iostream>
#include <deque>
#include <vector>

using namespace std;
using ll = long long;

void add(deque<int> &Q, const vector<int> &v, const int &i) {
    while (!Q.empty() && v[i] < v[Q.back()])
        Q.pop_back();

    Q.push_back(i);
}

void rm(deque<int> &Q, const int &i) {
    while (!Q.empty() && Q.front() <= i)
        Q.pop_front();
}

int main() {
    freopen("deque.in", "r", stdin);
    freopen("deque.out", "w", stdout);
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, k;
    cin >> n >> k;
    vector<int> v(n);

    for (auto &it: v)
        cin >> it;

    deque<int> Q;
    for (int i = 0; i < k; ++i)
        add(Q, v, i);

    ll sum = v[Q.front()];

    for (int i = k; i < n; ++i) {
        rm(Q, i - k);
        add(Q, v, i);
        sum += v[Q.front()];
    }

    cout << sum << '\n';
}