Size: a a a

2020 July 31

MB

Mikail Bagishov in pro.algorithms
Паша Калугин
Ну, вроде можно деревом отрезков:
Храним в каждой вершине помимо ответа количество отрезков с левой границей в соотв. вершине отрезке и с правой границей в каждом из соседних справа отрезках.
Получать ответ так: ответ в левом ребёнке + ответ в правом ребёнке + количество отрезков с левой границей в левом ребёнке и правой границей в правом ребёнке (это, кажется, можно посчитать рекурсивно).
Как ты из этого ответ для произвольного отрезка получаешь?
источник

ПК

Паша Калугин... in pro.algorithms
Mikail Bagishov
Как ты из этого ответ для произвольного отрезка получаешь?
Как обычно, рекурсией:
"Получать ответ так: ответ в левом ребёнке + ответ в правом ребёнке + количество отрезков с левой границей в левом ребёнке и правой границей в правом ребёнке (это, вроде, можно посчитать рекурсивно)."
источник

DK

Danil Kun in pro.algorithms
Mikail Bagishov
Мб можно и проще, но вот это должно работать.

Отрезок [L, R] лежит в отрезке [X, Y] если X <= L && R <= Y
Это стандартный запрос на прямоугольнике, вида "дана точка, сколько точек лежат правее и ниже?" (мы ставим отрезку [A, B] точку с координатами (A, B))
Отвечать на запросы к прямоугольникам онлайн можно, например, построив лес персистентных ДО (одно на каждый горизонтальный уровень, которое для каждой вертикальной полосы хранит количество точек в этой полосе, ниже этого уровня)
Круто, спасибо
источник

DK

Danil Kun in pro.algorithms
Паша Калугин
Ну, вроде можно деревом отрезков:
Храним в каждой вершине помимо ответа количество отрезков с левой границей в соотв. вершине отрезке и с правой границей в каждом из соседних справа отрезках.
Получать ответ так: ответ в левом ребёнке + ответ в правом ребёнке + количество отрезков с левой границей в левом ребёнке и правой границей в правом ребёнке (это, кажется, можно посчитать рекурсивно).
А отрезки с правой границей из правого ребёнка могут же иметь левую границу дальше, чем левая граница текущей вершины ДО и тогда что с ответом? Или я не понял как пересчитывать?
источник

DK

Danil Kun in pro.algorithms
Вроде как придётся наивно проверить всех тех, что начинаются в правом ребенке, что они действительно не выйдут за границы вершины
источник

ПК

Паша Калугин... in pro.algorithms
Danil Kun
А отрезки с правой границей из правого ребёнка могут же иметь левую границу дальше, чем левая граница текущей вершины ДО и тогда что с ответом? Или я не понял как пересчитывать?
Мы считаем ответ только для текущей вершины, если отрезок выступает за границы нашей вершины, то мы его посчитаем в какой-то вершине выше
источник

DK

Danil Kun in pro.algorithms
А как нам понять какие отрезки добавлять, кроме тех, что в ответе для левого и правого ребёнка, я вот тут не особо понял
источник

DK

Danil Kun in pro.algorithms
Вот тут получается мы добавим в ответ маленькие, т.к. они внутри поддеревьев, а как теперь посчитать тот, что посредине, но не считать тех, кто выходит за границы
источник

ПК

Паша Калугин... in pro.algorithms
Для каждой вершины ДО и для каждой соседней справа с ней вершины будем хранить количество отрезков, начинающихся в нашей вершине и заканчивающихся в соседней
источник

ПК

Паша Калугин... in pro.algorithms
Т.е. для нижней левой храним количество отрезков, начинающихся в ней и заканчивающихся в нижней правой (такой отрезок 1)
источник

ПК

Паша Калугин... in pro.algorithms
Для остальных вершин нет соседних справа
источник

ПК

Паша Калугин... in pro.algorithms
Мы теперь вроде умеем рекурсивно считать количество отрезков, начинающихся в [l; m) и заканчивающихся в [m; r)
источник

ПК

Паша Калугин... in pro.algorithms
А, это наверное log^2
источник

ПК

Паша Калугин... in pro.algorithms
Kirill Kaymakov
Можно еще за log^2 c добавлением отрезков совсем тупо: в вершине ДО храним концы всех вершин, начинающихся в пределах данной, к примеру, в дерамиде. Теперь спускаемся в какую-то конечную вершину и проверяем сколько вершин находится слева
Тогда красивее получается жто решение
источник

MB

Mikail Bagishov in pro.algorithms
Паша Калугин
Тогда красивее получается жто решение
фу, ДД
источник
2020 August 01

m🇲

micky 🇲🇽🚜🇷🇺... in pro.algorithms
wtf
источник

VD

Vlad Doc in pro.algorithms
Stroustrup himself joined in
источник

K

Kotomord_λapki in pro.algorithms
Mikail Bagishov
фу, ДД
Чем дд плохо?
источник

MB

Mikail Bagishov in pro.algorithms
Kotomord_λapki
Чем дд плохо?
тем, что оно хуже чем ДО
источник

MB

Mikail Bagishov in pro.algorithms
Оно не дает гарантий по асимптотике (только матожидание) и медленнее работает
источник