サイズNの配列Aが与えられた場合、Aのすべてのサブアレイを降順で含むリストを作成します。 2つのサブアレイBとCは、両方がサイズNになるまでゼロをパディングすることによって比較されます。次に、2つのサブアレイ要素を要素で比較し、差のポイントが観察されるとすぐに戻ります。 与えられたxが上記の順序に従ってソートされたx番目の部分配列の最大要素を見つけなければならない場合、複数のクエリが与えられます。 たとえば、配列Aが[3、1、2、4]の場合、次にソートサブアレイは次のようになりますサブアレイのリストに対する質問
[4]
[3、1、2、4]
[3、1、2]
[3,1]
[3]
[2,4]
[2]
[1、2、4] X = 3サブアレイ[3,1で最大の要素を見つけるに対応
[1,2]
[1]
クエリ2]。ここで答えは3になります。 クエリの数が多く(10^5のオーダー)、配列内の要素の数も(10^5のオーダーで)大きくなる可能性があるため、 O(1)またはO(log N)またはO(sqrt N)時間内に各クエリに答えるためのいくつかの前処理を行います。私はこれを行う方法を把握していないようです。配列にユニークな要素が含まれているときに解決しましたが、配列に繰り返しが含まれている場合、どうすればこのことができますか?必要な情報を格納するのに役立つデータ構造はありますか?
は、これらのサブリストの多くのがあるようになっていませんか? – letmutx
各サブアレイの最大値を前処理段階の一部として保存するのはどうですか? N番目(N + 1)/ 2個のサブアレイが存在するため、n番目のサブアレイへの到達はO(1)であり、事前計算がO(1) – danh
である場合は最大になります。 –