Выпуклые многоугольники (1 декября 2016)
- Всё за логарифм
- Проверка "внутри ли точка" (один бинпоиск)
- Поиск экстремальных точек: Ax + Bx → max (один бинпоиск)
- Поиск касательной (один бинпоиск, два случая)
- Пересечение с прямой (три бинпоиска на две точки пересечения, 3log2n сравнений, оптимальный алгоритм делает как минимум 2log2n)
- Ближайшая точка к многоугльнику (доказательство монотонности угла, монотонности производной расстояния)
- Общая касательная за log2n. Простой случай: верхние выпуклые оболочки точек
- Общая касательная за log2n. Общий случай: можно свести к простому, выделив самую левую и правую точки, можно найти две ближайшие
- Динамическая выпуклая оболочка
- Формулировка задачи. Строим верхнюю часть. Все X различны, т.к. можно повернуть на случайный угол.
- Общая идея: динамическое дерево отрезков по X, в вершине храним верхнюю выпуклую оболочку (от крайних вершин вниз идут два луча на бесконечность)
- Пересчёт вершины через детей: общая касательная, split детей, которые хранятся в декартовых деревьях