のサブ配列の合計を見つけるためにセグメントツリーを使用できることを理解しています。そして、ここのチュートリアルによれば、これはO(log n )時間で実行できます。
ただし、クエリ時間が実際にことを証明することはできません。このリンク(および他の多くのリンク)は、各レベルで処理されるノードの最大数が4であることを証明できるため、O(4 log n )= O(log n )であると述べています。
しかし、おそらく矛盾によって、どうやってこれを証明するのでしょうか?
もしそうなら、もし私たちがより高次元の配列の範囲の合計にセグメントツリーを使うとしたら、証明はどのように拡張されるでしょうか?
たとえば、元の行列を4つの象限(線形配列の2分の1間隔と同様)に分割して、象限セグメントツリーを構築してサブ行列の合計を見つけることを考えることができますが、その証拠は私にはわかりません。
セグメントツリーの構築はO(n)、クエリはO(log n)、更新はO(log N)です。合計配列に対するその利点は、更新の複雑さにあります。
—
Nurlan