опасные группы отрезков

Условие задачи C

Условие

Даны отрезки и диапазон . Надо найти количество отрезков , таких что отрезки все отрезки с номерами от до при объединение дадут отрезок по длине в диапазоне .

Решение

Решение

Прочитать о том, как решать класс задач про отрезки можно тут

Сначала декомпозируем задачу на две отдельных более простых. Надо посчитать количество отрезов по длине не больше , а затем из этого количества вычесть количество отрезков с длиной не больше . Рассмотрим как решать задачу по нахождению отрезков , что объединение по длине .

Как понять подходит ли отрезок ? Достаточно взять самую правую среди левых границ и самую левую среди правых, другими словами максимум из левых и минимум из правых. Тогда если максимум не больше минимума отрезок существует. Перепишу более понятнее

Из этого следует монотонность при добавление новых отрезков, так как при этом не уменьшается, а не увеличивается, следовательно не увеличивается. Под добавлением тут подразумевается добавление любого отрезка, но нам лишь нужна монотонность по правой границе.

Монотонность по левой не выполняется. При удаление -го отрезка, не увеличится, а не уменьшится. Из этого следует непонятных характер функции — она как и возрастёт, так и может упасть. Обратное противоречие добавлению, что действительно очевидно.

Значит, если найти максимальный индекс правой границы для фиксированного , обозначим его за . То в ответ можно добавить разницу индексов плюс один, так как для фиксированного подходят любые от до .

Значит достаточно перебрать все левые границы, а правую границу получать каждый раз бинпоиском. Что-бы понять подходит ли отрезок , достаточно взять максимум по правым в массиве правых границ на отрезке и аналогично минимум по массиву из левых границ. Для того чтобы брать минимум за надо воспользоваться разряженной таблицей.

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

Ассимптотика .

Более общий разбор вы можете найти тут.

Last change: 2023-10-13, commit: d9af9f8