概要
解法
問題の言い換え
ある時刻において開店中の店全体の集合を
- 店
を開店する。 を計算し、 を定める。 に を追加する。
- 店
を閉店する。 から を削除する。
クエリ平方分割による解法( 時間)
適当なバケットサイズ
- あるバケットのクエリ処理の前処理を、
時間で行う - 個々のクエリを
時間で処理する
すると、全体の計算量は
バケットに対して、次のように処理します。
- クエリ処理の間、常に
に含まれる要素を対象として、Convex Hull Trick の構築を行う - 各計算クエリに対して、上で追加されたアフィン関数群を対象とした
の計算を行う
全クエリの適当なソート順を(バケット分割よりも前の段階で)事前計算しておけば、直線の追加、計算クエリどちらも何らかの順序にしたがって計算することができ、この工程は
さらに、各計算クエリに対して、次を追加で行います。
- バケット内に追加あるいは削除される直線に対して、計算を行うべきかを判断し、必要ならば計算を行う
計算クエリごとに、バケット内のクエリ全体を愚直に走査して、