4#error "pixie/rmq/sdsl_sct.h requires SDSL_SUPPORT"
12#include <sdsl/rmq_succinct_sct.hpp>
48template <
class T,
class Compare = std::less<T>,
class Index = std::
size_t>
51 static_assert(std::is_same_v<Compare, std::less<T>>,
52 "SDSL SCT RMQ wrapper supports only std::less");
54 static constexpr std::size_t npos =
71 explicit SdslSct(std::span<const T> values, Compare compare = Compare())
72 : values_(values), rmq_(&values_) {
79 std::size_t
size_impl()
const {
return values_.size(); }
84 T
value_at_impl(std::size_t position)
const {
return values_[position]; }
92 std::size_t
arg_min_impl(std::size_t left, std::size_t right)
const {
93 if (left >= right || right > values_.size()) {
96 return static_cast<std::size_t
>(rmq_(left, right - 1));
106 sdsl::nullstream out;
107 return sizeof(*this) +
static_cast<std::size_t
>(rmq_.serialize(out));
111 std::span<const T> values_;
112 sdsl::rmq_succinct_sct<true> rmq_;
CRTP facade for static range-minimum-query indexes.
Definition rmq.h:28
SdslSct(std::span< const T > values, Compare compare=Compare())
Build the SDSL SCT index over values.
Definition sdsl_sct.h:71
std::size_t arg_min_impl(std::size_t left, std::size_t right) const
Return the first minimum position in [left, right).
Definition sdsl_sct.h:92
T value_at_impl(std::size_t position) const
Return the value at an indexed position.
Definition sdsl_sct.h:84
std::size_t size_impl() const
Return the number of indexed values.
Definition sdsl_sct.h:79
SdslSct()=default
Construct an empty SDSL SCT RMQ adapter.
std::size_t memory_usage_bytes_impl() const
Return owned auxiliary memory usage in bytes.
Definition sdsl_sct.h:105
Common interface for static range-minimum-query indexes.