概要
- Li Chao Tree で小さいほうから 個取得できる
- ただし取り出した 個の順番は保証されない
- 空間計算量
- 時間計算量 per query
アルゴリズム
全てのノードは高々 個の直線を保持します。
元の Li Chao Tree と同様、クエリの点を覆うノードの直線だけでクエリが処理できる状態を維持します。
追加
ノードに直線を追加することを考えます。
元々入っていた直線が 本未満なら、ただ追加して終わります。
そうでない場合、新しい直線と合わせて 本の直線があります。
これらのうち、ノードの中央の点での値が最も大きいものを とします。
と他の直線を比較すると、 は左と右の少なくとも一方の区間では完全に大きいです。
以外に 個の直線があるため、左と右のどちらかでは 個以上の直線に対して は大きくなります。
よってそちら側の区間で は上位 個になり得ず、反対側の区間へ再帰的に を追加すればよいです。
取得
クエリの点を覆う全てのノードの直線を列挙した後、選択アルゴリズムで上位 個を取り出します。