Сегментное дерево: количество чисел меньше x
1 ответ
Решение
Это довольно просто:
Хранить отсортированный массив всех чисел в диапазоне, охватываемом конкретным узлом
(O(n * log n)
память и время для инициализации).Чтобы ответить на запрос, разложите сегмент запроса на
O(log n)
узлы (так же, как это делается для стандартного дерева сегментов мин / макс / сумма) и запускают бинарный поиск по массиву, хранящемуся в каждом из этих узлов, чтобы найти число элементов меньшеx
, Это даетO(log^2 n)
время на запрос. Вы также можете достичьO(log n)
с использованием дробного каскадирования, но это не обязательно.