C - Kaiten Sushi 解説
by
AngrySadEight
二分探索を用いた解法
\(B_i\) の値ごとに独立に解きます.
求めたいものは,\(B_i \geq A_j\) を満たす整数 \(j\) のうち \(j\) の値が最小のものです.これは,配列 \(A\) を \(C_1 = A_1, C_i = \mathrm{min}(A_i, C_{i-1})(2 \leq i \leq N)\) のように生成される配列 \(C\) (すなわち,\(A\) の累積最小値を表す配列)に置き換えても結果は変わりません.
また,この配列 \(C\) は広義単調減少です.このことを利用して,\(C\) 上で二分探索を行うことで答えを求められます.
時間計算量は \(\Theta(M \log N)\) と公式解説より悪化しますが,制約下において十分高速に答えを求められます.
投稿日時:
最終更新: