ABC 072 C問題 Together
問題
考察の流れ
あるを選んだとき,となるの個数を最大化する.
まず,を固定した場合.となるの個数を最大化するには,数列中の全てのに+1,全てのに-1してあげればいい.
そして,として何を選べばとなるの個数を最大化できるかについては,として考えられる値を全て調べてあげればいい.各に対し,数列中の,,の個数の和を出してあげてそれが最大となるを探す.数列中の,,の個数の和を出す処理は,数列をあらかじめソートしておいて二分探索することでO(log N)で可能となる.
また,として考えるべきなのは,数列の値の範囲内のみで問題ない(0<105).
以上より全体としての計算量はO(105 log N)なので間に合わせることができる.
コード
Submission #2760497 - AtCoder Beginner Contest 072
1発AC 20 minくらいで解いた.
反省
- カッコよく二分探索をキメたつもりでいたけど,を列挙するループ内で毎回二分探索をする必要はない(最初に各数の個数を調べておけばよかった).これで計算量を落とすことができる.
- とはいえ確実に行けるかつ間に合うやり方で通せたのは良かった.