Создание дерева интервалов. Запросите интервальное дерево. Обратитесь к «Алгоритмы» из прессы MIT.
Дерево интервалов лучше всего реализовывать как красно-черное дерево.
Имейте в виду, что сортировать прямоугольники рекомендуется только в том случае, если вы будете нажимать на них больше, чем когда вы меняете их положение, обычно.
Вы должны иметь в виду, что вы строили свои индексы отдельно для разных осей. Например, вы должны увидеть, перекрываете ли вы интервал для X и Y. Одна из очевидных оптимизаций состоит в том, чтобы проверять только перекрытие в любом интервале X, а затем сразу проверять перекрытие в Y.
Кроме того, большинство деревьев интервалов акций или «учебников» проверяют только один интервал и возвращают только один интервал (но вы сказали, что «не перекрывается», не так ли?)