range_set
クラス · 区間をsetで管理するテク
template <class T>
struct range_set;
概要
区間をsetで管理するテク
構築・破棄
| 名前 | 説明 | 計算量 |
|---|---|---|
(constructor) |
空の区間集合を構築する | $O(1)$ |
メンバ関数
| 名前 | 説明 | 計算量 |
|---|---|---|
begin |
区間集合の先頭イテレータを返す | $O(1)$ |
end |
区間集合の終端イテレータを返す | $O(1)$ |
size |
互いに素な区間の個数を返す | $O(1)$ |
length |
区間集合が覆う長さの総和を返す | $O(1)$ |
get |
xを含む半開区間を返す | 区間数を $q$ として $O(\log q)$ |
contains |
xが区間集合に含まれるか返す | $O(\log q)$ |
same |
xとyが同じ管理区間に含まれるか返す | $O(\log q)$ |
insert |
(1) 半開区間を追加して連結する区間を併合する (2) 1点に対応する単位区間を追加する |
(1) 併合する区間数を $k$ として $O((k+1)\log q)$ (2) $O(\log q)$ |
erase |
(1) 半開区間を削除する (2) 1点に対応する単位区間を削除する |
(1) 削除する区間数を $k$ として $O((k+1)\log q)$ (2) $O(\log q)$ |
メンバの詳細
insert
// (1)
std::pair<T, T> insert(T x, T y);
// (2)
std::pair<T, T> insert(T x);
(1) 半開区間を追加して連結する区間を併合する
- 計算量: 併合する区間数を $k$ として $O((k+1)\log q)$
(2) 1点に対応する単位区間を追加する
- 計算量: $O(\log q)$
erase
// (1)
void erase(T x, T y);
// (2)
void erase(T x);
(1) 半開区間を削除する
- 計算量: 削除する区間数を $k$ として $O((k+1)\log q)$
(2) 1点に対応する単位区間を削除する
- 計算量: $O(\log q)$