Алгоритмы

918 задачвместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
Пастбище Фермера Джона может быть представлено как огромная 2D-решётка ячеек, помеченная упорядоченными парами (i,j) для всех 1≤i≤N, 1≤j≤N (1≤N≤150). Некоторые из этих ячеек содержат траву.
Непустое подмножество ячеек решётки называется "сбалансированным", если выполняются следующие условия:

Все ячейки подмножества содержат траву.
Подмножество 4-связное. Другими словами, существует путь из любой ячейки подмножества в любую другую ячейку подмножества такой, что две последовательные ячейки пути соседствуют горизонтально или вертикально.
Если ячейки (x1,y) (x2,y) (x1≤x2) есть часть подмножества, то все ячейки (x,y) с x1≤x≤x2 также часть подмножества.
Если ячейки (x,y1) and (x,y2) (y1≤y2) есть часть подмножества, то все ячейки (x,y) with y1≤y≤y2 также часть подмножества.
Посчитайте количество сбалансированных подмножеств по модулю 109+7.

Входные данные: 
Первая строка содержит число N.
Каждая их последующих N строк содержит строку из N символов. j-ый символ строки i сверху равен G если ячейка (i,j) содержит траву или символ . в противном случае.

Выходные данные: 
Количество сбалансированных подмножеств по модулю 109+7.
 
Примеры
Входные данные Выходные данные Пояснение
1 2
GG
GG
13 Для этого теста все 4-связные подмножества сбалансированные.

G.  .G  ..  ..  GG  .G  ..  G.  GG  .G  G.  GG  GG
.., .., G., .G, .., .G, GG, G., G., GG, GG, .G, GG
2 4
GGGG
GGGG
GG.G
GGGG
  642
Ниже пример подмножества, которое удовлетворяет второму условию (4-связности), но не удовлетворяет третьему условию:

GG..
.G..
GG..
....
Олег очень любит двоичные последовательности — последовательности из нулей и единиц. Совсем недавно он написал в тетради очередную двоичную последовательность из n элементов.
Для выписанной последовательности Олег посчитал Z-функцию.

Z-функцией последовательности s1, . . . , sn называется массив z[1..n], в котором:

• z[1] = 0;
• Если i > 1, то z[i] равно длине наибольшего общего префикса последовательности s и суффикса последовательности s, начинающегося с i-й позиции. Иначе говоря, z[i] равно максимальному k, такому что s1 = si , s2 = si+1, . . . , sk = si+k−1.

Например, для последовательности s = h0, 0, 1, 1, 0, 0, 1i Z-функция следующая: z = h0, 1, 0, 0, 3, 1, 0i.
Записав в тетради последовательность и ее Z-функцию, Олег лег спать. Пока он спал, его младший брат Егор прокрался в комнату и закрасил фломастером последовательность и некоторые значения Z-функции. Проснувшись, Олег заинтересовался, сколько различных двоичных последовательностей он мог вечером написать в тетради, чтобы незакрашенные значения Z-функции были правильными.

Найдите число искомых последовательностей и выведите его по модулю 109 + 7. Заметьте, что Олег мог и ошибиться при вычислении Z-функции, в этом случае ни одна последовательность не подходит и ответ равен 0.
Формат входных данных
В первой строке входного файла находится целое число n — длина исходной двоичной последовательности (1 ≤ n ≤ 1000). Во второй строке входного файла находятся n целых чисел z[1], . . . , z[n], где z[i] — значение Z-функции в позиции i, или −1, если значение в i-й позиции было закрашено (−1 ≤ z[i] ≤ n).

Формат выходных данных
В выходной файл выведите единственное число — остаток от деления числа подходящих двоичных последовательностей на число 109 + 7.
 
Ввод Вывод
3
0 0 1
2
4
0 0 1 0
0
3
0 3 -1
0
3
-1 -1 -1
8


