m1une's library

This documentation is automatically generated by online-judge-tools/verification-helper

View on GitHub

:heavy_check_mark: Min Monoid
(monoid/min.hpp)

Overview

A monoid representing the Minimum operation. It is an idempotent monoid, meaning it is compatible with Sparse Tables for $O(1)$ Range Minimum Queries (RMQ).

Template Parameters

Properties

Interface and Complexity

This is a stateless algebra tag. Generic data structures use its public value_type, id(), and op(a, b) members. If the type also provides helpers such as make(...) or inv(x), they are described above or in the documented properties.

Each static operation runs in the cost of the underlying operation shown in the properties. Scalar monoids are $O(1)$; monoids whose value_type stores several items, permutations, or matrices scale with that stored size.

Verified with

Code

#ifndef M1UNE_MONOID_MIN_HPP
#define M1UNE_MONOID_MIN_HPP 1

#include <algorithm>
#include <limits>

namespace m1une {
namespace monoid {

// Monoid for minimum (Range Minimum).
// The identity element defaults to the maximum possible value of type T, but can be overridden.
template <typename T, T Id = std::numeric_limits<T>::max()>
struct Min {
    using value_type = T;
    static constexpr bool commutative = true;

    // Returns the identity element for minimum.
    static constexpr T id() {
        return Id;
    }

    // Returns the minimum of a and b.
    static constexpr T op(const T& a, const T& b) {
        return std::min(a, b);
    }
};

}  // namespace monoid
}  // namespace m1une

#endif  // M1UNE_MONOID_MIN_HPP
#line 1 "monoid/min.hpp"



#include <algorithm>
#include <limits>

namespace m1une {
namespace monoid {

// Monoid for minimum (Range Minimum).
// The identity element defaults to the maximum possible value of type T, but can be overridden.
template <typename T, T Id = std::numeric_limits<T>::max()>
struct Min {
    using value_type = T;
    static constexpr bool commutative = true;

    // Returns the identity element for minimum.
    static constexpr T id() {
        return Id;
    }

    // Returns the minimum of a and b.
    static constexpr T op(const T& a, const T& b) {
        return std::min(a, b);
    }
};

}  // namespace monoid
}  // namespace m1une
Back to top page