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

PartiallyPersistentArray

クラス · 部分永続配列 (PartiallyPersistentArray)

template <class T>
struct PartiallyPersistentArray;

概要

部分永続配列

テンプレートパラメータ

名前 説明
T 要素型

計算量

備考

構築・破棄

名前 説明 計算量
(constructor) (1) 空の配列を構築する
(2) n 個の val を時刻 0 の状態として作る
(3) 列 v を時刻 0 の状態として作る
(1) $O(1)$
(2) $O(n)$
(3) $O(n)$

メンバ関数

名前 説明 計算量
size 要素数を返す $O(1)$
now 現在時刻を返す $O(1)$
at (1) operator[](k) の別名
(2) get(k, t) の別名
$O(\log q)$
get (1) operator[](k) の別名
(2) 時刻 t における k 番目の値を返す。t が現在時刻を超える場合は最新の値を返す
$O(\log q)$
set (1) 時刻を 1 進めて k 番目を val に変更する
(2) 現在時刻以上の時刻 t で k 番目を val に変更し、現在時刻を t にする
償却 $O(1)$
to_vector (1) 現在時刻における配列全体を返す
(2) 時刻 t における配列全体を返す
$O(n\log q)$

演算子

名前 説明 計算量
operator[] 現在時刻における k 番目の値を返す $O(\log q)$

メンバの詳細

(constructor)

// (1)
PartiallyPersistentArray();

// (2)
PartiallyPersistentArray(int n, T val = T());

// (3)
template <class U>
PartiallyPersistentArray(const std::vector<U> &v);

(1) 空の配列を構築する

(2) n 個の val を時刻 0 の状態として作る

(3) 列 v を時刻 0 の状態として作る

at

// (1)
T at(int k) const;

// (2)
T at(int k, int t) const;

(1) operator[](k) の別名

(2) get(k, t) の別名

get

// (1)
T get(int k) const;

// (2)
T get(int k, int t) const;

(1) operator[](k) の別名

(2) 時刻 t における k 番目の値を返す。t が現在時刻を超える場合は最新の値を返す

set

// (1)
int set(int k, T val);

// (2)
void set(int k, T val, int t);

(1) 時刻を 1 進めて k 番目を val に変更する

(2) 現在時刻以上の時刻 t で k 番目を val に変更し、現在時刻を t にする

to_vector

// (1)
std::vector<T> to_vector() const;

// (2)
std::vector<T> to_vector(int t) const;

(1) 現在時刻における配列全体を返す

(2) 時刻 t における配列全体を返す