私は、サイズnの整数テーブルを維持し、時間O (log n )で以下の操作を許可するデータ構造を探しています。
- 、 t [ a ] 、t [ a + 1 ] 、… 、t [ b ]を増加させます。
- 、 t [ a ] 、t [ a + 1 ] 、… 、t [ b ]を減少させます。
- 。これは、 t [ i ] ≠ 0となるようなインデックス iの数を返します。
同じパラメーター使用して、減少するすべての呼び出しを以前の呼び出しと一致させることができるという約束があります。私が念頭に置いているアプリケーションは、時間O (n log n )でn個の与えられた直線長方形の和集合の面積を計算するスイープラインアルゴリズムです。
四分木のサイズはになるため、解決策ではありません。フェンウィックまたはインターバルツリーには適切なフレーバーがありますが、上記の操作をサポートするためにそれらを拡張する方法はわかりません。
フェンウィックツリーは、「同じパラメータa、bを使用して増加するすべての呼び出しを以前の呼び出しと一致させることができる」という約束を使用しないため、その約束を使用するより簡単な解決策があるかもしれません(ただし、今のところは回避します)。
—
ジェレミー
使用できる入力の数は最大(繰り返しを検出でき、データ構造に挿入できない)なので、一般的なメジャーツリーデータ構造を使用してO (log n )パフォーマンスが得られます。cosy.sbg.ac.at/~ksafdar/data/courses/SeminarADS/…スライド47-52を参照してください。
—
チャオシュー
ジェレミーとチャオ・シュー。ご意見ありがとうございます。インターバルツリーを使用して、変化する一連のインターバルの結合の全長を維持する方法を理解できました。これは実際、非常にかわいいデータ構造です。
—
クリストフデューア
一般的なデータ構造の問題のために検索時間は、スペースを必要とO (P )⊂ O (N 2)ここで、pは座標のアクティブペアのリストのサイズです。しかし、実際にsweeplineアルゴリズムのためのp ∈ O (N )線形空間滞在はそう。問題が引き続きより良いスペースを持つデータ構造のために開いているO (P )と、P。
—
ジェレミー
ここでは、同じ問題に他のソリューションに対するあなたの実装をテストすることができます素敵なリンクは次のとおりです。spoj.com/OI/problems/NKMARS
—
Erelシーガル-Halevi