A. Iskander and Drawings
読解が面倒ですが,連長圧縮するだけでした.
B. Nikita and Books
もし解があるなら,$a_1=1$ であるような解もあります.
そうでなければ左端から右端に移動できるからです.
さらに $a_2=2$ も仮定できます.という要領で,目標数列は末尾以外 $a_i=i$ であるとしてよいです.
C. Stepan and Permutation
連結成分内で好きに並べられます.
D. Yaroslav and Productivity
左端にも区切りがあるとして,すべての区切りと区切りの間の符号を好きにできます.
正負どちらか都合の良い方を選ぶ貪欲でよいです.
E. Masha and the Garland
$S_i\neq S_{i+1}$ となる $i$ の個数だけです.このような $i$ の個数を区間取得するための累積和を構築しておけばよいです.
F. Anya Loves Trees!
各頂点から見た子方向について,集合 $S_1,S_2,\ldots,$ を適切に rotate することで,
$$\max S_i < \min S_{i+1}$$
となるようにできればよいです.集合自身を保持するのではなく min, max のみを保持する形で bottom up に計算できます.
G. Yura and Deadlines
まず部分集合が与えられたときの判定について考えます.
$\ldots, i, \ldots, j, \ldots, k, \ldots$ というインデックスを選んだときに,
- $(i,j)$ が good
- $(j,k)$ が good
ならば,自動的に $(i,k)$ も good になることが簡単に分かります.
したがって,「部分集合が good ですか」というのは単に「隣接インデックスがすべて good ですか」という形になります.
ここまでの考察から即座に $O(N^2)$ の dp が得られます.さらに遷移式を見ると,矩形 max クエリという形で処理できます.
私はコンテスト中はスルーしましたが,「計算された値の追加」と「矩形クエリ呼び出しのタイミング」を適切に調整することで, $1$ 次元のデータ構造だけで解くこともできますね.