Пояснение
В первом примере подходят последовательности {0, 1, 0 }  и { 1, 0, 1 }.
Во втором примере не существует ни одной двоичной последовательности длины 4 с заданной Z-функцией.
В третьем примере z[2] = 3, что противоречит определению Z-функции, поэтому ответ 0.
В четвертом примере подходит любая двоичная последовательность длины 3.
У Фермера Джона круглый амбар. Амбар состоит из кольца из n комнат, пронумерованных 1…n по периметру (3≤n≤1,000). Каждая комната имеет двери в две соседние комнаты и одну дверь во внешний мир.
ФД хочет разместить ровно ri коров в комнате i (1≤ri≤1,000,000). Он планирует открыть k внешних дверей (1≤k≤7), через которые коровы будут входить в амбар. Каждая корова затем идёт по часовой стрелке, пока не добредёт до нужной комнаты. ФД хочет открыть двери так, чтобы все коровы вместе прошли как можно меньшее расстояние. Коровы предварительно могут собраться как им выгоднее перед этими незакрытыми дверями (эти перемещения не входят в общее расстояние, учитываемое в задаче). Определите минимальное суммарное расстояние, которое придётся пройти коровам, если ФД наилучшим образом выберет какие k открыть.
 
ФОРМАТ ВВОДА:
Первая строка ввода содержит n и k. Последующие n строк содержат r1…rn.

ФОРМАТ ВВОДА:
Выведите минимальное суммарное расстояние пройденное коровами.
 
Ввод Вывод
6 2
2
5
4
2
6
2
14


ФД может открыть двери 2 и 5. 11 коров войдут в двери 2 и пройдут суммарное расстояние 8 чтобы попасть в комнаты 2,3,4. 10 коров войдут в дверь 5 и пройдут общее расстояние 6, чтобы попасть в комнаты 5,6,1.



 
Лыжный маршрут описывается M x N решеткой высот (1 <= M,N <= 500), каждая высота в интервале 0 .. 1,000,000,000.  
 
Некоторые из этих ячеек помечены как стартовые точки маршрута. Организаторы хотят вычислить рейтинг трудности каждой стартовой точке. Рейтинг трудности стартовой точки P – это минимальное число D такое, что корова сможет  успешно достичь как минимум T ячеек решётки  (1 <= T <= MN), если она стартует в P и может двигаться в соседнюю ячейку (на север, юг, запад или восток), только если абсолютная величина разности высот в этих ячейках не превосходит D. 
 
Вычислите рейтинг трудности для каждой стартовой точки и выведите их сумму.
 
 
INPUT FORMAT:
 
* Строка 1: Целые числа M, N, T.
 
* Строки 2..1+M: Каждая из этих M строк содержит N целых высот.
 
* Строки 2+M..1+2M: Каждая из этих M строк содержит N величин равных 0 или 1, где 1 означает, что это ячейка – стартовая точка


OUTPUT FORMAT:
 
* Строка 1: Сумма рейтингов трудности всех стартовых точек (заметим, что это число может не поместиться в 32-битное целое, даже если каждый рейтинг в отдельности поместится).
 

INPUT DETAILS:
 
Местность описывается решеткой из 3 х 5 высот.
Верхняя левая и правая нижняя ячейки являются стартовыми точками.
Из каждой стартовой точки мы должны быть способны добраться до 10 ячеек.
 
OUTPUT DETAILS:
Рейтинг трудности верхнего левого угла равен 4.
Рейтинг трудности правого нижнего угла равен 20.
 
Ввод Вывод
3 5 10
20 21 18 99 5
19 22 20 16 17
18 17 40 60 80
1 0 0 0 0
0 0 0 0 0
0 0 0 0 1
24

 
В коровий кёрлинг вовлечены две команды, каждая из которых двигает N тяжёлых камней (3 <= N <= 50,000) по льду. В конце игры имеется 2N камней на льду, каждый из которых расположен в различной точке
плоскости.  
 
Подсчёт очков в коровьем кёрлинге ведётся следующим образом:
Камень считается «захваченным», если он содержится внутри треугольника, по углам которого находятся камни противника (камень, который находится на границе такого треугольника, также считается захваченным). Счёт команды есть количество камней команды противника, которые «захвачены».
 
Вычислите финальный счёт матча по коровьему кёрлингу, по заданному расположению всех камней.
 
 
INPUT FORMAT:
 
* Строка 1: Целое число N.
 
* Строки 2..1+N: Каждая строка содержит 2 целых числа, указывающих x  и y координаты камня команды A (каждая координата лежит в диапазоне -40,000 .. +40,000).
 
* Строки 2+N..1+2N: Каждая строка содержит 2 целых числа, указывающих x  и y координаты камня команды B (каждая координата лежит в диапазоне -40,000 .. +40,000).
 
OUTPUT FORMAT:
 
* Строка 1: Два разделённых пробелом целых числа, представляющих счета команд A и B 
 
SAMPLE:
 
