正の整数のシーケンスと整数Mが与えられた場合、Mよりも大きいシーケンスの最初の数字を返します(存在しなければ-1) 。並べ替えられていないシーケンス内の指定された数よりも大きい最初の数を見つける
例:配列= [2、50、8、9、1]、M = 3 - (前処理した後に)必要な各クエリの>リターン= 50
O(ログn)。
私は私にO(LOGN)の時間を与えないとだけ長いパスを、取得したい...EDIT分探索木と思ったが、昇順を与えてくれた
:使用される構造にもする必要がありますつまり、見つかった要素を与えられた要素に置き換えることができ、別のM(すべてのもの - 前処理 - O(logn)とは別に)の検索を繰り返すことが可能でなければなりません。もちろん、最初の大きい方を最初の小さい方に変更でき、アルゴリズムをあまり変更しなくてもいいといいですね。それが助けになると、すべての数字が正で繰り返しがないと仮定することがあります。
数字がソートされている場合は、バイナリ検索を使用できます。 –
更新:この例では最初にクリア!=最低です。最初は入力の最初のものです。 –
前処理にはどのようなデータが与えられていますか?シーケンスだけ? –