したがって、基本的には、点よりも厳密に小さい座標を持つ最大値を持つ平面上の点を把握する方法が必要です。面内の点を最大化
これを実行する1つの方法は、複雑さのあるすべての点をチェックすることです。
O(N) time, N being the number of points.
O(1) space.
もう一つの方法は、(バイナリインデックス付き木複雑
O(log(max(X))*log(max(Y)) time, X being the maximum x coordinate and Y being the max y coordinate.
O(max(X)*max(Y)) space, this is the main problem, I can't afford that much space.
私は、対数複雑さとOにできるだけ近くを持っている何かをしたいと思います
を与えるだろう(BIT)でそれを行うことであろうN)スペース。
例:各ポイントの
ベストな値は次のとおりです。あなたがしている場合
A -> 0 (none)
B -> 2 (A)
C -> 2 (A)
D -> 0 (none)
E -> 10 (D)
私はほとんどあなたの解を理解していますが、xとyの解をどのように組み合わせて2Dの解にするのか本当に分かりません。 基本的に、目標値を厳密に上回るポイントを最高の値で照会し、その先の座標が優位になるようにそのポイントのy軸上の先行座標を探していますか? もしそうなら、その要素のyの値がターゲットより厳密に小さいことをどのように知っていますか? – RazvanD
@RazvanD左から右の各点について、その点を上から下にソートされたツリーに挿入します(支配的な点を破棄します)。各ポイントの後、私たちはツリーをスナップショットします。これらの点のみを持つツリーのバージョンを選択することで、結果ポイントのx座標が小さくなるようにします。スナップショット内のクエリのy座標の先祖を選択することによって、y座標が小さくなるようにします。 –
申し訳ありませんが、私はそれを持っていると思う、ありがとう! :) – RazvanD