Biorąc pod uwagę sekwencję dodatnich liczb całkowitych i liczbę całkowitą M, zwracaj pierwszą liczbę w sekwencji, która jest większa niż M (lub -1, jeśli nie istnieje) .Znajdź pierwszą liczbę większą niż podana w niesortowanej sekwencji
przykład: Sekwencja = [2, 50, 8, 9, 1], K = 3 -> powrót = 50
O (log n) dla każdego zapytania wymagane (po przetwarzania wstępnego).
myślałem o BSTS, ale biorąc pod uwagę sekwencję rosnąco chciałbym uzyskać tylko długą drogę, która nie dałaby mi O (logn) czas ...
EDIT: Używane struktura powinna być również łatwa do modyfikacji, tzn. powinna istnieć możliwość zamiany znalezionego elementu na dany i powtórzenia wyszukiwania innego M (wszystko - oprócz preprocessingu - O (logn)). I oczywiście byłoby miło, gdybym mógł zmienić "pierwszy większy" na "pierwszy mniejszy" i nie musiał zmieniać zbyt wiele w algorytmie. A jeśli to pomoże, możemy założyć, że wszystkie liczby są pozytywne i nie ma powtórzeń.
można użyć wyszukiwania binarnego, jeśli liczby są posortowane. –
Aktualizacja: z przykładu pierwsza jest jasna! = Najniższa. Pierwszy = pierwszy na wejściu. –
Jakie dane mają wstępne przetwarzanie? Tylko sekwencja? –