Ввод Вывод
4
0 0
0 2
2 0
2 2
1 1
1 10
-10 3
10 3 
1 2
 
INPUT DETAILS:
 
У каждой команды по 4 камня.
Команда A имеет камни (0,0), (0,2), (2,0), (2,2).
Команда B имеет камни (1,1), (1,10), (-10,3), (10,3).
 
 
OUTPUT DETAILS:
 
Команда A захватила камень противника в точке (1,1).
Команда B захватила камни противника в точках (0,2) и (2,2).

Аркадий Аркадьевич, широко известный в узких кругах инженер, после выхода на пенсию решил отдохнуть и заняться садоводством. Он уже купил себе участок и собирается сажать там различные овощи и фрукты. Но всем известно, что растения должны расти в грядках, поэтому сейчас Аркадий Аркадьевич занят их сооружением.

Для того чтобы собрать прямоугольную грядку, нужны 4 доски. В идеале это должны быть две пары досок равной длины, тогда из них можно сложить ровный прямоугольник. Но если доски имеют неравную длину, то в одном из углов полученной грядки можно разместить пластиковый уголок: две планки длины \(r\), скреплённые под прямым углом. Уголок со стороной \(r\) позволит увеличить длины двух досок на величину, не превосходящую \(r\). Если противоположными сторонами грядки будут доски длины \(a\) и \(b\), а также \(c\) и \(d\) соответственно, то для того чтобы сделать прямоугольную грядку из этих досок, понадобится уголок размера \(\max(|a-b|, |c-d|)\) . Например, чтобы сделать грядку из досок длины 5, 7, 3, 2, понадобится уголок размера 2. На рисунке чёрным цветом изображены доски и красным цветом изображён уголок.

image

В сарае у Аркадия Аркадьевича нашлись \(n\) досок, \(i\)-я из которых имеет длину \(l_i\). Теперь он хочет выбрать из них четыре и сложить из них грядку таким образом, чтобы использовать уголок наименьшего размера. Помогите ему.

Первая строка входных данных содержит число \(n\) (\(4 \leq n \leq 10^5\)) — количество досок в сарае у Аркадия Аркадьевича.

Следующие \(n\) строк содержат числа \(l_1, \dots, l_n\) (\(1 \leq l_i \leq 10^9\)) — длины досок.

Программа должна сначала вывести число \(r\) — минимально возможный размер уголка.

Во второй строке выведите 4 числа \(a\), \(b\), \(c\), \(d\)  — длины досок, которые необходимо выбрать для грядки. При этом противоположными сторонами прямоугольника будут доски \(a\) и \(b\), а также \(c\) и \(d\). Если есть разные варианты выбора досок для грядки с одной и той же величиной уголка, можно вывести любой из них.

Решения, правильно работающие, когда \(n \leq 30\), будут оцениваться в 20 баллов.

Решения, правильно работающие, когда \(n \leq 100\), будут оцениваться в 45 баллов.

Решения, правильно работающие, когда \(n \leq 500\), будут оцениваться в 65 баллов.

Решения, правильно работающие, когда все \(l_i \leq 30\), будут оцениваться в 10 баллов.

Этаж здания представляет собой прямоугольник из \(n\times m\) квадратных комнат. Из каждой комнаты есть проходы в соседние комнаты. В двух комнатах находятся лестницы. Необходимо разработать план эвакуации — указать для каждой комнаты направление движения в одну из соседних комнат так, чтобы, передвигаясь по комнатам только в указанных направлениях, можно было бы достичь одной из двух лестниц, пройдя минимальное расстояние.

На рисунке изображён возможный план эвакуации для примера из условия. Комнаты с лестницами обозначены звёздочками.

image

Первая строка входных данных содержит число \(n\) — количество строк в плане эвакуации, \(1\le n\le 100\). Вторая строка входных данных содержит число \(m\) — количество столбцов в плане эвакуации, \(2\le m\le 100\). Следующие две строки содержат числа \(r_1\) и \(c_1\) — номера строки и столбца комнаты, в которой находится первая лестница, \(1\le r_1\le n\), \(1\le c_1\le m\). Следующие две строки содержат числа \(r_2\) и \(c_2\) — номера строки и столбца комнаты, в которой находится вторая лестница, \(1\le r_2\le n\), \(1\le c_2\le m\). Гарантируется, что \(r_1\ne r_2\) или \(c_1\ne c_2\). Строки нумеруются сверху вниз числами от 1 до \(n\), столбцы нумеруются слева направо числами от 1 до \(m\).

