前回の 2 つの質問「Range Minimum Query アプローチ (ツリーから制限付き RMQ へ)」と「Range Minimum Query アプローチ (最終ステップ)」の続きです。
私はTopCoder でこのチュートリアルに従いました。アプローチは最後のセクションで紹介されています。
すべてが完了したと仮定すると、クエリの準備が整いました。チュートリアルによると、これは私がすべきことです:
i と j は同じブロックにあるため、P と T で計算された値を使用します。
たとえば、次のようなブロックがあるとします。
000111
最小値はもちろん 3 番目の 0 にありますが、i と j が 4 と 6 のようであれば、3 番目の 0 は照会された基準にはありません。私の理解は間違っていますか?
i と j は異なるブロックにあるため、3 つの値を計算します。P と T を使用して i から i のブロックの終わりまでの最小値、A' で事前に計算されたクエリを使用して i と j のブロックの間のすべてのブロックの最小値、およびj のブロックの先頭から j まで、ここでも T と P を使用します。最後に、計算したばかりの 3 つの値を使用して全体の最小値になる位置を返します。
i から i のブロックの終わりまでの最小値と、j のブロックの開始から j までの最小値を計算するのはなぜですか? どちらも答えは i...j の外にあるのではないですか?また、最後の質問のように完全に適合しない場合の方法。