div2 only は省略.
A. Book
topological 順に,何週目で達成できるかを計算できます.
B. Xor of 3
総 xor は不変量なのでこれが $0$ であることが必要です.
$n$ が奇数ならば必要条件のもと達成可能です.まず $2i, 2i+1, 2i+2$ 番目に $i=0,1,2,\ldots$ と操作することで $2$ 個ずつ等しい状態にしていきます:$a, a, b, b, c, c, d, d, e, e, e$.総 xor が $0$ のとき末尾 $3$ つは $0$ です.このあと後ろから順に $x,x,0 \to 0,0,0$ をやっていけばよいです.
$N$ が偶数とします.操作の累積 xor への影響を考えると $\ldots,a,b,c,d,\ldots\to \ldots,a,d,a,d,\ldots$ の形です.特に奇数個 xor 全体の集合や偶数個 xor 全体の集合は単調減少です. 特に奇数個 xor であって $0$ であるものの存在が必要です($n$ が奇数の場合にはこれが全体 xor の条件でした).
必要条件のもと左 $a$ 個,右 $b$ 個の xor が $0$($a,b$ は奇数)であるとして,$n$ が奇数のときの手法をそれぞれの部分にやればよいです.
C. Paint
run length encoding しておきます.すると $N-1$ 箇所の要素境界があって,現在そこが異色になっています.
ある境界 2 つが,はじめて操作されるときに同時に連結されるとうれしそうです.このようなことが起こる場所を結んでいくと,「交わらない」または「包含」であるような区間たちになります(左側を開きカッコ,右側を閉じカッコとしてカッコ列).
逆にこのような区間 $k$ 個を選んだときに,操作回数 $(N-1)-k$ で単色にすることができます.木構造の葉側から順に操作するということをやればよいです.
あとは基本的な区間 DP です.
D. Bridge Club
大きさ $k$ の最大重み二部マッチングを求める問題です.各頂点次数は $n$ です.
グラフの大きさが非常に大きいためこれを減らします.
$k-1$ 個のマッチングを固定したときに残りの選び方を考えると,価値の高い方から見て選ぶことに失敗する回数が $2n(k-1)$ 回程度しかありません.したがって辺重みが上位から $2n(k-1)+1$ 個以外は使われることはありません.そのように頂点や辺を減らした上で最小費用流をとればよいです.
E. Polygon
二分探索判定問題を考えます.「面積 $t$ 以上のものちょうど $k+1$ に分けられるか?」という判定問題です.ここで判定問題を,「面積 $t$ 以上のものを $k+1$ 個以上作れるか?(すべての領域を使いきる必要はない)」としてもよいです.
すると,ある区間に対する結果について「面積 $t$ 以上のものを $a$ 個とりきった.最後に面積 $b$ の部分が余っている」という形で最適なものがあります.これで区間 DP します.
F. Stations
各 $i$ から送信できる範囲を $[i,a_i)$ として,初期状態は $a_i = i+1$ です.
更新としては $a_i$ に対する 1 点更新と区間 chmin によって書けます.求値は,$[i,a_i)$ に対して $+1$ するというのをすべての $i$ でやったときに $[l,r)$ での和を求めるというものです.
sum, chmin 等で良く知られている SegTree Beats のようにすると,multiset $\{\{a_i\}\}$ の変化が $O(Q\logQ)$ 回の
- $(a,b,cnt)$: cnt 個の a を b に変更する
によって書けます.セグメント木への chmin によって,セグメント木の各ノードでの値の種類数について,「更新失敗する代わりに種類数が $1$ 以上減る」「種類数が減らないが更新成功」のどちらかが起こるからです.
すると,すべての $i$ に対して $[i,a_i)$ に $+1$ したときの列は,$O(Q\log Q)$ 回の区間加算によって変更できます.答は区間加算と区間和のできるデータ構造で処理します.
Beats パートは通常のように,max, 2nd max, count of max などを持てばよいです.