水銀メモ_________φ

外部記憶装置として再開

CodeForces #262_Div2 : C. Present

Problem - C - Codeforces

問題

n個の連続した整数があり、m回大きさwの区間の要素を1増やす事ができる。
最も小さい要素を最大化させたい。

解法

二分探索で最も小さい花の高さをmid以上にできるか判定し最大値を探索する。

大きさnの配列を舐めながら、高さがmid未満の花があれば差分の水を足し、
足した箇所からw先まで花の高さを底上げすることができる。
(配列を用いて水を足したindexからw離れたら足した分を引くように処理する)

途中で水を足した総数がmを超えたらfalseを返しmidを小さい方に寄せる。
計算量はO(n log a_m)

シンプルで結構好きな問題。

コード