На самом деле, если вы создаете интервальный список или что-то очень похожее на него, а затем сохраняете его компоненты в дереве AVL, вы, вероятно, могли бы сделать это хорошо.Дело в том, что вы не просто хотите заданную последовательность, вы хотите самую длинную последовательность.Дольше всего лексически смежных клавиш *, если быть точным.Что, как ни странно, довольно сложно, я думаю, не прибегая к пользовательской метрике для построения вашего дерева AVL.Я предполагаю, что если ваш компаратор для дерева AVL, построенного на списке интервалов, был f (длина интервала), вы могли бы получить его в o (logn) или, возможно, быстрее, если ваша реализация AVL имеет быстрый максимум \ мин.
Мне очень жаль, я надеялся получить дополнительную помощь, но тот факт, что мы должны использовать дерево AVL, немного беспокоит.Мне интересно, есть ли уловка, которую можно использовать с поддеревьями, но я просто не вижу хорошего способа сделать такой подход o (1) без такой предварительной обработки, чтобы это было шуткой.Что-то с фильтрами Блума может работать?
* Некоторые общие порядки могут создавать похожие прогоны, но не у всех есть значимая концепция непосредственной смежности в их ... ну ... фазовом пространстве, я полагаю? **
** Мое слабое формальное образование действительно сейчас меня кусает.