Closed kmyk closed 3 years ago
提案ありがとうございます! いろいろ考えてたのと、新年の諸々で返信が遅れました
2. 上に乗せるモノイドについて。
Range Affine Range Sum(か、非可換をテストしたいならRange Composite)でいいと思います Range Add Range Minは有名なのですがテストケースが作りにくいなどがあり
3. 反転を入れるかどうか。
入れていいと考えてます
(insert / erase)だけの方がシンプルでいいというか、reverseが出来ない木が存在するんですが(AA-Treeなど)、k番目が取得できるstd::setの需要の高まりを感じるんで、そっちでうまいことベリファイできるかなと思ってます。
4. クエリはこの形の insert/erase でいいか。
素直に考えるとinsert / eraseは1個ずつの方が自然なはずで、任意個数にしたい理由を確認しておきたいです(iteratorかな?と考えてます)?
5. 永続化について。
range copyか操作ごとに操作後の木にID降るかかなぁと考えてます
- 問題IDについて。
順番が入れ替わりましたが最後に
マイナーチェンジ版を作らないならDynamic Sequenceでいいかなと思ってます 今のところ反転なしはstd::setの拡張の方でやるつもりなので(ただ平衡二分木が深淵ということはわかってきたので、後で破綻する確率も高く
これ仕様固まってたらやりたいんですが、うさぎさんからの返信がなくてどうも固まってなさそうに見えます
ID: Dynamic Sequence Range Affine Range Sum 反転: あり Insert / Erase : 1個ずつ
という気分です
やります
やります !
了解です
(任意) 問題ID: {ID} 問題名: {名前}
問題概要
配列上の完全二分木の上でなく赤黒木とかの上で遅延伝播セグ木をやるやつです
長さNの整数列a_0, a1, ..., a{N - 1}が与えられる。Q個のクエリを処理
0 l r c d
: a_l, ..., a_r-1それぞれについて、a_i = c * a_i + bをする1 l, r
: a_l ~ a_r-1の総和を出力2 i, k, b_0, ..., b_{k-1}
: 位置 i に整数 b0, ..., b{k-1} を挿入 (新しい列は a0, ..., a{i - 1}, b0, ..., b{k-1}, ai, ..., a{N-1} になる)3 l, r
: a_l ~ a_r-1 を削除 (新しい列は a0, ..., a{l - 1}, ar, ..., a{N-1} になる)4 l, r
: a_l ~ a_r-1 を反転 (新しい列は a0, ..., a{l - 1}, a_{r-1,}, ..., a_l, ar, ..., a{N-1} になる)全てmod 998244353
入力
出力
制約
検討事項