A. Rectangle Puzzle
図示されている状況以外に, $90$ 度近い回転をしたときの平行四辺形が残るパターンもあります.
B. Maximum Xor Secondary
ANS の topbit を求めます.これは,その bit が 0, 1 どちらであるような $A[i]$ も存在するような最上位ビットです.最上位ビットを $k$-th bit とすると対象の区間は $k$-th bit が $1$ であるような要素をちょうどひとつ含みます.このことから上位 2 つの組としてありうるもの $O(N)$ 通りがすべて列挙可能です.
C. Game on Tree
「既に削除された頂点も選んでよい,ただしそのとき操作コストは発生しない」というゲームをするとしてもよいです.すると各頂点に対するコスト期待値は depth だけで決まることが分かります.
D. k-Maximum Subsequence Sum
セグメント木で解きます.区間内で選んだ連続部分列の個数および,左右の両端が選ばれているかを状態として持ちます.なお解説ではフローに言い換えてセグメント木でシミュレーションする方法も説明されています.
E. Sequence Transformation
$y_i=y$ までのコストを $dp_i(y)$ とすればこれは凸関数であることが言えます.関数操作として,
- $g(y) := \min_{y-b\leq x\leq y-a}f(x)$
- $g(y) := f(x) + (x-c)^2$
の 2 種が行えればよく,どちらの操作も凸性を保ちます.$dp_i(x)$ が piecewise に 2 次関数であることも分かります.前者の操作は最小値のところを広げる形になります(区分線形な場合の slope trick と同様).
必要な情報を $O(N)$ 個の $2$ 次関数列として持ち,最小値などは $O(N)$ 時間かけて取得しながら処理する形で全体で $O(N^2)$ 時間で解けます.列への挿入ができるデータ構造と二分探索などにより $O(N\log N)$ にもできるはず.
復元があって大変だと思いましたが,各操作時点での argmin だけ保持しておけば復元できました.