A. Cyclic Merging
適当にタイブレイクしてあるものとして考えます.
最大値は削除されることはありません.それ以外の要素について,削除されるときに生じるコストを考えます.
最大値でない個々の要素 $a[i]$ について見ると,自分より大きな要素のうち最も左右に近いもの $a[l], a[r]$ を考えると,コストは $\min(a[l], a[r])$ 以上です.最小値から順に消すようにすれば,すべての $i$ でこの下界を達成できます.よって $\min(a[l], a[r])$ の総和が答です.
B. Marble Council
$x$ の個数を $n_x$ とします.特に断りなく,$n_x>0$ となる $x$ だけ考えます.
$1$ を $a_1$ 個,$2$ を $a_2$ 個等が作れるかの判定を考えます.$0\leq a_i\leq n_i$ が必要です.
たとえば全ての $i$ で $1\leq a_i$ のときは作れます.どの集合も $1$ 種の数からなるように作ればよいです.
$a_i=0$ にする要素について上手く最頻値として現れないようにするところを考えることになります.
$x$ について $n_x$ が最大であるとします(全体の中で最もたくさんの回数現れるもの).
- $a_x>0$ であるようなもの:これは必ず達成可能です.$x$ 以外の要素 $y$ を「消せる」ことをチェックすればよいですが,$x$ を $k$ 個使っている集合に $k$ 個までは入れてよいと思えばそうなります.
- $a_x=0$ であるような作り方:$a_i>0$ とするものに対する $\sum n_i$ が $n_x$ 以上になっている,というのが $x$ が消せる条件です.$x$ が消せるなら,他も自由に消せます.
数え上げもこの $2$ 種に分けて数えればよくて,後者は各 $i\neq x$ について $a_i$ を決めながら $\sum n_i$ がいくつになっているかを状態とする dp をすればよいです.
C. Binary Wine
まず $Q=1$ を想定して考えます.
$a=max(a_i)$ とします.$n\geq 2$ を仮定しているかも.
- $k=topbit(c)<topbit(a)$ のとき:
- これは必ずコスト $0$ で目標達成可能です.$a$ に対するデクリメントだけで出来るからです.
- $k=topbit(c)>topbit(a)$ のとき:
- $\max a$ を $2^k$ までは増やしてしまって構いません.何かを $2^k$ 以上にしなければならないのですが,加算操作は常に $a_i$ の順序を変えないように行うとしてよいので,$\max a$ がそれです.
- 以降,下記の $k=topbit(c)=topbit(a)$ の場合に合流します.
- $k=topbit(c)=topbit(a)$ のとき:
- $topbit(a_i)=k$ となる $i$ が $2$ 個以上あるならばコスト $0$ で目標達成可能です.ひとつを $2^k$ になるまでデクリメント,それ以外を $2^k-1$ になるようにしたあと,$2^k-1$ からのデクリメントをしていけばよいです.
- $topbit(a_i)=k$ となる $i$ が唯一です.この場合,これ以上 $2^k$ の位が変化する加算操作はしないとしてよいです.なぜならば,$a$ を $2^{k+1}-1$ にすれば条件を達成できるし,それ以外のものへのインクリメントは $2^{k}-1$ までインクリメントしたら条件を達成できるからです.
- よってこの場合は,$a$ を $a-2^k$,$c$ を $c-2^k$ に置き換えて,より桁数の小さい場合に帰着できます.
「$\max$ を取り出して変更する」などの操作 $O(\log A)$ 回程度で解けます.
$Q$ クエリに答えるのも簡単で,変更と $\max$ 取り出しができる適当なデータ構造を用意すればよいです(セグメント木や prique).
D. Path Split
$b_{i,j}\to b_{i,j+1}$ という関係の個数を最大化しようと思うと,次のような最大マッチング問題になります.
- $out(i)$ と $in(i)$ という $2$ 種に倍加した $2n$ 頂点を用意する.
- $i<j$ かつ $|a_i-a_j|=1$ のときに $out(i)$ と $in(j)$ をマッチ可能.
これを解くのですが,次の貪欲法でよいです.
- $a_i=1$ となる $i$ を自由にひとつとる.
- $a_j=2$ かつ $j<i$ となる $j$ があるとき,そのような最大の $j$ とマッチさせてしまってよい.
- $a_j=2$ かつ $i<j$ となる $j$ があるとき,そのような最小の $j$ とマッチさせてしまってよい.
$j<i$ となる $j$ について,あるならば何かしらとマッチさせてよいのはそれはそう.最大の $j$ を使うとしてよいのも,小さい $j$ を残すほど選択肢が単純に広がるのでそれはそうという感じです.
値の小さい方から順にこのような貪欲を行えば最大マッチングができます.
E. Rainbow Branch
まだ.
F. Arctic Acquisition
21435.「21」「435」に分けて考えます.
重要なのは,どちらの部分も $O(N)$ 通りの候補を考えれば十分ということです.
「21」の方は簡単で,2 に相当する項を決めたら 1 に相当する項はその右にある自分より小さい項のうち,最初のものとしればよいからです.
「435」パートについては,3 を固定するごとに考えてみます.座標平面上の点 $(i,p_i)$ を考えると,ある点から左上と右上方向の点を選ぶ感じです.左上方向については,suffix 側から見て min になっているような点.右上方向については prefix 側から見て max になっている点だけを候補とすればよいことも簡単に分かります.
自身を点 $p$,左方向の候補を $l_1, l_2, \ldots$,右方向の候補を $r_1, r_2, \ldots$ とします.
このとき,右上からとる点は $r_1$ しか考えないでよいです.
$r_2$ を無視できることを確認します.一見ありえそうなのは次のような場合です:$r_1$ ではなく $r_2$ を選ぶことによって,より近い $l_i$ が新たに選べるようになる.
しかしこのような $l_i$ については,$(l_i, p, r_2)$ ではなく $(l_i, r_1, r_2)$ という $3$ つ組が成立するので,$p$ から $r_2$ をとる必要はありません.

さて,「35」に相当する部分である $(p,r_1)$ は $O(N)$ 通りになりました.すると「435」部分もそれはそうで,単に間の大きさの値を持つなるべく右側の要素を 4 として採用すればよいです.
あとは,各「21」に対して最も速く使える「435」を適当に求めるなどすれば,極小な 21435 パターンは全部発見できます.
