sotanishy's competitive programming library

sotanishy's code snippets for competitive programming

View the Project on GitHub sotanishy/cp-library-cpp

:heavy_check_mark: Sliding Window Minimum
(data-structure/slide_min.hpp)

Description

スライド最小値は,全順序集合 $T$ を扱い,要素の最小値を求めることができるキューである.

Operations

Verified with

Code

#pragma once
#include <deque>
#include <functional>
#include <utility>

template <typename T, typename Compare = std::less<>>
class SlideMin {
   public:
    void push(T x) {
        while (!dq.empty() && !cmp(dq.back().first, x)) dq.pop_back();
        dq.emplace_back(x, r++);
    }

    void pop() {
        if (dq.front().second == l) dq.pop_front();
        ++l;
    }

    T get() const { return dq.front().first; }

   private:
    int l = 0, r = 0;
    std::deque<std::pair<T, int>> dq;
    Compare cmp;
};
#line 2 "data-structure/slide_min.hpp"
#include <deque>
#include <functional>
#include <utility>

template <typename T, typename Compare = std::less<>>
class SlideMin {
   public:
    void push(T x) {
        while (!dq.empty() && !cmp(dq.back().first, x)) dq.pop_back();
        dq.emplace_back(x, r++);
    }

    void pop() {
        if (dq.front().second == l) dq.pop_front();
        ++l;
    }

    T get() const { return dq.front().first; }

   private:
    int l = 0, r = 0;
    std::deque<std::pair<T, int>> dq;
    Compare cmp;
};
Back to top page