Блог пользователя Sehnsucht

Автор Sehnsucht, история, 11 лет назад, По-русски

Несколько раз встречал задачи, которые можно было бы решить, если найти, какому из n отрезков на прямой принадлежит точка с координатой x, за время log(n)

1. Отрезки могут пересекаться
2. Есть некоторые условия — нужно взять отрезок с наименьшей длиной либо с наименьшим номером в списке либо с наименьшим левым концом

Как решать эту задачу с этими условиями? Спасибо

  • Проголосовать: нравится
  • +13
  • Проголосовать: не нравится

»
11 лет назад, скрыть # |
Rev. 3  
Проголосовать: нравится 0 Проголосовать: не нравится

Если нет вложенных, то можно двумя бинпоисками + запросом минимума на отрезке(ДО, ДД, спарс)

  • »
    »
    11 лет назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится

    Спасибо! Но это значит, что после сортировки отрезков у них в порядке возрастания следуют оба конца, как то: (1,5)->(3,7)->(4,9)->(5,10), и при сортировке по второму элементу список получится точно такой же. А что, если вложенные отрезки есть и после сортировки по второму элементу вместо списка (1,2,3,4,5) получится например (5,3,2,1,4)?

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Можно написать дерево отрезков, которое умеет выполнять такие запросы: обновить минимум на отрезке, найти минимум в точке. Все это достаточно просто можно сделать с помощью отложенных операций.

  • »
    »
    11 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +11 Проголосовать: не нравится

    Так проще, да:) Кстати можно и без отложенных операций — снизу (так еще проще на мой взгляд, хотя многие с этим не согласны). Пример для максимума на последнем контесте: 11795678

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Если пересекающиеся есть.

Можно посортить по l. Потом делать бинпоиск по l и получить префикс отрезков которые нам подойдет и на этом префиксе нам нужно выбрать какой-то минимум по тем, у кого правая граница хотя бы r. Можно завести персистентное ДО. Версия — номер отрезка в посортированном порядке. Элементы — номера/длины в позиции r.