В общем случае это невозможно сделать за время O (log n).
Вы можете выполнить двоичный поиск по времени начала, чтобы найти последний интервал, который может содержать время запроса, но посколькуподразумеваемое упорядочение по времени окончания, вы последовательно выполняете поиск от начала списка до элемента, который вы определили как последний, чтобы определить, относится ли время запроса к какому-либо из этих интервалов.
Рассмотрим, например, [(1,7),(2,11),(3,8),(4,5),(6,10),(7,9)]
, со временем запроса 7.
Бинарный поиск по времени начала скажет вам, что все интервалы могут содержать время запроса.Но поскольку время окончания не в каком-то определенном порядке, вы не можете выполнить бинарный поиск по ним.Вы должны смотреть на каждый отдельный интервал, чтобы определить, больше или равно время окончания времени запроса.Здесь вы видите, что (4,5)
не содержит время запроса.