Программа должна вывести \(n\) строк, каждая строка должна содержать \(m\) символов. Каждый символ соответствует одной комнате. В двух комнатах с лестницами должен находиться символ <<S>> (прописная английская буква). В остальных комнатах находятся символы, указывающие направление движения:

<<<>> (символ <<меньше>>) — налево.

<<>>> (символ <<больше>>) — направо.

<<^>> (символ находится на клавише <<6>>) — вверх.

<<v>> (строчная английская буква) — вниз.

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

 

Решения, правильно работающие, когда \(n=1\), будут оцениваться в 20 баллов.

Решения, правильно работающие, когда \(c_1=c_2\), будут оцениваться в 20 баллов.

Решения, правильно работающие, когда лестницы находятся в двух противоположных углах здания, будут оцениваться в 20 баллов.

СЕКРЕТНО
Дело VOIDLINKER · Эпизод 13 из 13 — финал
Координата активации
ИСТОЧНИК: финальное сообщение voidlinker → cyberone-soc
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Последний раунд, junior. Моя стеганограмма: буква, подряд цифры, та же буква. Других букв в блоке нет. Найди блок с самым длинным цифровым телом; если несколько — выбирай самый левый. Сообщи порядковый номер первого символа (нумерация с 1). Удачи. Финиш. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

Определите последовательность символов: одна буква, затем максимальное количество идущих подряд цифр, затем та же буква (ровно две буквы — первая и последняя). Если таких последовательностей несколько одинаковой длины — выберите с наименьшим порядковым номером первого символа. Выведите этот порядковый номер (нумерация с 1). Если ничего нет — выведите 0.

ВХОДНЫЕ ДАННЫЕ

Одна строка из заглавных букв и цифр, до 2·105 символов.

ВЫХОДНЫЕ ДАННЫЕ

Одно целое число — порядковый номер.

СЕКРЕТНО
Дело VOIDLINKER · Эпизод 11 из 13
Сигнатура BD
ИСТОЧНИК: обратный анализ backdoor v2.6
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Сигнатура моего бэкдора — пара байт BD. В одном ядре их не менее 200. Найди самый короткий непрерывный участок с 200+ парами BD. Я делаю код плотным, а не водянистым. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

Текстовый файл состоит из заглавных букв A,B,C,D,E,F. Определите минимальное количество идущих подряд символов, среди которых пара BD (B и сразу за ним D) встречается не менее 200 раз. Если такой последовательности нет — выведите 0.

ВХОДНЫЕ ДАННЫЕ

Одна строка до 105 символов.

ВЫХОДНЫЕ ДАННЫЕ

Одно целое число.

СЕКРЕТНО
Дело VOIDLINKER · Эпизод 8 из 13
Attack-payload
ИСТОЧНИК: дамп TCP-сессии voidlinker → cyberone-api
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Каждая моя команда атаки начинается с маркера AAttack. За ним идёт арифметическое выражение из целых неотрицательных чисел без ведущих нулей, со знаками + и *. Буквы B и C в дампе — шум. Найди самую длинную мою команду. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

Определите максимальное количество символов в непрерывной последовательности: буква A, затем корректное арифметическое выражение с целыми неотрицательными числами без ведущих нулей, со знаками + и *; внутри выражения нет букв. Длина считается вместе с начальной A.

ВХОДНЫЕ ДАННЫЕ

Одна строка до 105 символов.

ВЫХОДНЫЕ ДАННЫЕ

Одно целое число.

СЕКРЕТНО
Дело VOIDLINKER · Эпизод 7 из 13
Артефакт в памяти
ИСТОЧНИК: core dump процесса voidlinker_payload
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Эксплойт упал, дамп памяти у вас. Внутри — обрывки моих формул. Я работаю на минимальном диалекте: цифры от 1 до 5 и три операции — +, , *. Найди в дампе самое длинное корректное арифметическое выражение. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

Определите максимальное количество символов в непрерывной последовательности, которая является корректным арифметическим выражением: числа из цифр 1–5, между числами ровно один знак +, или *, выражение начинается и заканчивается числом. Если корректных выражений нет — выведите 0.

ВХОДНЫЕ ДАННЫЕ

Одна строка до 105 символов.

ВЫХОДНЫЕ ДАННЫЕ

Одно целое число.

