NgLib::SuccinctBitVector
Inherits Reference < Object
SuccinctBitVector は簡易ビットベクトル(簡易辞書、Succinct Indexable Dictionary)を提供するクラスです。
前計算 $O(n / 32)$ で次の操作が $O(1)$ くらいでできます。
.[i]# => $i$ 番目のビットにアクセスする ($O(1)$).sum(r)# => $[0, r)$ にある $1$ の個数を求める ($O(1)$).kth_bit_index(k)# => $k$ 番目に現れる $1$ の位置を求める ($O(\log{n})$)
例えばこの問題が解けます → D - Sleep Log
Constructors
Instance methods
count_ones
Sourcecount_zeros
Sourcekth_bit_index(k) : UInt32
$k$ 番目に出現する $1$ の位置を求めます。
言い換えると、$sum(i) = k$ となるような最小の $i$ を返します。
存在しない場合は nil を返します。
本当は $O(1)$ にできるらしいですが、面倒なので $O(\log{n})$ です。
size
Source