37# include <gtest/gtest.h>
48using namespace testing;
54 int operator()(
const int a,
const int b)
const noexcept
56 return std::gcd(a, b);
60 template <
typename T,
class Op>
62 const size_t l,
const size_t r, Op op)
65 for (
size_t i =
l + 1; i <=
r; ++i)
74 Bits
operator+(
const Bits &
o)
const noexcept {
return {mask |
o.mask}; }
80 int operator()(
const int a,
const int b)
const noexcept {
return a + b; }
83 template <
class T,
class Op>
103constexpr auto min_lambda = [](
const int a,
const int b) {
return std::min(a, b); };
104static_assert(IdempotentOp<
decltype(
min_lambda),
int>);
127 for (
size_t i = 0; i < st.
size(); ++i)
133 const std::vector<int> values = {9, 4, 7, 1, 8, 2, 6, 3, 5, 0};
137 for (
size_t l = 0;
l < values.
size(); ++
l)
138 for (
size_t r =
l;
r < values.
size(); ++
r)
140 const int expected_min = *std::min_element(values.begin() +
l,
142 const int expected_max = *std::max_element(values.begin() +
l,
151 const std::vector<int> values = {5, 3, 7, 1, 9, 2, 8, 4, 6};
155 for (
const int x : values)
160 for (
const int x : values)
166 for (
size_t l = 0;
l < values.
size(); ++
l)
167 for (
size_t r =
l;
r < values.
size(); ++
r)
169 const int expected = *std::min_element(values.begin() +
l,
180 const std::vector<int> values = {12, 18, 24, 36, 60, 48, 30, 90, 15, 45};
183 for (
size_t l = 0;
l < values.
size(); ++
l)
184 for (
size_t r =
l;
r < values.
size(); ++
r)
190 const std::vector<Bits> values = {{1}, {2}, {4}, {8}, {16}};
193 for (
size_t l = 0;
l < values.
size(); ++
l)
194 for (
size_t r =
l;
r < values.
size(); ++
r)
200 const std::vector<int> base = {8, 6, 7, 5, 3, 0, 9};
205 for (
size_t i = 0; i < base.size(); ++i)
Simple dynamic array with automatic resizing and functional operations.
T & append(const T &data)
Append a copy of data
Doubly-linked list (defined in tpl_dynList.H).
T & append(const T &item)
Sparse Table over an arbitrary associative and idempotent binary operation.
T get(const size_t i) const
Retrieve the value a[i] in O(1).
Array< T > values() const
Reconstruct all original values into an Array.
constexpr size_t size() const noexcept
Number of logical elements.
constexpr bool is_empty() const noexcept
True if the table contains no elements.
T query(const size_t l, const size_t r) const
Range query over [l, r] in O(1).
void swap(Gen_Sparse_Table &other) noexcept
Swap this table with other in O(1).
size_t size() const noexcept
Count the number of elements of the list.
Minimal std::expected-style result type for C++20.
iterator begin() noexcept
Return an STL-compatible iterator to the first element.
size_t blossom_maximum_cardinality_matching(const GT &g, DynDlist< typename GT::Arc * > &matching, SA sa=SA())
Alias of compute_maximum_cardinality_general_matching().
Main namespace for Aleph-w library functions.
Gen_MultiPolynomial< C, M > operator+(const C &s, const Gen_MultiPolynomial< C, M > &p)
Scalar + polynomial (commutative).
bool operator==(const DynList< T > &l1, const DynList< T > &l2)
Equality operator for DynList.
Itor2 copy(Itor1 sourceBeg, const Itor1 &sourceEnd, Itor2 destBeg)
Copy elements from one range to another.
and
Check uniqueness with explicit hash + equality functors.
std::decay_t< typename HeadC::Item_Type > T
Sparse Table for range maximum queries.
Sparse Table for range minimum queries.
int operator()(const int &a, const int &b) const noexcept
Sparse Table for static range queries in O(1).
constexpr auto min_lambda