proconlib

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

View the Project on GitHub KodamaD/proconlib

:warning: traits/min_monoid.cpp

Depends on

Required by

Code

#pragma once
#include <algorithm>
#include "optional_monoid.cpp"

template <class T> struct MinSemiGroup {
    using Type = T;
    static constexpr T operation(const T& l, const T& r) { return std::min(l, r); }
};

template <class T> using MinMonoid = OptionalMonoid<MinSemiGroup<T>>;
#line 2 "traits/min_monoid.cpp"
#include <algorithm>
#line 2 "traits/optional_monoid.cpp"
#include <optional>
#include <utility>

template <class S> struct OptionalMonoid {
    using Type = std::optional<typename S::Type>;
    static constexpr Type identity() { return std::nullopt; }
    static constexpr Type operation(const Type& l, const Type& r) {
        if (!l) return r;
        if (!r) return l;
        return Type(std::in_place, S::operation(*l, *r));
    }
};
#line 4 "traits/min_monoid.cpp"

template <class T> struct MinSemiGroup {
    using Type = T;
    static constexpr T operation(const T& l, const T& r) { return std::min(l, r); }
};

template <class T> using MinMonoid = OptionalMonoid<MinSemiGroup<T>>;
Back to top page