Codeforces Round 1109

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$ 次元のデータ構造だけで解くこともできますね.

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