Codeforces Round 172

スポンサーリンク

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 だけ保持しておけば復元できました.

CodeForces
スポンサーリンク
シェアする
maspyをフォローする
maspyのHP
タイトルとURLをコピーしました