A. Zhily and Bracket Swapping
$A[i], B[i] = (1,1), (-1,1), (-1,-1)$ のどれかだとしてよいです.
そして,いくつかのインデックスについて $(-1,1)\to (1,-1)$ ができる.という問題だと思えます.
- いたるところ prefix sum が非負になってください.
- 最後には sum が $0$ になってください.
どちらの条件も,$[0,i)$ 内で操作を行ったインデックスの個数がいくつ以上いくつ以下.という類の条件で書けます.
$L_i\leq x_i\leq R_i$,$x_i\leq x_{i+1}\leq x_i+c_i$ というタイプの制約があって,全部満たすように非負整数列 $x$ をとる.という問題に言い換えられます.
B. Zhily and Barknights
$a_ib_p > a_jb_q$ となる $(i,j,p,q)$ を数える.ということをやったあとで適切な係数をかければよいです.
$a_ib_p$ の形の数を全部計算して座標圧縮しておけば,Fenwick Tree 区間クエリの形になります.
C. Zhily and Signpost
ある頂点に到達するパターンは,そこから根までの次数の LCM の周期です.特に各頂点では
- LCM が $10^{18}$ を超えている.その頂点に到達しているクエリは高々 $1$ 種(すべて $m$ が等しい)である.
- LCM が変わらない(次数が LCM の約数).クエリはすべて同じ方向に進む.
- その頂点からいくつかの方向にクエリが進む.LCM が増える.
という $3$ 種だけです.各頂点に来ているすべてのクエリを持って,LCM が増えない場合には一方向だけに進むようにすれば,計算量は $O(N + Q\log \max m_q)$ のようになります.
D. Zhily and Cycle
次のグラフを考えます.
- タイプ 1:$i\to a[i]$ に $1$ つの辺を張る.
- タイプ 2:$i\to i+1$ に好きな個数の辺を張る.
タイプ 1 の辺をすべて通る closed walk を求めよということになります.
タイプ 2 の辺の個数を調整した上で,eulerian walk を構成ということになります.
辺を張る個数は,入次数と出次数から決まってしまいます.
入次数と出次数を適切にした上で,連結性が必要十分条件です.
あとは Eulerian Walk を構築すればよいです.DFS による eulerian walk の構築をするのですが,タイプ 2 の辺の個数が巨大となる可能性があることに注意します.区間加算区間 min のセグメント木を持って,タイプ 2 の辺をまとめて消費できるようにして実装すればよいです.
この,区間を全部通る closed walk という設定は($i\to i-1$ という辺がある場合も含めて)何度か既出なので,人によっては貼るだけだったんじゃないかな?(https://codeforces.com/contest/1685/problem/D2 など.私は最小コストだけ持ってて復元は持っていなかった)
E. Zhily and Permutation
まだ.
F. Zhily and Colorful Strings
まだ.
