222
 правки
Изменения
м
           '''return''' answer
→Псевдокод
 // Инициализируем множество вершин, которые нужно рассматривать
    '''for''' Point <tex>w</tex> '''in''' segments
       '''if''' <tex>wv</tex>.x <tex>\le</tex>= <tex>vw</tex>.x
          currentVertices.add(<tex>w</tex>)
    sort(currentVertices) by angle
       delete from status all segments ending in <tex>w</tex>
          add in status all segments beginning in <tex>w</tex>
В качестве статуса нужно использовать структуру данных, позволяющую добавлять и удалять из нее отрезки за <tex> O(\log n) </tex> и извлекать минимум за <tex> O(1) </tex> или <tex> O(\log n) </tex>. В этом случае достигается асимптотика <tex> O(n^2 \log n) </tex>, так как для каждой из <tex> n </tex> точек выполняется сортировка за <tex> O(n \log n) </tex>, обновление статуса (суммарно <tex> O(n \log n) </tex>, так как каждый отрезок добавляется и удаляется из статуса не более одного раза) и запросы ближайшего отрезка (<tex> O(\log n) </tex> или <tex> O(1) </tex> на точку, то есть <tex> O(n \log n) </tex> или <tex> O(n) </tex>). 
|
