Скажем, [a, b] представляет интервал на вещественной прямой от a до b, a < b, включительно (т.е. [a, b] = множество всех x таких, что a <= x <= b). Кроме того, скажем, [a, b] и [c, d] являются "перекрывающимися", если они разделяют любое x, так что x находится в обоих [a, b] и [c, d].
Учитывая список интервалов, ([x1, y1], [x2, y2],...), что является наиболее эффективным способом нахождения всех таких интервалов, которые перекрываются с [x, y]?
Очевидно, я могу попробовать каждый и получить его в O (n). Но мне было интересно, могу ли я сортировать список интервалов каким-то умным способом, я мог бы найти/один/перекрывающий элемент в O (log N) через двоичный поиск, а затем "оглянуться" с этой позиции в списке, чтобы найти все перекрывающиеся интервалы. Однако как мне сортировать интервалы, чтобы такая стратегия работала?
Обратите внимание, что в элементах списка могут быть перекрытия между элементами, что делает это трудным.
Я пробовал это, сортируя интервалы по их левому краю, справа, середине, но ни один из них не ведет к исчерпывающему поиску.
Справка