СЕКРЕТНО
Дело VOIDLINKER · Эпизод 6 из 13
Двойная сигнатура
ИСТОЧНИК: readme.md в дампе malware
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Сигнатура моего малвара двойная, для понта. Подстрока 2026 (год моего расцвета) появляется не менее 75 раз, и буква Xровно 90 раз. Оба условия в одном непрерывном куске — и это мой модуль. Найди самый длинный. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

Определите максимальное количество идущих подряд символов, среди которых подстрока 2026 встречается не менее 75 раз и при этом содержится ровно 90 букв X. Если такого окна нет — выведите 0.

ВХОДНЫЕ ДАННЫЕ

Одна строка длиной до 3,5·105 символов.

ВЫХОДНЫЕ ДАННЫЕ

Одно целое число.

СЕКРЕТНО
Дело VOIDLINKER · Эпизод 5 из 13
Управляющий пакет
ИСТОЧНИК: служебный канал voidlinker-c2.onion
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Мой кастомный протокол элегантен: каждый управляющий пакет заканчивается одной нечётной цифрой — маркер конца. Внутри пакета только чётные цифры и буквы, среди букв — ровно 45 контрольных байт K. Других нечётных внутри нет, иначе это мусор. Найди мой самый длинный управляющий пакет. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

Определите максимальное количество идущих подряд символов, среди которых ровно 45 букв K, последовательность заканчивается нечётной цифрой и не содержит других нечётных цифр, кроме последней. Если такой последовательности нет — выведите 0.

ВХОДНЫЕ ДАННЫЕ

Одна строка из заглавных букв и цифр, до 2,5·105 символов.

ВЫХОДНЫЕ ДАННЫЕ

Одно целое число.

СЕКРЕТНО
Дело VOIDLINKER · Эпизод 4 из 13
Шифроблок
ИСТОЧНИК: darknet.onion / #incident-leak / 31.10.2026 14:09
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Слушай, я придумал красивый шифр. Каждый блок данных обёрнут синхросигналом — цифра 7, и в каждом валидном блоке она встречается ровно 60 раз. Не больше, не меньше. Между блоками — мусор. Найди в дампе самый длинный непрерывный участок с ровно 60 семёрками — это мой самый объёмный шифроблок. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

Текстовый файл состоит из десятичных цифр и заглавных букв латинского алфавита. Определите максимальное количество идущих подряд символов, среди которых цифра 7 встречается ровно 60 раз. Если такой последовательности нет — выведите 0.

ВХОДНЫЕ ДАННЫЕ

Одна строка длиной до 2·105 символов.

ВЫХОДНЫЕ ДАННЫЕ

Одно целое число — длина найденной последовательности.

СЕКРЕТНО
Дело VOIDLINKER · Эпизод 3 из 13
Слив ключей
ИСТОЧНИК: pastebin.cyberone.local / voidlinker-leak.txt
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Слышал, у вашего DevSecOps ротация API-ключей раз в полгода? Жаль, что я уже выгрузил их на пастбин. Формат у вас удобный: KEY-XXXX-XXXX-XXXX, заглавные и цифры. Найди их в моём посте — и отзови. Или не отзови. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

Найди все API-ключи формата KEY-XXXX-XXXX-XXXX, где X — символ из A–Z или 0–9. Ключ должен быть отдельным словом (не часть TURNKEY-...). Выведи все найденные ключи в порядке появления.

ВХОДНЫЕ ДАННЫЕ

Произвольный текст до 105 символов.

ВЫХОДНЫЕ ДАННЫЕ

Каждый ключ на отдельной строке.

СЕКРЕТНО
Дело VOIDLINKER · Эпизод 2 из 13
Хронометраж
ИСТОЧНИК: darknet.onion / 31.10.2026 14:38
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Я работал ровно пятнадцать минут: с 14:00:00 до 14:15:59. Всё, что вне этого окна — твои false positives, аналитик. Если найдёшь все мои моменты в логе — может, подскажу, куда ушли деньги. Может. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

В журнале событий найди все временные метки формата YYYY-MM-DD HH:MM:SS, где дата ровно 2026-10-31 и время в окне 14:00:0014:15:59 включительно. Выведи их по одному на строку, в порядке появления.

ВХОДНЫЕ ДАННЫЕ

Произвольный текст до 105 символов.

ВЫХОДНЫЕ ДАННЫЕ

Каждый timestamp на отдельной строке.

