Cod sursa(job #2462750)

Utilizator preda.andreiPreda Andrei preda.andrei Data 27 septembrie 2019 19:46:32
Problema Deque Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <cstdint>
#include <deque>
#include <fstream>

using namespace std;

class Window
{
public:
    Window(int size) : size_(size) {}

    void Add(int value, int time);

    int Min() const { return deq_.front().first; }

private:
    deque<pair<int, int>> deq_;
    int size_;
};

void Window::Add(int value, int time)
{
    while (!deq_.empty() && deq_.back().first >= value) {
        deq_.pop_back();
    }
    deq_.push_back({value, time});

    while (time - deq_.front().second >= size_) {
        deq_.pop_front();
    }
}

int main()
{
    ifstream fin("deque.in");
    ofstream fout("deque.out");

    int n, size;
    fin >> n >> size;

    Window window(size);
    int64_t sum = 0;

    for (int i = 0; i < n; i += 1) {
        int num;
        fin >> num;

        window.Add(num, i);
        if (i + 1 >= size) {
            sum += window.Min();
        }
    }

    fout << sum << "\n";
    return 0;
}