A. Beautiful Average
$1$ 要素だけの場合を調べればよいです.
B. Beautiful String
片方の文字種をすべて集めればよいです.
C. Beautiful XOR
$2^k\leq a< 2^{k+1}$ となる $a$ をとり,$c=2^{k+1}-1$ とすると,
- $c+1$ 以上に到達することはない.
- $b\leq c$ ならば,$a\to c\to b$ として $2$ 手で到達可
となります.
D. Beautiful Permutation
$2$ 種のクエリの差分をとることで,$[0,l)$ 内で行われた加算回数が取得できます.
よって,二分探索により $2\log_2n$ 程度の回数で $l$ が求まります.
$r$ を求めるのも同じ二分探索をしてしまうと,クエリ回数が足りません.
列全体にクエリすれば,列全体で行われた加算回数も分かるので,この回数と $l$ から $r$ が求まります.
E. Beautiful Palindromes
$n+1$ 項目以降では,各項についてその項を含む長さ $2$ 以上の回文が存在しないようにします.
$3$ 種の $x,y,z$ によって,$a_1,a_2,\ldots,a_n,x,y,z,x,y,z,x,y,z,\ldots$ とします.
$a$ に現れない数があるならばそれを $x$ とすればよいです.
$a$ が順列ならば直前の数項を見て $x,y,z$ を決めればよいです.
F. Beautiful Intervals
$0,1$ を両端に置くと,$v_j\neq 2$ にできるので,答は $2$ 以下です.特に $0,1$ にできるかを検討すればよいです.
$p_i=0$ とする $i$ を全探索します.$i\notin [l_j,r_j]$ となる $j$ では自動的に $v_j=0$ となります.このような $j$ がなければ $ANS=0$ 達成です.
そのような $j$ があるなら,$v_j\geq 1$ となるすべての $j$ で $v_j\geq 2$ にできるかを考えます.
G. Beautiful Tree
まず $2$ を根とする根付き木を作ると思い,
- $3\leq v\leq N$ ならば親を $[2,v-1]$ から選ぶ.
- $v=1$ の親は $[2,N]$ から選ぶ.
とします.すべての親を $2$ にした状態から,親をインクリメントする操作を考えて調整できます.
根を $2$ としたのは,$v=1$ での調整をしやすくするためですが,根を $1$ としても同様の解法は可能だと思います.
H. Beautiful Problem
まず $x$ を固定したときのことを考えます.このとき,数は $x$ との大小関係によって $-,0,+$ の $3$ 種類だと思って構いません.「$-,+$ の両方を含む区間が存在しない」というのが条件となります.
まず,$\mathrm{dp}[pos][val][cnt_{-}][cnt_{+}]$ を true, false のどちらかの bool 値とする dp が考えられます.$pos$ は位置で,$val$ はその位置での最後の $+, -$,$cnt_-$ はそこまでの $-$ の個数です.
この dp には単調性があって,
- $\mathrm{dp}[pos][val][cnt_{-}]$ を $cnt_+$ の最大値と定める.
という dp が考えられます.これで計算すべき値を $O(N^2)$ 個にできました.
$[0,i]$ における valid な定め方について,最後の $0$ 以外の要素を右に移動させても valid であることに注目すると,
- 直前においた $0$ でない項が次に置く $0$ でない項と同じとき:$\mathrm{dp}[i]$ から $\mathrm{dp}[i+1]$ への遷移を考える.
- 直前においた $0$ でない項が次に置く $0$ でない項と逆のとき:$i$ と同じ区間に入るような最小の $j$ をとり,$\mathrm{dp}[j]$ から $\mathrm{dp}[i+1]$ への遷移を考える.
というタイプの遷移だけを考慮すればよいことになります.