СЕКРЕТНО
Дело VOIDLINKER · Эпизод 1 из 13
Первый след
ИСТОЧНИК: darknet.onion / #incident-leak / 31.10.2026 14:09
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Junior, ты только сел за свой access.log, да? Я уже пробежал по твоей сети с десятка адресов. Они там, прямо перед твоим носом. Спорим, ты не вытащишь их все? Я даже не маскировал IP — просто чтобы ты попотел над регулярками. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

На стандартный вход подан произвольный текст лога. Найди все IPv4-адреса и выведи их по одному на строку в порядке появления (включая повторы). IPv4-адрес — четыре числа от 0 до 255 без ведущих нулей, разделённые точками (192.168.0.1 — да, 192.168.001.1 — нет).

ВХОДНЫЕ ДАННЫЕ

Произвольный текст в UTF-8 (несколько строк, до 105 символов).

ВЫХОДНЫЕ ДАННЫЕ

Каждый IPv4-адрес на отдельной строке. Если адресов нет — пустой вывод.

На числовой прямой даны \(n\) отрезков. Нужно выбрать минимальное количество точек на прямой так, чтобы каждый отрезок содержал хотя бы одну из выбранных точек.

Точка \(x\) принадлежит отрезку \([l, r]\), если \(l \le x \le r\) (концы включены).

Формат входных данных

В первой строке — целое число \(n\) (\(1 \le n \le 10^5\)).

В каждой из следующих \(n\) строк — два целых числа \(l_i\) и \(r_i\) (\(-10^9 \le l_i \le r_i \le 10^9\)) — концы очередного отрезка.

Формат выходных данных

Одно целое число — минимальное количество точек.

Примечание

В первом примере четыре отрезка: \([1, 6]\), \([2, 8]\), \([7, 12]\), \([10, 16]\). Точки \(x = 6\) и \(x = 10\) вместе попадают в каждый из отрезков: \(6\) — в первые два, \(10\) — в последние два. Меньше двух точек не хватит — отрезки \([1, 6]\) и \([10, 16]\) не пересекаются, одной общей точки у них нет.

Во втором примере все три отрезка содержат точку \(x = 5\), так что одной точки достаточно.

На числовой прямой даны \(n\) отрезков. Для каждой неупорядоченной пары отрезков \((i, j)\) рассмотрим длину их пересечения. Если отрезки не пересекаются — длина пересечения равна нулю.

Найдите сумму длин пересечений по всем парам.

Формат входных данных

В первой строке — целое число \(n\) (\(1 \le n \le 10^5\)).

В каждой из следующих \(n\) строк — два целых числа \(l_i\) и \(r_i\) (\(-10^9 \le l_i \le r_i \le 10^9\)) — концы очередного отрезка.

Формат выходных данных

Одно целое число — сумма длин пересечений по всем неупорядоченным парам отрезков. Ответ может не помещаться в 32-битный тип.

Примечание

В первом примере три отрезка: \([0, 10]\), \([2, 6]\), \([8, 15]\).

  • Пересечение первого и второго — \([2, 6]\) длины \(4\).
  • Пересечение первого и третьего — \([8, 10]\) длины \(2\).
  • Пересечение второго и третьего пусто.

Сумма: \(4 + 2 + 0 = 6\).

Во втором примере четыре одинаковых отрезка длины \(10\). Каждая из \(\binom{4}{2} = 6\) пар даёт пересечение длины \(10\), итого \(60\).

На числовой прямой даны \(n\) отрезков. Назовём глубиной отрезка \(i\) количество отрезков \(j\) (включая сам отрезок \(i\)), которые целиком его содержат: \(l_j \le l_i\) и \(r_i \le r_j\).

Найдите максимальную глубину среди всех данных отрезков.

Формат входных данных

В первой строке — целое число \(n\) (\(1 \le n \le 5000\)).

В каждой из следующих \(n\) строк — два целых числа \(l_i\) и \(r_i\) (\(-10^9 \le l_i \le r_i \le 10^9\)) — концы очередного отрезка.

Формат выходных данных

Одно целое число — максимальная глубина.

Примечание

В первом примере отрезок \([3, 4]\) содержится в \([2, 5]\), который, в свою очередь, содержится в \([1, 10]\). Глубина \([3, 4]\) равна \(3\): его содержат он сам, \([2, 5]\) и \([1, 10]\). Это максимум.

Во втором примере все три отрезка совпадают, и каждый «содержится» в каждом — глубина равна \(3\).

Поделиться
Класснуть