From 6cea1311a7250b012cac0c22cc235b29102152f8 Mon Sep 17 00:00:00 2001 From: hitonanode <32937551+hitonanode@users.noreply.github.com> Date: Tue, 6 May 2025 21:03:53 +0900 Subject: [PATCH] improve/fix numbers --- number/dual_number.hpp | 1 + number/min_max_semiring.hpp | 7 ++++++- number/modint_mersenne61.hpp | 4 +++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/number/dual_number.hpp b/number/dual_number.hpp index 05645238..db497dd4 100644 --- a/number/dual_number.hpp +++ b/number/dual_number.hpp @@ -1,3 +1,4 @@ +#pragma once #include namespace dual_number_ { diff --git a/number/min_max_semiring.hpp b/number/min_max_semiring.hpp index 5996498b..3171cb5c 100644 --- a/number/min_max_semiring.hpp +++ b/number/min_max_semiring.hpp @@ -1,7 +1,8 @@ +#pragma once #include // min-max 半環(加法が min, 乗法が max, 零元が INF, 単位元が -INF) -// Verified: abc236g +// Verified: abc236g, abc388f template struct min_max_semiring { T val; min_max_semiring() : val(std::numeric_limits::max()) { @@ -21,6 +22,10 @@ template struct min_max_semiring { min_max_semiring &operator*=(const min_max_semiring &r) { return *this = *this * r; } bool operator==(const min_max_semiring &r) const { return this->val == r.val; } bool operator!=(const min_max_semiring &r) const { return !(*this == r); } + bool operator<(const min_max_semiring &r) const { return this->val < r.val; } + bool operator>(const min_max_semiring &r) const { return this->val > r.val; } + bool operator<=(const min_max_semiring &r) const { return this->val <= r.val; } + bool operator>=(const min_max_semiring &r) const { return this->val >= r.val; } template friend OStream &operator<<(OStream &os, const min_max_semiring &x) { return os << x.val; } diff --git a/number/modint_mersenne61.hpp b/number/modint_mersenne61.hpp index 0694f7cc..9fd347e4 100644 --- a/number/modint_mersenne61.hpp +++ b/number/modint_mersenne61.hpp @@ -17,7 +17,9 @@ class ModIntMersenne61 { ModIntMersenne61() : _v(0) {} // 0 <= x < md * 2 - explicit ModIntMersenne61(long long x) : _v(x >= md ? x - md : x) {} + explicit ModIntMersenne61(long long x) : _v(x >= md ? x - md : x) { + assert(0 <= x and x < md * 2); + } long long val() const noexcept { return _v; }