競プロ精進記録
最近ようやく300点問題がまあまあ解けるようになってきたので、茶diffの400点問題を探しています。
今日解いたのはこれです!!
考えたこと
計算量はO(NlogN)まで間にあう。
愚直にやってたら O(N × Q ) となるので間に合わない…
Aをソートして、A_1 <= A_2 <= ・・・<=A_nとして、X_i <= A_kを満たす最小のkを見つけたら、求める数は
X_i × (k - 1) - (A_1 + ・・・+ A_(k-1))
+ (A_k + ・・・+A_n) - X_i × ( n - ( k - 1))
を計算することで得られる (二行になっちゃってごめんなさい)
ここで、(A_1 + ・・・+ A_(k-1)) とかの部分は累積和でO(1)で計算できる。
Aはソートしてるから単調増加なので、二分探索でkを探せば O(logN)で見つかる。
よって全体の計算量は、最初にAをソートしているので O(NlogN + QlogN) になり、間に合いそう!!
実装
二分探索をよく理解していないため、雑なコードになりました。
以下がコードです。
まとめ
通ったならなんでもいいですね。発想が前解いたやつと同じでした。
この記事が気に入ったらサポートをしてみませんか?