Сканирующая прямая & корневая оптимизация
- [Сережа.K] С/C++ : bitset<100>
- [Ваня] Дерево отрезков с групповыми операциями
- Присваивание на отрезке и минимум на отрезке
- Прибавление на отрезке и сумма на отрезке
- [Ваня] Сканирующая прямая (она же заметающая, она же scanline, sweepline)
- Задача "количество точек в прямоугольнике"
- Задача "возрастающая последовательность точек"
- Задача "количество k-инверсий в массиве за O(nklogn)"
- Задача "для каждой точки узнать, сколько раз она покрыта прямоугольниками"
- Задача "площадь объединения прямоугольников"
- [Сережа.K] Дерево отрезков: количество черных отрезков
- [Сережа.K] C/C++
- merge, lower_bound, upper_bound, sort
- свой компаратор для всех этих функций
- [Сережа.K] Корневая оптимизация
- Отложенные операции
- Частичные суммы → сумма на меняющемся массиве
- Сколько чисел x : l ≤ x ≤ r? Бинарный поиск. А теперь числа можно добавлять.
- Сколько точек в прямоугольнике (см. сканирующую прямую)? А теперь точки добавляются.
- Разбиение массива на куски
- Считаем сумму и минимум на отрезке за корень.
- Изменяем массив на отрезке.
- Двухмерный запрос: l ≤ i ≤ r, x ≤ ai ≤ y
- split & rebuild
- reverse на отрезке + те же запросы, что и раньше
- [Сережа.K] Простейшее 2D-дерево (дерево отрезков сортированных массивов)
- Построение за O(nlogn) через merge
- Запрос за O(log2n) деревом отрезков снизу и lower_bound