ABC312_C – Invisible Hand

プログラミング

ABC312_C – Invisible Hand

問題

C - Invisible Hand
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

提出

Submission #44834618 - UNIQUE VISION Programming Contest 2023 Summer(AtCoder Beginner Contest 312)
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

解けた

りんごの値段が0の時、売り手の人数は0人、買い手の人数はM人になる。
xf(x)とするとf(0)=Mである。
Ai,Biのうち最小の値段をTとすると、f(T)=M+1になる(売る人が増えるか買う人が減るか)。
Ai,Biを経るたび、f(T)は増加していく。
よって、二分探索が使える。
二分探索の計算量はO(log(max(Amax,Bmax)))となる。
左端と右端の中央が条件を満たすか否か計算するとき、あらかじめソートしたAi,Biを使えば、それぞれO(log(Ai))O(log(Bi))の計算量になる。

全体として計算量は$O(N\log(N)+O((\log(A_i)+\log(B_i))\log(\max(A_{max},B_{max}))))O(N\log(N))N=210^5$なので間に合う。

コメント

タイトルとURLをコピーしました