Codeforces Round 1026

スポンサーリンク

A. Fashionable Array

ソートして,残す最小のものと最大のものの組を全探索でよいです.

B. Down with Brackets

左カッコは最も左にあるもの,右カッコは最も右にあるものを破壊するのが最適です.

C. Racing

$l_i$ 以上になるようななるべく小さい解を作って $r_i$ 以下であるかどうかチェックします.

D. Fewer Batteries

二分探索しました.判定問題では上限を固定して,各地点に対して,その地点で所持できる最大量を順に計算します.

E. Melody

$(a_1,b_1), (a_2,b_1), (a_2,b_2), (a_3,b_2), \ldots$ のように並べるということです.これを

$(a_1\to b_1), (b_1\to a_2), (a_2\to b_2), (b_2\to a_3)$ のように思うと,二部グラフを作って Eulerian Walk をとればよいことが分かります.(多重辺がないという制約があるので同じ値が $3$ 連続してしまうということにもなりません)

F. Faculty

まずは $i$ を固定して考えます.列は unique されているとしてよいです.

$a_1<a_2<\cdots<a_n$ の状況でスコアがどうなるかを考えます.

まず,$x < y$ のとき $x\leq f(x,y)\leq y$ が簡単に示せます.

すると,$x<y<z$ ならば $f(x,y)\leq f(y,z)$ です.このことから,最大の beauty を達成する $(a_i,a_j)$ であって $j=n$ を満たすものが存在することが分かります.つまり $2$ 数のうち一方は $\max(a)$ であるとしてよいです.

次に,$x<a_n<2x$ を満たす $x=a_i$ が存在するならば beauty は $a_n$ です.

これで解くために必要なことはすべてそろいました.

末尾に 1 要素を追加したとき

  • 最大値が更新されないならば,最大値と追加要素の組を調べて答を更新する.
  • 最大値が更新されるならば,
    • 最大値の更新幅が $2$ 倍未満ならば,その新最大値が答になる.
    • 最大値の更新幅が $2$ 倍以上ならば,新最大値と他の値の組を全部試すことで答を更新する.

とすればよいです.「全部試す」が行われるのは「最大値の更新幅が $2$ 倍以上」のときだけで,これは $O(\log(\max a))$ 回しかないということから計算量解析できます.

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