algo — C++23 日本語リファレンス GitHub

FilteredSegmentTree

クラス · 要素を特定のキー(条件)でフィルタリングして区間取得を行えるセグメント木

template <class K, monoid M>
struct FilteredSegmentTree;

概要

要素を特定のキー(条件)でフィルタリングして区間取得を行えるセグメント木

テンプレートパラメータ

名前 説明
K フィルタリングに用いるキーの型

計算量

構築・破棄

名前 説明 計算量
(constructor) 構築 $O(N \log N)$ $O(N \log N)$

メンバ関数

名前 説明 計算量
set k 番目の要素を val に更新する $O(\log N)$
prod 区間 $[a, b)$ のうち、キーが key である要素の総積を取得する $O(\log N)$
prod_or_default 区間 $[a, b)$ のうち、キーが key である要素の総積を取得する。ただし単位元の場合は default_value $O(\log N)$

メンバの詳細

(constructor)

FilteredSegmentTree(const std::vector<K> &keys, const std::vector<T> &_values);

構築 $O(N \log N)$

set

void set(int k, T val);

k 番目の要素を val に更新する

prod

T prod(int a, int b, K key) const;

区間 $[a, b)$ のうち、キーが key である要素の総積を取得する

prod_or_default

T prod_or_default(int a, int b, K key, T default_value) const;

区間 $[a, b)$ のうち、キーが key である要素の総積を取得する。ただし単位元の場合は default_value

を返す