A 'quadtree' - структура данных, часто используемая для повышения эффективности обнаружения столкновений в двух измерениях.
Я думаю, вы могли бы найти аналогичный 1-й состав. Это потребует некоторых предварительных вычислений, но должно привести к производительности O (log N).
В основном вы начинаете с корневого «узла», который охватывает все возможные интервалы, а при добавлении узла к дереву вы решить, попадает ли он слева или справа от средней точки. Если он пересекает среднюю точку, вы разбиваете ее на два интервала (но записываете исходный родительский элемент) и рекурсивно исходите оттуда. Вы можете установить ограничение на глубину дерева, что может сэкономить память и повысить производительность, но это происходит за счет усложнения вещей (вам нужно сохранить список интервалов в ваших узлах).
Затем, проверяя интервал, вы в основном находите все листовые узлы, в которые он будет вставлен, были ли вставлены, проверьте частичные интервалы внутри этих узлов для пересечения, а затем сообщите об этом интервале, который записывается против них как «исходный» родитель.
Количество активаций зависит от слоев модели, например: