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


Олимпиадный тренинг

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

Очередь с поддержкой минимума

Структуры данных

Реализуйте очередь с поддержкой минимума.

Входные данные

Первая строка входных данных содержит число N — количество операций с очередью (1≤N≤100000).
В каждой следующей строке содержится число ai (0≤ai≤10000). Если ai>0,
то это число необходимо добавить в очередь. Если ai=0, то это
запрос на удаление элемента из очереди.

Выходные данные

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

 

входные данные выходные данные
9
5
4
3
6
0
0
0
0
0
3
3
3
6
-1
   

Поиск минимума с помощью приоритетной очереди

Куча Структуры данных

Дана последовательность чисел. Найти в ней наименьшее число.
 
Входные данные
Задано сначала число N (количество чисел в последовательности, 1<=N<=100000), а затем
N чисел.
 
Выходные данные
Выведите наименьшее число.

Ввод Вывод
7
4 2 5 -1 4 6 2
-1
 

Река

Структуры данных Двоичное дерево поиска Двоичное дерево поиска Двоичное дерево поиска Корневая оптимизация Декартово дерево

Во Флатландии протекает богатая рыбой река Большой Флат. Много лет назад река была поделена между n рыболовными предприятиями, каждое из которых получило непрерывный отрезок реки. При этом i-е предприятие, если рассматривать их по порядку, начиная от истока, изначально получило отрезок реки длиной ai .

С тех пор с рыболовными предприятиями во Флатландии k раз происходили различные события. Каждое из событий было одного из двух типов: банкротство некоторого предприятия или разделение некоторого предприятия на два.

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

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

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

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

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

Формат входного файла
Первая строка входного файла содержит два целых числа: n и p — исходное количество предприятий (2 ≤ n ≤ 100 000) и номер подзадачи (0 ≤ p ≤ 4). Вторая строка входного файла содержит n целых чисел a1, a2, …, an — длины исходных отрезков реки. Третья строка входного файла содержит целое число k — количество событий, происходивших с предприятиями (1 ≤ k ≤ 100 000). Последующие k строк содержат описания событий, i-я строка содержит два целых числа: ei и vi — тип события и номер предприятия, с которым оно произошло. Значение ei = 1 означает, что предприятие, которое после всех предыдущих событий является vi-м по порядку, если считать с единицы от истока реки, обанкротилось, а значение ei = 2 означает, что это предприятие разделилось на два. Гарантируется, что значение vi не превышает текущее количество предприятий. Гарантируется, что если отрезок предприятия при банкротстве или разделении требуется поделить на две части, то он имеет длину большую или равную 2. Гарантируется, что если на реке осталось единственное предприятие, оно не банкротится.

Формат выходного файла
Выходной файл должен содержать (k + 1) целых чисел, по одному в строке. Первая строка должна содержать исходную сумму квадратов длин отрезков реки, а каждая из последующих k строк — сумму квадратов длин отрезков реки после очередного события.

Пример
Ввод:
4 0
3 5 5 4
5
1 1
2 1
1 3
2 2
1 3
Вывод:
75
105
73
101
83
113

Пояснение к примеру
Распределение отрезков реки между предприятиями после каждого события, описанного в примере, приведено на рисунке ниже.

Чемпионат по поиску в сети Меганет

Структуры данных Строки Динамическое программирование Конструктив Задача на реализацию

Для проведения чемпионата мира по поиску в сети Меганет организаторам необходимо ограничить доступ к некоторым адресам. Адрес в сети Меганет представляет собой строку, состоящую из имени сервера и имени раздела.

Имя сервера представляет собой строку, содержащую от одной до пяти частей включительно. Каждая часть представляет собой непустую строку, состоящую из строчных букв латинского алфавита. Части разделены точкой. Примеры корректных имен сервера: «a», «ab.cd», «abacaba», «a.b.c.d.e».

Имя раздела представляет собой строку, которая может быть либо пустой, либо содержать от одной до пяти частей включительно. Каждая часть начинается с символа «/», после которого следует одна или несколько строчных латинских букв. Примеры корректных имен разделов: «», «/a», «/aba», «/a/b/c/d/e». Адрес формируется приписыванием имени раздела в конец имени сервера. Например, корректными адресами являются строки: «a», «aba/d/f/g/h», «a.b», «aba.caba/def/g», «c.d.e.f.g/a/b/c/d/e».

Для ограничения доступа к некоторым адресам сети Меганет организаторы чемпионата подготовили несколько фильтров. Фильтр, как и адрес, состоит из двух частей: фильтра сервера и фильтра раздела.

Фильтр сервера состоит из имени сервера, перед которым может также идти строка «*.». Если фильтр сервера представляет собой только имя сервера, то этому фильтру соответствует только сервер, имеющий точно такое же имя. Если фильтр сервера представляет собой строку «*.S », где S — имя сервера, то ему соответствуют сервера, удалением нуля или более начальных частей от имени которых можно получить строку S.

Аналогично, фильтр раздела представляет собой имя раздела, после которого может идти строка «/*». Фильтру раздела, который представляет собой просто имя раздела R, соответствуют только разделы, в точности совпадающие с R. Если фильтр раздела представляет собой строку «R/*», то ему соответствуют все разделы, удалением от имен которых нуля или более конечных частей можно получить строку R. Адрес соответствует фильтру, если его имя сервера соответствует фильтру сервера, а его имя раздела соответствует фильтру раздела.

Примеры фильтров и соответствующих им адресов приведены в таблице ниже.

ab.c/d/e ab.c/d/e
*.a a             ax.a         efg.a
*.a/b/c a/b/c       x.a/b/c      e.fg.a/b/c
x.yz/a/* x.yz/a      x.yz/a/b/c    x.yz/a/xyz
*.a/* a             x.a                   e.fg.a
a/b/c    x.a/ddd/c           e.fg.a/b/c/g/haha/i
*.a/b/c/* a/b/c                           x.a/b/c                           e.fg.a/b/c
a/b/c/xxx                   e.fg.a/b/c/d/e/f
   

Требуется написать программу, которая по заданному набору фильтров и списку адресов определяет для каждого адреса, какому числу фильтров соответствует этот адрес.

Пример:
Ввод:
2 0
a.bb/c
bb/c/d
4
a.bb
bb/c/d
a.bb/c/d
bb/c

Вывод:
0
1
0
0


Вывод:
4 0
*.bb/c
*.bb/c/*
bb/c/*
bb/c/*
6
bb
bb/c
bb/c/d
a.bb
a.bb/c
a.bb/c/d

Вывод:
0
4
3
0
2
1

Ремонт асфальта

Структуры данных Задача на реализацию

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

Вы, как коренной житель города Д. и программист по призванию, решили использовать свои профессиональные навыки на благо общества и облегчить жизнь своим соседям по улице М. А именно, вы решили создать сайт, содержащий актуальную информацию о непроходимости улицы. Прежде всего, вы заметили, что улица разбита на N идущих друг за другом участков единичной длины. По странному совпадению бригада рабочих всегда выбирает для ремонта ровно один из таких участков и целиком меняет тип асфальта на нём. Затем вы пронумеровали эти участки от 1 до N и собрали информацию о типе асфальта на каждом из участков — числа t1, t2, . . . , tN (ti — номер типа асфальта на i-м участке, согласно Государственному реестру дорожных покрытий). Наконец, вы определили непроходимость улицы как минимальное количество непрерывных непересекающихся отрезков c одинаковым типом асфальта, на которые она разбивается. Например, непроходимость улицы 110111 равна 3, потому что она состоит из трёх участков 11, 0 и 111, а идеальная улица 2222 имеет непроходимость, равную 1.

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

Формат входных данных
Первая строка входного файла содержит единственное натуральное число N — количество участ- ков дороги (1 <= N <= 100 000). Следующая строка содержит N целых чисел t1, t2, . . . , tN — исходные типы асфальта участков дороги (|ti | <= 109 ). Третья строка содержит единственное натуральное число Q — количество сообщений от жителей об обновлении дорожного покрытия (1 <= Q <= 100 000). Каждая из следующих Q строк содержит очередное сообщение. i-е сообщение представляет собой пару целых чисел pi , ci — номер ремонтируемого участка дороги и новый номер типа асфальта на этом участке (1 <= pi <= N, |ci | <= 109 ). Участки дороги нумеруются от 1 до N в порядке задания их исходного типа асфальта во второй строке входного файла.

Формат выходных данных
Выведите Q строк. i-я строка (1 <= i <= Q) должна содержать единственное целое число — величину непроходимости улицы после первых i обновлений дорожного покрытия.

Примеры

Ввод Вывод
5
2 2 2 2 2
5
1 2
2 3
4 3
3 1
3 3
1
3
5
5
3
7
1 1 2 3 2 2 1
3
2 2
4 2
6 9
5
3
4

Замечание
Рассмотрим подробнее второй тестовый пример. Изначально улица 1123221 состоит из 5 отрезков с одинаковым типом асфальта: 11, 2, 3, 22, 1 и, соответственно, имеет непроходимость, равную 5 (её не нужно выводить в выходной файл).
После первого ремонта улица станет выглядеть как 1223221 и всё ещё будет состоять из 5 участ- ков, но других: 1, 22, 3, 22, 1. Поэтому её непроходимость равна 5, и первое число в выходном файле равно 5.
После второго ремонта улица будет состоять из 3 участков: 1, 22222, 1, так что второе число в выходном файле — 3.
После третьего ремонта получим 4 участка: 1, 2222, 9, 1, соответственно, третье и последнее число в выходном файле — 4.

Урок физкультуры

Структуры данных Дерево отрезков, RSQ, RMQ Сканирующая прямая Словари

Феоктист Всеволодович — преподаватель физкультуры старой закалки, глубоко убеждённый, что в начале каждого урока школьников необходимо построить по росту. Для этого он сначала просит школьников построиться самостоятельно, после чего последовательно меняет местами про- извольную пару стоящих рядом учеников, пока шеренга не примет желанный вид.

Всего на урок пришло N детей, изначально построившихся таким образом, что рост стоящего на позиции i равен hi (используется нумерация c 1). Можно считать, что все числа hi различны и лежат в диапазоне от 1 до N. Шеренга считается упорядоченной, если на первой позиции стоит школьник ростом один, на второй позиции стоит школьник ростом два и так далее.

Феоктист Всеволодович получает большое удовольствие от процесса упорядочивания школьни- ков, поэтому он всегда выбирает наиболее длинную последовательность обменов. С другой стороны, он не хочет чтобы ученики догадались о том, что он умышленно затягивает построение, поэтому никогда не делает заведомо бессмысленных обменов. А именно, преподаватель никогда не меняет местами школьников на позициях i и j, если hi < hj . Очевидно, что данное ограничение делает процесс сортировки шеренги по росту конечным.

Староста Саша очень любит играть в волейбол и прекрасно понимает, что чем дольше препо- даватель будет расставлять всех по местам, тем меньше времени останется для игры. Ученики уже построились некоторым образом, а Феоктист Всеволодович вышел поговорить по телефону, так что Саша может успеть поменять местами ровно двух школьников, необязательно стоящих рядом в ше- ренге. Разумеется, он хочет сделать это таким образом, чтобы преподаватель как можно быстрее закончил упорядочивать шеренгу (Саша давно уже раскусил, как именно действует Феоктист Всево- лодович). С информатикой у старосты всегда были определённые проблемы, поэтому ему требуется ваша помощь.

Формат входных данных
В первой строке ввода содержится единственное число N — количество школьников на уроке (1 <= N <= 1 000 000). Во второй строке записано N различных целых чисел hi (1 <= hi <= N). i-е число соответствует росту школьника стоящего на i-й позиции.

Формат выходных данных
Выведите два числа — номера позиций школьников, которым необходимо поменяться местами, чтобы минимизировать количество действий преподавателя. Если таких пар несколько, то выведите любую из них. Если никому меняться местами не нужно, выведите -1 -1.

Ввод Вывод
5
2 4 3 5 1
2 5
4 1 2 3 4 -1 -1
10
2 3 7 1 5 10 4 6 9 8
3 7

Пожар в НИИЧАВО

Обход в ширину Структуры данных Алгоритмы на графах

В научно-исследовательском институте чародейства и волшебства пожар! Во время опыта Кор- неева В. П. по превращению всей морской и океанской воды планеты в живую воду произошло короткое замыкание, и теперь его кабинет объят пламенем. Задача первостепенной важности — спасти из огня ценные лабораторные приборы, в особенности единственный в своём роде диван- транслятор µ-поля. Ваша задача — перенести диван-транслятор из кабинета Корнеева в запасную лабораторию изучения µ-поля.

НИИЧАВО состоит из N кабинетов, соединённых M коридорами. Кабинеты пронумерованы це- лыми числами от 1 до N, при этом кабинет Корнеева имеет номер A, а лаборатория изучения µ-поля расположена в кабинете номер B. Благодаря специальному искажению пространства внутри инсти- тута, все коридоры имеют одинаковую длину, которую можно пройти за 1 минуту, если двигаться быстрым шагом.

Ситуация усугубляется тем, что диван-транслятор — прибор, очень чувствительный к резким пе- репадам температуры. Внутри каждого коридора НИИЧАВО поддерживается свой температурный режим. Если абсолютная величина разности температур в двух последовательных коридорах на пути из кабинета Корнеева в лабораторию окажется больше D градусов, то диван-транслятор пе- рейдёт в нестабильное состояние, что может привести к катастрофическим последствиям. Обратите внимание, что на своём пути вы не заходите в сами кабинеты, а только переходите из коридора в коридор, поэтому климат внутри кабинетов не влияет на диван-транслятор. В силу причин магиче- ского характера, войдя в коридор, вы обязаны дойти до его конца, иными словами, останавливаться или разворачиваться посреди коридора запрещено. По каждому коридору можно перемещаться в обоих направлениях.

Определите, за какое минимальное время можно добраться из кабинета Корнеева до запасной лаборатории, не допуская резкого перепада температур. В рамках данной задачи вам предлагается ответить на поставленный вопрос для нескольких пар значений A и B.

Формат входных данных
В первой строке входных данных следуют три целых числа N, M и D (2 <= N <= 100 000, 1 <= M <= 200 000, 0 <= D <= 2 · 108 ), обозначающие количество кабинетов, количество коридоров в НИИЧАВО и максимальный допустимый перепад температур для дивана-транслятора в граду- сах. В последующих M строках находятся описания коридоров. Каждая строка содержит по три целых числа ui , vi , ti — номера двух кабинетов, соединённых i-м коридором, и значение температуры в этом коридоре, выраженное в градусах (1 <= ui , vi <= N, −109 <= ti <= 109 ). Как вы уже могли понять, НИИЧАВО — весьма необычное заведение, поэтому между двумя кабинетами может пролегать несколько коридоров, возможно с разными температурами, а некоторые коридоры могут соединять кабинет с самим собой. Гарантируется, что коридоры перечислены во входном файле в порядке неубывания ti . В следующей строке находится целое число Q (1 <= Q <= 50) — количество пар A и B, которые вам требуется обработать. В каждой из последующих Q строк находятся по два целых числа Ai , Bi , обозначающих номер кабинета Корнеева и номер кабинета, в котором расположена лаборатория (1 <= Ai , Bi <= N, Ai != Bi).

Формат выходных данных
Для каждого набора данных выведите в отдельной строке минимальное количество минут, ко- торое требуется потратить, чтобы добраться из кабинета Корнеева до лаборатории, либо выведите −1, если сделать это, используя допустимый для дивана-транслятора маршрут, невозможно.

Примеры

Ввод Вывод
6 9 5
6 6 -42
1 2 4
2 3 6
3 2 7
2 5 11
6 1 12
1 3 15
3 4 16
5 6 18
2
1 5
4 2
4
-1
6 9 7
6 6 -42
1 2 4
2 3 6
3 2 7
2 5 11
6 1 12
1 3 15
3 4 16
5 6 18
1
4 2
5

Замечание
Пояснение к тестам из условия. В обоих тестах план НИИЧАВО выглядит следующим образом:

Рассмотрим первый тест, в нём D = 5. В первом наборе A = 1, B = 5. В качестве воз- можного маршрута может выступить следующая последовательность переходов по коридорам:
Третьим шагом можно вернуться в кабинет 2 и по тому же коридору с t = 6 .
Во втором наборе A = 4, B = 2. Способа добраться из кабинета 4 в кабинет 2, ни разу не допустив перепад температуры больше, чем в 5 градусов, не существует.

Во втором тесте D = 7. В единственном наборе A = 4, B = 2 cтартовый и конечный кабинет те же, что и во втором наборе первого теста из условия, но допустимый перепад температур больше, благодаря чему подходит следующий маршрут: 

Шифрование

Задача на реализацию Множества Структуры данных

Одним из самых простых способов шифрования открытого текста является шифр простой замены. Он состоит в том, что каждая буква в алфавите, которым написано открытое сообщение, заменяется на какой-то другой символ, например, другую букву того же алфавита. Пусть дана таблица замены, использующая для замены только 33 буквы русского алфавита в верхнем регистре (заглавные буквы):
   

Сообщение Шифртекст Сообщение Шифртекст Сообщение Шифртекст
А Г К Т Х З
Б Ш Л Х Ц Ж
В Ы М Я Ч Л
Г О Н Ь Ш Ё
Д Э О Ф Щ Н
Е Ц П У Ъ Д
Ё М Р К Ы Е
Ж Ъ С Ю Ь Б
З Щ Т Р Э Ч
И А У П Ю И
Й В Ф С Я Й

Если применить замену, заданную такой таблицей, к слову «ДОМ», получится зашифрованный текст «ЭФЯ». Если применить замену к полученному результату, из «ЭФЯ» получится «ЧСЙ», а из «ЧСЙ» таким способом можно получить текст «ЛЮВ». Известно, что через некоторое количество применений замены полученный результат совпадет с исходным словом «ДОМ», после чего результаты замены начнут повторяться. Определите, сколько различных шифртекстов (включая совпадающий с исходным словом) можно получить из произвольного заданного слова по произвольно заданной таблице замены таким способом.

Рекомендации.
До начала работы над программной реализацией постарайтесь найти ответы на следующие вопросы:
1. Сколько различных зашифрованных текстов (включая и совпадающий с открытым текстом) можно получить одной операцией замены из открытого текста с n различными буквами, используя все возможные таблицы замены.
2.Можно ли получить все возможные зашифрованные тексты (число которых установлено в пункте 1), применяя к результату зашифрования операцию замены символов по одной и той же таблице неограниченное число раз.

Формат ввода:
В первой строке задана строка с  алфавитом используемых символов. Во второй строке задана последовательность заглавных букв, заменяющих буквы, стоящие в алфавитном порядке (таблица замены). Например, приведенной выше таблице соответствует строка «ГШЫОЭЦМЪЩАВТХЯЬФУКЮРПСЗЖЛЁНДЕБЧИЙ». В следующей строке задано слово, являющееся открытым текстом – в верхнем регистре (заглавными буквами) без пробелов. Например, слово «КРИПТОАНАЛИЗ».
Каждая из этих строк заканчивается либо символами с кодами 13, 10 (окончание строк DOS – для Pascal ABC .NET), либо символом с кодом 10 (окончание строк Unix) в зависимости от выбранного при сдаче программы типа конца строк. Никаких других символов в двух входных строка не встречается.
Русский текст задан в кодировке Windows-1251 (cp1251). В ней заглавные русские буквы от "А" до "Я" кроме буквы "Ё" имеют коды от 192 (шестнадцатеричное C0) до 223 (шестнадцатеричное DF). Буква "Ё" имеет код 168 (шестнадцатеричное A8). Русские буквы (кроме "Ё") упорядочены по алфавиту.

Формат вывода:
В единственной строке выведите число, соответствующее количеству различных возможных шифртекстов, которые можно получить из заданного открытого текста с помощью заданной таблицы замены.
 

Падающее домино

Префиксные суммы(минимумы, ...) Структуры данных Разбор случаев

Вася обожает выставлять сложные фигуры из костяшек домино и, толкнув одну из них, смот- реть, как вся конструкция падает. Однако, он сделал уже так много фигур, что решил придумать что-то новое.
Для своей новой идеи он использует костяшки не только длиной 2, но и более длинные (и более короткие). Все костяшки выстраиваются в одну линию на расстоянии 1, а цель игры опрокинуть все костяшки толкнув наименьшее количество костяшек.

Каждую костяшку можно толкнуть влево или вправо, падая она опрокидывает все костяшки, находящиеся на расстоянии строго меньшем высоты падающей костяшки. При этом те костяшки, которые упали в результате падения на них других костяшек также падают в ту же сторону и, в свою очередь, могут опрокидывать и другие костяшки и так далее.
 
Формат входных данных
В первой строке записано натуральное число N  (0 <= N <= 1 000 000)      количество костяшек.  Во второй строке записано N натуральных чисел Hi (1 <= Hi <= 1 000 000) высоты костяшек.
Формат выходных данных
Выведите число M наименьшее количество костяшек, которые нужно толкнуть, чтобы вся конструкция упала.
В следующих M строках выведите описание костяшек, которые необходимо толкнуть: номер костяшки (нумерация начинается с единицы и идет слева-направо), а также направление толчка: букву L для толчка влево и R для толчка вправо. Номер костяшки и букву разделяйте пробелом.
Порядок вывода костяшек, которые нужно толкнуть, может быть произвольным. Если решений несколько выведите любое из них

Система оценки
Решения, верно работающие при N <= 1000, будут набирать не менее половины баллов.
 
Ввод Вывод
6
1 2 1 4 1 3
1
6 L
7
1 2 4 1 2 3 2
2
3 R
2 L
Замечание
В первом примере последняя костяшка толкается влево, опрокидывая костяшки с номерами 4 и 5 (их высоты 4 и 1 соответственно). Костяшка номер 4 также падает налево и опрокидывает костяшки с номерами 1, 2 и 3.
Во втором примере костяшка номер 3 толкается вправо, опрокидывая костяшки номер 4, 5 и 6.
Костяшка номер 6 также падает вправо и опрокидывает костяшку номер 7. После этого костяшка
номер 2 толкается влево и опрокидывает костяшку номер 1.

Воздушные потоки

Деревья Наименьший общий предок Разреженные таблицы (sparse table) Структуры данных Префиксные суммы(минимумы, ...)

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

Представим воздушные потоки как массив h[1..n] из n натуральных чисел — высот потоков. Для каждого 1 ≤ i ≤ n посчитаем G[i] — индекс ближайшего элемента слева, строго большего h[i]. Более формально, g[i] = max{j | j < i и h[j] > h[i]}. Если i = 1 или до h[i] нет ни одного элемента больше него, то G[i] считается равным 0.

Колобок считает, что оптимальность расположения воздушных потоков определяется суммой


Чем меньше сумма, тем расположение оптимальнее. Всё, что может сейчас сделать Колобок — это увеличить высоту одного из воздушных потоков не более чем на m. После этого действия высота потока должна остаться целым числом, но может, если необходимо, стать и нечётной.

Помогите Колобку сделать оптимальное изменение, которое позволит добиться, чтобы сумма S(h), описанная выше, после проделанного действия была минимальна.

Формат входного файла
В первой строке входного файла даны числа n, m (1 ≤ n ≤ 105 , 1 ≤ m ≤ 109 ) — количество воздушных потоков и максимальное значение, на которое можно увеличить высоту одного из них. Во второй строке даны высоты воздушных потоков h[i] (1 ≤ h[i] ≤ 109 ). Гарантируется, что все высоты — чётные числа.

Формат выходного файла
В единственной строке выходного файла выведите одно целое число — минимальную искомую сумму.
 

Ввод Вывод
3 100
4 2 6
4
3 2
4 2 6
5
3 10
2 2 2
4

Карандаши

Структуры данных

Новое увлечение Колобка — рисование. Он решил купить k наборов карандашей. Каждый набор состоит из одного или нескольких карандашей. Каждый карандаш имеет положительную длину, которая выражается целым числом миллиметров.

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

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

Формат входного файла
В первой строке находятся два натуральных числа n, k (1 ≤ n ≤ 105 , 1 ≤ k ≤ n) — количество наборов карандашей, имеющихся в магазине, и количество наборов, необходимое Колобку. В каждой из следующих n строк находится ci (1 ≤ ci ≤ 2·105 ) — количество карандашей в наборе. Далее, в этой же строке, следуют ci натуральных чисел aij (1 ≤ aij ≤ 109 ) — длины карандашей в i-м наборе. Гарантируется, что сумма всех ci не превосходит 2 · 105 .

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

Ввод Вывод
3 2
3 1 3 4
3 5 1 2
1 4
3
5 3
3 2 1 3
2 4 1
3 4 2 4
4 3 2 3 3
2 5 6
3

Путь в никуда

Деревья Деревья Структуры данных Разреженные таблицы (sparse table) Бинарный поиск Префиксные суммы(минимумы, ...)

Колобку снится странный сон.
В нём Колобок находится на клетчатом поле размера n × m в клетке с координатами (x, y).
Изначально Колобок смотрит вдоль положительного направления оси X. Затем он начинает идти по полю со следующей закономерностью:
• Пройти на одну клетку вперед. Повернуть на 90o вправо.
• Пройти на одну клетку вперед. Повернуть на 90o вправо.
• Пройти на две клетки вперед. Повернуть на 90o вправо.
• Пройти на две клетки вперед. Повернуть на 90o вправо.
• Пройти на три клетки вперед. Повернуть на 90o вправо.
• Пройти на три клетки вперед. Повернуть на 90o вправо.
• Пройти на четыре клетки вперед. Повернуть на 90o вправо.
• И так далее...

Движение продолжается до тех пор, пока Колобок не выйдет за границы поля. После этого Колобок просыпается.

Утром Колобок решил проанализировать свой сон. Он догадался, что в каждой клетке он был максимум один раз, но никак не может вспомнить, сколько клеток он посетил. Колобок просит вас написать программу, которая посчитает количество посещённых им клеток.




Формат входного файла
В первой строке входного файла находятся два натуральных числа n, m (1 ≤ n, m ≤ 109 ) — размеры доски вдоль оси X и оси Y соответственно. Во второй строке находятся два натуральных числа x, y (1 ≤ x ≤ n; 1 ≤ y ≤ m) — координаты стартовой позиции колобка.

Формат выходного файла
В выходной файл выведите одно число — количество клеток, посещенных Колобком во сне.
 

Вывод Ввод
7 6
3 4
36
2 2
1 1
2
2 2
1 2
4

Комментарий
На рисунке наглядно показан первый пример.
 

Switch Grass

Минимальный каркас Структуры данных Дерево отрезков, RSQ, RMQ Обход в глубину Алгоритмы на графах

Фермер Джон обнаружил, что разные типы коров любят разные типы травы. Однако он должен правильно их высаживать, чтобы не навредить.
Ферма Джона состоит из NN (1≤N≤200,000), полей, и MM пар полей соединены двунаправленными дорожками (1≤M≤200,000). Используя эти дорожки, можно пройти от любого поля к любому другому полю. Каждая дорожка имеет целочисленную длину в интервале 1…1,000,000. Любая пара полей соединена не более чем одной прямой дорожкой.
 
В каждом поле ФД изначально посадил один из KK типов травы (1≤K≤N). Через некоторое время, однако, он может решить изменить тип травы на некоторых из полей. Он называет это операцией "обновления".
 
После каждого обновления, ФД хочет знать длину кратчайшего пути между двумя полями, имеющими различные типы травы. То есть, среди всех пар полей, имеющих различные типы травы, он хочет узнать, какие два поля ближайшие друг к другу. Гарантируется, что всегда имеется как минимум одна пара полей с различными типами травы.
 
В 30 процентах тестов каждое поле непосредственно соединено не более чем с 10 дорожками.
 
ФОРМАТ ВВОДА:
 
Первая строка ввода содержит четыре целых числа N, M, K, Q, где Q - количество операций обновления (1≤Q≤200,000). Следующие M строк описывают дорожки. Каждая строка содержит три целых числа A, B, L, указывающих, что есть дорожка между полями A, B и её длина L. (A, B - целые числа в интервале 1…N). Следующая строка указывает начальный тип травы для каждого поля (N целых чисел в интервале 1…K). Затем идут Q строк, каждая из которых описывает одну операцию обновления двумя целыми числами A и B, означающими, что на поле A типе травы изменён на B.
 
ФОРМАТ ВЫВОДА:
 
Для каждой операции обновления выведите длину кратчайшего пути между двумя полями с различными типами травы, после применения этой операции обновления.
 
Ввод Вывод
3 2 3 4
1 2 3
2 3 1
1 1 2
3 3
2 3
1 2
2 2
1
3
3
1

По крышам!

Динамическое программирование Структуры данных Динамическое программирование

В городе будущего Иннополис еще во всю идет стройка, но уже сейчас построено n зданий. Крышу каждого здания можно представить как прямоугольник со сторонами, параллельными осям координат. Никакие здания не касаются и не пересекаются.

Инна любит гулять по крышам. Она стоит на крыше здания с номером 1 и хочет попасть на крышу здания с номером n.

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

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

Формат входных данных
В первой строке задано натуральное число n — число зданий в Иннополисе (n<= 105). В следующих n строках заданы крыши зданий. Каждая из этих строк содержит четыре целых числа xi1, yi1, xi2 и yi2 — координаты противоположных вершин прямоугольника, описывающего крышу здания (xi1 < xi2; yi1 < yi2) Гарантируется, что никакие два прямоугольника не имеют общих точек. Все координаты — неотрицательные целые числа и <= 109

Формат выходных данных
Выведите одно целое число — минимальное количество прыжков, которые Инна должна совер- шить, чтобы добраться с крыши здания 1 до крыши здания n. Если же Инна не может добраться до крыши n-го здания, выведите -1.

Ввод Вывод
4
0 0 3 2
1 6 4 8
1 3 4 5
7 7 10 9
3
3
0 0 3 2
1 3 4 5
7 7 10 9
-1

Trapped in the Haybales

Динамическое программирование: один параметр Динамическое программирование Дерево отрезков, RSQ, RMQ Структуры данных

Фермер Джон получили груз из N больших стогов сена (1≤N≤100,000), и разметил их в различных положениях вдоль дороги, ведущей к амбару. К несчастью, он полностью забыл, что корова Беси пасётся вдоль дороги и может попасть в ловушку между стогами сена.
Каждый стог j имеет размер Sj и позицию Pj определяющую его положение вдоль дороги. Беси может двигаться вдоль дороги вплоть до позиции стога, но не может пересечь эту позицию. Исключение – если она прошла в этом направлении D единиц расстояния, тогда она набрала достаточно скорости, чтобы протаранить стог любого размера строго меньше чем D. Конечно после этого она может продолжить движение и таранить другие стога.
 
Беси может выйти на свободу если она в конце концов протаранит протаранит самый левый или самый правый стог. Вычислите общий размер участка дороги, состоящий из возможных точек старта Беси, из которых она не сможет выбраться.
 
ФОРМАТ ВООДА:
Первая строка ввода содержит N. Каждая из последующих N строк описывает стог, и содержит два целых числа определяющих размер и позицию в диапазоне 1…109. Все позиции различны.
ФОРМАТ ВЫВОДА:
Выведите одно целое число – размер области дороги, откуда Беси не сможет выбраться.
 
Ввод Вывод
5
8 1
1 4
8 8
7 15
4 20
14


 

Censoring

Строки Хеш Структуры данных

Фермер Джон купил подписку журнала Good Hooveskeeping для своих коров. К сожалению, последний номер содержит неподходящую статью - как приготовить бифштекс. ФД не хочет, чтобы его коровы её читали.
 
ФД взял текст журнала, создал строку S длиной не более чем 10^5 символов. У него есть список слов t_1, t_2, ..., t_N, которые он хочет удалить из S. Поэтому ФД находит ближайшее вхождение слова из списка T (то есь с наименьшим индексом) и удаляет его из S. Затем он продолжает это процесс опять, пока в S не останется слов из T. Заметим, что удаление слова может создавать новое вхождение свлоа из T, которое не существовало ранее.
 
ФД заметил, что слова из списка T обладают таким свойством, что никакое из них не является подстрокой другого слова из T. В частности, это означает, что ранее вхождение слова из T в S всегда определено однозначно. Пожалуйста, помогите ФД определить финальное содержание строки S.
 
INPUT FORMAT: 
Первая строка содержит S. Вторая строка содержит N - количество удаляемых слов. Последующие N строк содержат строки t_1, t_2, ..., t_N. Каждая строка содержит только маленькие латинские буквы (a..z) и суммарная длина всех строк не превысит 10^5.
 
OUTPUT FORMAT: 
Строка S после всех удалений. Гарантируется, что S не станет пустой.
 
Ввод Вывод
begintheescapexecutionatthebreakofdawn
2
escape
execution
beginthatthebreakofdawn


 

Cow Curling

Вычислительная геометрия Динамическое программирование Структуры данных

В коровий кёрлинг вовлечены две команды, каждая из которых двигает 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).

Load Balancing

Дерево Фенвика Дерево отрезков, RSQ, RMQ Структуры данных Тернарный поиск

Коровы Фермера Джона стоят в различных точках (x1,y1)…(xn,yn) его поля (1≤N≤100,000, все xi и yi - положительные нечётные целые числа, не превышающие 1,000,000. ФД хочет разделить своё поле изгородью бесконечной длины с севера на юг, описываемой уравнением x=a (a - чётное целое, так обеспечивается, что изгородь не пройдёт через позицию ни одной коровы). Также он хочет построить изгородь бесконечной длины с востока на запад, которая описывается уравнением y=b, где b - чётное целое. Эти две изгороди пересекаются в точке (a,b), и вместе делят поле на четыре региона.
ФД хочет выбрать a и b так, чтобы получить "сбалансированное" количество коров во всех регионах, т.е. чтобы не было региона, который содержит слишком много коров. Пусть M - максимальное количество коров в этих четырёх регионах, ФД хочет, чтобы M было как можно меньше. Помогите ФД определить это минимально возможное значение для M.
 
ФОРМАТ ВВОДА:
Первая строка ввода содержит одно целое число, N. Каждая из следующих n строк содержит местоположение одной коровы, указанное её координатами x и y.
ФОРМАТ ВЫВОДА:
Выведите минимально возможное значение M, которое может достичь ФД оптимальным расположением изгородей.
 
Ввод Вывод
7
7 3
5 5
7 13
3 1
11 7
5 3
9 1
2

Башни 3.0

Структуры данных Дерево отрезков, RSQ, RMQ Дерево отрезков, RSQ, RMQ

В компьютерной игре есть n башен, высота i-й башни равна ai метров. Определим расстояние между двумя башнями с индексами i и j как |i−j|. Разрешается прыгнуть с i-й башни на j-ю башню тогда и только тогда, когда не существует такого индекса 1 <= k <= n, такого, что расстояние от i-й до j-й башни не меньше расстояния от i-й башни до k-й башни, и k-я башня имеет большую высоту, чем j-я. Башня j достижима из башни i если существует последовательность корректных прыжков, которая начинается в i-й башне и заканчивается в j-й.
 

Вам даны q запросов вида (u,v,l,r). Для каждого запроса посчитайте количество индексов l <= k <= r, таких, что k-я башня достижима из u-й башни и из v-й башни. Обратите внимание, что во многих подзадачах выполняется ограничение u=vl=1r=n, то есть ответом на запрос будет общее число башен, достижимых из u .

 

Входные данные
Первая строка входных данных содержит одно целое число n (1 <= <= 500000) - количество башен.
Вторая строка входных данных содержит n чисел a1, a2, ..., an (1 <= a<= 109) - высоты башен.

Третья строка входных данных содержит одно целое число q (1 <= q  <= 500000) - количество запросов.

Следующие q строк описывают запросы. i-я из них описывает i-й запрос и содержит четыре целых числа uiviliri (1<= ui, vi <= n, 1 <= li <= ri <= n) - индексы вершин запроса и границы отрезка запроса.

 

Выходные данные

Выведите n чисел, i-е из которых должно быть равным ответу на i-й запрос.

 

Примечание

В первых двух примерах запросы спрашивают количество достижимых из каждой башни башен.

В первом примере с 1-й башни можно прыгнуть на башни 1 и 5. Любая другая башня имеет меньшую высоту, чем башня 1, поэтому туда нельзя прыгнуть (в качестве k можно выбрать 1). Множество достижимых из 1-й башни также состоит из башен 1 и 5. Со второй башни можно прыгнуть на башни 1, 2, и 5, они же являются множеством достижимых. С третьей башни можно прыгнуть на башни 2, 3, 5. Однако, башня 1 также является достижимой, поскольку можно сделать два прыжка: 3→2→1. Таким образом, получается 4 достижимые башни. С 4-й башни можно прыгнуть на башни 4 и 5, они же являются единственными достижимыми. Из 5-й башни достижима только она сама.

Во втором примере из 1-й и из 2-й башни достижимы башни 1,2,3,4,5. Из 3-й башни достижимы башни 3,4,5. Из 4-й и 5-й башни достижимы башни 4,5. Из 6-й башни достижимы башни 4,5,6. Из 7-й башни достижимы башни 4,5,6,7.

Рассмотрим третий пример:

  • В первом запросе множество индексов башен k на отрезке [l,r], достижимых из u и из v — {3,6}.
  • Во втором запросе множество индексов башен k на отрезке [l,r], достижимых из u и из v — {6}.
  • В третьем запросе множество индексов башен k на отрезке [l,r], достижимых из u и из v — {3}.
  • В четвёртом запросе множество индексов башен k на отрезке [l,r], достижимых из u и из v пусто.
  • В пятом запросе множество индексов башен k на отрезке [l,r], достижимых из u и из v — {6}.
 
Примеры
Входные данные Выходные данные
1
5
7 6 3 4 10
5
1 1 1 5
2 2 1 5
3 3 1 5
4 4 1 5
5 5 1 5
2
3
4
2
1
2
7
1 1 1 2 2 1 1
7
1 1 1 7
2 2 1 7
3 3 1 7
4 4 1 7
5 5 1 7
6 6 1 7
7 7 1 7
5
5
3
2
2
3
4
3
7
6 8 9 3 5 10 1
5
1 3 2 7
4 5 1 6
1 4 2 4
4 7 1 3
1 5 3 6
2
1
1
0
1

Башни 2.0

Задача на реализацию Структуры данных Структуры данных Алгоритмы обработки Линейные алгоритмы Алгоритмы обработки

В компьютерной игре есть n башен, высота i-й башни равна ai метров. Определим расстояние между двумя башнями с индексами i и j как |i−j|. Разрешается прыгнуть с i-й башни на j-ю башню тогда и только тогда, когда не существует такого индекса 1 <= k <= n, такого, что расстояние от i-й до j-й башни не меньше расстояния от i-й башни до k-й башни, и k-я башня имеет большую высоту, чем j-я. Башня j достижима из башни i если существует последовательность корректных прыжков, которая начинается в i-й башне и заканчивается в j-й. Посчитайте для каждой башни количество достижимых из неё башен, включая её саму.


Входные данные

Первая строка входных данных содержит одно целое число n (1 <= <= 500000) - количество башен.

Вторая строка входных данных содержит n чисел a1, a2, ..., an (1 <= a<= 109) - высоты башен.


Выходные данные
Выведите n чисел, i-е из которых должно быть равным количеству башен, достижимых из i-й башни.
 
Примечание

В первом примере с 1-й башни можно прыгнуть на башни 1 и 5. Любая другая башня имеет меньшую высоту, чем башня 1, поэтому туда нельзя прыгнуть (в качестве k можно выбрать 1). Множество достижимых из 1-й башни также состоит из башен 1 и 5. Со второй башни можно прыгнуть на башни 1, 2, и 5, они же являются множеством достижимых. С третьей башни можно прыгнуть на башни 2, 3, 5. Однако, башня 1 также является достижимой, поскольку можно сделать два прыжка: 3→2→1. Таким образом, получается 4 достижимые башни. С 4-й башни можно прыгнуть на башни 4 и 5, они же являются единственными достижимыми. Из 5-й башни достижима только она сама.

Во втором примере из 1-й и из 2-й башни достижимы башни 1,2,3,4,5. Из 3-й башни достижимы башни 3,4,5. Из 4-й и 5-й башни достижимы башни 4,5. Из 6-й башни достижимы башни 4,5,6. Из 7-й башни достижимы башни 4,5,6,7.

 
 
Примеры
Входные данные Выходные данные
1
5
7 6 3 4 10
2 3 4 2 1 
2
7
1 1 1 2 2 1 1
5 5 3 2 2 3 4 

Башни 2.0

Задача на реализацию Структуры данных Структуры данных Алгоритмы обработки Линейные алгоритмы Алгоритмы обработки

В компьютерной игре есть n башен, высота i-й башни равна ai метров. Определим расстояние между двумя башнями с индексами i и j как |i−j|. Разрешается прыгнуть с i-й башни на j-ю башню тогда и только тогда, когда не существует такого индекса 1 <= k <= n, такого, что расстояние от i-й до j-й башни не меньше расстояния от i-й башни до k-й башни, и k-я башня имеет большую высоту, чем j-я. Башня j достижима из башни i если существует последовательность корректных прыжков, которая начинается в i-й башне и заканчивается в j-й. Посчитайте для каждой башни количество достижимых из неё башен, включая её саму.


Входные данные

Первая строка входных данных содержит одно целое число n (1 <= <= 500000) - количество башен.

Вторая строка входных данных содержит n чисел a1, a2, ..., an (1 <= a<= 109) - высоты башен.


Выходные данные
Выведите n чисел, i-е из которых должно быть равным количеству башен, достижимых из i-й башни.
 
Примечание

В первом примере с 1-й башни можно прыгнуть на башни 1 и 5. Любая другая башня имеет меньшую высоту, чем башня 1, поэтому туда нельзя прыгнуть (в качестве k можно выбрать 1). Множество достижимых из 1-й башни также состоит из башен 1 и 5. Со второй башни можно прыгнуть на башни 1, 2, и 5, они же являются множеством достижимых. С третьей башни можно прыгнуть на башни 2, 3, 5. Однако, башня 1 также является достижимой, поскольку можно сделать два прыжка: 3→2→1. Таким образом, получается 4 достижимые башни. С 4-й башни можно прыгнуть на башни 4 и 5, они же являются единственными достижимыми. Из 5-й башни достижима только она сама.

Во втором примере из 1-й и из 2-й башни достижимы башни 1,2,3,4,5. Из 3-й башни достижимы башни 3,4,5. Из 4-й и 5-й башни достижимы башни 4,5. Из 6-й башни достижимы башни 4,5,6. Из 7-й башни достижимы башни 4,5,6,7.

 
 
Примеры
Входные данные Выходные данные
1
5
7 6 3 4 10
2 3 4 2 1 
2
7
1 1 1 2 2 1 1
5 5 3 2 2 3 4 

Лифт

Задача на реализацию Сортировка событий Использование сортировки Множества Структуры данных

В современном многоэтажном офисе крупной компании установлен новый лифт. В
компании работает n сотрудников. Для проверки эффективности системы управления
лифтом требуется провести моделирование его работы в конце рабочего дня, когда все
сотрудники должны покинуть здание и спуститься на первый этаж.
В здании m этажей, пронумерованных от 1 до m снизу-вверх. Известно, что i-й
сотрудник подходит к лифту в секунду ti на этаже ai, чтобы спуститься на первый этаж.
На каждом этаже могут находиться люди, ожидающие лифт. Когда очередной
сотрудник подходит к лифту, он вызывает лифт, если на этом этаже лифт еще не вызван,
либо присоединяется к ожидающим лифт. Таким образом, помимо вызвавшего лифт, вместе
с ним лифт могут ожидать и другие сотрудники.
В каждый момент времени не более одного вызова является активным.
Изначально лифт свободен и находится на первом этаже. Когда поступает первый
вызов, этот вызов становится активным и лифт отправляется на соответствующий этаж. Если
несколько вызовов поступает одновременно, активным становится вызов от сотрудника с
меньшим номером.
Лифт перемещается между этажами со скоростью один этаж в секунду. Когда лифт
оказывается на этаже, откуда был сделан активный вызов, в него заходят все, кто уже
ожидает лифт на этом этаже, и лифт отправляется вниз на первый этаж, со скоростью один
этаж в секунду.
При движении вниз лифт останавливается на тех этажах, в которых был сделан вызов
на момент проезда лифта мимо этого этажа. Все ожидающие лифт сотрудники заходят в него
и вызов на этом этаже сбрасывается. Когда лифт завершает движение на первом этаже, все
люди выходят из лифта, а лифт ожидает следующего вызова.
Если в момент, когда лифт освободился, есть хотя бы один необслуженный вызов,
активируется вызов, который поступил раньше других. Если несколько вызовов поступило
одновременно, активируется вызов от сотрудника с меньшим номером. Лифт продолжает
обслуживание описанным образом, пока все n сотрудников не окажутся на первом этаже.
Будем считать, что люди входят и выходят из лифта мгновенно. Каждую секунду
сначала люди подходят и вызывают лифт, а затем выполняются соответствующие действия
(лифт перемещается на соседний этаж, в него входят или из него выходят люди, принимается
решение, на какой вызов лифт должен отреагировать).
Требуется написать программу, которая по описанию вызовов лифта для каждого
сотрудника определяет, в какой момент этот сотрудник окажется на первом этаже.

Формат входных данных
Первая строка входных данных содержит целые числа n и m — количество людей,
вызывающих лифт, и количество этажей в здании (1 ≤ n ≤ 105, 2 ≤ m ≤ 109).
Следующие n строк описывают сотрудников, i-я из этих строк содержит два целых
числа ti и ai — секунду, в которую i-й сотрудник подходит к лифту, и номер этажа, на
котором это происходит (1 ≤ t1 ≤ t2 ≤ … ≤ tn ≤ 109, 2 ≤ ai ≤ m)
 
Формат выходных данных
Выходные данные должны содержать n целых чисел, для каждого сотрудника
требуется вывести секунду, в которую он выйдет из лифта на первом этаже.
 
Ввод Вывод
5 4
2 3
2 4
5 2
5 3
9 3
 
6
12
6
12
12

 
Пояснение к примеру
Пример работы лифта по шагам показан в следующей таблице. 


Использованные в пояснении к примеру обозначения

Обработка больших данных

Структуры данных Множества Динамическое программирование

В научной лаборатории разрабатывается новая архитектура суперкомпьютера,
позволяющая эффективно обрабатывать большие объемы данных.
Суперкомпьютер имеет 2k ячеек памяти, пронумерованных от 0 до 2k– 1. Отрезком
[L, R] называется последовательность подряд идущих ячеек памяти с номерами от L до R,
включительно.
Некоторые отрезки памяти являются корректными. Отрезок памяти [L, R] является
корректным, если его длина (R – L + 1) равна 2i для некоторого i, а число L делится на 2i.
Например, если k = 3, то ячейки памяти пронумерованы от 0 до 7, а корректными являются
отрезки [0, 7], [0, 3], [4, 7], [0, 1], [2, 3], [4, 5], [6, 7], [0, 0], [1, 1], [2, 2], [3, 3], [4, 4], [5, 5], [6,
6] и [7, 7].
Ключевой операцией в новой архитектуре является операция STORE, которая за одно
действие присваивает одно и то же значение всем ячейкам памяти некоторого корректного
отрезка.
Исходно все ячейки памяти содержат значение 0. В лаборатории планируют запустить
на суперкомпьютере программу обработки данных, но перед её запуском необходимо
инициализировать память определенным образом. А именно: первые с1 ячеек памяти
необходимо заполнить значениями v1, следующие c2 ячеек — значениями v2, и так далее,
последние cn ячеек памяти необходимо заполнить значениями vn, где 1 ≤ vi ≤ m.
Ученым надо выяснить, какое минимальное количество операций STORE необходимо
выполнить, чтобы проинициализировать память требуемым образом.
Например, если k = 3, n = 3, m = 2, c1 = 1, v1 = 1, c2 = 2, v2 = 2, c3 = 5, v3 = 1, то итоговое
содержимое памяти должно быть следующим: [1, 2, 2, 1, 1, 1, 1, 1]. В этом случае для
инициализации памяти достаточно трех операций STORE:
- STORE([0, 7], 1), после этой операции все ячейки памяти содержат значение 1;
- STORE([1, 1], 2), после этой операции содержимое памяти [1, 2, 1, 1, 1, 1, 1, 1];
- STORE([2, 2], 2) , после этой операции содержимое памяти [1, 2, 2, 1, 1, 1, 1, 1],
как и требуется.
Заметим, что операцию STORE([1, 2], 2) выполнить нельзя, потому что [1, 2] не
является корректным отрезком памяти.
Требуется написать программу, которая по заданному содержимому памяти
определяет минимальное количество операций STORE, которое необходимо выполнить для
инициализации памяти заданным образом.

Формат входных данных
Первая строка входных данных содержит три целых числа: k, n и m (0 ≤ k ≤ 30,1 ≤ n ≤ 10
5, 1 ≤ m ≤ 109).
Следующие n строк содержат по два целых числа, i-я из этих строк содержит числа ci
и vi (1 ≤ ci ≤ 2k, 1 ≤ vi ≤ m, c1 + c2 + … + cn = 2k).
Формат выходных данных
Требуется вывести одно целое число – минимальное количество операций STORE,
которое необходимо выполнить для инициализации памяти заданным образом.
 
Ввод Вывод
3 3 2
1 1
2 2
5 1
3

Турнир

Задачи на моделирование Задача на реализацию Структуры данных

В турнире участвуют N команд. Турнир проводится по олимпийской системе (команды играют на вылет, проигравшие команды выбывают из турнира, выигравшие проходят в следующий тур, ничьих не бывает). Число команд в этой задаче будет степенью двойки: N = 2 k .

Все команды пронумерованы числами от 1 до N. В первом туре играют команды с номерами 1 и 2, 3 и 4, 5 и 6 и т. д., всего играется N/2 матчей. По результатам этих матчей команды выходят во второй тур. Во втором туре играют победители первой и второй игры первого тура, победители третьей и четвёртой игры первого тура и т. д. Они выходят в третий тур. В третьем туре играют вместе победители первой и второй игры второго тура, победители третьей и четвёртой игры второго тура и т. д.

Вам даны результаты всех матчей. Определите номер команды, которая стала победителем турнира.
В первой строке входных данных записано число N – количество команд, участвовавших в турнире. Оно является степенью двойки и может принимать значения от 20 = 1 до 216 = 65536. Следующие N − 1 строк содержат результаты всех сыгранных матчей. Первые N/2 строк из них являются результатами матчей первого тура, затем идёт N/4 строк с результатами второго тура, N/8 строк с результатами третьего тура и т. д.

Результат каждого матча является одним из двух возможных чисел: 1 или 2. Число 1 означает, что в матче выиграла первая команда (номер которой меньше), число 2 означает, что в матче выиграла вторая команда (номер которой больше).
Программа должна вывести одно число – номер победившей в турнире команды.
 

Ввод Вывод
8
1
2
2
1
2
1
1
4

Примечание к ответу
Далее нарисована схема турнира для примера из условия. В турнире участвовало 8 команд. Результаты матчей: 1, 2, 2, 1, 2, 1, 1.
В первом туре играли команды 1 и 2, 3 и 4, 5 и 6, 7 и 8. Результаты матчей первого тура: 1, 2, 2, 1, во второй тур вышли команды 1, 4, 6, 7.
Во втором туре играли команды 1 и 4, 6 и 7. Результаты матчей второго тура: 2, 1.
В третий тур вышли команды 4 и 6. В последнем, третьем, туре играют команды 4 и 6, результат матча: 1, поэтому победителем турнира является команда 4.

Даша и поиски

Конструктив Структуры данных

Как вы знаете, девочка Даша постоянно что-то ищет. На этот раз ей дали перестановку, и она хочет найти такой её подотрезок, что ни один из элементов на его концах не является ни минимумом, ни максимумом всего подотрезка. Более формально, вас просят найти такие числа \(l\) и \(r\) \((1 \leqslant l \leqslant r \leqslant n)\), что \(a_l \neq \min(a_l, a_{l + 1}, \ldots, a_r)\), \(a_l \neq \max(a_l, a_{l + 1}, \ldots, a_r)\) и \(a_r \neq \min(a_l, a_{l + 1}, \ldots, a_r)\), \(a_r \neq \max(a_l, a_{l + 1}, \ldots, a_r)\).

Напомнима, что перестановкой длины \(n\) называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\), выписанных в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (\(2\) встречается дважды в массиве) и \([1,3,4]\) тоже не является перестановкой (\(n=3\), но \(4\) присутствует в массиве, а \(2\) отсутствует).

Помогите Даше найти такой подотрезок, либо скажите, что такого подотрезка не существует.

Формат входных данных
В первой строке входных данных вам дано одно целое число \(n\) (\(1 \leqslant n \leqslant 200\,000\)) — размер перестановки.

Во второй строке входных данных вам дано \(n\) целых чисел \(a_1, a_2, \ldots a_n\) (\(1 \leqslant a_i \leqslant n\)) — элементы перестановки.

Формат выходных данных
Если искомого подотрезка не существует, выведите \(-1\).

Иначе выведите такие два числа \(l\) и \(r\) \((1 \leqslant l \leqslant r \leqslant n)\), что \([a_l, a_{l + 1}, \ldots, a_r]\) удовлетворяет условиям задачи.

Если искомых подотрезков несколько, выведите любой из них.

Суммы модулей

Комбинаторика Вывод формулы Структуры данных

Для последовательности целых чисел \(a_1, a_2, \ldots, a_n\) и целого числа \(x\) обозначим через \(f(a, x)\) количество таких целых \(i\) от \(1\) до \(n\), что \(a_i \le x\).

Для пары последовательностей целых чисел \(a_1, a_2, \ldots, a_n\) и \(b_1, b_2, \ldots, b_n\) обозначим через \(g(a, b, c)\) сумму значений \(|f(a, x)-f(b, x)|\) по всем целым \(x\), лежащим в отрезке \([0, c]\). Более формально, \(g(a, b, c) = \sum_{x=0}^c |f(a, x)-f(b, x)|\).

Вам даны два целых числа \(n\) и \(c\), а также две последовательности целых чисел \(a_1, a_2, \ldots, a_n\) и \(b_1, b_2, \ldots, b_n\), все элементы которых лежат в отрезке \([-1, c]\). Известно, что ни в \(a\), ни в \(b\) нет двух подряд идущих элементов, равных \(-1\).

Скажем, что пара последовательностей целых чисел \(a_1', a_2', \ldots, a_n'\) и \(b_1', b_2', \ldots, b_n'\), все элементы которых лежат в отрезке \([0, c]\), соответствует шаблону \((a, b)\), если выполняются следующие условия:

  • Для всех \(i\) (\(1 \le i \le n\)), таких, что \(a_i \ne -1\), выполняется \(a_i'=a_i\).

  • Для всех \(i\) (\(1 \le i \le n\)), таких, что \(b_i \ne -1\), выполняется \(b_i'=b_i\).

  • Для всех \(i\) (\(1 \le i \le n-1\)) выполняется \(a_i' \le a_{i+1}'\).

  • Для всех \(i\) (\(1 \le i \le n-1\)) выполняется \(b_i' \le b_{i+1}'\).

Обозначим через \(h(a, b, c)\) сумму значений \(g(a', b', c)\) по всем парам последовательностей \((a', b')\), соответствующих шаблону \((a, b)\). Вы должны посчитать \(h(a, b, c)\). Также вы должны обработать \(q\) запросов изменения последовательностей \(a\) и \(b\) и посчитать \(h(a, b, c)\) после каждого изменения. Обратите внимание, что ни в \(a\), ни в \(b\) нет двух подряд идущих элементов, равных \(-1\), ни до всех запросов, ни после какого-либо запроса.

Формат входных данных
Первая строка содержит три целых числа \(n\), \(c\) и \(q\) (\(1 \le n \le 100\,000\), \(0 \le c \le 10^9\), \(0 \le q \le 100\,000\)) — длина последовательностей \(a\) и \(b\), ограничение на значения элементов \(a\) и \(b\) и количество запросов, соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-1 \le a_i \le c\)) — последовательность \(a\).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(-1 \le b_i \le c\)) — последовательность \(b\).

В следующих \(q\) строках заданы запросы изменения. Каждый запрос задается тройкой целых чисел \(t\), \(p\), \(x\) (\(1 \le t \le 2\), \(1 \le p \le n\), \(-1 \le x \le c\)). Если \(t=1\), то данный запрос меняет \(a_p\) на \(x\). Если \(t=2\), то данный запрос меняет \(b_p\) на \(x\).

Гарантируется, что до всех изменений и после каждого изменения ни в \(a\), ни в \(b\) нет двух подряд идущих элементов, равных \(-1\).

Формат выходных данных
Выведите \((q+1)\) строку. В \((i+1)\)-й строке (\(0 \le i \le q\)) выведите одно целое число — значение \(h(a, b, c)\) по модулю \(10^9+7\) после применения первых \(i\) запросов изменения.

Примечание
Рассмотрим первый тест из примера. В нем \(n=3\), \(c=4\), \(q=3\). До всех запросов \(a=[-1, 1, 3]\), \(b=[1, -1, 2]\). Шаблону \((a, b)\) соответствуют следующие пары последовательностей:

  • \(a'=[0, 1, 3], b'=[1, 1, 2]\), \(g(a, b, 4)=2\).

  • \(a'=[0, 1, 3], b'=[1, 2, 2]\), \(g(a, b, 4)=3\).

  • \(a'=[1, 1, 3], b'=[1, 1, 2]\), \(g(a, b, 4)=1\).

  • \(a'=[1, 1, 3], b'=[1, 2, 2]\), \(g(a, b, 4)=2\).

Таким образом, ответ на задачу до всех запросов равен \(h(a, b, 4)=2+3+1+2=8\).

В первом запросе \(t=1\), \(p=1\), \(x=2\). Этот запрос меняет \(a_1\) с \(-1\) на \(2\). Таким образом, после этого запроса \(a=[2, 1, 3]\), \(b=[1, -1, 2]\). В последовательности \(a\) нет \(-1\), поэтому в любой паре последовательностей \((a', b')\), соответствующей шаблону \((a, b)\), последовательность \(a'\) должна совпадать с \(a\). В последовательности \(a\) не выполняется условие \(a_1 \le a_2\), поэтому не существует ни одной пары последовательностей, соответствующей шаблону, а тогда \(h(a, b, 4)=0\) после первого запроса.

G. Как назвать альбом

*особая задача реализация Структуры данных *1800

Ивестный певец Арьё, собирается выпустить новый альбом своих великих произведений!

К сожалению, в наши дни уже есть много альбомов. Арьё хочет выбрать для своего альбома новое название — название, которое ещё не использовалось или хотя бы использовалось давно.

У него есть список всех использованных названий для альбомов вместе с годом, когда данные альбомы были опубликованы. Также у него есть список подходящих названий для своего альбома.

Если он найдет подходящее название, которое ещё не было использовано, он возьмет его. В противном случае Арьё возьмет такое название, которое не использовалось как можно дольше. Если находятся два таких названия (два названия, которые не были использованы или же использованы в один год), он выберет лексикографически максимальное.

Помогите ему назвать альбом.

Входные данные

Первая строка содержит единственное целое число n (0 ≤ n ≤ 105), количество использованных названий. Следующие n строк содержат каждая по строке (названию альбома) и целому числу (году, в который был выпущен альбом). Названия альбома состоят из строчных латинских букв и содержат не более 14 букв. Год принадлежит интервалу [1900, 2011].

Следующая строка содержит единственное целое число m (1 ≤ m ≤ 104), количество подходящих названий альбома.

В каждой из следующих m строк содержится по строке — подходящему названию. Каждое название состоит из не более, чем 14 строчных латинских букв.

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

Выходные данные

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

C. Подсчет покрытых точек

реализация сортировки Структуры данных *1700

Задано \(n\) отрезков на координатной прямой; концы отрезков имеют целочисленные координаты. Отрезки могут вырождаться в точки. Отрезки могут пересекаться друг с другом, вкладываться и даже совпадать.

Ваша задача: для каждого \(k \in [1..n]\) посчитать количество таких точек с целочисленными координатами, что количество отрезков, покрывающих эти точки, равно \(k\). Отрезок с границами \(l_i\) и \(r_i\) покрывает точку \(x\) тогда и только тогда, когда \(l_i \le x \le r_i\).

Входные данные

Первая строка входных данных содержит целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество отрезков.

Следующие \(n\) cтрок содержат отрезки. Строка с индексом \(i\) состоит из пары целых чисел \(l_i, r_i\) (\(0 \le l_i \le r_i \le 10^{18}\)) — концы \(i\)-го отрезка.

Выходные данные

Выведите \(n\) целых чисел через пробел \(cnt_1, cnt_2, \dots, cnt_n\), где \(cnt_i\) равно количеству таких точек, что количество отрезков, покрывающих эти точки, равно \(i\).

Примечание

Картинка, описывающая первый тестовый пример:

Точки с координатами \([0, 4, 5, 6, 7, 8]\) покрыты одним отрезком, точки \([1, 2]\) покрыты двумя отрезками и точка \([3]\) покрыта тремя отрезками.

Картинка, описывающая второй тестовый пример:

Точки \([1, 4, 5, 6, 7]\) покрыты одним отрезком, точки \([2, 3]\) покрыты двумя отрезками и точек, покрытых тремя отрезками, нет.

F. Одно вхождение

разделяй и властвуй Структуры данных *2400

Дан массив \(a\), состоящий из \(n\) целых чисел, и \(q\) запросов к нему. \(i\)-й запрос обозначается двумя целыми числами \(l_i\) и \(r_i\). Для каждого запроса надо найти любое целое число, которое входит ровно один раз в подмассиве массива \(a\), начиная с индекса \(l_i\) и заканчивая индексом \(r_i\) (подмассивом называется непрерывный подотрезок массива). Например, если \(a = [1, 1, 2, 3, 2, 4]\), то в запросе \((l_i = 2, r_i = 6)\) нас интересует подмассив \([1, 2, 3, 2, 4]\), и возможные ответы на запрос — \(1\), \(3\) и \(4\); а в запросе \((l_i = 1, r_i = 2)\) нас интересует подмассив \([1, 1]\), и требуемого элемента не существует.

Можете ли вы ответить на все запросы?

Входные данные

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

Во второй строке записано \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 5 \cdot 10^5\)).

В третьей строке записано целое число \(q\) (\(1 \le q \le 5 \cdot 10^5\)).

Затем следуют \(q\) строк, \(i\)-я из которых содержит два целых числа \(l_i\) и \(r_i\), обозначающих \(i\)-й запрос (\(1 \le l_i \le r_i \le n\)).

Выходные данные

Ответьте на каждый запрос следующим образом:

Если не существует такого целого числа, которое входит в подмассив с индекса \(l_i\) по индекс \(r_i\) ровно один раз, выведите \(0\). Иначе выведите любое такое число.

G. Два-пути

Деревья дп Структуры данных *2700

Вам задано взвешенное дерево (неориентированный связный граф без циклов, петель и кратных ребер) из \(n\) вершин. Ребро \(\{u_j, v_j\}\) имеет вес \(w_j\). Также, каждой вершине \(i\) присвоено значение \(a_i\).

Назовем путь, начинающийся в вершине \(u\) и заканчивающийся в \(v\), в котором по каждому ребру можно пройти не более двух раз (независимо от направления), 2-путем. Вершины в 2-пути могут встречаться любое количество раз (в том числе начальная и конечная).

Для каждого 2-пути \(p\) можно найти его профит \(\text{Pr}(p) = \sum\limits_{v \in \text{различные вершины в } p}{a_v} - \sum\limits_{e \in \text{различные ребра в } p}{k_e \cdot w_e}\), где \(k_e\) равно количеству вхождений \(e\) в \(p\). То есть, вершины учитываются ровно один раз, а ребра — столько, сколько раз каждое встречается в \(p\).

Вам необходимо ответить на \(m\) запросов. Каждый запрос является парой вершин \((qu, qv)\). Для каждого запроса найдите 2-путь \(p\) из \(qu\) в \(qv\) с максимальным профитом \(\text{Pr}(p)\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2 \le n \le 3 \cdot 10^5\), \(1 \le q \le 4 \cdot 10^5\)) — количество вершин в дереве и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le 10^9)\) — значения, присвоенные вершинам.

Следующие \(n - 1\) строк содержат описания ребер: каждая строка содержит три целых числа \(u_i\), \(v_i\) и \(w_i\) (\(1 \le u_i, v_i \le n\), \(u_i \neq v_i\), \(1 \le w_i \le 10^9\)) — есть ребро \(\{u_i, v_i\}\) с весом \(w_i\) в заданном дереве.

Следующие \(q\) строк содержат запросы (по одному в строке). Каждый запрос содержит два целых числа \(qu_i\) и \(qv_i\) \((1 \le qu_i, qv_i \le n)\) — концы 2-пути, который Вам надо найти.

Выходные данные

Для каждого запроса выведите по одному числу в строке — максимальный профит \(\text{Pr}(p)\) некоторого 2-пути \(p\) с соответствующими концами.

Примечание

Разъяснение запросов:

  1. \((1, 1)\) — один из оптимальных 2-путей следующий: \(1 \rightarrow 2 \rightarrow 4 \rightarrow 5 \rightarrow 4 \rightarrow 2 \rightarrow 3 \rightarrow 2 \rightarrow 1\). \(\text{Pr}(p) = (a_1 + a_2 + a_3 + a_4 + a_5) - (2 \cdot w(1,2) + 2 \cdot w(2,3) + 2 \cdot w(2,4) + 2 \cdot w(4,5)) = 21 - 2 \cdot 12 = 9\).
  2. \((4, 4)\): \(4 \rightarrow 2 \rightarrow 1 \rightarrow 2 \rightarrow 3 \rightarrow 2 \rightarrow 4\). \(\text{Pr}(p) = (a_1 + a_2 + a_3 + a_4) - 2 \cdot (w(1,2) + w(2,3) + w(2,4)) = 19 - 2 \cdot 10 = 9\).
  3. \((5, 6)\): \(5 \rightarrow 4 \rightarrow 2 \rightarrow 3 \rightarrow 2 \rightarrow 1 \rightarrow 2 \rightarrow 4 \rightarrow 6\).
  4. \((6, 4)\): \(6 \rightarrow 4 \rightarrow 2 \rightarrow 1 \rightarrow 2 \rightarrow 3 \rightarrow 2 \rightarrow 4\).
  5. \((3, 4)\): \(3 \rightarrow 2 \rightarrow 1 \rightarrow 2 \rightarrow 4\).
  6. \((3, 7)\): \(3 \rightarrow 2 \rightarrow 1 \rightarrow 2 \rightarrow 4 \rightarrow 5 \rightarrow 4 \rightarrow 2 \rightarrow 3 \rightarrow 7\).

E. Соня и магазины

Бинарный поиск Деревья дп жадные алгоритмы кратчайшие пути Структуры данных *2400

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

Соня живет в городе, в котором всего \(n\) перекрестков и \(n-1\) улиц. Все улицы — двусторонние и соединяют пары перекрестков. С любого перекрестка можно попасть в любой другой перекресток в городе, пройдя по одной или более улиц. Мэрия позволяет открывать магазины только на перекрестках, девочка не может открывать магазины посреди улиц, между перекрестками.

У Сони есть ровно \(k\) друзей, которым она доверяет. Если она откроет магазин, один с её друзей должен там работать и смотреть, чтобы никто не ел мороженое не заплатив. Поскольку Соня не хочет пропускать важные соревнования по программированию, непосредственно в магазинах она работать не будет.

Соня хочет, чтобы все её магазины мороженого образовали простой путь длины \(r\) (\(1 \le r \le k\)), то есть были расположены в различных перекрёстках \(f_1, f_2, \dots, f_r\) и существовала улица между \(f_i\) и \(f_{i+1}\) для всех \(i\) от \(1\) до \(r-1\).

Девочка заботится о потенциальных покупателях, поэтому, она также хочет минимизировать максимальное расстояние от перекрестков до ближайшего магазина мороженого. Расстояние между двумя перекрестками \(a\) и \(b\) равно сумме длин всех улиц, которые нужно пройти, чтобы попасть с перекрестка \(a\) на перекресток \(b\). Таким образом, девочка хочет минимизировать

\(\)\max_{a} \min_{1 \le i \le r} d_{a,f_i}\(\),

где \(a\) принимает значение всевозможных \(n\) перекрёстков, \(f_i\) — перекресток с \(i\)-м магазином Сони, а \(d_{x,y}\) — расстояние между перекрестками \(x\) и \(y\).

Соня неуверенна, что сможет найти оптимальные местоположения магазинов, поэтому, просит вас помочь ей открыть не более \(k\) магазинов, которые образуют простой путь, и максимальное расстояние от произвольного перекрестка города до ближайшего магазина минимально.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1\leq k\leq n\leq 10^5\)) — количество перекрестков и друзей соответственно.

Каждая из следующих \(n-1\) строк содержит три целых числа \(u_i\), \(v_i\) и \(d_i\) (\(1\leq u_i, v_i\leq n\), \(v_i\neq u_i\), \(1\leq d\leq 10^4\)) — перекрестки, которые соединяет улица и длина этой улицы. Гарантируется, что между любой парой перекрестков не более одной улицы. Гарантируется, что можно доехать из любого перекрестка в любой другой, двигаясь только по улицам.

Выходные данные

Выведите одно число — минимальное максимальное расстояние, которое нужно будет пройти, чтобы попасть с любого перекрестка до ближайшего магазина мороженого. Магазины Сони должны располагаться вдоль произвольного простого пути из перекрестков длины не более \(k\).

Примечание

В первом примере можно выбрать путь 2-4, тогда ответ будет 4.

Первый пример.

Во втором примере можно выбрать путь 4-1-2, тогда ответ будет 7.

Второй пример.

F. Соня и побитовое ИЛИ

битмаски разделяй и властвуй Структуры данных *2600

У Сони есть массив \(a_1, a_2, \ldots, a_n\) из \(n\) чисел и неотрицательное целое число \(x\). Ей нужно выполнить \(m\) запросов двух типов:

  • \(1\) \(i\) \(y\): заменить \(i\)-й элемент на значение \(y\), то есть выполнить \(a_{i}\) := \(y\);
  • \(2\) \(l\) \(r\): посчитать количество таких пар чисел (\(L\), \(R\)), что \(l\leq L\leq R\leq r\) и побитовое ИЛИ всех чисел подмассива \([L, R]\) не меньше \(x\) (обратите внимание, что \(x\) — константа для всех запросов).

Сможете ли вы помочь Соне выполнить все запросы?

Побитовое ИЛИ — это бинарная операция над парой неотрицательных целых чисел. Для подсчета побитового ИЛИ двух чисел надо рассмотреть запись обоих чисел в двоичной системе счисления. Результат — это такое число, в двоичном представлении которого в каждом разряде стоит единица если единица находится в двоичной записи хотя бы одного из аргументов. Например, \(10\) OR \(19\) = \(1010_2\) OR \(10011_2\) = \(11011_2\) = \(27\).

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(x\) (\(1\leq n, m\leq 10^5\), \(0\leq x<2^{20}\)) — количество чисел, запросов и константа для второго типа запросов соответственно.

Вторая стркоа содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0\leq a_i<2^{20}\)) — числа массива.

Далее, в \(m\) строках заданы запросы, по одному в строке. Строка имеет вид:

  • \(1\) \(i\) \(y\) (\(1\leq i\leq n\), \(0\leq y<2^{20}\)), что означает, что нужно изменить число \(a_{i}\) на \(y\), или
  • \(2\) \(l\) \(r\) (\(1\leq l\leq r\leq n\)), что означет, что нужно посчитать количество подмассивов на отрезке с \(l\) по \(r\), что побитовое ИЛИ их чисел не меньше \(x\).
Выходные данные

Для каждого запроса второго типа выведите количество подмассивов на отрезке, что побитовое ИЛИ их чисел не меньше \(x\).

Примечание

В первом примере задан массив [\(0\), \(3\), \(6\), \(1\)] и запросы:

  1. на отрезке [\(1\ldots4\)] подходят пары (\(1\), \(3\)), (\(1\), \(4\)), (\(2\), \(3\)), (\(2\), \(4\)) и (\(3\), \(4\));
  2. на отрезке [\(3\ldots4\)] подходит пара (\(3\), \(4\));
  3. число на первой позиции изменяется на \(7\), после операции будет массив [\(7\), \(3\), \(6\), \(1\)];
  4. на отрезке [\(1\ldots4\)] подходят пары (\(1\), \(1\)), (\(1\), \(2\)), (\(1\), \(3\)), (\(1\), \(4\)), (\(2\), \(3\)), (\(2\), \(4\)) и (\(3\), \(4\));
  5. на отрезке [\(1\ldots3\)] подходят пары (\(1\), \(1\)), (\(1\), \(2\)), (\(1\), \(3\)) и (\(2\), \(3\));
  6. на отрезке [\(1\ldots1\)] подходит пара (\(1\), \(1\));
  7. число на третьей позиции изменяется на \(0\), после операции будет массив [\(7\), \(3\), \(0\), \(1\)];
  8. на отрезке [\(1\ldots4\)] подходят пары (\(1\), \(1\)), (\(1\), \(2\)), (\(1\), \(3\)) и (\(1\), \(4\)).

Во втором примере задан массив [\(6\), \(0\), \(3\), \(15\), \(2\)] и запросы:

  1. на отрезке [\(1\ldots5\)] подходят пары (\(1\), \(3\)), (\(1\), \(4\)), (\(1\), \(5\)), (\(2\), \(4\)), (\(2\), \(5\)), (\(3\), \(4\)), (\(3\), \(5\)), (\(4\), \(4\)) и (\(4\), \(5\));
  2. число на четвертой позиции изменяется на \(4\), после операции будет массив [\(6\), \(0\), \(3\), \(4\), \(2\)];
  3. на отрезке [\(1\ldots5\)] подходят пары (\(1\), \(3\)), (\(1\), \(4\)), (\(1\), \(5\)), (\(2\), \(4\)), (\(2\), \(5\)), (\(3\), \(4\)) и (\(3\), \(5\));
  4. на отрезке [\(3\ldots5\)] подходят пары (\(3\), \(4\)) и (\(3\), \(5\));
  5. на отрезке [\(1\ldots4\)] подходят пары (\(1\), \(3\)), (\(1\), \(4\)), (\(2\), \(4\)) и (\(3\), \(4\)).

C. Три части массива

Бинарный поиск Структуры данных *1200

Задан массив \(d_1, d_2, \dots, d_n\), состоящий из \(n\) целых чисел.

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

Пусть сумма элементов первой части равна \(sum_1\), сумма элементов второй части равна \(sum_2\) и сумма элементов третьей части равна \(sum_3\). Среди всех возможных разбиений массива вам нужно выбрать такое, что \(sum_1 = sum_3\) и \(sum_1\) является максимально возможной.

Более формально, если первая часть массива содержит \(a\) элементов, вторая часть массива содержит \(b\) элементов и третья часть массива содержит \(c\) элементов, тогда:

\(\)sum_1 = \sum\limits_{1 \le i \le a}d_i,\(\) \(\)sum_2 = \sum\limits_{a + 1 \le i \le a + b}d_i,\(\) \(\)sum_3 = \sum\limits_{a + b + 1 \le i \le a + b + c}d_i.\(\)

Сумма пустого массива равна \(0\).

Ваша задача найти такое разбиение массива, что \(sum_1 = sum_3\) и \(sum_1\) является максимально возможной.

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество элементов массива \(d\).

Вторая строка входных данных содержит \(n\) целых чисел \(d_1, d_2, \dots, d_n\) (\(1 \le d_i \le 10^9\)) — элементы массива \(d\).

Выходные данные

Выведите одно целое число — максимально возможное значение \(sum_1\), удовлетворяющее условию \(sum_1 = sum_3\).

Очевидно, всегда существует хотя бы один способ разбить массив нужным образом (если \(a=c=0\) и \(b=n\)).

Примечание

В первом тестовом примере только одно возможное разбиение, которое максимизирует \(sum_1\): \([1, 3, 1], [~], [1, 4]\).

Во втором тестовом примере существует единственный способ набрать \(sum_1=4\): \([1, 3], [2, 1], [4]\).

В третьем тестовом примере есть только один способ разделить массив: \([~], [4, 1, 2], [~]\).

A. Перестановка массива

Комбинаторика математика сортировки Структуры данных *1300

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

Например, если нам дан массив \([10, 20, 30, 40]\), мы можем переставить числа так, что массив станет \([20, 40, 10, 30]\). При этом на первой и второй позициях числа стали больше (\(20>10\), \(40>20\)), а на третьей и четвёртой — нет, значит для такой перестановки число, которое хочет максимизировать Вася, равно \(2\). Ознакомьтесь с примечанием к первому тестовому примеру, там разобран ещё один показательный тест.

Помогите Васе так переставить числа, чтобы количество позиций, в которых в новом массиве числа больше, чем в изначальном, было максимальным.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — размер массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы массива.

Выходные данные

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

Примечание

В первом тесте одна из оптимальных перестановок — \([1, 5, 5, 3, 10, 1, 1]\). На позициях со второй по пятую значения увеличились, значит ответ для этой перестановки — 4.

Во втором тесте при любой перестановке ни на одной позиции элемент не может стать больше, значит, ответ — 0.

D. Муравьи

2-sat Деревья Структуры данных *3200

Есть дерево из \(n\) вершин, в котором живут \(m\) муравьёв. Каждый муравей имеет свой собственный цвет. У \(i\)-го муравья есть две любимые пары вершин: (\(a_i, b_i\)) и (\(c_i, d_i\)). Вам нужно сказать, можно ли раскрасить рёбра дерева в \(m\) цветов так, чтобы каждый муравей мог ходить между вершинами какой-то из своих любимых пар, используя только рёбра своего цвета; и если можно, то вывести, какую из пар будет использовать каждый муравей.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \leq n \leq 10^5\)) — количество вершин.

Каждая из следующих \(n-1\) строк содержит два целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\)), означающие, что есть ребро между \(u_i\) и \(v_i\).

Следующая строка содержит одно целое число \(m\) (\(1 \leq m \leq 10^4\)) — количество муравьёв.

Каждая из следующих \(m\) строк содержит четыре целых числа \(a_i\), \(b_i\), \(c_i\) и \(d_i\) (\(1 \leq a_i, b_i, c_i, d_i \leq n\), \(a_i \neq b_i, c_i \neq d_i\)), означающие, что пары вершин (\(a_i\), \(b_i\)) и (\(c_i\), \(d_i\)) являются любимыми для \(i\)-го муравья.

Выходные данные

Выведите «NO» (без кавычек), если искомая раскраска рёбер невозможна.

Иначе выведите «YES» (без кавычек). В \(i\)-й из \(m\) следующих строк выведите \(1\), если \(i\)-й муравей будет использовать первую пару, и \(2\) иначе. Если существует несколько решений, выведите любое из них.

Примечание

В примере второе и третье ребро следует покрасить в первый цвет, первое и пятое — во второй цвет, а четвёртое — в третий цвет.

F. Доминирующие индексы

Деревья снм Структуры данных *2300

Задано корневое неориентированное дерево, состоящее из \(n\) вершин. Вершина \(1\) является корнем.

Определим массив глубин вершины \(x\), как бесконечную последовательность \([d_{x, 0}, d_{x, 1}, d_{x, 2}, \dots]\), где \(d_{x, i}\) — это количество вершин \(y\) таких, что выполняются оба следующих условия:

  • \(x\) является предком \(y\);
  • простой путь из \(x\) в \(y\) проходит ровно по \(i\) ребрам.

Доминирующий индекс массива глубин вершины \(x\) (или же просто доминирующий индекс вершины \(x\)) — это такой индекс \(j\), что:

  • для каждого \(k < j\), \(d_{x, k} < d_{x, j}\);
  • для каждого \(k > j\), \(d_{x, k} \le d_{x, j}\).

Для каждой вершины дерева вычислите ее доминирующий индекс.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 10^6\)) — количество вершин в дереве.

Затем следует \(n - 1\) строка, в каждой записаны по два целых числа \(x\) и \(y\) (\(1 \le x, y \le n\), \(x \ne y\)). Эта строка задает ребро в дереве.

Гарантируется, что данные ребра образуют дерево.

Выходные данные

Выведите \(n\) чисел. \(i\)-е число должно быть равно доминирующему индексу вершины \(i\).

B. Автобусы

Бинарный поиск дп Структуры данных *1700

Мальчик Геральд учится в школе, и она находится довольно далеко от его дома. Поэтому ему приходится ежедневно ездить туда на автобусах. Путь от дома до школы представляет собой отрезок прямой, на котором расположено ровно n + 1 остановок. Все они пронумерованы целыми числами от 0 до n в порядке их следования начиная от дома Геральда. Остановка у дома имеет номер 0, а остановка у школы — номер n.

Между домом и школой ездят m автобусов: i-ый автобус ездит от остановки si до остановки ti (si < ti), проезжая через все промежуточные остановки в порядке их следования. При этом Геральд не дурак, и не будет выходить из автобуса, пока на нем еще можно ехать в сторону школы — очевидно, что это не имеет смысла. То есть Геральд может сесть на i-ый автобус на любой остановке с номером от si до ti - 1 включительно, а выйти из i-го автобуса он может только на остановке ti.

Геральд не может идти между остановками пешком, а также не может перемещаться в сторону от школы к дому.

Геральд хочет узнать, сколько у него способов доехать от дома до школы. Сообщите ему это число. Два способа считаются различными, если какой-то участок между остановками Геральд едет на разных автобусах. Поскольку число способов может быть слишком большим, сообщите остаток этого числа от деления на 1000000007 (109 + 7).

Входные данные

В первой строке даны два целых числа через пробел: n и m (1 ≤ n ≤ 109, 0 ≤ m ≤ 105). Далее следует m строк по два целых числа si, ti в каждой — номера стартовых и конечных остановок автобусов (0 ≤ si < ti ≤ n).

Выходные данные

Выведите единственное число — количество способов доехать до школы по модулю 1000000007 (109 + 7).

Примечание

В первом тесте есть единственный вариант доехать до школы: сначала на первом автобусе до первой остановки, а потом на втором автобусе до второй остановки.

Во втором тесте никакой автобус не идет до третьей остановки, на которой расположена школа, поэтому правильный ответ — 0.

В третьем тесте Геральд может воспользоваться или не воспользоваться каждым из первых четырех автобусов, чтобы подъехать поближе к школе. Поэтому правильный ответ 24 = 16.

E. Магазин

Структуры данных *2700

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

Известно, что марсианский год длится \(x_{max}\) месяцев, месяц — \(y_{max}\) дней, сутки — \(z_{max}\) секунд. Ещё Наташа знает, что этот магазин работает по такому расписанию: выбираются 2 месяца в году: \(x_l\) и \(x_r\) (\(1\le x_l\le x_r\le x_{max}\)), 2 дня в месяце: \(y_l\) и \(y_r\) (\(1\le y_l\le y_r\le y_{max}\)) и 2 секунды в сутках: \(z_l\) и \(z_r\) (\(1\le z_l\le z_r\le z_{max}\)). Магазин работает во все такие моменты времени (месяц \(x\), день \(y\), секунда \(z\)), когда одновременно \(x_l\le x\le x_r\), \(y_l\le y\le y_r\) и \(z_l\le z\le z_r\).

К сожалению, Наташе неизвестны числа \(x_l,x_r,y_l,y_r,z_l,z_r\).

Один марсианин сказал Наташе: "Я ходил в этот магазин \((n+m)\) раз. Из них \(n\) раз он был открыт, а \(m\) раз — закрыт." Также он рассказал про каждый свой поход в магазин: месяц, день, секунду этого похода и был ли магазин в этот момент открыт или закрыт.

Наташа может пойти в магазин \(k\) раз. Для каждого из них определите, будет ли магазин в момент похода в него открыт, закрыт или эта информация неизвестна.

Входные данные

Первая строка содержит \(6\) целых чисел \(x_{max}\), \(y_{max}\), \(z_{max}\), \(n\), \(m\), \(k\) (\(1\le x_{max},y_{max},z_{max}\le 10^5\), \(1\le n\le 10^5\), \(0\le m\le 10^5\), \(1\le k\le 10^5\)) — количество месяцев в году, дней в месяце, секунд в сутках, раз, когда магазин (по словам марсианина) был открыт, когда он был закрыт, запросов Наташи.

\(i\)-я из следующих \(n\) строк содержит \(3\) целых числа \(x_i\), \(y_i\), \(z_i\) (\(1\le x_i\le x_{max}\), \(1\le y_i\le y_{max}\), \(1\le z_i\le z_{max}\)) — месяц, день и секунда \(i\)-го раза, когда магазин, со слов марсианина, был открыт.

\(i\)-я из следующих \(m\) строк содержит \(3\) целых числа \(x_i\), \(y_i\), \(z_i\) (\(1\le x_i\le x_{max}\), \(1\le y_i\le y_{max}\), \(1\le z_i\le z_{max}\)) — месяц, день и секунда \(i\)-го раза, когда магазин, со слов марсианина, был закрыт.

\(i\)-я из следующих \(k\) строк содержит \(3\) целых числа \(x_i\), \(y_i\), \(z_i\) (\(1\le x_i\le x_{max}\), \(1\le y_i\le y_{max}\), \(1\le z_i\le z_{max}\)) — месяц, день и секунда \(i\)-го запроса Наташи.

Выходные данные

Если марсианин ошибся и его сведения о том, когда магазин открыт и когда закрыт, противоречивы, то в единственной строке выведите "INCORRECT" (без кавычек).

В противном случае в первой строке выведите "CORRECT" (без кавычек). Далее выведите \(k\) строк: в \(i\)-й из них выведите ответ на \(i\)-й запрос Наташи: "OPEN" (без кавычек), если магазин в момент этого запроса был открыт, "CLOSED" (без кавычек), если был закрыт, или "UNKNOWN" (без кавычек), если эту информацию на основе имеющихся данных определить невозможно.

Примечание

Рассмотрим первый тестовый пример.

В году \(10\) месяцев, в месяце \(10\) дней, в сутках \(10\) секунд.

Магазин был открыт в \(3\) момента времени:

  • месяц \(2\), день \(6\), секунда \(2\);
  • месяц \(4\), день \(2\), секунда \(4\);
  • месяц \(6\), день \(4\), секунда \(6\).

Магазин был закрыт в момент времени: месяц \(9\), день \(9\), секунда \(9\).

Запросы:

  • месяц \(3\), день \(3\), секунда \(3\) — открыто ("OPEN") (поскольку магазин открывается не позже, чем в месяц \(2\), день \(2\), секунду \(2\) и закрывается не раньше, чем в месяц \(6\), день \(6\), секунду \(6\));
  • месяц \(10\), день \(10\), секунда \(10\) — закрыто ("CLOSED") (поскольку закрыто даже в месяц \(9\), день \(9\), секунда \(9\));
  • месяц \(8\), день \(8\), секунда \(8\) — неизвестно ("UNKNOWN") (поскольку возможно и расписание, в котором магазин открыт в этот момент, и расписание, в котором магазин закрыт в этот момент).

Во втором тестовом примере магазин был закрыт и открыт в один и тот же момент времени — противоречие ("INCORRECT").

D. Wu

битмаски Перебор Структуры данных *1900

Чилден придумал легендарную историю и пытается продать свою подделку — ожерелье с «Wu» семье Касура. Но мистер Касура пытается разузнать всю правду из истории Чилдена. Поэтому он задаст несколько вопросов Чилдену о его так называемом «личном сокровище».

Это «личное сокровище» представляет собой мультимножество \(S\) из \(m\) «01-строк».

«01-строка» — строка, которая состоит из \(n\) символов «0» и «1». Например, если \(n=4\), то «0110», «0000», и «1110» являются «01-строками», но «00110» (в ней \(5\) символов, а не \(4\)) и «zero» (неразрешенные символы) не являются.

Обратите внимание, что мультимножество \(S\) может содержать одинаковые элементы.

Иногда мистер Касура будет давать «01-строку» \(t\) и спрашивать Чилдена количество строк \(s\) в мультимножестве \(S\) таких, что «Wu»-стоимость пары «01-строк» \((s, t)\) не больше чем \(k\).

Миссис Касура и мистер Касура считают, что, если \(s_i = t_i\) (\(1\leq i\leq n\)), то «Wu»-стоимость пары символов равна \(w_i\), иначе — \(0\). «Wu»-стоимость пары «01-строк» равняется сумме всех «Wu»-стоимостей пар их символов. Заметьте, что длина каждой «01-строк» равняется \(n\).

Например, если \(w=[4, 5, 3, 6]\), «Wu» от («1001», «1100») равно \(7\), потому что эти строки имеют одинаковые символы только в первой и третьей позициях, значит \(w_1+w_3=4+3=7\).

Вам нужно помочь Чилдену ответить на запросы мистера Касуры. То есть найти количество строк в мультимножестве \(S\) таких, что «Wu»-стоимость пары не больше \(k\).

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(q\) (\(1\leq n\leq 12\), \(1\leq q, m\leq 5\cdot 10^5\)) — длина «01-строк», размер мультимножества \(S\) и количество запросов.

Вторая строка содержит \(n\) целых чисел \(w_1, w_2, \ldots, w_n\) (\(0 \le w_i \le 100\)) — стоимость \(i\)-го символа.

Каждая из следующих \(m\) строк содержит «01-строку» \(s\) длины \(n\) — строка в мультимножестве \(S\).

Каждая из следующих \(q\) строк содержит «01-строку» \(t\) длины \(n\) и целое число \(k\) (\(0\leq k\leq 100\)) — запрос.

Выходные данные

Для каждого запроса выведите ответ на него.

Примечание

В первом примере мы имеем:

«Wu» от («01», «00») равно \(40\).

«Wu» от («10», «00») равно \(20\).

«Wu» от («11», «00») равно \(0\).

«Wu» от («01», «11») равно \(20\).

«Wu» от («10», «11») равно \(40\).

«Wu» от («11», «11») равно \(60\).

В первом запросе пары («11», «00») и («10», «00») удовлетворяют условие поскольку «Wu» не больше \(20\).

Во втором примере все пары удовлетворяют условие.

В третьем примере пары («01», «11») и («01», «11») удовлетворяют условие. Обратите внимание, что поскольку строка «01» встречается два раза в мультимножестве, то ответ \(2\), а не \(1\).

В четвертом примере, поскольку \(k\) увеличилось, то пара («10», «11») тоже удовлетворяет условие.

В пятом примере, поскольку \(k\) увеличилось, то пара («11», «11») тоже удовлетворяет условие.

G. Дерево

Структуры данных *3200

Абендсен дал задание Джулиане. Она имеет корневое дерево из \(n\) вершин. Вершина номер \(1\) является корнем дерева. Каждая вершина может быть либо чёрной, либо белой. Сначала все вершины белые. Джулиана должна обработать \(q\) запросов одного из трёх типов:

  1. Если вершина \(v\) белая, перекрасить её в чёрный цвет; в другом случае вместо этого выполнить эту операцию со всеми непосредственными сыновьями \(v\).
  2. Перекрасить все вершины поддерева \(v\) (включая \(v\)) в белый цвет.
  3. Найти цвет \(i\)-й вершины.
Пример операции "1 1" (соответствует операции из первого примера). Вершины \(1\) и \(2\) уже черные, поэтому операция переходит к их сыновьям.

Можете помочь Джулиане обработать все запросы?

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2\leq n\leq 10^5\), \(1\leq q\leq 10^5\)) — количество вершин и количество запросов.

Вторая строка содержит \(n-1\) целых чисел \(p_2, p_3, \ldots, p_n\) (\(1\leq p_i<i\)), где \(p_i\) значит, что существует ребро между вершинами \(i\) и \(p_i\).

Каждая из следующих \(q\) строк содержит два целых числа \(t_i\) и \(v_i\) (\(1\leq t_i\leq 3\), \(1\leq v_i\leq n\)) — тип \(i\)-го запроса и вершина \(i\)-го запроса.

Гарантируется, что граф — дерево.

Выходные данные

Для каждого запроса типа \(3\) выведите «black», если вершина чёрная; в другом случае выведите «white».

Примечание

Первый пример показан на рисунке ниже.

Второй пример показан на рисунке ниже.

E. Сезон дождей

Деревья разделяй и властвуй Структуры данных *3200

К 3018 году Летняя Компьютерная Школа довольно сильно увеличилась в размерах. Новым местом проведения был выбран отель «Берендеетроник». База состоит из \(n\) домиков, между которыми есть \(n-1\) тропинок, и между любыми домиками есть путь.

Все на базе было прекрасно, пока не начались дожди. Прогноз погоды обещает, что дожди будут идти \(m\) дней. Специальный отряд преподавателей смог вычислить, что по \(i\)-й тропинке, соединяющей некие домики \(u_i\) и \(v_i\), до дождей можно пройти за \(b_i\) секунд. Дождь же сильно размывает тропинку, и с каждым днем путь будет занимать на \(a_i\) секунд больше, иными словами, в \(t\)-й (с нуля) день после начала дождя прохождение тропинки будет занимать \(a_i \cdot t + b_i\) секунд.

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

Посчитайте максимальное время пути между какой-либо парой домиков через \(t=0\), \(t=1\), ..., \(t=m-1\) дней после начала дождей.

Входные данные

В первой строке даны два целых числа \(n\) и \(m\) — число домиков на базе и количество дождливых дней (\(1 \le n \le 100\,000\); \(1 \le m \le 1\,000\,000\)).

В следующих \(n-1\) строках даны четверки чисел \(u_i\), \(v_i\), \(a_i\), \(b_i\) — описания тропинок (\(1 \le u_i, v_i \le n\); \(0 \le a_i \le 10^5\); \(0 \le b_i \le 10^9\)). \(i\)-я тропинка соединяет домики \(u_i\) и \(v_i\), и в день \(t\) требует \(a_i \cdot t + b_i\) секунд на прохождение.

Гарантируется, что между любыми двумя домиками есть путь.

Выходные данные

Выведите \(m\) чисел — значения самого длинного пути по базе через \(t=0, t=1, \ldots, t=m-1\) дней после начала дождя.

Примечание

Рассмотрим подробнее первый пример.

В первые три дня (\(0 \le t \le 2\)) самый длинный путь проходит между вторым и третьим домиками, и его длина равна \(100+100=200\).

В третий день (\(t=2\)) дорожка между домиками 1 и 4 становится по длине равной \(100\), и продолжает увеличиваться. Поэтому в дни с номерами \(t=2, 3, 4, 5\) самый длинный путь проходит между вершинами 4 и 1 или 2, и имеет длину \(180+10t\). Заметим, что в день \(t=2\) есть три тропинки длиной 100, и есть три максимальных пути одинаковой длины.

В шестой день (\(t=5\)) тропинка между первым и пятым домиком по длине догоняет первые две, и становится равной 100. Таким образом, во все дни с \(t=5\) и далее самый длинный путь проходит между вершинами 4 и 5, и имеет длину \(80+30t\).

D. Восстановление массива

Конструктив Структуры данных *1700

Изначально был дан массив \(a\), состоящий из \(n\) целых чисел. Позиции в нем пронумерованы от \(1\) до \(n\).

К массиву применили ровно \(q\) запросов. Для \(i\)-го запроса выбирался некоторый отрезок \((l_i, r_i)\) \((1 \le l_i \le r_i \le n)\), и значения элементов на позициях от \(l_i\) до \(r_i\) включительно заменялись на \(i\). Порядок запросов не может быть изменен, и все \(q\) запросов были применены. Также известно, что каждая позиция от \(1\) до \(n\) была покрыта хотя бы одним отрезком.

Мы бы могли вам предложить задачу о проверке того, что некоторый массив (состоящий из \(n\) целых чисел со значениями от \(1\) до \(q\)) мог быть получен приведенными выше запросами. Однако, мы решили, что данная задача будет слишком проста для вас.

Улучшение, которое мы к ней применили, заключается в следующем. Было выбрано множество позиций (возможно пустое) в данном массиве, и значения элементов на этих позициях были заменены на \(0\).

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

Если существует несколько возможных массивов, то выведите любой из них.

Входные данные

В первой строке записаны два целых \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — количество элементов массива и количество запросов, примененных к нему.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le q\)) — полученный массив. Если элемент на некоторой позиции \(j\) равен \(0\), то значение элемента на данной позиции может быть любым целым числом от \(1\) до \(q\).

Выходные данные

Выведите «YES», если массив \(a\) может быть получен применением \(q\) запросов. Отрезки \((l_i, r_i)\) \((1 \le l_i \le r_i \le n)\) выбираются независимо друг от друга при каждом запросе. Каждая позиция от \(1\) до \(n\) должна быть покрыта хотя бы одним отрезком.

В противном случае выведите «NO».

Если некоторый массив мог быть получен, то выведите \(n\) целых чисел во второй строке — \(i\)-е число должно быть равно значению \(i\)-го элемента полученного массива и должно иметь значение от \(1\) до \(q\). Должно быть возможно получить данный массив применением ровно \(q\) запросов.

Если существует несколько возможных массивов, то выведите любой из них.

Примечание

В первом примере можно также заменить \(0\) значением \(1\), но не \(3\).

Во втором примере не важно, какие отрезки выбирались до запроса \(10\), при котором был запрос \((1, 3)\).

Третий пример демонстрирует тот факт, что порядок операций не может быть изменен, нельзя сначала присвоить элементы \((1, 3)\) значению \(6\), и только потом \((2, 2)\) значению \(5\). Отрезок для \(5\) должен быть применен до отрезка для \(6\).

В четвертом примере существует много корректных ответов.

G. Рыбы

Деревья Потоки Структуры данных *3400

Группа исследователей изучает популяцию рыб в естественной системе рек и озер. Система состоит из \(n\) озёр, соединённых между собой \(n - 1\) реками. Каждая река имеет целочисленную длину (в километрах) и допускает перемещение в обоих направлениях. От любого озера можно добраться до любого другого по рекам (иными словами, система представляет собой дерево).

В озёрах живёт неизвестное количество рыб, неотличимых друг от друга. В день \(1\) рыбы произвольно распределены по озёрам. Рыбы могут перемещаться между озёрами по рекам. Рыба может проплыть реку длиной \(l\) километров за \(l\) дней. Также любая рыба, которая посещает какое-либо озеро, может оставаться в нём любое количество дней. В наблюдаемый период в системе не появляется новых рыб, и присутствующие рыбы не исчезают. В любом озере в любой момент времени может находиться сколь угодно большое количество рыб одновременно.

Исследователи провели несколько наблюдений. \(j\)-е из этих наблюдений определило, что в день \(d_j\) в озере \(p_j\) находилось не менее \(f_j\) различных рыб. Помогите исследователям определить наименьшее возможное общее количество рыб, проживающих в озёрах, которое не противоречило бы сделанным наблюдениям.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество озёр в системе.

Следующие \(n - 1\) строк описывают реки. В \(i\)-й из этих строк записано три целых числа \(u_i\), \(v_i\), \(l_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i \neq v_i\), \(1 \leq l_i \leq 10^3\)) — номера озёр (в нумерации с \(1\)), соединённых \(i\)-й рекой, и длина этой реки.

Следующая строка содержит одно целое число \(k\) (\(1 \leq k \leq 10^5\)) — количество наблюдений.

Следующие \(k\) описывают наблюдения. В \(j\)-й из этих строк записано три целых числа \(d_j\), \(f_j\), \(p_j\) (\(1 \leq d_j \leq 10^8\), \(1 \leq f_j \leq 10^4\), \(1 \leq p_j \leq n\)) — номер дня, количество замеченных рыб и номер озера для \(j\)-го наблюдения. Никакие два наблюдения не были сделаны в один и тот же день в одном и том же озере одновременно.

Выходные данные

Выведите одно число — наименьшее общее количество рыб, не противоречащее наблюдениям.

Примечание

В первом примере одна из рыб могла проплыть через озёра \(2\), \(1\) и \(4\), а вторая — через озёра \(3\), \(1\) и \(2\).

Во втором примере одна рыба не могла быть замечена во всех наблюдениях одновременно, но две рыбы, плывущие по маршрутам \(2 \to 1 \to 4\) и \(3 \to 1 \to 5\), могли.

В третьем примере одна рыба могла приплыть из озера \(1\) в озеро \(5\), а остальные могли все время находиться в одном и том же озере: две рыбы в озере \(4\), шесть рыб в озере \(5\), одна рыба в озере \(3\). Система озер показана на рисунке ниже.

D. Книга заявок

жадные алгоритмы Комбинаторика Структуры данных *2100

Рассмотрим упрощенную версию книги заявок некоторой акции.

Книга заявок — это список заявок (предложений) от людей, которые хотят купить или продать одну акцию, каждая заявка описывается направлением (BUY или SELL) и ценой.

В каждый момент времени у любой SELL заявки цена больше, чем у любой BUY заявки.

В этой задаче цены всех когда-либо существовавших заявок различны.

Заявка с направлением SELL с наименьшей ценой и заявка с направлением BUY с наибольшей ценой называются лучшими предложениями и выделены черной рамкой на рисунке.

Данная книга заявок говорит, что кто-то хочет продать акцию по цене \(12\), и это лучшее предложение с направлением SELL, потому что у других двух заявок с этим направлением цена выше. У лучшего BUY предложения цена \(10\).

В книге заявок возможны два события:

  1. Кто-то добавил новую заявку с некоторым направлением и некоторой ценой
  2. Кто-то принял лучшее SELL или BUY предложение (совершил сделку). Нельзя принять не лучшее предложение (совершать сделку по менее выгодной цене). После того, как лучшее предложение принято, оно навсегда удаляется из книги заявок.

Можно добавлять новые заявки BUY только с ценами ниже лучшего SELL предложения (если вы хотите купить по более высокой цене, то вместо постановки заявки нужно принять лучшее SELL предложение). Аналогично нельзя добавлять SELL заявки с ценами меньшими или равными лучшему предложению BUY. К примеру, нельзя добавить заявку "SELL \(20\)", если уже есть заявка "BUY \(20\)" или "BUY \(25\)" — в этом случае нужно просто принять лучшее предложение BUY.

У вас есть поврежденный лог событий в книге заявок (в начале никаких заявок в книге нет). В логе есть события двух типов:

  1. "ADD \(p\)" означает добавление новой заявки с ценой \(p\) и неизвестным направлением. Заявка не должна противоречить еще не удаленным заявкам в книге заявок.
  2. "ACCEPT \(p\)" означает принятие существующего лучшего предложения с ценой \(p\) и неизвестным направлением.

Направления всех заявок (BUY или SELL) в логе утеряны. Не всегда по имеющимся данным можно однозначно восстановить эти направления. Посчитайте количество способов корректно восстановить направления ADD заявок так, что описанные условия всегда выполнены. Ответ может быть очень большим, поэтому выведите его по модулю \(10^9 + 7\). Если невозможно корректно восстановить направления, то выведите \(0\).

Входные данные

В первой строке задано целое число \(n\) (\(1 \le n \le 363\,304\)) — количество событий в логе.

Каждая из следующих \(n\) строк содержит слово "ACCEPT" или "ADD" и целое число \(p\) (\(1 \le p \le 308\,983\,066\)), описывающих тип события и цену.

Все события типа ADD имеют разные цены. Для события ACCEPT гарантируется, что заявка с такой ценой уже была добавлена и еще не был принята (не участвовала в сделках).

Выходные данные

Выведите число способов восстановить направления всех заявок ADD по модулю \(10^9 + 7\).

Примечание

В первом примере каждая из заявок может быть и BUY, и SELL.

Во втором примере заявка с ценой \(1\) должна иметь направление BUY, заявка с ценой \(3\) должна иметь направление SELL.

D. Время грабить корованы

Перебор сортировки Структуры данных *2100

Я джва года хочу такую задачу.
Alex_KPR

Как известно, самые умные существа на планете Земля — это, конечно, коровы. К этому выводу давно пришли марсианские инопланетяне, а также целый ряд других разумных цивилизаций из дальнего космоса.

Иногда коровы собираются в корованы. Это, кажется, у них сезонное. Но именно в это время коровы становятся пассивными и слабо реагируют на внешние раздражители. Корован — идеальная мишень для марсианской исследовательской тарелки, самое время для крупномасштабных похищений, или, как говорят марсиане, ограблений. Говоря простым языком, корован — это множество коров, расположенных в ряд.

Если пронумеровать всех коров в короване натуральными числами от 1 до n, то можно формализовать популярную модель похищения, известную как (a, b)-ограбление корована: сперва похищается корова с номером a, затем — с номером a + b, затем — с номером a + 2·b, и так далее, пока номер похищаемой коровы не превысит n. В процессе одного ограбления коровы не перенумеровываются.

Инопланетяне с радостью бы расположили всех коров на борту своего гостеприимного судна, но, к сожалению, размер грузового отсека весьма и весьма ограничен. Исследователи, зная массу каждой коровы в короване, составили p сценариев (a, b)-ограбления. Теперь они хотят определить для каждого сценария в отдельности какая суммарная масса чистой говядины попадет на борт корабля. Все сценарии независимы, в процессе выполнения расчетов похищение коров не осуществляется.

Входные данные

В первой строке дано единственное натуральное число n — количество коров в короване (1 ≤ n ≤ 3·105).

Во второй строке содержится n натуральных чисел wi, разделенных пробелами, где i-ое число определяет массу i-ой коровы в короване (1 ≤ wi ≤ 109).

В третьей строке дано единственное натуральное число p — количество сценариев (a, b)-ограблений (1 ≤ p ≤ 3·105).

Каждая последующая строка содержит параметры a и b очередного сценария (1 ≤ a, b ≤ n).

Выходные данные

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

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

F. Сдвигаем ящики

Структуры данных *2500

Задана бесконечная клеточная полоса. На ней расположены \(n\) ящиков: \(i\)-й ящик находится в клетке \(a_i\) и имеет вес \(w_i\). Все \(a_i\) различны; также, \(a_{i - 1} < a_i\) для всех корректных \(i\).

Вы решили собрать вместе некоторые ящики. «Собрать вместе» ящики с номерами в отрезке \([l, r]\) означает, что вам необходимо их расположить таким образом, что их позиции образуют некоторый отрезок \([x, x + (r - l)]\).

За один шаг вы можете сдвинуть любой ящик в соседнюю клетку, если она не занята другим ящиком (т. е. выбрать \(i\) и изменить \(a_i\) на \(1\), при этом все позиции должны остаться различными). На передвижение ящика \(i\) на одну клетку вы тратите энергию, равную его весу \(w_i\). Вы можете двигать ящики в любом порядке любое количество раз.

Веса некоторых ящиков иногда изменяются, поэтому Вам необходимо обработать запросы двух видов:

  1. \(id\) \(nw\) — вес \(w_{id}\) ящика \(id\) становится равным \(nw\).
  2. \(l\) \(r\) — вы должны вычислить минимальную суммарную энергию, необходимую для того, чтобы собрать вместе ящики с номерами в отрезке \([l, r]\). Так как ответ может быть слишком большим, выведите остаток от деления ответа на \(1000\,000\,007 = 10^9 + 7\). Обратите внимание, при таком запросе ящики остаются на местах, вам нужно лишь вычислить ответ.

Обратите внимание, что минимизировать надо сам ответ, а не его остаток от деления на \(10^9 + 7\). Например, если у вас два возможных ответа — \(2 \cdot 10^9 + 13\) и \(2 \cdot 10^9 + 14\) — то необходимо выбрать первый ответ и вывести \(10^9 + 6\), даже с учетом того, что второй ответ дает остаток \(0\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — количество ящиков и запросов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots a_n\) (\(1 \le a_i \le 10^9\)) — позиции ящиков. Все \(a_i\) различны, \(a_{i - 1} < a_i\) для всех корректных \(i\).

Третья строка содержит \(n\) целых чисел \(w_1, w_2, \dots w_n\) (\(1 \le w_i \le 10^9\)) — начальные веса ящиков.

Следующие \(q\) строк содержат запросы, по одному запросу в строке.

Каждый запрос описывается одной строкой, содержащей два целых числа \(x\) и \(y\). Если \(x < 0\), то это запрос первого типа, причем \(id = -x\), \(nw = y\) (\(1 \le id \le n\), \(1 \le nw \le 10^9\)). Если же \(x > 0\), то это запрос второго типа, причем \(l = x\), а \(r = y\) (\(1 \le l_j \le r_j \le n\)). Число \(x\) не может быть равно \(0\).

Выходные данные

Для каждого запроса второго типа выведите ответ на него в отдельной строке. Так как ответ может быть слишком большим, выведите остаток от деления его на \(1000\,000\,007 = 10^9 + 7\).

Примечание

Рассмотрим запросы из примера:

  1. \(1\ 1\): ящик только один, поэтому двигать его не надо.
  2. \(1\ 5\): мы можем сдвинуть ящики в отрезок \([4, 8]\): \(1 \cdot |1 - 4| + 1 \cdot |2 - 5| + 1 \cdot |6 - 6| + 1 \cdot |7 - 7| + 2 \cdot |10 - 8| = 10\).
  3. \(1\ 3\): мы можем сдвинуть ящики в отрезок \([1, 3]\).
  4. \(3\ 5\): мы можем сдвинуть ящики в отрезок \([7, 9]\).
  5. \(-3\ 5\): изменение \(w_3\) из \(1\) в \(5\).
  6. \(-1\ 10\): изменение \(w_1\) из \(1\) в \(10\). Теперь веса ящиков равны \(w = [10, 1, 5, 1, 2]\).
  7. \(1\ 4\): мы можем сдвинуть ящики в отрезок \([1, 4]\).
  8. \(2\ 5\): мы можем сдвинуть ящики в отрезок \([5, 8]\).

D. Отрезки отрезков

Бинарный поиск Структуры данных *3500

Little D — друг Little C, который очень любит интервалы вместо числа "\(3\)".

В данный момент у него есть \(n\) отрезков на числовой оси, \(i\)-й из них — \([a_i,b_i]\).

Но только \(n\) отрезков не могут его удовлевторить. Он определяет значение отрезка отрезков \([l,r]\) (\(1 \leq l \leq r \leq n\), \(l\) и \(r\) целые) как длину объединения отрезков с номерами с \(l\) по \(r\).

Он хочет выбрать ровно \(k\) различных отрезков отрезков, что сумма их значений максимальна. Помогите ему вычислить эту сумму.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 3 \cdot 10^5\), \(1 \leq k \leq \text{min}\{\frac{n(n+1)}{2},10^9\}\)) — количество отрезков у Little D и количество отрезков отрезков, которые он выберет.

Каждая из \(n\) следующих строк содержит два целых числа \(a_i\) и \(b_i\), \(i\)-я строка описывает \(i\)-й отрезок (\(1 \leq a_i < b_i \leq 10^9\)).

Выходные данные

Выведите единственное число — максимальную сумму значений, которую может получить Little D.

Примечание

В первом примере Little D выберет \([1,2]\), объединение первого и второго отрезка это \([1,4]\), длина объединения — \(3\).

Во втором примере Little D выберет \([1,2]\), \([2,3]\) и \([1,3]\), ответ будет равен \(5+6+4=15\).

F. Максимальное упрощение

Комбинаторика математика Структуры данных *2500

Вам дан массив \(a\) из \(n\) целых чисел и целое число \(k\) (\(2 \le k \le n\)), где элементы массива обозначаются как \(a_i\) (\(0 \le i < n\)). Выполните операцию \(z\) определённую ниже над \(a\) и выведите значение \(z(a,k)\) по модулю \(10^{9}+7\).


function z(array a, integer k):
if length(a) < k:
return 0
else:
b = empty array
ans = 0
for i = 0 .. (length(a) - k):
temp = a[i]
for j = i .. (i + k - 1):
temp = max(temp, a[j])
append temp to the end of b
ans = ans + temp
return ans + z(b, k)
Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le k \le n \le 10^6\)) — длина исходного массива \(a\) и параметр \(k\).

Вторая строка содержит \(n\) целых чисел \(a_0, a_1, \ldots, a_{n - 1}\) (\(1 \le a_{i} \le 10^9\)) — элементы массива \(a\).

Выходные данные

Выведите одно целое число — значение \(z(a,k)\) взятое по модулю \(10^9+7\).

Примечание

В первом примере:

  • для \(a=(9,1,10)\), \(ans=19\) и \(b=(9,10)\),
  • для \(a=(9,10)\), \(ans=10\) и \(b=(10)\),
  • для \(a=(10)\), \(ans=0\).

Значит, ответ равен \(19+10+0=29\).

Во втором примере:

  • для \(a=(5,8,7,1,9)\), \(ans=25\) и \(b=(8,8,9)\),
  • для \(a=(8,8,9)\), \(ans=9\) и \(b=(9)\),
  • для \(a=(9)\), \(ans=0\).

Значит, ответ равен \(25+9+0=34\).

H. Безопасность

строковые суфф. структуры Структуры данных *3200

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

Изначально у них есть строка \(s\), состоящая из строчных латинских букв. Затем они хотят выбрать \(q\) строк следуя шагам ниже, а вы должны им помочь.

  1. Выбирается строка \(x\), состоящая из строчных латинских букв и целые числа \(l\) и \(r\) (\(1 \leq l \leq r \leq |s|\)).
  2. Рассмотрим все непустые различные подстроки строки \(s_l s_{l + 1} \ldots s_r\), то есть все различные строки \(s_i s_{i+1} \ldots s_{j}\), где \(l \le i \le j \le r\). Среди всех из них оставим только строки, которые лексикографически больше строки \(x\).
  3. Если таких строк нет, то выведите \(-1\). Иначе выведите лексикографически минимальную из оставшихся строк.

Строка \(a\) лексикографически меньше строки \(b\), если или \(a\) является префиксом строки \(b\), причем \(a \ne b\), или если существует такая позиция \(i\) (\(1 \le i \le min(|a|, |b|)\)), что \(a_i < b_i\) и для всех \(j\) (\(1 \le j < i\)) \(a_j = b_j\). Здесь \(|a|\) обозначает длину строки \(a\).

Входные данные

Первая строка содержит непустую строку \(s\) (\(1 \leq |s| \leq 10^{5}\)), состоящую только из строчных латинских букв.

Вторая строка содержит целое \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество строк, которые будут выбраны.

Каждая из следующих \(q\) строк содержит два целых числа \(l\), \(r\) (\(1 \leq l \leq r \leq |s|\)) и непустую строку \(x\), состоящую только из строчных латинских букв. Суммарная длина всех строк \(x\) по всем запросам не превосходит \(2 \cdot 10^{5}\).

Выходные данные

Выведите \(q\) строк, каждая из них должна содержать искомую строку или \(-1\), если подходящих строк не оказалось.

Примечание

Рассмотрим первый пример.

Строка \(s\) равна «baa». Запросы следующие:

  1. Мы рассматриваем подстроку \(s_1 s_2\) равную «ba». У неё есть подстроки «b», «a» и «ba», так как ни одна из них не больше, чем строка запроса «ba», то ответом является \(-1\).
  2. Мы рассматриваем подстроку «aa». Среди её подстрок только «aa» больше чем строка запроса «a». Поэтому ответом является «aa».
  3. Мы рассматриваем подстроку «ba». Среди «b», «a» and «ba» только «ba» больше чем строка запроса «b», поэтому ответом является «ba».
  4. Мы рассматриваем подстроку «aa». Ни одна из подстрок «aa» не больше, чем строка запроса «aa», поэтому ответом является \(-1\).
  5. Мы рассматриваем подстроку «baa» и у неё (среди прочих) есть подстроки «ba», «baa», которые больше чем строка запроса «b». Так как «ba» лексикографически меньше «baa», то ответом является «ba».

A. Расписание автобусов

жадные алгоритмы Конструктив математика Структуры данных *2300

Имеются две остановки автобусов A и B, и известно, что в течение дня \(n\) автобусов совершают поездку от A до B. От остановки A до остановки B самым быстрым образом можно доехать за время \(t\), но можно ехать и дольше, при этом автобусы могут произвольным образом обгонять друг друга в процессе следования по маршруту.

На каждой из остановок можно прочитать упорядоченный список моментов времени, когда на эту остановку приходит автобус, обозначим как \(a_1 < a_2 < \ldots < a_n\) список для остановки A и как \(b_1 < b_2 < \ldots < b_n\) список для остановки B. Автобусы всегда отъезжают от остановки A и всегда прибывают на остановку B вовремя, но порядок прибытия автобусов может отличаться от порядка отправления. Будем называть порядок прибытия корректным, если для каждого автобуса время его прибытия хотя бы на \(t\) позже, чем время отправления.

Известно, что для соблюдения расписания автобус, отправляющийся в момент времени \(a_i\), должен приехать не позже, чем в момент времени \(b_{x_i}\), то есть \(x_i\)-м по счету. Иными словами, для каждого \(i\) существует такой корректный порядок прибытия автобусов, где \(i\)-й отправленный автобус прибывает \(x_i\)-м (а остальные — как угодно), но не существует корректного порядка, где \(i\)-й отправленный автобус прибывает \((x_i + 1)\)-м.

Формально, назовем перестановку \(p_1, p_2, \ldots, p_n\) корректной, если \(b_{p_i} \ge a_i + t\) для всех \(i\). Тогда \(x_i\) — максимальное значение \(p_i\) среди всех корректных перестановок.

Вам известны числа \(a_1, a_2, \ldots, a_n\) и \(x_1, x_2, \ldots, x_n\), но не известны времена прибытия автобусов. Найдите какое-нибудь подходящее расписание \(b_1, b_2, \ldots, b_n\), или определите, что такого расписания не существует.

Входные данные

В первой строке записаны два числа \(n\) и \(t\) (\(1 \leq n \leq 200\,000\), \(1 \leq t \leq 10^{18}\)) — количество автобусов в расписании на обеих остановках и минимальное возможное время поездки автобуса от А до B.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_1 < a_2 < \ldots < a_n \leq 10^{18}\)), определяющие времена отправления автобусов от остановки A.

В третьей строке записаны \(n\) чисел \(x_1, x_2, \ldots, x_n\) (\(1 \leq x_i \leq n\)), \(i\)-е из которых означает максимально допустимую позицию в расписании автобусов на остановке B, которую мог занять автобус, отъехавший \(i\)-м от остановки A.

Выходные данные

Если решение существует, в первой строке выведите слово «Yes» (без кавычек).

Во второй строке выведите \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_1 < b_2 < \ldots < b_n \leq 3 \cdot 10^{18}\)). Можно показать, что если решение существует, то существует и решение, удовлетворяющее данному ограничению на значения \(b_i\). Если правильных ответов несколько, то разрешается вывести любой из них.

Если подходящего расписания не существует, выведите слово «No» (без кавычек) в единственной строке вывода.

Примечание

Рассмотрим первый пример и расписание \(b_1, b_2, \ldots, b_n\) из примера.

Чтобы получить \(x_1 = 2\) можно взять порядок прибытия автобусов \((2, 1, 3)\). Чтобы получить \(x_2 = 2\) и \(x_3 = 3\) можно выбрать порядок прибытия \((1, 2, 3)\). \(x_1\) не равно \(3\), потому что перестановки \((3, 1, 2)\) и \((3, 2, 1)\) (все возможные, в которых \(1\)-й автобус приезжает \(3\)-м по порядку) некорректны (некоторые автобусы приедут слишком рано), по тем же причинам \(x_2\) не равно \(3\).

D. Вам дано дерево

Деревья дп Структуры данных *2800

Деревом называется связный неориентированный граф, в котором между любыми двумя вершинами существует ровно один простой путь. Будем говорить, что множество простых путей является \(k\)-допустимым, если каждая вершина дерева принадлежит не более чем одному из этих путей (включая концевые вершины) и каждый путь состоит ровно из \(k\) вершин.

Вам дано дерево на \(n\) вершинах. Для каждого \(k\) от \(1\) до \(n\) включительно найдите максимально возможную мощность \(k\)-допустимого множества простых путей.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 100\,000\)) — количество вершин в дереве.

Следующие \(n - 1\) строк задают дерево, каждая из них содержит два целых числа \(v\) и \(u\) (\(1 \le v, u \le n\)) — концы соответствующего ребра.

Гарантируется, что заданный граф является деревом.

Выходные данные

Выведите \(n\) чисел, \(i\)-е из которых равно максимально возможной мощности \(i\)-допустимого множества путей.

Примечание

Один из способов достичь наибольшего количества путей во втором примере изображён на следующей картинке:

E. Летняя Выставка Энотер

Структуры данных *3400

Некоторые люди обожают решать контесты по спортивному программированию, Дина же увлекается фотографией. Как только Байтландский ботанический сад объявил о старте Летней выставки энотер, она решила попробовать свою новую камеру в действии.

На выставке представлены \(l = 10^{100}\) энотер, выставленных в ряд, и пронумерованных от \(0\) до \(l - 1\). Объектив камеры позволяет сделать снимок с ровно \(w\) цветами, то есть Дина может снять любую фотографию, содержащую цветы с номерами с \(x\) по \(x + w - 1\) для некоторого целого \(x\) от \(0\) до \(l - w\). Такую фотографию мы будем обозначать как \([x, x + w - 1]\).

Во время выставки она сделала \(n\) фотографий, \(i\)-я по порядку фотография в наших обозначениях выглядит как \([x_i, x_i + w - 1]\). Увидев, что вечером энотеры раскрываются, она решила сделать видео с замедленной съемкой (time-lapse) из этих фотографий.

Процесс заключается в следующем: Дина обрезает фотографии, оставляя от каждой из них подотрезок, состоящий ровно из \(k\) цветов, составляет из них видео, сохраняя порядок их следования, и вуаля — произведение искусства готово!

Назовем сценой непрерывную последовательность фотографий такую, что множество цветов на них совпадает. Изменение множества цветов между двумя сценами мы назовем склейкой. Например, пусть на первой фотографии запечатлены цветы \([1, 5]\), на второй — \([3, 7]\), а на третьей — \([8, 12]\). Если \(k = 3\), то можно вырезать на первой и второй фотографии отрезок цветов \([3, 5]\), а на третьей фотографии — отрезок цветов \([9, 11]\). Тогда первые две фотографии образуют одну сцену, третья фотография образует вторую сцену, а изменение между этими сценами, которое происходит между второй и третьей фотографией — склейка. Если же \(k = 4\), то каждый из двух переходов между фотографиями вынужден быть склейкой.

Дина хочет, чтобы количество склеек на итоговом видео было минимально. Помогите ей! Посчитайте минимальное количество склеек для разных значений \(k\).

Входные данные

Первая строка содержит три положительных целых числа \(n\), \(w\), \(q\) (\(1 \leq n, q \leq 100\,000\), \(1 \leq w \leq 10^9\)) — количество сделанных фотографий, количество цветов на одной фотографии и количество запросов соответственно.

Следующая строка содержит \(n\) неотрицательных чисел \(x_i\) (\(0 \le x_i \le 10^9\)) — номера самых левых энотер на каждой из фотографий.

Следующая строка содержит \(q\) положительных чисел \(k_i\) (\(1 \le k_i \le w\)) — значения \(k\), при которых нужно найти ответ на задачу.

Гарантируется, что все \(k_i\) различны.

Выходные данные

Выведите \(q\) чисел — для каждой итоговой ширины обрезанной фотографии \(k_i\) определите минимальное количество склеек, которого можно добиться.

C. Перерывы на кофе

Бинарный поиск жадные алгоритмы Структуры данных *1600

Монокарп недавно устроился на работу, его рабочий день длится \(m\) минут. Также известны \(n\) минут \(a_1, a_2, \dots, a_n\), в которые он хочет сделать перерыв на кофе (в этой задаче считаем, что Монокарп пьет кофе ровно минуту).

Однако начальнику Монокарпа не нравится, когда тот пьет кофе слишком часто, поэтому Монокарп хочет проставить каждой из заданных минут \(a_i\) номер рабочего дня, в который он устроит перерыв на кофе в эту минуту, так, чтобы каждый день между любой парой перерывов на кофе было как минимум \(d\) минут рабочего времени. При этом Монокарп хочет попить кофе \(n\) раз за минимальное количество именно рабочих дней (исключая выходные). Считайте, что между любыми двумя последовательными рабочими днями проходит более \(d\) минут.

Определите для каждой из \(n\) заданных минут для перерывов на кофе, в какой из дней соответствующий перерыв нужно сделать. При этом количество дней нужно минимизировать.

Входные данные

Первая строка содержит три целых числа \(n\), \(m\), \(d\) \((1 \le n \le 2\cdot10^{5}, n \le m \le 10^{9}, 1 \le d \le m)\) — количество перерывов, длина рабочего дня и минимальное количество минут между двумя перерывами на кофе.

Вторая строка содержит \(n\) различных целых чисел \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le m)\), где \(a_i\) равно минуте рабочего дня, в которую Монокарп хочет пить кофе.

Выходные данные

В первую строку выведите минимальное количество дней, в которые Монокарп успеет сделать описанные \(n\) перерывов на кофе.

Во вторую строку выведите \(n\) целых чисел, причем \(i\)-е число должно быть равно номеру рабочего дня, в который нужно сделать перерыв на кофе в минуту \(a_i\). Дни нужно нумеровать последовательными натуральными числами, начиная с \(1\). Если ответов несколько, разрешается вывести любой из них.

Примечание

В первом примере Монокарп может сделать два перерыва на кофе в первый день (в минуты \(1\) и \(5\), между ними пройдёт \(3\) минуты), один перерыв на кофе во второй день (в минуту \(2\)) и один перерыв на кофе в третий день (в минуту \(3\)).

Во втором примере Монокарп может сделать все перерывы в нечетные минуты в первый день, а все перерывы в четные минуты во второй.

D. Планерист

Бинарный поиск Структуры данных *1700

Самолет летит параллельно поверхности земли на высоте \(h\) метров. Будем считать, что самолет летит из точки \((-10^9, h)\) в точку \((10^9, h)\) параллельно оси \(Ox\) вправо.

В самолете находится планерист, который в определенный момент выпрыгнет из самолета. Из-за особенностей задачи, планерист может выпрыгивать только в целочисленных координатах. После прыжка каждую секунду он будет двигаться вдоль оси \(Ox\) на единицу вправо, а также падать на единицу вниз.

На некоторых отрезках действуют восходящие потоки воздуха, характеризующиеся двумя числами \(x_1\) и \(x_2\) (\(x_1 < x_2\)). Они действуют по всей высоте. Никакие два потока не пересекаются и не имеют общих точек. Если планерист попадает в восходящий поток, то он не теряет высоту, пока летит в этом потоке. Изменение по оси \(Ox\) остается таким же — он двигается на единицу вправо за одну секунду.

Если планерист выпрыгнет в координате \(1\), то он остановится в \(10\). Если же он выпрыгнет в \(2\), то остановится в \(12\).

Определите максимальное расстояние по оси \(Ox\) от точки прыжка до точки приземления, которое планерист сможет пролететь, если он самостоятельно может выбрать точку прыжка. Коснувшись земли, планерист останавливается, то есть он не может планировать в восходящем потоке на высоте \(0\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(h\) \((1 \le n \le 2\cdot10^{5}, 1 \le h \le 10^{9})\) — количество восходящих потоков воздуха и высота полета самолета.

Каждая из следующих \(n\) строк содержит два целых числа \(x_{i1}\) и \(x_{i2}\) \((1 \le x_{i1} < x_{i2} \le 10^{9})\) — координаты левого и правого концов \(i\)-го восходящего потока. Гарантируется, что никакие два потока не пересекаются и не имеют общих точек. Потоки заданы в порядке возрастания их координат.

Выходные данные

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

Примечание

В первом примере планеристу выгодно выпрыгнуть в точке с координатами \((2, 4)\), тогда он приземлится в точке \((12, 0)\), что даст расстояние равное \(12-2 = 10\).

Во втором примере планеристу выгодно выпрыгнуть в точке с координатами \((16,10)\), тогда он приземлится в точке \((34,0)\), что даст расстояние равное \(34-16=18\).

В третьем примере планерист может выпрыгнуть, например, в точке с координатами \((-100,1000000000)\), тогда он приземлится в точке \((1999999899,0)\), что даст расстояние равное \(1999999899-(-100)=1999999999\).

E. Восстановление дерева

графы жадные алгоритмы Конструктив Структуры данных *1900

Монокарп нарисовал дерево (неориентированный связный ацикличный граф) и пронумеровал его вершины. Все номера вершин — различные числа от \(1\) до \(n\). Для каждого ребра \(e\) этого дерева он записал два числа: максимальные номера вершин в каждой компоненте, на которые распалось бы дерево, если бы он удалил ребро \(e\) (и только его).

Монокарп дал вам список из \(n - 1\) пар чисел. По этому списку он просит вас определить, существует ли дерево, для которого мог быть записан именно такой список пар, и если оно существует, предоставить пример.

Входные данные

В первой строке содержится одно число \(n\) (\(2 \le n \le 1\,000\)) — количество вершин в дереве.

Каждая из следующих \(n-1\) строк содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i < b_i \le n\)) — максимумы в тех компонентах, на которые распадается дерево при удалении \(i\)-го ребра.

Выходные данные

Если дерево, для которого мог быть получен данный список пар, не существует, выведите «NO» (без кавычек).

Иначе в первой строке выведите «YES» (без кавычек), после чего выведите \(n - 1\) строку с описанием рёбер. В каждой из этих \(n - 1\) строк должны быть записаны два числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\)) — номера вершин, соединяемых очередным ребром.

Обратите внимание: несмотря на то, что рёбра пронумерованы, ваш ответ будет засчитан как правильный, если по вашему дереву будет получен список из тех же пар чисел, расположенных в другом порядке. Это значит, что вы можете выводить ребра в любом порядке.

Примечание

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

F. Луч в трубе

дп математика разделяй и властвуй Структуры данных *2500

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

Вы собираетесь провести эксперимент с этой трубой и лазерным лучом. Для этого надо выбрать две целочисленные точки \(A\) и \(B\) на первой и второй прямой соответственно (координаты точек могут быть отрицательные): точка \(A\) будет отвечать за позицию лазера, а точка \(B\) — за направление лазерного луча. Лазерный луч представляет собой луч, стартующий в \(A\) и направленный в \(B\), который отражается от стенок трубы (независимо от того, есть в данной точке сенсор или нет). Сенсор регистрирует луч, если он попадает точно в позицию сенсора.

Примеры использования лучей. Обратите внимания, что здесь два примера. Если использовать синий луч, то \(3\) сенсора (которые обозначены черными точками на сторонах трубы) зарегистрируют луч. А если красный, то только \(2\).

Определите максимальное количество сенсоров, которые могут зарегистрировать луч, если вы можете выбрать целочисленные точки \(A\) и \(B\) на первой и второй прямой.

Входные данные

Первая строка содержит два целых числа \(n\) и \(y_1\) (\(1 \le n \le 10^5\), \(0 \le y_1 \le 10^9\)) — количество сенсоров на первой прямой и её \(y\) координата.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — \(x\) координаты сенсоров на первой прямой в строго возрастающем порядке.

Третья строка содержит два целых числа \(m\) и \(y_2\) (\(1 \le m \le 10^5\), \(y_1 < y_2 \le 10^9\)) — количество сенсоров на второй прямой и ее \(y\) координата.

Четвертая строка содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(0 \le b_i \le 10^9\)) — \(x\) координаты сенсоров на второй прямой в строго возрастающем порядке.

Выходные данные

Выведите максимальное количество сенсоров, которые могут зарегистрировать луч.

Примечание

Один из оптимальных способов представлен на иллюстрации парой \(A_2\) и \(B_2\).

D. Петя и массив

разделяй и властвуй Структуры данных *1800

У Пети есть массив \(a\), состоящий из \(n\) целых чисел. Недавно он изучил префикс суммы и теперь умеет быстро считать сумму элементов на любом подотрезке своего массива. Под подотрезком понимается непустая последовательность подряд идущих элементов массива.

Теперь ему стало интересно, сколько в его массиве подотрезков с суммой элементов меньше \(t\). Помогите Пете и определите это количество.

Формально, нужно найти количество пар \(l, r\) (\(l \le r\)), что \(a_l + a_{l+1} + \dots + a_{r-1} + a_r < t\).

Входные данные

В первой строке следуют два целых числа \(n\) и \(t\) (\(1 \le n \le 200\,000, |t| \le 2\cdot10^{14}\)).

Во второй строке следует последовательность целых чисел \(a_1, a_2, \dots, a_n\) (\(|a_{i}| \le 10^{9}\)) — описание массива Пети. Обратите внимание, что элементы могут быть и отрицательными, и нулевыми, и положительными.

Выходные данные

Выведите количество подотрезков в массиве Пети с суммой элементов меньше \(t\).

Примечание

В первом примере у следующих отрезки сумма меньше \(4\):

  • \([2, 2]\), сумма на отрезке равна \(-1\)
  • \([2, 3]\), сумма на отрезке равна \(2\)
  • \([3, 3]\), сумма на отрезке равна \(3\)
  • \([4, 5]\), сумма на отрезке равна \(3\)
  • \([5, 5]\), сумма на отрезке равна \(-1\)

F. Множества листьев

графы Деревья жадные алгоритмы поиск в глубину и подобное снм сортировки Структуры данных *2400

Вам дано неориентированное дерево, состоящее из \(n\) вершин.

Назовём вершину листом, если она соединена ровно с одной другой вершиной.

Под расстоянием между двумя вершинами будем понимать количество рёбер на кратчайшем пути между этими вершинами.

Назовем некоторое множество листьев красивым, если максимальное расстояние между любой парой листьев из этого множества не превышает \(k\).

Перед вами стоит задача разделить все листья дерева на непересекающиеся красивые множества. Определите минимальное количество множеств, которые можно получить в результате описанного разделения.

Входные данные

В первой строке следуют два целых числа \(n\) и \(k\) (\(3 \le n \le 10^6\), \(1 \le k \le 10^6\)) — количество вершин в дереве и максимальное расстояние между парой листьев, принадлежащих одному красивому множеству.

Каждая из следующих \(n - 1\) строк содержит по два целых числа \(v_i\) и \(u_i\) (\(1 \le v_i, u_i \le n\)) — описание \(i\)-го ребра дерева.

Гарантируется, что описанные рёбра формируют дерево.

Выходные данные

Выведите минимальное количество красивых множеств в разбиении всех листьев.

Примечание

Картинка описывает разбиение дерева из первого примера.

G. Пестрая лента

разделяй и властвуй Строки строковые суфф. структуры Структуры данных хэши *3500

Ильдар взял ленточку и покрасил её в несколько цветов. Формально, ленточка разбита на \(n\) клеточек, каждую из которых он покрасил в один из \(26\) цветов, которые можно обозначить строчными буквами латинского алфавита.

Ильдар решил, что он выберет отрезок ленточки \([l, r]\) (\(1 \le l \le r \le n\)), который ему нравится, и вырежет его из ленточки. Таким образом получится новая ленточка, которую можно условно представить как строку \(t = s_l s_{l+1} \ldots s_r\).

Теперь Ильдар играет в следующую игру — разрезает ленточку \(t\) на несколько новых ленточек и смотрит, сколько среди них различных. Формально, Ильдар выбирает \(1 \le k \le |t|\) индекcов \(1 \le i_1 < i_2 < \ldots < i_k = |t|\) и разрезает \(t\) на \(k\) ленточек-строк \(t_1 t_2 \ldots t_{i_1}, t_{i_1 + 1} \ldots t_{i_2}, \ldots, {t_{i_{k-1} + 1}} \ldots t_{i_k}\) и считает среди них количество различных. Внезапно Ильдара заинтересовал вопрос — а какое минимальное количество различных как строк из них может получиться, при условии что среди этих кусочков хотя бы один вид ленточек повторяется хотя бы два раза? Результатом игры Ильдар считает это число. Если не существует ни одного способа разрезать \(t\) таким образом, то результатом игры будет число -1.

К сожалению, Ильдар ещё не выбрал, какой именно отрезок ему нравится, но у него есть \(q\) отрезков-предпочтений \([l_1, r_1]\), \([l_2, r_2]\), ..., \([l_q, r_q]\). Посчитайте для каждого из отрезков какой будет результат игры нём.

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 200\,000\)) — длина изначальной ленточки у Ильдара.

Вторая строка содержит строку \(s\), состоящую из \(n\) строчных букв латинского алфавита — ленточка, которая есть у Ильдара.

Третья строка содержит одно целое число \(q\) (\(1 \le q \le 200\,000\)) — количество отрезков-предпочтений у Ильдара.

Каждая из следующих \(q\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — границы \(i\)-го отрезка.

Выходные данные

Выведите \(q\) строк, где \(i\)-я из них содержит результат игры на строке \([l_i, r_i]\).

Примечание

Рассмотрим первый пример.

Если Ильдар выберет отрезок \([1, 6]\), то он вырежет строку \(t = abcabc\). Если разрезать \(t\) на два кусочка \(abc\) и \(abc\), то строка \(abc\) повторится два раза, а количество различных строк из разрезания будет равно \(1\). Поэтому результат этой игры \(1\).

Если Ильдар выберет отрезок \([4, 7]\), то он вырежет строку \(t = abcd\). Эту строку невозможно разрезать на строки так, что будет хотя бы строка, повторяющаяся хотя бы два раза. Поэтому результат этой игры \(-1\).

Если Ильдар выберет отрезок \([3, 6]\), то он вырежет строку \(t = cabc\). Если разрезать \(t\) на три кусочка \(c\), \(ab\) и \(c\), то строка \(c\) повторится два раза, а количество различных строк будет равно \(2\). Поэтому результат этой игры \(2\).

D. Запросы на дедукцию

снм Структуры данных *2400

Есть массив \(a\) из \(2^{30}\) целых чисел, пронумерованных от \(0\) до \(2^{30}-1\). Изначально вы знаете, что \(0 \leq a_i < 2^{30}\) (\(0 \leq i < 2^{30}\)), но вы не знаете эти числа. Ваша задача заключается в том, чтобы обработать все запросы двух видов:

  • 1 l r x: Вам сообщают, что исключающее ИЛИ (он же XOR) подотрезка \([l, r]\) (включительно) равно \(x\). То есть \(a_l \oplus a_{l+1} \oplus \ldots \oplus a_{r-1} \oplus a_r = x\), где \(\oplus\) — побитовое исключающее ИЛИ. В некоторых случаях полученный запрос противоречит предыдущим запросам. В этом случае нужно проигнорировать противоречивый запрос (новый запрос).
  • 2 l r: Нужно вывести исключающее ИЛИ подмассива \([l, r]\) (включительно). Если же, используя все предыдущие запросы, ответить на этот запрос невозможно, нужно вывести \(-1\).

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

Входные данные

Первая строка содержит одно целое число \(q\) (\(1 \leq q \leq 2 \cdot 10^5\)) — количество запросов.

Каждая из следующих \(q\) строк описывает запрос. Она содержит одно целое число \(t\) (\(1 \leq t \leq 2\)) — тип запроса.

Запросы закодированы следующим образом: пусть \(last\) будет ответом на последний запрос второго типа, на который вы ответили (сначала \(last = 0\)). Если ответ был \(-1\), присвойте \(last = 1\).

  • Если \(t = 1\), то далее следуют три целых числа \(l'\), \(r'\) и \(x'\) (\(0 \leq l', r', x' < 2^{30}\)), которые значат, что вы получили обновление. Сначала сделайте следующие:
    \(l = l' \oplus last\), \(r = r' \oplus last\), \(x = x' \oplus last\)

    и, если \(l > r\), поменяйте местами \(l\) и \(r\).

    Это значит, что исключающее ИЛИ подмассива \([l, r]\) равно \(x\) (обратите внимание, что вам нужно игнорировать запросы, которые противоречат предыдущим запросам).

  • Если \(t = 2\), то далее следуют два числа \(l'\) и \(r'\) (\(0 \leq l', r' < 2^{30}\)), которые значат, что вы получили запрос. Сначала сделайте следующие:
    \(l = l' \oplus last\), \(r = r' \oplus last\)

    и, если \(l > r\), поменяйте местами \(l\) и \(r\).

    Это значит, что нужно вывести исключающее ИЛИ подмассива \([l, r]\). Если невозможно ответить, то выведите \(-1\). Не забудьте обновить значение \(last\).

Гарантируется, что будет как минимум один запрос второго типа.

Выходные данные

Для каждого запроса второго типа, выведите исключающее ИЛИ подмассива или \(-1\), если на этот запрос невозможно ответить.

Примечание

В первом примере, реальными запросами (перед кодированием) являются:

  • 12
  • 2 1 2
  • 2 0 1073741823
  • 1 1 2 5
  • 2 1 1
  • 2 2 2
  • 2 1 2
  • 1 2 3 6
  • 2 1 1
  • 1 1 3 0
  • 2 1 1
  • 2 2 2
  • 2 3 3
  • Ответы на первые два запроса равны \(-1\) потому, что нет достаточно информации.
  • Первый запрос первого типа сообщает, что \(a_1 \oplus a_2 = 5\). Обратите внимание, что до сих пор невозможно узнать значения в \(a_1\) или \(a_2\) (например, может быть, что \(a_1 = 1, a_2 = 4\), или же \(a_1 = 3, a_2 = 6\)).
  • После трех запросов первого типа есть достаточно информации, чтобы узнать значения в \(a_1, a_2, a_3\).

Во втором примере обратите внимание, что после двух запросов первого типа, уже известно, что \(a_5 \oplus a_6 = 12\), значит третий запрос противоречит предыдущим двум, поэтому, ми его игнорируем.

F. Поиск в глубину

Структуры данных *2700

Пусть \(T\) — дерево из \(n\) вершин. Рассмотрим граф \(G_0\), первоначально равный \(T\). Также есть \(q\) обновлений, где \(i\)-е обновление задается парой двух различных целых чисел \(u_i\) и \(v_i\).

Для каждого \(i\) от \(1\) до \(q\) определим граф \(G_i\) следующим образом:

  • Если \(G_{i-1}\) содержит ребро \(\{u_i, v_i\}\), то удалите это ребро, чтобы сформировать \(G_i\).
  • Иначе добавьте это ребро к \(G_{i-1}\), чтобы сформировать \(G_i\).

Формально, \(G_i := G_{i-1} \triangle \{\{u_i, v_i\}\}\), где \(\triangle\) обозначает симметрическую разность множеств.

Более того, гарантируется, что \(T\) всегда является подграфом \(G_i\). Другими словами, обновление никогда не удаляет ребра из \(T\).

Рассмотрим связный граф \(H\) и запустим в нем поиск в глубину (далее DFS). Можно увидеть, что ребра дерева (то есть ребра, ведущие к еще не посещенной вершине во время обхода) образуют остовное дерево графа \(H\). Это связующее дерево обычно бывает разным для конкретного графа и зависит от начальной вершины и от порядка прохождения соседей каждой вершины.

Назовём вершину \(w\) хорошей, если можно упорядочить соседей каждой вершины таким образом, чтобы DFS, начинающийся в вершине \(w\), давал \(T\) как остовное дерево. Для каждого \(i\) от \(1\) до \(q\) найдите и выведите количество хороших вершин.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(3 \le n \le 2\cdot 10^5\), \(1 \le q \le 2 \cdot 10^5\)) — количество вершин и обновлений, соответственно.

Каждая из следующих \(n-1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \ne v\)) — вершины, которые соединяет ребро в \(T\). Гарантируется, что этот граф является деревом.

Каждая из следующих \(q\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \ne v\)) — конечные вершины ребра, которое нужно добавить или удалить. Гарантируется, что эти ребра не принадлежат \(T\).

Выходные данные

Для каждого обновления, выведите одно целое число \(k\) — количество хороших вершин \(w\) после этого обновления.

Примечание

Первый пример изображен на следующем рисунке.

После первого обновления \(G\) содержит все три возможные ребра. Результат DFS'а:

  • Начнем в вершине \(1\). Есть два способа как упорядочить соседей вершины \(1\): либо \([2, 3]\), либо \([3, 2]\).
    • Если мы выберем первый вариант, то мы посетим вершину \(2\). Вне зависимости от порядка его соседей, далее мы посетим вершину \(3\). Таким образом, остовное дерево, сгенерированное этим DFS'ом, будет содержать ребра \(\{1, 2\}\) и \(\{2, 3\}\), которое не равны дереву \(T\).
    • Если мы выберем второй вариант, мы получим остовное дерево с ребрами \(\{1, 3\}\) и \(\{2, 3\}\).
    Поэтому, нет способа упорядочить соседние вершины таким образом, чтобы можно было получить дерево \(T\) из DFS'a, то есть вершина \(1\) не является хорошей.
  • Начнем в вершине \(2\). Есть два способа как упорядочить соседей. Если мы сначала посетим вершину \(3\), то остовное дерево будет состоять из ребер \(\{2,3\}\) и \(\{1,3\}\), которые не равны \(T\). Если мы, однако, посетим сначала \(1\), то мы сможем только перейти в \(3\), и остовное дерево будет состоять из ребер \(\{1, 2\}\) и \(\{1,3\}\), которые равны \(T\). Поэтому, \(2\) является хорошей вершиной.
  • Случай, когда мы начинаем в вершине \(3\), симметрично, если бы мы начали в вершине \(2\), и поэтому \(3\) тоже хорошая вершина.
Следовательно, ответ \(2\).

После второго запроса ребро между \(2\) и \(3\) удаляется, и \(G = T\). Из этого следует, что остовное дерево, сгенерированное DFS'ом, всегда будет равно \(T\), вне зависимости от выбора начальной вершины. Поэтому, ответ \(3\).

Во втором примере, множества хороших вершин после каждого запроса:

  • \(\{2, 3, 5\}\)
  • \(\{3, 5\}\)
  • \(\{3, 4, 5\}\)
  • \(\{4, 5\}\)
  • \(\{4, 5, 6\}\)
  • \(\{5, 6\}\)

A. Последний шанс

графы Деревья Паросочетания Потоки Структуры данных *2500

2969-й год. Прошло 1000 лет с момента посадки на луну. Человечество колонизировало Гиперпространство и жило в гармонии.

Жило, пока мы не поняли, что мы не одни.

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

Последняя надежда Земли — ВЫ!

К счастью, Земля имеет мощную систему защиты, созданную специалистами из MDCS. Флот инопланетян содержит \(N\) кораблей на одной линии. Система защиты состоит из трех типов вооружения:

  • SQL-ракеты: каждая SQL-ракета может уничтожить не более одного корабля инопланетян из заданного для каждой ракеты набора.
  • лучи Познания: каждому лучу Познания сопоставлен отрезок \([l,r]\), он может уничтожить не более одного корабля инопланетян из этого отрезка.
  • OMG-базука: каждая OMG-базука имеет ровно три цели и может уничтожить либо ровно ноль, либо ровно два корабля. Кроме того, система прицеливания является «умной», поэтому множества трех целей для любых двух OMG-базук не пересекаются (таким образом, каждый корабль находится под прицелом не более чем одной OMG-базуки).

Ваша задача — найти такой план атаки на корабли инопланетян, чтобы уничтожить максимально возможное количество кораблей. Каждый уничтоженный корабль должен быть уничтожен ровно одним оружием.

Входные данные

Первая строка содержит два целых числа — количество оружия \(N\) \((1\leq N\leq 5000)\) и количество кораблей \(M\) \((1\leq M\leq 5000)\).

Каждая из следующих \(N\) строк начинается с одного целого числа, которое обозначает тип оружия (0, 1 или 2). Если тип равен 0, то это оружие — SQL-ракета, и далее эта строка содержит строго положительное число \(K\) \((\sum{K} \leq 100 000)\) и массив \(k_i\) \((1\leq k_i\leq M)\) из \(K\) целых чисел. Если тип равен 1, то это луч Познания, а строка далее содержит целые числа \(l\) и \(r\) \((1\leq l\leq r\leq M)\). Если тип равен 2, то это OMG-базука, а строка далее содержит различные числа \(a\), \(b\) и \(c\) \( (1 \leq a,b,c \leq M)\).

Выходные данные

Первая строка должна содержать максимальное количество уничтоженных кораблей \(X\).

Каждая из следующих \(X\) строк должна содержать два целых числа \(A\) и \(B\), где \(A\) — номер оружия, а \(B\) — номер корабля, уничтоженного оружием \(A\).

Примечание

SQL-ракета может уничтожить только четвертый корабль. OMG-базука может уничтожить два из 1-го, 4-го или 5-го кораблей, а луч Познания может уничтожить любой корабль из отрезка \([1,4]\). Максимальное количество уничтоженных кораблей равно 4, один из возможных планов — SQL-ракета уничтожает 4-й корабль, OMG-базука уничтожает 1-й и 5-й корабли, а луч Познания уничтожает 2-й корабль.

G. Роботы с искуственным интеллектом

Структуры данных *2200

В последней миссии MDCS успешно запустили \(N\) роботов с искусственным интеллектом на Марс. Перед тем, как приступить к изучению местности, роботов нужно инициализировать, а для этого всех роботов выстроили в линию. Каждый робот может быть представлен тремя числами: позицией (\(x_i\)), радиусом видимости (\(r_i\)) и IQ (\(q_i\)).

Так как роботы умные, некоторые из них будут разговаривать между собой, если они видят друг друга. Робот может видеть всех роботов на отрезке \([x_i - r_i, x_i + r_i]\) включительно. Однако не все роботы будут разговаривать, только те, у которых похожий IQ. Два IQ похожи, если их разность по модулю не превосходит \(K\).

Помогите нам вычислить, сколько пар роботов могут поговорить друг с другом, чтобы мы могли правильно запланировать обновления и не допустить ссор.

Входные данные

Первая строка содержит два целых числа \(N (1 \leq N \leq 10^5) \) и \(K (0 \leq K \leq 20)\).

Следующие \(N\) строк содержат по три целых числа \(x_i, r_i, q_i (0 \leq x_i,r_i,q_i \leq 10^9)\) — позицию, радиус видимости и IQ каждого робота.

Выходные данные

Выведите одно число — ответ на задачу.

Примечание

В примере первый робот видит второго, но не наоборот. Первый робот не видит третьего. Второй и третий робот видят друг друга, и их IQ не отличается более, чем на 2, поэтому только они могут поговорить друг с другом.

J. Moonwalk challenge

Деревья Строки Структуры данных *2600

Поскольку астронавты из миссии BubbleCup XI закончили свою миссию на Луне и являются большими поклонниками известного певца, они решили провести некоторое время перед возвращением на Землю, и, таким образом, создали так называемую игру «Moonwalk challenge».

Командам астронавтов выдаются карты кратеров на Луне и прямых двунаправленных путей от одних кратеров к другим, безопасные для «лунной походки». Каждый из этих прямых путей окрашен в один цвет, и есть единственный путь между каждым из двух кратеров. Цель игры заключается в том, чтобы найти два кратера, такие, что заданный массив цветов появляется чаще всего как непрерывный подотрезок на пути между этими двумя кратерами (пересекающиеся вхождения должны быть учтены как два различных).

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

Все цвета являются строчными буквами латинского алфавита.

Входные данные

В первой строке входного файла записано целое число \(N\) \((2 \leq N \leq 10^5)\) — количество кратеров на Луне. Кратеры нумеруются числами от \(1\) до \(N\).

В следующих \(N-1\) строках записано по три целых числа \(u, v, L\) \((1 \leq u, v \leq N, L \in \{a, ..., z\})\) — описывающих прямой путь цвета \(L\) между кратерами \(u\) и \(v\).

В следующей строке записано одно целое число \(Q\) \((1 \leq Q \leq 10^5)\) — количество запросов.

В следующих \(Q\) строк записано по два целых числа \(u, v\) \((1 \leq u, v \leq N)\) и по одной строке \(S\) \((|S| \leq 100)\), где \(u\) и \(v\) это два кратера для которых вам требуется подсчитать количество вхождений \(S\) (представленного в виде строки) на пути между \(u\) и \(v\).

Выходные данные

Для каждого запроса выведите количество вхождений S (представленного в виде строки) на пути между \(u\) и \(v\).

E. Вася и длинные числа

Бинарный поиск дп Строки Структуры данных хэши *2600

У Васи есть три длинных числа — \(a, l, r\). Назовем разбиением длинного числа \(x\) такую последовательность строк \(s_1, s_2, \dots, s_k\), что \(s_1 + s_2 + \dots + s_k = x\), где \(+\) означает конкатенацию строк. При этом \(s_i\) называется \(i\)-м элементом разбиения. Например, для числа \(12345\) существуют следующие разбиения: ["1", "2", "3", "4", "5"], ["123", "4", "5"], ["1", "2345"], ["12345"] и многие другие.

Назовем разбиение числа \(a\) хорошим, если каждый его элемент не содержит лидирующих нулей.

Вася хочет знать количество хороших разбиений числа \(a\), где каждый элемент разбиения \(s_i\) будет удовлетворять условию \(l \le s_i \le r\). Обратите внимание, что сравнение происходит по правилам сравнения целых чисел, а не сравнения строк.

Помогите Васе! Сообщите ему количество разбиений числа \(a\), удовлетворяющих описанным выше условиям. Полученное число может быть достаточно велико, поэтому выведите его по модулю \(998244353\).

Входные данные

В первой строке содержится целое число \(a~(1 \le a \le 10^{1000000})\).

Во второй строке содержится целое число \(l~(0 \le l \le 10^{1000000})\).

В третьей строке содержится целое число \(r~(0 \le r \le 10^{1000000})\).

Гарантируется, что \(l \le r\).

Так же гарантируется, что числа \(a, l, r\) не содержат лидирующих нулей.

Выходные данные

Выведите одно целое число — количество разбиений числа \(a\), удовлетворяющих описанным выше условиям, по модулю \(998244353\).

Примечание

В первом тестовом примере существует два хороших разбиения \(13+5\) и \(1+3+5\).

Во втором тестовом примере существует одно хорошее разбиение \(1+0+0+0+0\).

G. Дистинктификация

жадные алгоритмы снм Структуры данных *2900

Допустим, у вас есть последовательность \(S\) из \(k\) пар целых чисел \((a_1, b_1), (a_2, b_2), \dots, (a_k, b_k)\).

Вы можете совершать с ней следующие операции:

  1. Выбрать некоторую позицию \(i\) и увеличить \(a_i\) на \(1\). Эту операцию можно делать только в том случае, если существует хотя бы одна позиция \(j\), такая, что \(i \ne j\) и \(a_i = a_j\). Стоимость такой операции равна \(b_i\);
  2. Выбрать некоторую позицию \(i\) и уменьшить \(a_i\) на \(1\). Эту операцию можно делать только в том случае, если существует хотя бы одна позиция \(j\), такая, что \(a_i = a_j + 1\). Стоимость такой операции равна \(-b_i\).

Каждая операция может быть использована любое количество раз (возможно, ноль).

Обозначим за \(f(S)\) такое минимально возможное \(x\), что существует последовательность операций с суммарной стоимостью \(x\), после которой все \(a_i\) в \(S\) станут попарно различными.

А теперь, собственно, сама задача.

Вам дана последовательность \(P\), состоящая из \(n\) пар целых чисел \((a_1, b_1), (a_2, b_2), \dots, (a_n, b_n)\). Все значения \(b_i\) попарно различны. Пусть \(P_i\) — это последовательность, состоящая из первых \(i\) пар из \(P\). Ваша задача — подсчитать \(f(P_1), f(P_2), \dots, f(P_n)\).

Входные данные

В первой строке записано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество пар в последовательности \(P\).

Следующие \(n\) строк задают элементы \(P\): \(i\)-я из следующих \(n\) строк содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i \le 2 \cdot 10^5\), \(1 \le b_i \le n\)). Гарантируется, что все значения \(b_i\) различны.

Выходные данные

Выведите \(n\) целых чисел, \(i\)-е из которых должно быть равно \(f(P_i)\).

E. Проверь транскрипцию

Перебор Строки Структуры данных хэши *2100

Один из друзей Аркадия работает на огромном радиотелескопе. Несколько десятилетий назад телескоп послал сигнал \(s\) в соседнюю галактику. Кто бы мог подумать, но недавно от инопланетян пришёл ответ — сигнал \(t\)! Учёные хотят проверить, есть ли сходство между сигналами \(s\) и \(t\) или нет.

Исходный сигнал \(s\) был последовательностью нулей и единиц (все знают, что битовая запись является межгалактическим стандартом). Но полученный сигнал \(t\), однако, выглядит более замысловато, чем \(s\). Однако учёные не сдались и представили \(t\) как последовательность латинских букв. Учёные считают, что \(s\) и \(t\) похожи, если можно заменить все нули в \(s\) на некоторую строку \(r_0\), а все единицы в \(s\) на некоторую иную строку \(r_1\) так, что получится строка \(t\). Строки \(r_0\) и \(r_1\) должны быть различными и не пустыми.

Помогите другу Аркадия и посчитайте количество возможных замен нулей и единиц (то есть количество пар строк \(r_0\) и \(r_1\)), которые превращают \(s\) в \(t\).

Входные данные

Первая строка содержит строку \(s\) (\(2 \le |s| \le 10^5\)), задающую исходный сигнал и состоящую только из нулей и единиц.

Вторая строка содержит строку \(t\) (\(1 \le |t| \le 10^6\)), состоящую только из строчных латинских букв и задающую полученный сигнал.

Гарантируется, что строка \(s\) содержит хотя бы один «0» и хотя бы одну «1».

Выходные данные

Выведите одно целое число — количество пар строк \(r_0\) и \(r_1\), которые переводят \(s\) в \(t\).

В случае, если ни одной подходящей пары нет, выведите \(0\).

Примечание

В первом примере возможные пары \((r_0, r_1)\) выглядят следующим образом:

  • «a», «aaaaa»
  • «aa», «aaaa»
  • «aaaa», «aa»
  • «aaaaa», «a»

Пара «aaa», «aaa» не разрешена, так как \(r_0\) и \(r_1\) должны быть различными.

Во втором примере возможны следующие пары:

  • «ko», «kokotlin»
  • «koko», «tlin»

G. Прокатись на метро

графы Перебор Структуры данных *2900

Так как утром у Аркадия были сложности с определением маршрутов трамваев, Аркадий решил вернуться домой на метро. К счастью для Аркадия, в городе лишь одна линия метро.

К несчастью для Аркадия, это кольцевая линия. Это означает, что станции пронумерованы от \(1\) до \(n\), и между каждой парой последовательных станций есть тоннель, кроме того, тоннель есть между станциями \(1\) и \(n\). Поезда, следующие в направлении по часовой стрелке, посещают станции в порядке \(1 \to 2 \to 3 \to \ldots \to n \to 1\), а поезда, следующие в направлении против часовой стрелки, посещают станции в обратном порядке.

Станции, пронумерованные от \(1\) до \(m\), имеют интерьер в красных тонах, а станции, пронумерованные от \(m + 1\) до \(n\) имеют синий интерьер. Аркадий спустился в метро на станции \(s\) и решил использовать следующий алгоритм для того, чтобы добраться домой.

  1. Изначально он загадывает положительное целое число \(t\).
  2. Если текущая станция имеет красный интерьер, то он садится на поезд, следующий по часовой стрелки, иначе он садится на поезд, следующий против часовой стрелки.
  3. Он проезжает ровно \(t\) тоннелей на поезде и выходит из него.
  4. Он уменьшает \(t\) на один. Если \(t\) остается после этого положительным, он возвращается на шаг \(2\), иначе он выходит из метро.

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

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(3 \le n \le 10^5\), \(1 \le m < n\)) — общее число станций и число станций, имеющих красный интерьер.

Вторая строка содержит два целых числа \(s\) и \(t\) (\(1 \le s \le n\), \(1 \le t \le 10^{12}\)) — начальную станцию и изначальное значение \(t\).

Выходные данные

Выведите одно целое число — станцию, на которой Аркадий выйдет из метро.

Примечание

Рассмотрим первый пример. Всего в метро \(10\) станций, первые \(4\) из них имеют красный интерьер. Аркадий начинает на станции \(3\) со значением \(t = 1\), поэтому он просто проезжает \(1\) станцию по часовой стрелке и выходит на станции \(4\).

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

  • Это красная станция, поэтому он проедет \(5\) станций по часовой стрелке и выйдет на станции \(8\).
  • Это синяя станция, поэтому он проедет \(4\) станции против часовой стрелки и выйдет на станции \(4\).
  • Это красная станция, поэтому он проедет \(3\) станции по часовой стрелке и выйдет на станции \(7\).
  • Это синяя станция, поэтому он проедет \(2\) станции против часовой стрелки и выйдет на станции \(5\).
  • Это синяя станция, поэтому он проедет \(1\) станцию против часовой стрелки и выйдет на станции \(4\).
Теперь \(t = 0\), поэтому Аркадий выйдет из метро на станции \(4\).

H. Определи робота

Строки Структуры данных *3200

Вы успешно предсказали станцию, на которой выйдет бедный Аркадий и нашли его. Вы отправили его домой на такси и внезапно задумались над следующим вопросом.

В вашем городе есть \(n\) перекрёстков и несколько двусторонних дорог, их соединяющих. Назовём путь из одного перекрёстка в другой поездкой на такси, если он не проезжает ни один перекрёсток более одного раза. Вы собрали коллекцию поездок, которую совершил один водитель и теперь размышляете, может ли этот водитель быть роботом, или он точно человек.

Вы считаете, что водитель может быть роботом, если для любой пары перекрёстков \(a\) и \(b\) этот водитель всегда едет по одному и тому же пути, когда едет из \(a\) в \(b\). Обратите внимание, что \(a\) и \(b\) не обязательно должны являться началом и концом поездки, кроме того, путь из \(b\) в \(a\) может отличаться. Напротив, если водитель выбрал два разных маршрута из какого-то \(a\) в какое-то \(b\), то он однозначно человек.

Вы знаете карту города и описание всех поездок, совершённых водителем. Выясните, может ли водитель быть роботом или нет.

Входные данные

Каждый тест состоит из нескольких тестовых случаев. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 3 \cdot 10^5\)) — количество тестовых случаев.

Первая строка каждого тестового случая содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество перекрёстков в городе.

Вторая строка содержит одно целое число \(q\) (\(1 \le q \le 3 \cdot 10^5\)) — количество поездок, совершённых водителем.

Каждая из следующих \(q\) строк начинается с одного целого числа \(k\) (\(2 \le k \le n\)) — количество перекрёстков, которые проехал водитель в этой поездке. Затем следуют \(k\) целых чисел \(c_1\), \(c_2\), ..., \(c_k\) (\(1 \le c_i \le n\)) — перекрёстки в поездке в том порядке, в котором их проезжал водитель. Гарантируется, что все перекрёстки в одной поездке различны.

Гарантируется, что сумма значений \(k\) по всем поездкам по всем тестовым случаям не превосходит \(3 \cdot 10^5\).

Гарантируется, что сумма значений \(n\), а также сумма всех значений \(q\) по всем тестовым случаям не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого тестового случая выведите «Robot», если водитель может быть роботом и «Human» иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В первом примере водитель использовал два разных пути, чтобы добраться из перекрёстка \(1\) в перекрёсток \(3\). Он однозначно человек.

Во втором примере водитель всегда едет по циклу \(1 \to 2 \to 3 \to 4 \to 1\) пока не доезжает до точки назначения.

E. Разбейте дерево

Бинарный поиск Деревья дп жадные алгоритмы Структуры данных *2400

Вам дано корневое дерево на \(n\) вершинах, его корень имеет номер \(1\). В \(i\)-й вершине записано число \(w_i\). Разбейте его на минимальное число таких вертикальных путей, что сумма чисел \(w_i\) в вершинах пути не превосходит \(S\), а количество вершин в пути не превосходит \(L\). Каждая вершина должна принадлежать ровно одному пути.

Вертикальным путём называется последовательность вершин \(v_1, v_2, \ldots, v_k\), где \(v_i\) (\(i \ge 2\)) — непосредственный предок \(v_{i - 1}\) в дереве.

Входные данные

В первой строке даны целые числа \(n\), \(L\), \(S\) (\(1 \le n \le 10^5\), \(1 \le L \le 10^5\), \(1 \le S \le 10^{18}\)) — число вершин в дереве, максимальная длина пути, максимальная сумма на пути.

Во второй строке содержатся \(n\) целых чисел \(w_1, w_2, \ldots, w_n\) (\(1 \le w_i \le 10^9\)) — числа, записанные в вершинах.

Третья строка содержит \(n - 1\) целое число \(p_2, \ldots, p_n\) (\(1 \le p_i < i\)), где \(p_i\) обозначает непосредственного предка \(i\)-й вершины.

Выходные данные

Выведите одно целое число — минимальное число вертикальных путей. Если разбить дерево невозможно, выведите \(-1\).

Примечание

В первом примере дерево разбивается на пути \(\{1\},\ \{2\},\ \{3\}\).

Во втором примере дерево разбивается на пути \(\{1,\ 2\},\ \{3\}\) или \(\{1,\ 3\},\ \{2\}\).

В третьем примере разбить дерево невозможно.

G. Шары и лузы

Структуры данных *3400

Полоска состоит из бесконечного числа клеток. Клетки пронумерованы, начиная с \(0\). Изначально в клетке \(i\) лежит шар с номером \(i\).

В \(n\) клетках \(a_1, \ldots, a_n\) расположены лузы. Каждая клетка содержит не более одной лузы.

Просеивание заключается в следующей последовательности операций:

  • Лузы в клетках \(a_1, \ldots, a_n\) одновременно открываются, и шары, которые находятся в этих клетках, пропадают. После того, как шары пропали, лузы закрываются обратно.
  • Для каждой клетки \(i\) от \(0\) до \(\infty\), происходит следующее: если в клетке \(i\) находится шар, мы перемещаем этот шар в свободную клетку \(j\) с минимальным номером. Если не существует свободной клетки \(j < i\), шар остается в клетке \(i\).

Обратите внимание, что после просеивания в каждой клетке снова будет находиться ровно по одному шару.

Рассмотрим пример: пускай лузы находятся в клетках \(1\), \(3\) и \(4\). Изначальное расположение шаров изображено внизу (в подчеркнутых позициях находятся лузы):

0 1 2 3 4 5 6 7 8 9 ...

После открытия и закрытия луз шары 1, 3 и 4 исчезают:

0   2     5 6 7 8 9 ...

После сдвига всех шаров влево конфигурация выглядит так:

0 2 5 6 7 8 9 10 11 12 ...

После еще одного полного просеивания получится следующее:

0 5 8 9 10 11 12 13 14 15 ...

Вам требуется ответить на \(m\) вопросов. \(i\)-й из этих вопросов выглядит так: «каков номер шара, который окажется в клетке \(x_i\) после \(k_i\) последовательных просеиваний?»

Входные данные

В первой строке записано два целых числа \(n\) и \(m\) — количество луз и количество вопросов соответственно (\(1 \leq n, m \leq 10^5\)).

В следующей строке записано \(n\) целых чисел \(a_1, \ldots, a_n\) — номера клеток с лузами (\(0 \leq a_1 < \ldots < a_n \leq 10^9\)).

Следующие \(m\) строк описывают вопросы. \(i\)-я из этих строк содержит два целых числа \(x_i\) и \(k_i\) (\(0 \leq x_i, k_i \leq 10^9\)).

Выходные данные

Выведите \(m\) чисел — ответы на вопросы в том же порядке, в котором они заданы на входе.

C. Делимость

дп математика реализация Структуры данных теория чисел *1700

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\).

Массив \(b\) называется подпоследовательностью \(a\) если можно удалить некоторые элементы \(a\), чтобы остался массив \(b\).

Массив \(b_1, b_2, \ldots, b_k\) называется хорошим если он не пуст и для каждого \(i\) (\(1 \le i \le k\)) \(b_i\) делится на \(i\).

Посчитайте количество хороших подпоследовательностей \(a\) по модулю \(10^9 + 7\). Две подпоследовательности считаются различными, если множества индексов входящих в них чисел различны, то есть значения элементов не учитываются при сравнении подпоследовательностей. В частности, у массива \(a\) есть ровно \(2^n - 1\) различных подпоследовательностей (не считая пустую).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 100\,000\)) — длину массива \(a\).

Вторая строка содержит целые числа \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^6\)).

Выходные данные

Выведите одно целое число — количество хороших подпоследовательностей по модулю \(10^9 + 7\).

Примечание

В первом примере все три непустые подпоследовательности являются хорошими: \(\{1\}\), \(\{1, 2\}\), \(\{2\}\)

Во втором примере хорошими являются следующие подпоследовательности: \(\{2\}\), \(\{2, 2\}\), \(\{2, 22\}\), \(\{2, 14\}\), \(\{2\}\), \(\{2, 22\}\), \(\{2, 14\}\), \(\{1\}\), \(\{1, 22\}\), \(\{1, 14\}\), \(\{22\}\), \(\{22, 14\}\), \(\{14\}\).

Обратите внимание, что некоторые подпоследовательности упомянуты несколько раз, так как они входят в исходный массив несколько раз.

D. Телепередачи

жадные алгоритмы реализация сортировки Структуры данных *2000

Есть \(n\) телепередач, которые вы хотите посмотреть. Предположим, что всё время разбито на равные отрезки называемые «минутами». Тогда \(i\)-я телепередача идёт с \(l_i\)-й по \(r_i\)-ю минуту, оба конца включительно.

Конечно, чтобы посмотреть телепередачу нужен телевизор, а также нельзя смотреть две телепередачи идущие одновременно на одном телевизоре. Из-за этого, возможно, в некоторые минуты вам понадобится более одного телевизора. В частности, если отрезки \([l_i, r_i]\) и \([l_j, r_j]\) пересекаются, то телепередачи \(i\) и \(j\) нельзя смотреть одновременно на одном телевизоре.

После того как вы начали смотреть какую-то телепередачу на каком-то телевизоре её нельзя «переместить» на другой телевизор (это было бы слишком отвлекающим действием), а также нельзя начать смотреть другую телепередачу на том же телевизоре пока эта телепередача не закончится.

К счастью, рядом с вами есть магазин по аренде телевизоров. Он сдаёт телевизор в аренду за \(x\) рупий и взимает \(y\) (\(y < x\)) рупий за каждую следующую минуту, в течении которой вы держите телевизор у себя. В частности, чтобы арендовать один телевизор на время \([a; b]\) нужно заплатить \(x + y \cdot (b - a)\) рупий.

Считайте, что аренда и возврат телевизора не занимает времени и не отвлекает от просмотра других телепередач. Выясните минимальное возможное количество денег, которое нужно заплатить, чтобы посмотреть все телепередачи. Так как это значение может быть достаточно велико, выведите его по модулю \(10^9 + 7\).

Входные данные

Первая строка содержит три целых числа \(n\), \(x\) и \(y\) (\(1 \le n \le 10^5\), \(1 \le y < x \le 10^9\)) — количество телепередач, стоимость аренды телевизора в первую минуту и cтоимость аренды телевизора в каждую последующую минуту.

Каждая из следующих \(n\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le 10^9\)), обозначающие начальную и конечную минуту \(i\)-й телепередачи.

Выходные данные

Выведите одно целое число — минимальную стоимость просмотра всех телепередач, взятую по модулю \(10^9 + 7\).

Примечание

В первом примере оптимально арендовать \(3\) телевизора и посмотреть:

  • Телепередачу \([1, 2]\) на первом телевизоре,
  • Телепередачу \([4, 10]\) на втором телевизоре,
  • Тепередачи \([2, 4], [5, 9], [10, 11]\) на третьем телевизоре.

Таким образом, стоимость аренды первого телевизора равна \(4 + 3 \cdot (2 - 1) = 7\), второго \(4 + 3 \cdot (10 - 4) = 22\) и треьего \(4 + 3 \cdot (11 - 2) = 31\), что в сумме составляет \(60\) рупий.

Во втором примере оптимально посмотреть каждую телепередачу на отдельном телевизоре.

В третьем примере тоже оптимально посмотреть каждую телепередачу на отдельном телевизоре. Обратите внимание, что ответ нужно вывести по модулю \(10^9 + 7\).

E. Компания

Бинарный поиск Деревья жадные алгоритмы поиск в глубину и подобное Структуры данных *2300

У компании \(X\) есть \(n\) сотрудников, пронумерованных от \(1\) до \(n\). У каждого сотрудника \(u\) есть его прямой начальник \(p_u\) (\(1 \le p_u \le n\)), кроме сотрудника \(1\), у которого начальника нет. Гарантируется, что значения \(p_i\) образуют дерево. Сотрудник \(u\) называется ответственным за сотрудника \(v\), если \(u\) является прямым начальником \(v\) или есть такой сотрудник \(w\), что \(w\) ответственен за \(v\), и \(u\) является прямым начальником \(w\). Любой сотрудник также считается ответственным за самого себя.

Также, для каждого сотрудника \(u\) мы определим его уровень \(lv(u)\) следующим образом:

  • \(lv(1)=0\)
  • \(lv(u)=lv(p_u)+1\) если \(u \neq 1\)

У компании есть \(q\) возможных планов на ближайшее будущее. При чём \(i\)-й из них задаётся двумя числа \(l_i\) и \(r_i\), означающими что в этом плане принимают участие все сотрудники в отрезке \([l_i, r_i]\) и только они. Чтобы всё прошло гладко, у плана должен быть проектный менеджер, который является ответственным за всех сотрудников в этом плане. Более формально, если сотрудник \(u\) выбирается как проектный менеджер \(i\)-го плана, то для каждого сотрудника \(v \in [l_i, r_i]\), \(u\) должен быть ответственен за \(v\). Заметим, что при этом не обязательно \(u\) сам должен находится в отрезке \([l_i, r_i]\). Также, \(u\) всегда выбирается таким образом, что \(lv(u)\) является максимально возможным (чем больше уровень, тем меньше компания может платить сотруднику).

До того как любой план начнёт выполняться, компания позволила JATC заглянуть в свои планы. С первого взгляда он заметил, что для каждого плана можно уменьшить количество вовлечённых в него сотрудников ровно на один без каких-либо проблем. Будучи жадной, компания спрашивает у JATC: какого же именно сотрудника надо выкинуть из плана, чтобы уровень менеджера проекта был максимально возможным? JATC уже выяснил ответ и теперь предлагает это сделать и вам.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2 \le n \le 100\,000\), \(1 \le q \le 100\,000\)) — количество сотрудников и количество планов соответственно.

Вторая строка содержит \(n-1\) целых чисел \(p_2, p_3, \dots, p_n\) (\(1 \le p_i \le n\)), где \(p_i\) является прямым начальником сотрудника \(i\).

Гарантируется, что значения \(p_i\) задают ориентированное дерево с корнем в вершине \(1\).

Каждая из \(q\) следующих строк содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i<r_i \le n\)) — отрезок сотрудников, вовлечённых в соответствующий план.

Выходные данные

Выведите \(q\) строк по два целых числа в каждой — номер сотрудника, которого стоит выкинуть из соответствующего плана, и максимальный уровень менеджера проекта, который в таком случае получится.

Если существует несколько способов выбрать сотрудника, которого стоит выкинуть, выведите любого из них.

Примечание

В примере:

В первом запросе мы можем выбрать \(4\), \(5\) или \(6\) и менеджером проекта в таком случае будет \(3\).

Во втором запросе, если мы выберем любого сотрудника кроме сотрудника \(8\), то менеджером проекта будет сотрудник \(1\), если же мы выберем сотрудника \(8\), то проектным менеджером будет \(3\). Так как \(lv(3)=1 > lv(1)=0\), то оптимальным ответом будет выбрать сотрудника \(8\).

В третьем запросе, как бы мы ни выбирали сотрудника, проектным менеджером всегда окажется сотрудник \(1\).

В четвёртом запросе, если мы выберем \(9\) или \(10\), то менеджером проекта будет \(3\), если же мы выберем \(11\), то проектным менеджером окажется \(7\). Так как \(lv(7)=3>lv(3)=1\), то оптимальным ответом будет выбрать сотрудника \(11\).

F. Путешествие по строке

дп строковые суфф. структуры Структуры данных *3300

Скажем, что последовательность строк t1, ..., tk является путешествием длины k, если для всех i > 1 ti является подстрокой ti - 1 строго меньшей длины. Например, {ab, b} является путешествием, а {ab, c} или {a, a} — нет.

Определим путешествие по строке s как путешествие t1, ..., tk, все строки которого могут быть вложены в s так, чтобы существовали (возможно, пустые) строки u1, ..., uk + 1, такие, что s = u1t1u2t2... uktkuk + 1. К примеру, {ab, b} является путешествием по строке для abb, но не для bab, так как соответствующие подстроки расположены справа налево.

Назовём длиной путешествия количество строк, из которых оно состоит. Определите максимально возможную длину путешествия по заданной строке s.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 500 000) — длина строки s.

Во второй строке содержится строка s, состоящая из n строчных английских букв.

Выходные данные

Выведите одно число — наибольшую длину путешествия по строке s.

Примечание

В первом примере путешествием по строке наибольшей длины является {abcd, bc, c}.

Во втором примере подходящим вариантом будет {bb, b}.

E. Сумма AND двоичных чисел

математика реализация Структуры данных *1700

Задано два длинных двоичных натуральных числа \(a\) и \(b\) длин \(n\) и \(m\) соответственно. Вы собираетесь повторять следующий процесс: если \(b > 0\), тогда добавить к ответу значение \(a~ \&~ b\) и поделить \(b\) на \(2\) с округлением вниз (то есть удалить последнюю цифру \(b\)) и продолжить процесс, иначе прекратить процесс.

Значение \(a~ \&~ b\) означает побитовый AND \(a\) и \(b\). Ваша задача — посчитать ответ по модулю \(998244353\).

Заметим, что вам необходимо добавлять значение \(a~ \&~ b\) к ответу в десятичном представлении, не в двоичном. Таким образом, ваша задача заключается в том, чтобы посчитать ответ в десятичном представлении. Например, если \(a = 1010_2~ (10_{10})\) и \(b = 1000_2~ (8_{10})\), тогда значение \(a~ \&~ b\) будет равно \(8\), а не \(1000\).

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — длина \(a\) и длина \(b\) соответственно.

Вторая строка входных данных содержит одно длинное число \(a\). Гарантируется, что это число состоит ровно из \(n\) нулей и единиц, а первая цифра всегда равна \(1\).

Третья строка входных данных содержит одно длинное число \(b\). Гарантируется, что это число состоит ровно из \(m\) нулей и единиц, а первая цифра всегда равна \(1\).

Выходные данные

Выведите ответ в десятичном представлении по модулю \(998244353\).

Примечание

Алгоритм для первого тестового примера:

  1. добавить к ответу \(1010_2~ \&~ 1101_2 = 1000_2 = 8_{10}\) и присвоить \(b := 110\);
  2. добавить к ответу \(1010_2~ \&~ 110_2 = 10_2 = 2_{10}\) и присвоить \(b := 11\);
  3. добавить к ответу \(1010_2~ \&~ 11_2 = 10_2 = 2_{10}\) и присвоить \(b := 1\);
  4. добавить к ответу \(1010_2~ \&~ 1_2 = 0_2 = 0_{10}\) и присвоить \(b := 0\).

Таким образом, ответ равен \(8 + 2 + 2 + 0 = 12\).

Алгоритм для второго тестового примера:

  1. добавить к ответу \(1001_2~ \&~ 10101_2 = 1_2 = 1_{10}\) и присвоить \(b := 1010\);
  2. добавить к ответу \(1001_2~ \&~ 1010_2 = 1000_2 = 8_{10}\) и присвоить \(b := 101\);
  3. добавить к ответу \(1001_2~ \&~ 101_2 = 1_2 = 1_{10}\) и присвоить \(b := 10\);
  4. добавить к ответу \(1001_2~ \&~ 10_2 = 0_2 = 0_{10}\) и присвоить \(b := 1\);
  5. добавить к ответу \(1001_2~ \&~ 1_2 = 1_2 = 1_{10}\) и присвоить \(b := 0\).

Таким образом, ответ равен \(1 + 8 + 1 + 0 + 1 = 11\).

B. Berkomnadzor

жадные алгоритмы Структуры данных *2400

Berkomnadzor — Federal Service for Supervision of Communications, Information Technology and Mass Media — is a Berland federal executive body that protects ordinary residents of Berland from the threats of modern internet.

Berkomnadzor maintains a list of prohibited IPv4 subnets (blacklist) and a list of allowed IPv4 subnets (whitelist). All Internet Service Providers (ISPs) in Berland must configure the network equipment to block access to all IPv4 addresses matching the blacklist. Also ISPs must provide access (that is, do not block) to all IPv4 addresses matching the whitelist. If an IPv4 address does not match either of those lists, it's up to the ISP to decide whether to block it or not. An IPv4 address matches the blacklist (whitelist) if and only if it matches some subnet from the blacklist (whitelist). An IPv4 address can belong to a whitelist and to a blacklist at the same time, this situation leads to a contradiction (see no solution case in the output description).

An IPv4 address is a 32-bit unsigned integer written in the form \(a.b.c.d\), where each of the values \(a,b,c,d\) is called an octet and is an integer from \(0\) to \(255\) written in decimal notation. For example, IPv4 address \(192.168.0.1\) can be converted to a 32-bit number using the following expression \(192 \cdot 2^{24} + 168 \cdot 2^{16} + 0 \cdot 2^8 + 1 \cdot 2^0\). First octet \(a\) encodes the most significant (leftmost) \(8\) bits, the octets \(b\) and \(c\) — the following blocks of \(8\) bits (in this order), and the octet \(d\) encodes the least significant (rightmost) \(8\) bits.

The IPv4 network in Berland is slightly different from the rest of the world. There are no reserved or internal addresses in Berland and use all \(2^{32}\) possible values.

An IPv4 subnet is represented either as \(a.b.c.d\) or as \(a.b.c.d/x\) (where \(0 \le x \le 32\)). A subnet \(a.b.c.d\) contains a single address \(a.b.c.d\). A subnet \(a.b.c.d/x\) contains all IPv4 addresses with \(x\) leftmost (most significant) bits equal to \(x\) leftmost bits of the address \(a.b.c.d\). It is required that \(32 - x\) rightmost (least significant) bits of subnet \(a.b.c.d/x\) are zeroes.

Naturally it happens that all addresses matching subnet \(a.b.c.d/x\) form a continuous range. The range starts with address \(a.b.c.d\) (its rightmost \(32 - x\) bits are zeroes). The range ends with address which \(x\) leftmost bits equal to \(x\) leftmost bits of address \(a.b.c.d\), and its \(32 - x\) rightmost bits are all ones. Subnet contains exactly \(2^{32-x}\) addresses. Subnet \(a.b.c.d/32\) contains exactly one address and can also be represented by just \(a.b.c.d\).

For example subnet \(192.168.0.0/24\) contains range of 256 addresses. \(192.168.0.0\) is the first address of the range, and \(192.168.0.255\) is the last one.

Berkomnadzor's engineers have devised a plan to improve performance of Berland's global network. Instead of maintaining both whitelist and blacklist they want to build only a single optimised blacklist containing minimal number of subnets. The idea is to block all IPv4 addresses matching the optimised blacklist and allow all the rest addresses. Of course, IPv4 addresses from the old blacklist must remain blocked and all IPv4 addresses from the old whitelist must still be allowed. Those IPv4 addresses which matched neither the old blacklist nor the old whitelist may be either blocked or allowed regardless of their accessibility before.

Please write a program which takes blacklist and whitelist as input and produces optimised blacklist. The optimised blacklist must contain the minimal possible number of subnets and satisfy all IPv4 addresses accessibility requirements mentioned above.

IPv4 subnets in the source lists may intersect arbitrarily. Please output a single number -1 if some IPv4 address matches both source whitelist and blacklist.

Input

The first line of the input contains single integer \(n\) (\(1 \le n \le 2\cdot10^5\)) — total number of IPv4 subnets in the input.

The following \(n\) lines contain IPv4 subnets. Each line starts with either '-' or '+' sign, which indicates if the subnet belongs to the blacklist or to the whitelist correspondingly. It is followed, without any spaces, by the IPv4 subnet in \(a.b.c.d\) or \(a.b.c.d/x\) format (\(0 \le x \le 32\)). The blacklist always contains at least one subnet.

All of the IPv4 subnets given in the input are valid. Integer numbers do not start with extra leading zeroes. The provided IPv4 subnets can intersect arbitrarily.

Output

Output -1, if there is an IPv4 address that matches both the whitelist and the blacklist. Otherwise output \(t\) — the length of the optimised blacklist, followed by \(t\) subnets, with each subnet on a new line. Subnets may be printed in arbitrary order. All addresses matching the source blacklist must match the optimised blacklist. All addresses matching the source whitelist must not match the optimised blacklist. You can print a subnet \(a.b.c.d/32\) in any of two ways: as \(a.b.c.d/32\) or as \(a.b.c.d\).

If there is more than one solution, output any.

C. Cloud Computing

жадные алгоритмы Структуры данных *2000

Buber is a Berland technology company that specializes in waste of investor's money. Recently Buber decided to transfer its infrastructure to a cloud. The company decided to rent CPU cores in the cloud for \(n\) consecutive days, which are numbered from \(1\) to \(n\). Buber requires \(k\) CPU cores each day.

The cloud provider offers \(m\) tariff plans, the \(i\)-th tariff plan is characterized by the following parameters:

  • \(l_i\) and \(r_i\) — the \(i\)-th tariff plan is available only on days from \(l_i\) to \(r_i\), inclusive,
  • \(c_i\) — the number of cores per day available for rent on the \(i\)-th tariff plan,
  • \(p_i\) — the price of renting one core per day on the \(i\)-th tariff plan.

Buber can arbitrarily share its computing core needs between the tariff plans. Every day Buber can rent an arbitrary number of cores (from 0 to \(c_i\)) on each of the available plans. The number of rented cores on a tariff plan can vary arbitrarily from day to day.

Find the minimum amount of money that Buber will pay for its work for \(n\) days from \(1\) to \(n\). If on a day the total number of cores for all available tariff plans is strictly less than \(k\), then this day Buber will have to work on fewer cores (and it rents all the available cores), otherwise Buber rents exactly \(k\) cores this day.

Input

The first line of the input contains three integers \(n\), \(k\) and \(m\) (\(1 \le n,k \le 10^6, 1 \le m \le 2\cdot10^5\)) — the number of days to analyze, the desired daily number of cores, the number of tariff plans.

The following \(m\) lines contain descriptions of tariff plans, one description per line. Each line contains four integers \(l_i\), \(r_i\), \(c_i\), \(p_i\) (\(1 \le l_i \le r_i \le n\), \(1 \le c_i, p_i \le 10^6\)), where \(l_i\) and \(r_i\) are starting and finishing days of the \(i\)-th tariff plan, \(c_i\) — number of cores, \(p_i\) — price of a single core for daily rent on the \(i\)-th tariff plan.

Output

Print a single integer number — the minimal amount of money that Buber will pay.

E. Getting Deals Done

Бинарный поиск Структуры данных *2100

Polycarp has a lot of work to do. Recently he has learned a new time management rule: "if a task takes five minutes or less, do it immediately". Polycarp likes the new rule, however he is not sure that five minutes is the optimal value. He supposes that this value \(d\) should be chosen based on existing task list.

Polycarp has a list of \(n\) tasks to complete. The \(i\)-th task has difficulty \(p_i\), i.e. it requires exactly \(p_i\) minutes to be done. Polycarp reads the tasks one by one from the first to the \(n\)-th. If a task difficulty is \(d\) or less, Polycarp starts the work on the task immediately. If a task difficulty is strictly greater than \(d\), he will not do the task at all. It is not allowed to rearrange tasks in the list. Polycarp doesn't spend any time for reading a task or skipping it.

Polycarp has \(t\) minutes in total to complete maximum number of tasks. But he does not want to work all the time. He decides to make a break after each group of \(m\) consecutive tasks he was working on. The break should take the same amount of time as it was spent in total on completion of these \(m\) tasks.

For example, if \(n=7\), \(p=[3, 1, 4, 1, 5, 9, 2]\), \(d=3\) and \(m=2\) Polycarp works by the following schedule:

  • Polycarp reads the first task, its difficulty is not greater than \(d\) (\(p_1=3 \le d=3\)) and works for \(3\) minutes (i.e. the minutes \(1\), \(2\), \(3\));
  • Polycarp reads the second task, its difficulty is not greater than \(d\) (\(p_2=1 \le d=3\)) and works for \(1\) minute (i.e. the minute \(4\));
  • Polycarp notices that he has finished \(m=2\) tasks and takes a break for \(3+1=4\) minutes (i.e. on the minutes \(5, 6, 7, 8\));
  • Polycarp reads the third task, its difficulty is greater than \(d\) (\(p_3=4 > d=3\)) and skips it without spending any time;
  • Polycarp reads the fourth task, its difficulty is not greater than \(d\) (\(p_4=1 \le d=3\)) and works for \(1\) minute (i.e. the minute \(9\));
  • Polycarp reads the tasks \(5\) and \(6\), skips both of them (\(p_5>d\) and \(p_6>d\));
  • Polycarp reads the \(7\)-th task, its difficulty is not greater than \(d\) (\(p_7=2 \le d=3\)) and works for \(2\) minutes (i.e. the minutes \(10\), \(11\));
  • Polycarp notices that he has finished \(m=2\) tasks and takes a break for \(1+2=3\) minutes (i.e. on the minutes \(12, 13, 14\)).

Polycarp stops exactly after \(t\) minutes. If Polycarp started a task but has not finished it by that time, the task is not considered as completed. It is allowed to complete less than \(m\) tasks in the last group. Also Polycarp considers acceptable to have shorter break than needed after the last group of tasks or even not to have this break at all — his working day is over and he will have enough time to rest anyway.

Please help Polycarp to find such value \(d\), which would allow him to complete maximum possible number of tasks in \(t\) minutes.

Input

The first line of the input contains single integer \(c\) (\(1 \le c \le 5 \cdot 10^4\)) — number of test cases. Then description of \(c\) test cases follows. Solve test cases separately, test cases are completely independent and do not affect each other.

Each test case is described by two lines. The first of these lines contains three space-separated integers \(n\), \(m\) and \(t\) (\(1 \le n \le 2 \cdot 10^5, 1 \le m \le 2 \cdot 10^5, 1 \le t \le 4 \cdot 10^{10}\)) — the number of tasks in Polycarp's list, the number of tasks he can do without a break and the total amount of time Polycarp can work on tasks. The second line of the test case contains \(n\) space separated integers \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le 2 \cdot 10^5\)) — difficulties of the tasks.

The sum of values \(n\) for all test cases in the input does not exceed \(2 \cdot 10^5\).

Output

Print \(c\) lines, each line should contain answer for the corresponding test case — the maximum possible number of tasks Polycarp can complete and the integer value \(d\) (\(1 \le d \le t\)) Polycarp should use in time management rule, separated by space. If there are several possible values \(d\) for a test case, output any of them.

Note

In the first test case of the first example \(n=5\), \(m=2\) and \(t=16\). The sequence of difficulties is \([5, 6, 1, 4, 7]\). If Polycarp chooses \(d=5\) then he will complete \(3\) tasks. Polycarp will work by the following schedule:

  • Polycarp reads the first task, its difficulty is not greater than \(d\) (\(p_1=5 \le d=5\)) and works for \(5\) minutes (i.e. the minutes \(1, 2, \dots, 5\));
  • Polycarp reads the second task, its difficulty is greater than \(d\) (\(p_2=6 > d=5\)) and skips it without spending any time;
  • Polycarp reads the third task, its difficulty is not greater than \(d\) (\(p_3=1 \le d=5\)) and works for \(1\) minute (i.e. the minute \(6\));
  • Polycarp notices that he has finished \(m=2\) tasks and takes a break for \(5+1=6\) minutes (i.e. on the minutes \(7, 8, \dots, 12\));
  • Polycarp reads the fourth task, its difficulty is not greater than \(d\) (\(p_4=4 \le d=5\)) and works for \(4\) minutes (i.e. the minutes \(13, 14, 15, 16\));
  • Polycarp stops work because of \(t=16\).

In total in the first test case Polycarp will complete \(3\) tasks for \(d=5\). He can't choose other value for \(d\) to increase the number of completed tasks.

D. Берляндская ярмарка

Бинарный поиск жадные алгоритмы Перебор Структуры данных *1700

XXI Ежегодная Всеберляндская ярмарка уже совсем на носу! Традиционно ярмарка включает в себя \(n\) киосков, расположенных по кругу. Киоски пронумерованы от \(1\) до \(n\) по часовой стрелке, киоск номер \(n\) стоит рядом с номером \(1\). В \(i\)-м киоске продаются конфеты по цене \(a_i\) бурлей за штуку. В каждом киоске неограниченный запас конфет.

Поликапр решил потратить не более \(T\) бурлей на ярмарке. Однако, у него также есть план, как он будет перемещаться между киосками:

  • сначала он посещает киоск номер \(1\);
  • если у него хватает бурлей на покупку ровно одной конфеты в текущем киоске, то он ее сразу же покупает;
  • далее он переходит к следующему киоску по часовой стрелке (вне зависимости от того, купил ли он конфету или нет).

У Поликарпа конечное количество бурлей, поэтому процесс закончится, как только он не сможет купить конфету ни в одном киоске.

Посчитайте количество конфет, которые купит Поликарп.

Входные данные

В первой строке записаны два целых числа \(n\) и \(T\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le T \le 10^{18}\)) — количество киосков на ярмарке и начальное количество бурлей у Поликарпа.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — цена одной конфеты в киоске номер \(i\).

Выходные данные

Выведите одно целое число — итоговое количество конфет, которые купит Поликарп.

Примечание

Рассмотрим первый пример. Какие ходы делал Поликарп, пока у него не закончились деньги:

  1. Киоск \(1\), покупает конфету за \(5\), \(T = 33\);
  2. Киоск \(2\), покупает конфету за \(2\), \(T = 31\);
  3. Киоск \(3\), покупает конфету за \(5\), \(T = 26\);
  4. Киоск \(1\), покупает конфету за \(5\), \(T = 21\);
  5. Киоск \(2\), покупает конфету за \(2\), \(T = 19\);
  6. Киоск \(3\), покупает конфету за \(5\), \(T = 14\);
  7. Киоск \(1\), покупает конфету за \(5\), \(T = 9\);
  8. Киоск \(2\), покупает конфету за \(2\), \(T = 7\);
  9. Киоск \(3\), покупает конфету за \(5\), \(T = 2\);
  10. Киоск \(1\), не покупает конфету, недостаточно денег;
  11. Киоск \(2\), покупает конфету за \(2\), \(T = 0\).

Больше нельзя купить конфет. Итоговое число купленных конфет — \(10\).

Во втором примере у него остается \(1\) бурль после посещения киосков, нельзя купить ни одну конфету за столько.

G. Очередная задача на строки

строковые суфф. структуры Структуры данных *2600

Пусть \(\text{LCP}(s, t)\) будет длиной наидлиннейшего общего префикса строк \(s\) и \(t\). Также назовем \(s[x \dots y]\) подстрокой \(s\) с позиции \(x\) до позиции \(y\) (включительно). Например, если \(s = \) «abcde», то \(s[1 \dots 3] =\) «abc», \(s[2 \dots 5] =\) «bcde».

Задана строка \(s\) длины \(n\), а также \(q\) запросов. Каждый запрос — это пара множеств целых чисел \(a_1, a_2, \dots, a_k\) и \(b_1, b_2, \dots, b_l\). Посчитайте \(\sum\limits_{i = 1}^{i = k} \sum\limits_{j = 1}^{j = l}{\text{LCP}(s[a_i \dots n], s[b_j \dots n])}\) для каждого запроса.

Входные данные

В первой строке записаны два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — длина строки \(s\) и количество запросов, соответственно.

Во второй строке записана строка \(s\), состоящая из строчных букв латинского алфавита (\(|s| = n\)).

Следующие \(3q\) строк содержат описания запросов — три строки на запрос. В первой строке каждого запроса записаны по два целых числа \(k_i\) и \(l_i\) (\(1 \le k_i, l_i \le n\)) — размеры множеств \(a\) и \(b\), соответственно.

Во второй строке каждого запроса записаны \(k_i\) целых чисел \(a_1, a_2, \dots a_{k_i}\) (\(1 \le a_1 < a_2 < \dots < a_{k_i} \le n\)) — множество \(a\).

В третьей строке каждого запроса записаны \(l_i\) целых чисел \(b_1, b_2, \dots b_{l_i}\) (\(1 \le b_1 < b_2 < \dots < b_{l_i} \le n\)) — множество \(b\).

Гарантируется, что \(\sum\limits_{i = 1}^{i = q}{k_i} \le 2 \cdot 10^5\) и \(\sum\limits_{i = 1}^{i = q}{l_i} \le 2 \cdot 10^5\).

Выходные данные

Выведите \(q\) целых чисел — ответы на запросы в том же порядке, в каком запросы подавались во входных данных.

Примечание

Рассмотрим запросы:

  1. В первом запросе участвуют \(s[1 \dots 7] = \text{abacaba}\) и \(s[2 \dots 7] = \text{bacaba}\). Ответ равен \(\text{LCP}(\text{abacaba}, \text{abacaba}) + \text{LCP}(\text{abacaba}, \text{bacaba}) + \text{LCP}(\text{bacaba}, \text{abacaba}) + \text{LCP}(\text{bacaba}, \text{bacaba}) = 7 + 0 + 0 + 6 = 13\).
  2. Во втором запросе участвуют \(s[1 \dots 7] = \text{abacaba}\), \(s[2 \dots 7] = \text{bacaba}\), \(s[3 \dots 7] = \text{acaba}\) и \(s[7 \dots 7] = \text{a}\). Ответ равен \(\text{LCP}(\text{abacaba}, \text{a}) + \text{LCP}(\text{bacaba}, \text{a}) + \text{LCP}(\text{acaba}, \text{a}) = 1 + 0 + 1 = 2\).
  3. В третьем запросе \(s[1 \dots 7] = \text{abacaba}\) сравнивается со всеми суффиксами. Ответ состоит из следующих ненулевых значений: \(\text{LCP}(\text{abacaba}, \text{abacaba}) + \text{LCP}(\text{abacaba}, \text{acaba}) + \text{LCP}(\text{abacaba}, \text{aba}) + \text{LCP}(\text{abacaba}, \text{a}) = 7 + 1 + 3 + 1 = 12\).
  4. В четвертом запросе участвуют \(s[1 \dots 7] = \text{abacaba}\) и \(s[5 \dots 7] = \text{aba}\). Ответ равен \(\text{LCP}(\text{abacaba}, \text{abacaba}) + \text{LCP}(\text{abacaba}, \text{aba}) + \text{LCP}(\text{aba}, \text{abacaba}) + \text{LCP}(\text{aba}, \text{aba}) = 7 + 3 + 3 + 3 = 16\).

E. Вася и дерево

Деревья Структуры данных *1900

У Васи есть дерево из \(n\) вершин с корнем в вершине \(1\). Изначально в каждой вершине записано число \(0\).

Определим \(d(i, j)\) как расстояние между вершинами \(i\) и \(j\) в дереве, то есть количество ребер на кратчайшем пути из \(i\) в \(j\). Также определим поддерево глубины \(k\) вершины \(x\) — набор вершин \(y\), таких, что выполняются следующие условия:

  • \(x\) является предком \(y\) (каждая вершина считается своим предком);
  • \(d(x, y) \le k\).

Васе нужно обработать \(m\) запросов к дереву. \(i\)-й запрос представляется тремя числами \(v_i\), \(d_i\) и \(x_i\), и означает, что Васе нужно прибавить значение \(x_i\) ко всем вершинам поддерева вершины \(v_i\) на глубине \(d_i\).

Сообщите Васе значение, записанное в каждой вершине после обработки всех запросов.

Входные данные

Первая строка содержит число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество вершин в дереве.

Следующие \(n - 1\) строк содержат по два числа \(x\) и \(y\) (\(1 \le x, y \le n\)), представляющие ребро между вершинами \(x\) и \(y\). Гарантируется, что данные ребра составляют дерево.

Следующая строка содержит число \(m\) (\(1 \le m \le 3 \cdot 10^5\)) — количество запросов.

Следующие \(m\) строк содержат по три числа \(v_i\), \(d_i\), \(x_i\) (\(1 \le v_i \le n\), \(0 \le d_i \le 10^9\), \(1 \le x_i \le 10^9\)) — описание \(i\)-го запроса.

Выходные данные

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

Примечание

В первом тестовом примере изначально значения в вершинах равны \(0, 0, 0, 0, 0\). После первого запроса значения будут равны \(1, 1, 1, 0, 0\). После второго запроса значения будут равны \(1, 11, 1, 0, 0\). После третьего запроса значения будут равны \(1, 11, 1, 100, 0\).

G. Игра на массиве

игры Структуры данных *3000

Рассмотрим следующую игру для двух игроков:

Дан массив \(b_1\), \(b_2\), ..., \(b_k\), состоящий из положительных целых чисел. В начале в первую ячейку массива помещается фишка, и \(b_1\) уменьшается на \(1\). Игроки по очереди делают ходы. В каждый ход текущий игрок делает следующее: если номер ячейки с фишкой равен \(x\), то он или она выбирает некоторую позицию \(y \in [x, min(k, x + m)]\) такую, что \(b_y > 0\), двигает фишку в \(y\) и уменьшает \(b_y\) на \(1\). Если невозможно сделать корректный ход, то текущий игрок проигрывает.

Ваша задача в следующем: дан массив \(a\), состоящий из \(n\) положительных целых чисел, и \(q\) запросов к нему. Существуют два типа запросов:

  • \(1\) \(l\) \(r\) \(d\) — для каждого \(i \in [l, r]\) увеличить \(a_i\) на \(d\);
  • \(2\) \(l\) \(r\) — сказать, кто победит в игре на подмассиве \(a\) с позиции \(l\) до позиции \(r\) включительно. Считается, что оба игрока играют оптимально.
Входные данные

В первой строке записаны три целых числа \(n\), \(m\) and \(q\) (\(1 \le n, q \le 2 \cdot 10^5\), \(1 \le m \le 5\)) — количество элементов в \(a\), параметр, описанный в игре, и количество запросов, соответственно.

Во второй строке записаны \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le 10^{12}\)) — элементы массива \(a\).

Затем следуют \(q\) строк, в каждой содержится один запрос. Есть два типа запросов. Запрос первого типа описывается строкой \(1\) \(l\) \(r\) \(d\) (\(1 \le l \le r \le n\), \(1 \le d \le 10^{12}\)) и обозначает, что для каждого \(i \in [l, r]\) необходимо увеличить \(a_i\) на \(d\). Запрос второго типа описывается строкой \(2\) \(l\) \(r\) (\(1 \le l \le r \le n\)) и обозначает, что требуется определить, кто выиграет в игре, если она будет сыграна на подмассиве \(a\) с позиции \(l\) до позиции \(r\) (включительно).

Гарантируется, что существует хотя бы один запрос типа \(2\).

Выходные данные

Для каждого запроса типа \(2\) выведите \(1\), если первый игрок выигрывает в соответствующей игре, или \(2\), если выигрывает второй игрок.

F2. Картинки с котиками (сложная версия)

дп Структуры данных *2100

Единственное отличие простой версии от сложной — ограничения.

Вове очень нравятся картинки с котиками. Новостную ленту в социальной сети, в которой он сидит, можно представить как \(n\) последовательных картинок (с котиками, конечно же). Все эти картинки нравятся Вове, но некоторые нравятся больше других: Вова оценивает красоту \(i\)-й картинки как \(a_i\).

Вова хочет репостнуть ровно \(x\) картинок так, что будут выполнены следующие условия:

  • для каждого отрезка новостной ленты из \(k\) последовательных картинок Вова репостнет хотя бы одну из этих картинок;
  • сумма красот репостнутых картинок максимально возможна.

К примеру, если \(k=1\), Вова хочет репостнуть все картинки. Если \(k=2\), Вове не обязательно репостить все картинки, но для каждой пары соседних картинок хотя бы одна должна быть репостнута.

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

Входные данные

В первой строке заданы три числа \(n, k\) и \(x\) (\(1 \le k, x \le n \le 5000\)) — количество картинок в новостной ленте, минимальная длина подотрезка, на котором обязательно должна быть хотя бы одна репостнутая картинка, и количество картинок, которое собирается репостнуть Вова.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — красота \(i\)-й картинки.

Выходные данные

Выведите -1, если нельзя выбрать картинки для репоста, чтобы выполнить условие задачи.

В противном случае выведите одно целое число — максимальную сумму красот репостнутых картинок при соблюдении всех условий.

F. Катя и наборы отрезков

интерактив сортировки Структуры данных *2400

У Кати сегодня важный день, у неё экзамен по программированию. Как всегда, ей дали интересную задачу и она легко с ней справилась. А справитесь ли вы с этой задачей?

Вам дано \(n\) упорядоченных наборов из отрезков. Каждый отрезок может быть представлен как пара целых чисел \([l, r]\), где \(l\leq r\). Каждый набор может содержать произвольное количество отрезков (даже \(0\)), возможно, что некоторые из них будут одинаковыми.

Также у вас есть \(m\) запросов, каждый из которых в виде четырех целых чисел: \(a, b, x, y\). Для каждого запроса вам нужно проверить верно ли, что в каждом наборе с номером \(p\) (\(a\leq p\leq b\)), есть хотя бы один отрезок \([l, r]\), что целиком лежит на отрезке \([x, y]\), то есть \(x\leq l\leq r\leq y\).

Найдите ответ для каждого запроса.

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

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) \((1\leq n,m\leq 10^5, 1\leq k\leq 3\cdot10^5)\) — количество наборов, запросов и отрезков соответственно.

Каждая из следующих \(k\) строк содержит три целых числа \(l\), \(r\) и \(p\) \((1\leq l\leq r\leq 10^9, 1\leq p\leq n)\) — границы отрезка и номер набора, которому принадлежит этот отрезок.

Каждая из следующих \(m\) строк содержит четыре целых числа \(a, b, x, y\) \((1\leq a\leq b\leq n, 1\leq x\leq y\leq 10^9)\) — описание запроса.

Выходные данные

Для каждого запроса в отдельной строке выведите ответ «yes», или «no».

Протокол взаимодействия

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.
Примечание

Для первого запроса утверждение не истинно, поскольку второй набор не содержит отрезка что лежит в отрезке \([2, 3]\).

Для второго запроса первый набор содержит отрезок \([2, 3]\), а второй набор содержит отрезок \([2, 4]\).

В третьем запросе первому набору подходит отрезок \([2, 3]\), второму набору подходит отрезок \([2, 4]\), а третьему набору отрезок \([2, 5]\).

В четвертом запросе второй набор не содержит ни одного отрезка что лежит в отрезке \([3, 6]\).

В пятом запросе второму набору подходит отрезок \([2, 4]\), третьему набору подходит отрезок \([2, 5]\), а четвертому набору подходит отрезок \([7, 9]\).

H. Палиндромная магия

Строки Структуры данных хэши *3500

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

У Chouti есть две строки \(A\) и \(B\). Так как он любит палиндромы, он хочет выбрать \(a\) как непустую палиндромную подстроку строки \(A\), а \(b\) как непустую палиндромную подстроку строки \(B\). Сконкатенировав их, он получит строку \(ab\).

Chouti считает, что строки, которые можно получить таким образом, очень интересные, поэтому он хочет знать, скоько различных строк он может так получить.

Входные данные

Первая строка содержит одну строка \(A\) (\(1 \le |A| \le 2 \cdot 10^5\)).

Вторая строка содержит одну строка \(B\) (\(1 \le |B| \le 2 \cdot 10^5\)).

Строки \(A\) и \(B\) состоят только из строчных английских букв.

Выходные данные

В единственной строка выведите одно целое число — количество возможных строк.

Примечание

В первом примере можно получить строки

  • "a" + "a" = "aa",
  • "aa" + "a" = "aaa",
  • "aa" + "aba" = "aaaba",
  • "aa" + "b" = "aab",
  • "a" + "aba" = "aaba",
  • "a" + "b" = "ab".

Во втором примере можно получить строки "aa", "aaa", "aaaa", "aaaba", "aab", "aaba", "ab", "abaa", "abaaa", "abaaba", "abab", "ba", "baa", "baba", "bb".

Обратите внимание, что, не смотря на то, что "a"+"aa"="aa"+"a"="aaa", строка "aaa" учитывается только один раз.

A. Орехус и оптимальный путь

Деревья дп Структуры данных *1800

Орехус отправляется путешествовать в Древесную страну, в которой \(n\) городов. Кроме того, что большая часть её территории покрыта лесами, местная система дорог также представляет собой дерево (связный ациклический граф). Орехус хочет арендовать автомобиль в городе \(u\) и поехать по простому пути до города \(v\). Он ещё не определил свой путь, и сейчас самое время это сделать. Обратите внимание, что выбранный путь может состоять из одной вершины.

В \(i\)-м городе стоит бензоколонка, в которой по странным законам Древесной страны можно купить не более \(w_i\) литров бензина. Можно считать, что у Орехуса бесконечное количество денег. У каждой дороги есть длина, и как только Орехус проезжает по ней, количество бензина уменьшается на длину дороги. Конечно, Орехус не сможет поехать по пути, на одной из дорог которого ему не хватит бензина. Он может купить в бензин в любом городе, в котором он был, в том числе в первом и последнем.

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

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 3 \cdot 10^5\)) — количество городов.

Вторая строка содержит \(n\) целых чисел \(w_1, w_2, \ldots, w_n\) (\(0 \leq w_{i} \leq 10^9\)) — максимальные количества бензина, которое Орехус может купить в городах.

Каждая из следующих \(n - 1\) строк описывает дорогу и содержит три целых числа \(u\), \(v\), \(c\) (\(1 \leq u, v \leq n\), \(1 \leq c \leq 10^9\), \(u \ne v\)), где \(u\) и \(v\) — города, которые соединяет дорога, а \(c\) — её длина.

Гарантируется, что граф соединённости городов дорогами - это правильное дерево.

Выходные данные

Выведите одно число — максимальное количество бензина, которое может остаться у Орехуса в конце пути.

Примечание

Оптимальный путь в первом примере \(2 \to 1 \to 3\).

Оптимальный путь во втором примере \(2 \to 4\).

C. Максимальный Mex

Деревья Структуры данных *2900

Однажды Гриша нашёл дерево (связный ациклический граф) с корнем в вершине \(1\).

Но дерево было не простое — в вершинах этого дерева записана перестановка \(p\) чисел от \(0\) до \(n - 1\), в \(i\)-й вершине записано число \(p_i\).

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

Определим функцию \(MEX(S)\), где \(S\) является множеством целых неотрицательных чисел, как наименьшее целое неотрицательное число, не входящее в множество.

Пусть \(l\) — простой путь в дереве. Тогда обозначим за \(u_1\), \(u_2\), \(\ldots\), \(u_k\) — номера вершин, принадлежащих \(l\).

Обозначим за \(V(l)\) множество {\(p_{u_1}\), \(p_{u_2}\), \(\ldots\) , \(p_{u_k}\)}.

Тогда запросы таковы:

  1. Для двух вершин \(i\) и \(j\) нужно поменять местами значения \(p_i\) и \(p_j\).
  2. Требуется найти максимальный \(MEX(V(l))\) по все возможным \(l\).
Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — количество вершин в дереве.

Вторая строка содержит \(n\) целых чисел \(p_1\), \(p_2\), \(\ldots\), \(p_n\) (\(0\leq p_i < n\)) — перестановка \(p\). Гарантируется, что все числа различны.

Третья строка содержит \(n - 1\) целое число \(d_2\), \(d_3\), \(\ldots\), \(d_n\) (\(1 \leq d_i < i\)), где \(d_i\) — непосредственный предок вершины \(i\) в дереве.

Четвёртая строка содержит одно целое число \(q\) (\(1 \leq q \leq 2 \cdot 10^5\)) — количество запросов.

Следующие \(q\) строк содержат описание запросов:

Каждая из следующих \(q\) строк содержит одно целое число \(t\) (\(1\) или \(2\)) — тип запроса.

  1. Если \(t = 1\), далее следуют два целых числа \(i\) и \(j\) (\(1 \leq i, j \leq n\)) — номера вершин, значения перестановки в которых нужно поменять местами.
  2. Если же \(t = 2\), нужно найти максимальный \(MEX(V(l))\) по все возможным \(l\).
Выходные данные

Для каждого запроса второго типа выведите единственное число — ответ на запрос.

Примечание

Число в скобках обозначает значение перестановки для вершины.

В первом примере для первого запроса оптимальный путь — из вершины \(1\) в вершину \(5\). Для него множество значений \(\{0, 1, 2\}\), а \(MEX\) соответсвенно — \(3\).
Для третьего запроса оптимальный путь — из вершины \(5\) в вершину \(6\). Для него множество значений \(\{0, 1, 4\}\), а \(MEX\) соответсвенно — \(2\).
Во втором примере для первого запроса оптимальный путь — из вершины \(2\) в вершину \(6\). Для него множество значений \(\{0, 1, 2, 5\}\), а \(MEX\) соответсвенно — \(3\).
Для третьего запроса оптимальный путь — из вершины \(5\) в вершину \(6\). Для него множество значений \(\{0, 1, 3\}\), а \(MEX\) соответсвенно — \(2\).
Для пятого запроса оптимальный путь — из вершины \(5\) в вершину \(2\). Для него множество значений \(\{0, 1, 2, 3\}\), а \(MEX\) соответсвенно — \(4\).
Для седьмого запроса оптимальный путь — из вершины \(5\) в вершину \(4\). Для него множество значений \(\{0, 1, 2, 3\}\), а \(MEX\) соответсвенно — \(4\).
Для девятого запроса оптимальный путь — из вершины \(6\) в вершину \(5\). Для него множество значений \(\{0, 1, 3\}\), а \(MEX\) соответсвенно — \(2\).

D. Орехус сходит с ума

реализация Структуры данных *3500

Орехус зачем-то нашел массив целых чисел \(a\) длины \(n\). Назовем подотрезком \(l \ldots r\) массива подпоследовательность подряд идущих элементов массива с \(l\) по \(r\), то есть \(a_l, a_{l+1}, a_{l+2}, \ldots, a_{r-1}, a_{r}\).

Никто не знает почему, но он считает пару подотрезков хорошими тогда и только тогда, когда выполняются следующие условия:

  1. Эти подотрезки не вложены, друг в друга. То есть, каждый подотрезок должен содержать элемент (со своим индексом), который не принадлежит другому.
  2. Подотрезки пересекаются и каждое число, принадлежащее пересечению отрезков (как элемент), принадлежит каждому их них ровно по одному разу.

Например \(a=[1, 2, 3, 5, 5]\). Пары отрезков \((1 \ldots 3; 2 \ldots 5)\) и \((1 \ldots 2; 2 \ldots 3)\) — хорошие, а \((1 \dots 3; 2 \ldots 3)\) и \((3 \ldots 4; 4 \ldots 5)\) — нет (отрезок \(2 \ldots 3\) вложен в \(1 \ldots 3\); число \(5\) встречается в обоих отрезках, но в отрезке \(4 \ldots 5\) встречается дважды.

Помогите Орехусу узнать количество пар хороших подотрезков! Так как ответ может быть очень большой выведите его по модулю \(10^9+7\).

Входные данные

В первой строке содержится длина массива \(n\) (\(1 \le n \le 10^5\)) — длина массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — числа массива.

Выходные данные

Выведите единственное число — количество пар хороших отрезков по модулю \(10^9+7\).

Примечание

В первом примере есть только одна пара хороших подотрезков: \((1 \ldots 2, 2 \ldots 3)\).

Во втором примере есть четыре пары хороших подотрезков:

  • \((1 \ldots 2, 2 \ldots 3)\)
  • \((2 \ldots 3, 3 \ldots 4)\)
  • \((2 \ldots 3, 3 \ldots 5)\)
  • \((3 \ldots 4, 4 \ldots 5)\)

E. Орехус и прямоугольники

геометрия дп Структуры данных *2400

Орехус застрял в плоском мире. Чтобы выбраться, необходимо решить следующую задачу.

Вам даны \(n\) прямоугольников с вершинами в точках \((0, 0)\), \((x_i, 0)\), \((x_i, y_i)\), \((0, y_i)\). Также для каждого прямоугольника вам дано число \(a_i\). Необходимо выбрать некоторые из них, чтобы площадь их объединения минус сумма их \(a_i\) была максимальна.

Гарантируется, что нет вложенных прямоугольников.

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

Входные данные

В первой строке дано одно целое число \(n\) (\(1 \leq n \leq 10^6\)) — число прямоугольников.

Каждая из следующих \(n\) строк содержит три целых числа \(x_i\), \(y_i\) и \(a_i\) (\(1 \leq x_i, y_i \leq 10^9\), \(0 \leq a_i \leq x_i \cdot y_i\)).

Гарантируется, что нет вложенных прямоугольников.

Выходные данные

В единственной строке выведите ответ на задачу — максимальное значение, которое можно получить.

Примечание

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

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

F. Орехус и занимательный xor

Структуры данных *3300

У Орехуса есть два массива \(a\) и \(b\) из \(n\) чисел каждый. Он нашёл их так давно, что никто уже не знает, когда они у него появились.

Орехус часто меняет числа в массивах. Кроме того, после каждого изменения ему интересно, насколько похожи массивы \(a\) и \(b\).

Сходство массивов — это минимальное количество операций, которые нужно применить к массивам (каждую операцию можно применять как к первому массиву, так и ко второму), чтобы сделать их равными. Если это сделать невозможно, сходство равно \(-1\).

За одну операцию можно выбрать подмассив длины \(k\) (\(k\) фиксированно), и заменить каждый элемент \(a_i\), принадлежащий подмассиву, на \(a_i \oplus x\) (\(x\) можно выбрать), где \(\oplus\) обозначает операциюпобитового исключающего ИЛИ.

Орехус уже посчитал сходства массивов после каждого изменения. Сможете ли вы?

Обратите внимание, что вам нужно только посчитать эти значения, то есть вам не нужно применять операции.

Входные данные

Первая строка содержит три целых числа \(n\), \(k\) и \(q\) (\(1 \le k \le n \le 2 \cdot 10^5\), \(0 \le q \le 2 \cdot 10^5\)) — длина массивов, длина подотрезка, изменяемого при применении операции и число запросов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^{14}\)) — элементы массива \(a\).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(0 \le b_i < 2^{14}\)) — элементы массива \(b\).

Каждая из следующих \(q\) строк соответствует запросу и содержит строку \(s\) и два целых числа \(p\) и \(v\) (\(1 \le p \le n\), \(0 \le v < 2^{14}\)) — название массива («a» или «b» без кавычек), к которому применяется изменение, индекс изменяемого элемента и его новое значение.

Выходные данные

В первой строке выведите сходство массивов \(a\) и \(b\) до применения изменений.

В \(i\)-й из следующих \(q\) строк выведите сходство массивов \(a\) и \(b\) после применения первых \(i\) изменений.

Примечание

В первом примере невозможно с \(k=3\) сделать \([0, 4, 2]\) и \([1, 2, 3]\) равными. После модификации можно к первому массиву (его длина равна \(k\)) применить операцию с \(x=1\), и он станет равным второму.

Во втором примере, чтобы сделать массивы равными до изменений, можно применить операции с \(x=1\) на подотрезке \([1, 2]\) к \(a\) и с \(x=2\) к \(b\) на подотрезке \([2, 3]\).

После всех запросов массивы станут равными \([0, 3, 2]\) и \([1, 0, 0]\). Те же операции делают их равными \([1, 2, 2]\).

G. Красивая раскраска

дп Комбинаторика Структуры данных *2900

Петя является коллекционером красивых матриц.

Матрица размера \(n \times n\) является красивой, если:

  • Все элементы матрицы являются целыми числами от \(1\) до \(n\);
  • В строке все элементы различные;
  • В столбце нет двух соседних одинаковых элементов.

Сегодня Петя купил красивую матрицу \(a\) размера \(n \times n\) и хочет определить ее редкость.

Редкость матрицы определяется, как ее номер в списке всех красивых матриц размера \(n \times n\), отсортированных в лексикографическом порядке. Сравнение матриц происходит построчно. (Нумерация начинается с нуля).

Так как красивых матриц очень много, то Пете будет достаточно узнать редкость матрицы \(a\) по модулю \(998\,244\,353\).

Входные данные

В первой строке записано целое число \(n\) (\(1 \le n \le 2000\)) — размеры матрицы \(a\).

В последующих \(n\) строках записано по \(n\) целых чисел \(a_{i,j}\) (\(1 \le a_{i,j} \le n\)) — элементы матрицы \(a\).

Гарантируется, что матрица \(a\) удовлетворяет свойствам красивой матрицы.

Выходные данные

Выведите одно целое число — редкость матрицы \(a\) по модулю \(998\,244\,353\).

Примечание

Для матриц размера \(2 \times 2\) существует всего \(2\) красивые матрицы:

Красивых матриц \(3 \times 3\) довольно много, вот первые \(5\) в лексикографическом порядке:

F. Ехаб и странная формула веса

Деревья Структуры данных *2800

Дано дерево, состоящее из \(n\) вершин. У каждой вершины \(u\) есть вес \(a_u\). Гарантируется, что в дереве есть только одна вершина с минимальным весом. У каждой вершины \(u\) (кроме вершины с минимальным \(a_u\)), есть сосед \(v\), такой, что \(a_v<a_u\).

Вам необходимо составить дерево с минимальным весом \(w\), который считается следующим образом:

  • Для каждой вершины \(u\), \(deg_u \cdot a_u\) прибавляется к \(w\) (\(deg_u\) обозначает степень вершины \(u\)).
  • Для каждого ребра \(\{ u,v \}\), \(\lceil log_2(dist(u,v)) \rceil \cdot min(a_u,a_v)\) прибавляется к \(w\), где \(dist(u,v)\) обозначает количество ребер на пути из \(u\) в \(v\) в данном дереве.
Входные данные

В первой строке записано одно целое число \(n\) \((2 \le n \le 5 \cdot 10^5)\), количество вершин в дереве.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1 \le a_i \le 10^9)\), веса вершин дерева.

Далее следует \(n-1\) строка, в каждой из которых записаны по два целых числа \(u\) и \(v\) \((1 \le u,v \le n)\). Это означает, что между \(u\) и \(v\) есть ребро в данном дереве.

Выходные данные

Выведите одно целое число: минимальное возможное значение \(w\).

Примечание

В первом примере данное дерево исходно имеет минимальное значение \(w\).

Во втором примере оптимальное дерево имеет следующий вид:

E. Новый год и оценка знакомых

Бинарный поиск графы жадные алгоритмы математика реализация сортировки Структуры данных *2400

Боб — активный пользователь социальной сети Faithbug. В этой сети люди могут становиться взаимными друзьями. То есть, если \(a\) является другом \(b\), то \(b\) также является другом \(a\). Таким образом у каждого пользователя есть неотрицательное количество друзей.

Сегодня утром кто-то анонимно отправил Бобу следующую ссылку: задача о реализации графа. Боб хочет узнать, кто это был. Для этого ему сначала нужно узнать, как выглядит эта сеть. Он исследовал профиль каждого человека в сети и записал количество его друзей. Однако он забыл записать количество своих друзей. Помогите ему узнать, сколько у него друзей. Поскольку возможных ответов может быть много, выведите все возможные количества.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 5 \cdot 10^5\)) — количество людей в сети, не считая Боба.

Вторая строка содержит \(n\) целых чисел \(a_1,a_2, \dots, a_n\) (\(0 \leq a_i \leq n\)), где \(a_i\) — количество друзей у \(i\)-го человека.

Выходные данные

Выведите все возможные значения \(a_{n+1}\) — количества людей, с которыми Боб может быть друзями, в порядке возрастания.

Если ни одного решения не существует, выведите \(-1\).

Примечание

В первом примере единственное решение заключается в том, чтобы каждый был другом каждому. Поэтому у Боба может быть только \(3\) друга.

Во втором примере есть три возможных решения (кроме симметричных):

  • \(a\) — друг \(b\), \(c\) — друг \(d\), а у Боба нет друзей, или
  • \(a\) — друг \(b\), а также и \(c\), и \(d\) — друзья Боба, или
  • Боб — друг каждому.

Третий пример решить невозможно, так как второму человеку нужно быть другом каждому, но у первого нет друзей.

D2. Великая Вовина Стена (Версия 2)

реализация Структуры данных *2200

Семья Вовы строит Великую Вовину Стену (название придумано Вовой). Многие поколения внесли свой вклад в ее постройку. Теперь на Вове лежит важное задание завершить ее.

На данный момент стена может быть представлена в виде последовательности \(a\) из \(n\) целых чисел, где \(a_i\) — это высота \(i\)-й части стены.

Вова может класть лишь только кирпичи \(2 \times 1\) в стену (однако их запас у него не ограничен).

Вова может класть кирпичи только горизонтально на соседние части стены равной высоты. Это значит, что если для некоторого \(i\) текущая высота части \(i\) равна высоте части \(i + 1\), то Вова может положить туда кирпич и увеличить обе высоты на 1. Очевидно, Вова не может класть кирпичи так, чтобы их части оказывались за границами (левее части \(1\) стены или правее ее части \(n\)).

Обратите внимание, что Вова не может класть кирпичи вертикально.

Вова перфекционист, поэтому он считает стену завершенной, когда:

  • все части стены имеют одинаковую высоту;
  • в стене нет отверстий без кирпичей.

Может ли Вова завершить постройку стены, использовав произвольное количество кирпичей (возможно ноль)?

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество частей стены.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — начальные высоты частей стены.

Выходные данные

Выведите «YES», если Вова может завершить постройку стены, использовав произвольное количество кирпичей (возможно ноль).

В противном случае выведите «NO».

Примечание

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

Во втором примере Вова не может положить кирпичей в стену.

В третьем примере стена уже завершена.

E. Пересечение перестановок

Структуры данных *2400

Заданы две перестановки \(a\) и \(b\), обе состоят из \(n\) элементов. Перестановка из \(n\) элементов — это такая последовательность целых чисел, что каждое число от \(1\) до \(n\) встречается ровно один раз.

Запрашивается два типа запросов к ним:

  • \(1~l_a~r_a~l_b~r_b\) — посчитать количество значений, которые встречаются как в отрезке \([l_a; r_a]\) позиций перестановки \(a\), так и в отрезке \([l_b; r_b]\) позиций перестановки \(b\);
  • \(2~x~y\) — поменять местами значения на позициях \(x\) и \(y\) перестановки \(b\).

Выведите ответы на все запросы первого типа.

Гарантируется, что во входных данных существует хотя бы один запрос первого типа.

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le m \le 2 \cdot 10^5\)) — количество элементов в обеих перестановках и количество запросов.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — перестановка \(a\). Гарантируется, что каждое число от \(1\) до \(n\) содержится в \(a\) ровно один раз.

В третьей строке записаны \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le n\)) — перестановка \(b\). Гарантируется, что каждое число от \(1\) до \(n\) содержится в \(b\) ровно один раз.

Каждая из следующих \(m\) строк содержит описание определенного запроса. Они бывают следующих видов:

  • \(1~l_a~r_a~l_b~r_b\) (\(1 \le l_a \le r_a \le n\), \(1 \le l_b \le r_b \le n\));
  • \(2~x~y\) (\(1 \le x, y \le n\), \(x \ne y\)).
Выходные данные

Выведите ответы на запросы первого типа, каждый ответ в отдельной строке — количество значений, которые встречаются и в отрезке \([l_a; r_a]\) позиций перестановки \(a\), и в отрезке \([l_b; r_b]\) позиций перестановки \(b\).

Примечание

Рассмотрим первый запрос первого примера. Значения на позициях \([1; 2]\) перестановки \(a\) — это \([5, 1]\), а значениях на позициях \([4; 5]\) перестановки \(b\) — это \([1, 4]\). Только значение \(1\) встречается в обоих отрезках.

После первой смены мест (второй запрос) перестановка \(b\) становится \([2, 1, 3, 5, 4, 6]\).

После второй смены мест (шестой запрос) перестановка \(b\) становится \([5, 1, 3, 2, 4, 6]\).

G. Многомерные запросы

битмаски Структуры данных *2300

Задан массив \(a\), состоящий из \(n\) точек в \(k\)-мерном пространстве. Введем расстояние между двумя точками \(a_x\) и \(a_y\), как \(\sum \limits_{i = 1}^{k} |a_{x, i} - a_{y, i}|\) (также известное как манхэттенское расстояние).

Необходимо обработать \(q\) запросов двух следующих типов:

  • \(1\) \(i\) \(b_1\) \(b_2\) ... \(b_k\) — выставить \(i\)-й элемент \(a\) равным точке \((b_1, b_2, \dots, b_k)\);
  • \(2\) \(l\) \(r\) — найти максимальное расстояние между двумя точками \(a_i\) и \(a_j\), где \(l \le i, j \le r\).
Входные данные

В первой строке записаны два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le k \le 5\)) — количество элементов в \(a\) и количество измерений в пространстве, соответственно.

Затем следуют \(n\) строк, в каждой записаны по \(k\) целых чисел \(a_{i, 1}\), \(a_{i, 2}\), ..., \(a_{i, k}\) (\(-10^6 \le a_{i, j} \le 10^6\)) — координаты \(i\)-й точки.

В следующей строке записано одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

Затем следуют \(q\) строк, каждая задает запрос. Есть два типа запросов:

  • \(1\) \(i\) \(b_1\) \(b_2\) ... \(b_k\) (\(1 \le i \le n\), \(-10^6 \le b_j \le 10^6\)) — выставить \(i\)-й элемент \(a\) равным точке \((b_1, b_2, \dots, b_k)\);
  • \(2\) \(l\) \(r\) (\(1 \le l \le r \le n\)) — найти максимальное расстояние между двумя точками \(a_i\) и \(a_j\), где \(l \le i, j \le r\).

Гарантируется, что во входных данных есть хотя бы один запрос второго типа.

Выходные данные

Выведите ответ на каждый запрос второго типа.

D. Мурены

Структуры данных *2800

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

Попадая в один аквариум, мурены сражаются друг с другом, пока не останется ровно одна рыба. Когда сражаются две мурены, большая из них съедает меньшую (если их массы равны, то одна их них все равно съест другую). А именно, пусть изначально в аквариуме находятся \(n\) мурен, и \(i\)-я из них имеет массу \(x_i\). Тогда между ними произойдет \(n - 1\) сражение, в результате которых в живых останется только одна мурена. В сражении двух мурен с массами \(a\) и \(b\), где \(a \le b\), мурена массы \(a\) будет съедена и изчезнет из аквариума, а мурена массы \(b\) увеличит свою массу до \(a+b\).

Сражение между двумя муренами с массами \(a\) и \(b\), где \(a \le b\), считается опасным, если \(b \le 2 a\). Для данного множества мурен опасность определяется как максимальное число опасных сражений, которое может произойти среди этих мурен, если их поместить в один аквариум.

Сейчас Вася думает, каких именно мурен запустить в аквариум. У него есть некоторое множество мурен (изначально пустое). Он проделывает с ним серию операций. Каждой операцией он или добавляет новую мурену в множество, или удаляет. Вася просит вас посчитать опасность множества мурен после каждой операции.

Входные данные

В первой строке ввода содержится единственное число \(q\) (\(1 \le q \le 500\,000\)) — число операций, которые делает Вася. В следующих \(q\) строках описаны операции. Каждая операция имеет один из двух типов:

  • + x описывает добавление одной мурены веса \(x\) в множество (\(1 \le x \le 10^9\)). Обратите внимание, что в множестве может быть несколько мурен одного веса.
  • - x описывает удаление одной мурены веса \(x\) из множества, при этом гарантируется, что мурена такого веса в множестве присутствует.
Выходные данные

Для каждой операции выведите единственное число — опасность множества мурен после выполнения данной операции.

Примечание

В третьем примере после выполнения всех операций множество мурен выглядит как \(\{1, 1, 4\}\). Для такого множества мурен существует несколько возможных вариантов развития событий, если их всех поместить в один аквариум:

  • Мурена веса 4 съедает мурену веса 1, а затем вторую мурену веса 1. В этом случае ни одно из сражений не является опасным.
  • Мурена веса 1 съедает мурену веса 1, и это сражение является опасным. Теперь в аквариуме плавают две мурены: веса 4 и веса 2. Большая их них из них съедает меньшую, и это сражение также является опасным. В этом случае общее число опасных сражений будет равно 2.

Таким образом, опасность данного множества мурен равна 2.

F. Печеньки

Бинарный поиск Деревья дп игры поиск в глубину и подобное Структуры данных *2400

Митя и Вася играют в интересную игру. У них есть подвешенное дерево из \(n\) вершин, пронумерованных числами от \(1\) до \(n\). В этом дереве вершина \(1\) является корнем, а родителем вершины \(i \ge 2\) является вершина \(p_i\) (при этом будем говорить, что вершина \(i\) — ребенок вершины \(p_i\)).

В каждой вершине дерева находятся печеньки, в вершине \(i\) находится \(x_i\) печенек. Чтобы съесть одну печеньку в вершине \(i\), нужно потратить \(t_i\) единиц времени. Также в игре есть одна фишка. Изначально она находится в корне дерева. Чтобы переместить фишку по ребру, соединяющему вершину \(i\) с ее родителем, нужно потратить \(l_i\) единиц времени.

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

На любом своем ходу Митя может закончить игру. После этого он двигает фишку вверх до корня, по пути съедая какие-то печеньки. Митя может потратить суммарно на спуск, подъем и поедание печенек не более \(T\) единиц времени. Обратите внимание, что в конце игры фишка всегда оказывается в корне: Митя не может оставить фишку ни в какой промежуточной вершине, даже если требуемое число печенек уже было съедено — он обязан переместить фишку в корень (и на каждое перемещение фишки по ребру из вершины \(v\) в ее предка он тратит \(l_v\) единиц времени).

Какое максимальное количество печенек Митя может съесть, независимо от действий Васи?

Входные данные

В первой строке находятся два числа \(n\), \(T\) — количество вершин в дереве и время, которое у него есть на это (\(2\le n \le 10^5\); \(1\le T\le10^{18}\)).

Во второй строке находятся \(n\) чисел \(x_1\), \(x_2\), ..., \(x_n\) — число печенек в каждой вершине (\(1\le x_i\le10^6\)). В третьей строке находятся \(n\) чисел \(t_1\), \(t_2\), ..., \(t_n\) — время, которое требуется, чтобы съесть одну печеньку в \(i\)-й вершине (\(1\le t_i\le10^6\)).

Далее следует \(n - 1\) строка, которые описывают дерево. Для каждого \(i\) от \(2\) до \(n\) в отдельной строке записаны два числа \(p_i\) и \(l_i\), где \(p_i\) — родитель вершины \(i\), а \(l_i\) — время, которое требуется Мите для перемещения фишки вдоль ребра из вершины \(i\) в ее родителя (\(1\le p_i < i\), \(0\le l_i \le 10^9\)).

Выходные данные

Выведите одно целое число — максимальное число печенек, которое может съесть Митя.

Примечание

В первом примере Митя может первым ходом переместить фишку в вершину \(2\). В этом случае, как бы после этого не играл Вася, Митя сможет съесть не менее \(11\) печенек. Ниже приведен пример того, как могла происходить игра:

  1. Митя перемещает фишку в вершину \(2\).
  2. Вася отрезает ребро, ведущее в вершину \(4\).
  3. Митя перемещает фишку в вершину \(5\).
  4. Так как у вершины \(5\) нет детей, Вася не отрезает ничего.
  5. Митя заканчивает игру и поднимается наверх, по пути собирая печеньки (\(7\) в вершине \(5\), \(3\) в вершине \(2\), \(1\) в вершине \(1\)).

Митя тратит \(1+0\) времени на движение вниз, \(0+1\) на движение вверх, \(7\cdot 2\) чтобы съесть \(7\) печенек в вершине 5, \(3\cdot 3\) чтобы съесть \(3\) печеньки в вершине 2, \(1\cdot 1\) чтобы съесть \(1\) печеньку в вершине 1. Суммарное время равно \(1+0+0+1+7\cdot 2+3\cdot 3+1\cdot 1=26\).

B. Сборка контеста

реализация Структуры данных *1300

Аркадий координирует раунды на некой малоизвестной платформе по спортивному программированию. В каждом раунде дается \(n\) задач различной сложности, сложности задач пронумерованы от \(1\) до \(n\).

Для того, чтобы провести раунд, Аркадию нужны \(n\) новых (ранее не использованных) задач, по одной задаче каждой сложности. Пока что Аркадий придумывает все задачи сам, но, к сожалению, он не может придумать задачу конкретной сложности. Вместо этого он всегда придумывает некоторую новую задачу, оценивает ее сложность от \(1\) до \(n\) и записывает в банк задач.

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

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

Входные данные

В первой строке находятся два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^5\)) — количество различных сложностей задач и количество задач, придуманных Аркадием, соответственно.

Во второй строке находятся \(m\) целых чисел \(a_1, a_2, \ldots, a_m\) (\(1 \le a_i \le n\)) — сложности задач в порядке их придумывания.

Выходные данные

Выведите строку из \(m\) цифр. \(i\)-я цифра должна быть равна \(1\), если после \(i\)-й придуманной задачи Аркадий провел раунд, и \(0\) в противном случае.

Примечание

В первом тесте из примера Аркадий проведет раунд сначала сразу после первых трех задач, так как они различной сложности, а потом — лишь после последней придуманной задачи.

F. Ваня и бургеры

жадные алгоритмы математика разделяй и властвуй Структуры данных *2500

Ваня очень любит бургеры, а так же очень любит тратить деньги. На улице, где живет Ваня, находится \(n\) бургерных.

У Вани есть \(q\) друзей, \(i\)-й друг предложил Ване встретиться у бургерной с номером \(l_i\) и прогуляться до бургерной \(r_i\) \((l_i \leq r_i)\). Во время прогулки с \(i\)-м другом Ваня может зайти во все бургерные с номерами \(x\) такими, что \(l_i \leq x \leq r_i\).

Для каждой бургерной Ваня знает стоимость самого дорогого бургера \(c_i\) бурлей. Ваня хочет зайти в какое-то подмножество бургерных по пути, взять в каждой из них самый дорогой бургер и потратить как можно больше денег. Но есть небольшая проблема: карта Вани сломалась, и вместо того, чтобы снимать деньги после покупки, количество денег на карте меняется следующим образом.

Пусть до покупки у Вани было \(d\) бурлей и Ваня потратил \(c\) бурлей в бургерной, тогда после этих действий у Вани на счете останется \(d \oplus c\) бурлей, где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Сейчас на счету Вани \(2^{2^{100}} - 1\) бурлей и он уже собирается на прогулку. Помогите Ване узнать, какое максимальное количество денег он сможет потратить, если пойдет гулять с другом под номером \(i\). Количество бурлей, потраченных Ваней, определяется как разность между начальным количеством бурлей на счете Вани и конечным количеством бурлей на его счете.

Входные данные

В первой строке находится одно целое число \(n\) (\(1 \leq n \leq 500\,000\)) — количество бургерных.

В следующей строке содержится \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(0 \leq c_i \leq 10^6\)), где \(c_i\) — стоимость самого дорого бургера в бургерной под номером \(i\).

В третьей строке находится одно целое число \(q\) (\(1 \leq q \leq 500\,000\)) — количество друзей Вани.

В каждой из следующих \(q\) строк находятся два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i \leq r_i \leq n\)) — пара номеров бургерных, между которыми совершается прогулка.

Выходные данные

Выведите \(q\) строк, в \(i\)-й строке выведите максимальное количество денег, которое Ваня может потратить вместе с другом под номером \(i\).

Примечание

В первом тесте для того, чтобы потратить максимальное количество денег с первым и третьим другом, Ване достаточно зайти в первую бургерную. Со вторым другом Ване достаточно зайти в третью бургерную. Во втором тесте для третьего друга (который собирается прогуляться от первой до третьей бургерной) всего есть 8 вариантов потратить деньги — \(0\), \(12\), \(14\), \(23\), \(12 \oplus 14 = 2\), \(14 \oplus 23 = 25\), \(12 \oplus 23 = 27\), \(12 \oplus 14 \oplus 23 = 20\). Максимальное количество денег получается потратить, если зайти в первую и третью бургерную — \(12 \oplus 23 = 27\).

D. Подсчёт GCD

Деревья дп поиск в глубину и подобное Структуры данных теория чисел *2000

Дано дерево из \(n\) вершин. На каждой вершине дерева записано число; на \(i\)-й вершине записано число \(a_i\).

Определим функцию \(g(x, y)\) как наибольший общий делитель всех чисел, записанных на вершинах на простом пути от вершины \(x\) до вершины \(y\) (включая эти две вершины). Также определим \(dist(x, y)\) как количество вершин на простом пути между \(x\) и \(y\), включая концы пути. \(dist(x, x) = 1\) для каждой вершины \(x\).

Посчитайте максимальное значение \(dist(x, y)\) по всем таким парам вершин, что \(g(x, y) > 1\).

Входные данные

В первой строке задано целое число \(n\) \((1 \le n \le 2 \cdot 10^5)\) — количество вершин.

Во второй строке задано \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) \((1 \le a_i \le 2 \cdot 10^5)\) — числа, записанные на вершинах дерева.

Затем следует \(n - 1\) строка, каждая из которых содержит два числа \(x\) и \(y\) \((1 \le x, y \le n, x \ne y)\), обозначающие ребро между вершиной \(x\) и вершиной \(y\). Гарантируется, что эти ребра задают дерево.

Выходные данные

Если не существует такой пары вершин \(x, y\), что \(g(x, y) > 1\), выведите \(0\). Иначе выведите максимальное значение \(dist(x, y)\) по всем таким парам.

B. Игра со строкой

математика реализация Структуры данных *1200

Два игрока играют в игру на строке \(s\), состоящей из строчных латинских букв.

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

Например, если текущая строка равна «xaax», то возможен только один ход, удалить «aa», тем самым превратив строку в «xx».

Проигрывает тот, кто не может сделать ход.

Ваша задача — узнать, кто выиграет, при правильной игре обоих игроков.

Входные данные

В первой строке входного файла записана строка \(s\), состоящая из строчных латинских букв (\(1 \leq |s| \leq 100\,000\)), где \(|s|\) обозначает длину строки \(s\).

Выходные данные

Если победит игрок, который ходит первым, выведите «Yes». В противном случае, выведите «No».

Примечание

В первом тестовом примере нельзя сделать ни одного хода, поэтому первый проигрывает.

Во втором примере первый сделает ход, превратив строку в «q», а затем второй не сможет сделать ход, таким образом, первый выигрывает.

B. Лунный новый год и заказ еды

реализация Структуры данных *1500

Приближается лунный новый год, поэтому Боб хочет поужинать в знаменитом ресторане «У Алисы».

В ресторане «У Алисы» можно заказать \(n\) типов блюд. Цена одного блюда \(i\)-го типа всегда равна \(c_i\). Изначально в ресторане достаточно ингредиентов для подачи ровно \(a_i\) блюд \(i\)-го типа. В канун лунного нового года \(m\) посетителей зайдут в ресторан один за другим, при этом \(j\)-й клиент закажет \(d_j\) блюд \(t_j\)-го типа. \((i + 1)\)-й посетитель придет лишь после того, как \(i\)-й посетитель будет полностью обслужен.

Предположим, в некоторый момент времени осталось ровно \(r_i\) блюд \(i\)-го типа (изначально \(r_i = a_i\)). Когда посетитель закажет \(1\) блюдо \(i\)-го типа, будет выполнен следующий алгоритм.

  1. Если \(r_i > 0\), то посетителю подадут \(1\) блюдо \(i\)-го типа. Стоимость этого блюда будет равна \(c_i\). В то же время \(r_i\) уменьшится на \(1\).
  2. Иначе посетителю подадут \(1\) самое дешевое блюдо из тех, что еще остались, если, конечно, такие еще есть. Если есть несколько доступных самых дешевых типов, подадут блюдо, тип которого имеет наименьший номер. Стоимость будет равна стоимости поданного блюда, а его остаток будет уменьшен на \(1\).
  3. Если не осталось вообще никаких блюд, то посетитель уйдет недовольным и ничего не заплатит. Независимо от того, сколько блюд ему подали до этого, счет посетителя равен \(0\).

Если посетитель не уйдет до того, как ему подали все \(d_j\) блюд, то его общий счет будет равен суммарной стоимости всех поданных \(d_j\) блюд.

Определите счет для каждого из \(m\) посетителей.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 10^5\)) — число различных типов блюд и число посетителей, соответственно.

Вторая строка содержит \(n\) положительных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^7\)), где \(a_i\) обозначает начальный остаток \(i\)-го типа блюд.

Третья строка содержит \(n\) положительных целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \leq c_i \leq 10^6\)), где \(c_i\) обозначает стоимость одного блюда \(i\)-го типа.

Следующие \(m\) строк описывают заказы \(m\) посетителей. \(j\)-я из этих строк содержит два целых положительных числа \(t_j\) и \(d_j\) (\(1 \leq t_j \leq n\), \(1 \leq d_j \leq 10^7\)), обозначающие тип и количество блюд, заказанных \(j\)-м посетителем, соответственно.

Выходные данные

Выведите \(m\) строк. В \(j\)-й строке выведите счет \(j\)-го посетителя.

Примечание

В первом примере \(5\) посетителей будут обслужены следующим образом.

  1. Посетителю \(1\) подадут \(6\) блюд \(2\)-го типа, \(1\) блюдо \(4\)-го типа и \(1\) блюдо \(6\)-го типа. Счет равен \(6 \cdot 3 + 1 \cdot 2 + 1 \cdot 2 = 22\). Остатки всех \(8\) типов блюд будут равны \(\{8, 0, 2, 0, 4, 4, 7, 5\}\).
  2. Посетителю \(2\) подадут \(4\) блюд \(1\)-го типа. Счет равен \(4 \cdot 6 = 24\). Остатки будут равны \(\{4, 0, 2, 0, 4, 4, 7, 5\}\).
  3. Посетителю \(3\) подадут \(4\) блюд \(6\)-го типа, \(3\) блюда \(8\)-го типа. Остатки будут равны \(4 \cdot 2 + 3 \cdot 2 = 14\). The remain will be \(\{4, 0, 2, 0, 4, 0, 7, 2\}\).
  4. Посетителю \(4\) подадут \(2\) блюда \(3\)-го типа, \(2\) блюда \(8\)-го типа. Остатки будут равны \(2 \cdot 3 + 2 \cdot 2 = 10\). The remain will be \(\{4, 0, 0, 0, 4, 0, 7, 0\}\).
  5. Посетителю \(5\) подадут \(7\) блюд \(7\)-го типа, \(3\) блюда \(1\)-го типа. Остатки будут равны \(7 \cdot 3 + 3 \cdot 6 = 39\). The remain will be \(\{1, 0, 0, 0, 4, 0, 0, 0\}\).

Во втором примере каждый клиент получит то, что он заказал, кроме последнего, который уйдет, не заплатив. Так, второй посетитель получит \(6\) блюд второго типа, суммарная цена составит \(66 \cdot 6 = 396\).

В третьем примере не все посетители получат то, что они закажут. Так, второй посетитель получит \(6\) блюд второго типа, \(6\) блюд третьего типа и \(1\) блюдо четвертого типа, счет составит \(66 \cdot 6 + 666 \cdot 6 + 6666 \cdot 1 = 11058\).

D. Лунный новый год и прогулка

графы жадные алгоритмы кратчайшие пути поиск в глубину и подобное Структуры данных *1500

Приближается лунный новый год, а Боб решил отправиться на прогулку в ближайший парк.

Парк может быть представлен как связный граф из \(n\) вершин и \(m\) неориентированных ребер. Изначально Боб находился в вершине \(1\) и записал \(1\) в свою записную книжку. Он может переходить из одной вершины в другую по данным ребрам. Каждый раз, когда он посещает вершину, еще не записанную в его книжку, он записывает ее. После того, как он посетит все вершины как минимум по разу, он закончит прогулку, а в его книжке будет записана перестановка вершин \(a_1, a_2, \ldots, a_n\).

Гулять скучно, а решать задачи — интересно. Боб хочет узнать лексикографически минимальную перестановку, которую он может получить по итогам прогулки. Бобу эта задача кажется простой, поэтому он отдал ее вам.

Последовательность \(x\) лексикографически меньше последовательности \(y\), если и только если выполняется один из следующих пунктов:

  • \(x\) — префикс \(y\), но \(x \ne y\) (обратите внимание, в этой задаче такое невозможно, так как все рассматриваемые последовательности имеют одинаковую длину);
  • в первой позиции, где \(x\) и \(y\) различны, в последовательности \(x\) элемент меньше, чем соответствующий элемент в \(y\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 10^5\)) — числе вершин и ребер в графе, соответственно.

Следующие \(m\) строк описывают неориентированные ребра графа. \(i\)-я из этих строк содержит два целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\)) — вершины, соединенные \(i\)-м ребром.

Обратите внимание, что в графе могут быть кратные ребра и петли. Гарантируется, что граф связный.

Выходные данные

Выведите лексикографически наименьшую последовательность \(a_1, a_2, \ldots, a_n\) из тех, которые может записать Боб.

Примечание

В первом примере одним из возможных путей Боба является путь \(1 \rightarrow 2 \rightarrow 1 \rightarrow 3\). Боб в этом случае запишет последовательность \(\{1, 2, 3\}\), которая является лексикографически наименьшей.

Во втором примере Боб может пойти по пути \(1 \rightarrow 4 \rightarrow 3 \rightarrow 2 \rightarrow 3 \rightarrow 4 \rightarrow 1 \rightarrow 5\). Тогда он запишет последовательность \(\{1, 4, 3, 2, 5\}\), которая является лексикографически наименьшей.

E. Лунный новый год и красные конверты

дп Структуры данных *2100

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

Опишем задачу математически. Рассмотрим ось времени с момента \(1\) до момента \(n\). \(i\)-й красный конверт будет доступен с момента времени \(s_i\) до \(t_i\) включительно, он будет содержать \(w_i\) монет. Если Боб хочет забрать из \(i\)-го конверта монеты, то он может это сделать только в целочисленный момент времени между \(s_i\) и \(t_i\) включительно, а после этого он не сможет собирать монеты из других конвертов до времени \(d_i\) включительно. Выполняется \(s_i \leq t_i \leq d_i\).

Боб жадный, поэтому он жадно собирает монеты: в каждый момент времени \(x\) он собирает монеты из доступного конверта с максимальным количеством монет. Если есть несколько доступных конвертов с одинаковым максимальным количеством монет, Боб выберет конверт, параметр \(d\) которого максимальный. Если все еще есть несколько вариантов, Боб выберет один из них случайным образом.

Все было бы хорошо, но Алиса — дочь Боба — не хочет, чтобы ее отец собрал слишком много монет. Она может отвлечь Боба не более чем \(m\) раз, каждый раз — в один целочисленный момент времени. Если Алиса решает отвлечь Боба в момент времени \(x\), он не сможет ничего делать в момент времени \(x\) и продолжит свою обычную стратегию в момент времени \(x + 1\) (включительно), что приведет к тому, что он может пропустить некоторые красные конверты.

Вычислите минимально возможное число монет, которое соберет Боб, если Алиса будет отвлекать его оптимально.

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \leq n \leq 10^5\), \(0 \leq m \leq 200\), \(1 \leq k \leq 10^5\)) — длину оси времени, количество раз, которое Алиса может отвлечь Боба, и число красных конвертов, соответственно.

Следующие \(k\) строк описывают \(k\) красных конвертов. \(i\)-я строка содержит четыре целых числа \(s_i\), \(t_i\), \(d_i\) и \(w_i\) (\(1 \leq s_i \leq t_i \leq d_i \leq n\), \(1 \leq w_i \leq 10^9\)) — отрезок времени, когда доступен \(i\)-й конверт, время, начиная с которого Боб может продолжить собирать деньги после того, как он соберет конверты из \(i\)-го конверта, и количество монет в этом конверте, соответственно.

Выходные данные

Выведите одно целое число — минимальное число монет, которое соберет Боб, если Алиса будет отвлекать его оптимальным образом.

Примечание

В первом примере Алиса не может отвлекать Боба. Поэтому Боб соберет монеты в красных конвертах в моменты времени \(1\) и \(5\), и в итоге соберет \(13\) монет.

Во втором примере Алиса должна отвлечь Боба в момент времени \(1\). Тогда Боб пропустит первый конверт, соберет второй и после этого ничего не будет делать. Ответ будет равен \(2\).

G. Вася и максимальный заработок

Бинарный поиск дп Конструктив снм Структуры данных *2400

Вася сильно устал от кредитов (из задачи F) и теперь хочет заработать деньги сам! Для этого он решил подготовить контест.

Васе предложено \(n\) задач. Они пронумерованы от \(1\) до \(n\). Сложность \(i\)-й задачи равна \(d_i\). Кроме того, задачи заданы в возрастающем относительно сложности порядке. Сложности всех задач различны. Для того чтобы добавить \(i\)-ю задачу в контест Васе нужно заплатить \(c_i\) бурлей автору. За каждую задачу в своем контесте Вася получит \(a\) бурлей.

Для того чтобы создать контест нужно выбрать непрерывный подотрезок задач.

Суммарный заработок за контест считается следующим образом:

  • если Вася берет задачу \(i\) в контест, ему нужно заплатить \(c_i\) её автору;
  • за каждую добавленную задачу Вася получает \(a\) бурлей;
  • пусть \(gap(l, r) = \max\limits_{l \le i < r} (d_{i + 1} - d_i)^2\). Если Вася берет в контест все задачи с индексом от \(l\) до \(r\), он так же платит \(gap(l, r)\). Если \(l = r\) то \(gap(l, r) = 0\).

Посчитайте максимальный Васин заработок, если он подготовит непрерывный подотрезок задач.

Входные данные

Первая строка содержит \(n\) и\(a\) (\(1 \le n \le 3 \cdot 10^5\), \(1 \le a \le 10^9\)) — количество предложенных задач и количество бурлей, которое Вася получает за одну задачу соответственно. В каждой из следующих \(n\) строк содержится два числа \(d_i\) и \(c_i\) (\(1 \le d_i, c_i \le 10^9, d_i < d_{i+1}\)).

Выходные данные

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

E2. Массив и отрезки (сложная версия)

реализация Структуры данных *2100

Единственное отличие между легкой и сложной версиями — количество элементов в массиве.

Задан массив \(a\), состоящий из \(n\) целых чисел. Значение \(i\)-го элемента массива равно \(a_i\).

Также задан набор из \(m\) отрезков. \(j\)-й отрезок равен \([l_j; r_j]\), где \(1 \le l_j \le r_j \le n\).

Вы можете выбрать какое-то подмножество заданного множества отрезков и уменьшить значения элементов на каждом из выбранных отрезков на единицу (независимо). Например, если изначальный массив \(a = [0, 0, 0, 0, 0]\), а заданные отрезки — \([1; 3]\) и \([2; 4]\), то вы можете выбрать оба из них и массив станет равен \(b = [-1, -2, -2, -1, 0]\).

Вам необходимо выбрать какое-то подмножество заданного множества отрезков (каждый отрезок может быть выбран не более одного раза) таким образом, что если вы примените этот набор отрезков к массиву \(a\) и получите массив \(b\), то значение \(\max\limits_{i=1}^{n}b_i - \min\limits_{i=1}^{n}b_i\) будет максимально возможным.

Заметим, что вы можете выбрать пустое множество.

Если существует несколько возможных ответов, выведите любой.

Если вы программируете на Python, рассмотрите возможность отправки решения на PyPy, а не на Python, когда будете отправлять свой код.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 10^5, 0 \le m \le 300\)) — длина массива \(a\) и количество отрезков, соответственно.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^6 \le a_i \le 10^6\)), где \(a_i\) — значение \(i\)-го элемента массива \(a\).

Следующие \(m\) строк содержат по два целых числа. \(j\)-я из них содержит два целых числа \(l_j\) и \(r_j\) (\(1 \le l_j \le r_j \le n\)), где \(l_j\) и \(r_j\) — концы \(j\)-го отрезка.

Выходные данные

В первой строке выходных данных выведите одно целое число \(d\)максимально возможное значение \(\max\limits_{i=1}^{n}b_i - \min\limits_{i=1}^{n}b_i\), если \(b\) — это массив, полученный применением некоторого поднабора заданных отрезков к массиву \(a\).

Во второй строке выходных данных выведите одно целое число \(q\) (\(0 \le q \le m\)) — количество отрезков, которые вы собираетесь применить.

В третьей строке выведите \(q\) различных целых чисел \(c_1, c_2, \dots, c_q\) в любом порядке (\(1 \le c_k \le m\)) — номера отрезков, которые вы собираетесь применить к массиву \(a\), чтобы значение \(\max\limits_{i=1}^{n}b_i - \min\limits_{i=1}^{n}b_i\) полученного массива \(b\) было максимально возможным.

Если существует несколько возможных ответов, выведите любой.

Примечание

В первом тестовом примере полученный массив \(b\) будет равен \([0, -4, 1, 1, 2]\), таким образом ответ равен \(6\).

Во втором тестовом примере полученный массив \(b\) будет равен \([2, -3, 1, -1, 4]\), таким образом ответ равен \(7\).

В третьем тестовом примере вы не можете ничего сделать, таким образом ответ равен \(0\).

C. Саша и терпеливый друг

Бинарный поиск реализация Структуры данных *2800

Федя — друг Саши, поэтому Саша знает о Феде всё.

Федя хранит своё терпение в бесконечно большой чаше. Терпение Феди, в отличие от чаши, не бесконечно, поэтому обозначим за \(v\) — количество литров терпения в чаше Феди и, как только \(v\) станет равно \(0\), чаша сразу же лопнет. В чаше существует один кран, который закачивает по \(s\) литров терпения за одну секунду. Заметим, что \(s\) может быть отрицательным, в этом случае кран откачивает терпение из чаши. Саша может делать разные вещи, поэтому ему посильно изменять пропускную способность крана. Все действия Саши можно представить в виде \(q\) запросов. Запросы бывают трёх типов:

  1. «1 t s» — добавить новое событие, которое означает, что начиная с секунды \(t\), пропускная способность крана станет равна \(s\).
  2. «2 t» — удалить событие, которое происходит в секунду \(t\). Гарантируется, что оно существует.
  3. «3 l r v» — Саше интересно, если взять все ещё не удалённые события, для которых верно \(l \le t \le r\), а затем промоделировать изменение терпения Феди с начала секунды \(l\) до начала секунды \(r\) включительно (начальный объем терпения, в начале секунды \(l\), равен \(v\) литров), то в какой момент времени чаша лопнет. Если чаша никогда не лопнет, ответом на запрос будет одно целое число \(-1\).

Так как Саша не хочет проверять, что случится, когда терпение Феди закончится, а запросы он уже придумал, то он попросил вас помочь ему и для каждого запроса \(3\)-го типа найти ответ.

Гарантируется, что никогда не будет одновременно существовать два события, происходящих в одну и ту же секунду.

Входные данные

Первая строка содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов.

Каждая из последующих \(q\) строк имеет один из форматов:

  • 1 t s (\(1 \le t \le 10^9\), \(-10^9 \le s \le 10^9\)), означающий, что добавляется новое событие, которое означает что начиная с секунды \(t\) пропускная способность крана станет равна \(s\).
  • 2 t (\(1 \le t \le 10^9\)), означающий, что нужно удалить событие, происходящее в момент времени \(t\). Гарантируется, что среди ещё не удалённых такое существует.
  • 3 l r v (\(1 \le l \le r \le 10^9\), \(0 \le v \le 10^9\)), означающий, что нужно промоделировать процесс с момента начала секунды \(l\) до начала секунды \(r\) и сказать когда чаша лопнет.

Гарантируется что \(t\), \(s\), \(l\), \(r\), \(v\) во всех запросах — целые числа.

Гарантируется, что есть хотя бы один запрос \(3\)-го типа, а также не может быть запроса \(1\)-го типа с таким \(t\), что существует событие с аналогичным значением \(t\) и оно ещё не удалено.

Выходные данные

Для каждого запроса \(3\)-го типа в отдельной строке выведите момент времени, когда чаша лопнет или \(-1\), если такого не случится.

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

Примечание

В первом примере все события попадают во все запросы \(3\)-го типа, а их моделирование выглядит следующим образом:

E. Саша и очень лёгкий тест

Структуры данных теория чисел *2700

Егор очень любит математику, и недавно он получил высшую степень признания в математических кругах — Егор стал красным математиком. По такому поводу Саша решил поздравить Егора и подарить ему математический тест. В тесте содержался массив \(a\) длины \(n\) из целых чисел и ровно \(q\) запросов. Запросы бывают трёх типов:

  1. «1 l r x» — увеличить все числа на отрезке от \(l\) до \(r\) в \(x\) раз.
  2. «2 p x» — уменьшить число в позиции \(p\) в \(x\) раз (делимость гарантирована).
  3. «3 l r» — найти сумму на отрезке от \(l\) до \(r\).

Так как сумма может быть очень большой, то Саша попросил Егора вычислить лишь её остаток от деления на число \(mod\).

Так как Егор теперь красный математик, ему больше некогда решать столь простые задачи, поэтому, чтобы не обидеть Сашу, он попросил вас помочь ему и найти ответы на все запросы \(3\)-го типа.

Входные данные

Первая строка содержит два целых числа \(n\) и \(mod\) (\(1 \le n \le 10^5\), \(2 \le mod \le 10^9 + 9\)) — размер массива и число \(mod\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^5\)) — сам массив.

Третья строка содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов.

Каждая из последующих \(q\) строк имеет один из форматов:

  • 1 l r x (\(1 \le l \le r \le n\), \(1 \le x \le 10^5\)), означающий, что нужно увеличить все числа на отрезке от \(l\) до \(r\) в \(x\) раз.
  • 2 p x (\(1 \le p \le n\), \(1 \le x \le 10^5\)), означающий, что нужно уменьшить число в позиции \(p\) в \(x\) раз (делимость гарантирована).
  • 3 l r (\(1 \le l \le r \le n\)), означающий, что нужно найти сумму на отрезке от \(l\) до \(r\).

Гарантируется, что существует хотя бы один запрос \(3\)-го типа.

Выходные данные

Для каждого запроса \(3\)-го типа в отдельной строке выведите ответ на запрос по модулю \(mod\).

Примечание

Первый пример:

Изначальный массив — \([4, 1, 2, 3, 5]\)

  • В первом запросе нужно посчитать сумму на всём массиве, она равна \((4 + 1 + 2 + 3 + 5) \bmod 100 = 15 \bmod 100 = 15\)
  • Во втором запросе нужно умножить числа на позициях от \(2\)-й до \(3\)-й на \(6\). Полученный массив будет равен \([4, 6, 12, 3, 5]\)
  • В третьем запросе нужно посчитать сумму от \(1\)-го до \(2\)-го элемента, она равна \((4 + 6) \bmod 100 = 10 \bmod 100 = 10\)
  • В четвёртом запросе нужно умножить числа на позициях от \(1\)-й до \(5\)-й на \(1\). Умножение на \(1\) массив не изменяет.
  • В пятом запросе нужно найти сумму от \(2\)-го до \(4\)-го элемента, она равна \((6 + 12 + 3) \bmod 100 = 21 \bmod 100 = 21\)

Второй пример:

Изначальный массив — \([4, 1, 2, 3, 5]\)

  • В первом запросе нужно посчитать сумму на всём массиве, она равна \((4 + 1 + 2 + 3 + 5) \bmod 2 = 15 \bmod 2 = 1\)
  • Во втором запросе нужно умножить числа на позициях от \(2\)-й до \(3\)-й на \(6\). Полученный массив будет равен \([4, 6, 12, 3, 5]\)
  • В третьем запросе нужно посчитать сумму от \(1\)-го до \(2\)-го элемента, она равна \((4 + 6) \bmod 2 = 10 \bmod 2 = 0\)
  • В четвёртом запросе нужно умножить числа на позициях от \(1\)-й до \(5\)-й на \(1\). Умножение на \(1\) массив не изменяет.
  • В пятом запросе нужно найти сумму от \(2\)-го до \(4\)-го элемента, она равна \((6 + 12 + 3) \bmod 2 = 21 \bmod 2 = 1\)
  • В шестом запросе нужно разделить число в позиции \(3\) на \(4\). \(\frac{12}{4}=3\), следовательно, массив станет равным \([4, 6, 3, 3, 5]\).
  • В седьмом запросе нужно найти сумму от \(3\)-го до \(4\)-го элемента, она равна \((3 + 3) \bmod 2 = 6 \bmod 2 = 0\)

F. Саша и алгоритм звуков тишины

Деревья Структуры данных *3200

Однажды Саша решил, как обычно, прогуляться по парку. Придя в парк он обнаружил, что его любимая скамейка уже занята, и ему пришлось присесть на соседнюю. Саша сел и начал вслушиваться в тишину. Тут ему в голову пришла мысль: а что если в разных частях парка тишина звучит по-разному? Так и оказалось. Разделим парк на квадраты размера \(1 \times 1\) метр и назовем их клетками, пронумеруем строки от \(1\) до \(n\) сверху вниз, а столбцы от \(1\) до \(m\) слева направо. Теперь любую клетку можно описать парой чисел \((x, y)\), где \(x\) — номер строки, а \(y\) — номер столбца, в котором расположена эта клетка. Опытным путём Саша выяснил, что в клетке \((i, j)\) громкость тишины равна \(f_{i,j}\), а также все \(f_{i,j}\) образуют перестановку чисел от \(1\) до \(n \cdot m\). Саша решил посчитать, а сколько существует приятных отрезков тишины?

Возьмем какой-то отрезок \([l \ldots r]\). Обозначим за \(S\) множество клеток \((i, j)\), что \(l \le f_{i,j} \le r\). Тогда отрезок тишины \([l \ldots r]\) является приятным, если существует только один простой путь между каждой парой клеток из \(S\) (путь не может содержать клетки, которые не содержатся в \(S\)). Другими словами, множество \(S\) должно выглядеть на плоскости как дерево. Саша справился с этим заданием очень быстро и назвал алгоритм — «алгоритмом звуков тишины».

Время шло, и от алгоритма осталась только легенда. Чтобы доказать правдивость истории, вам предстоит помочь Саше и посчитать количество различных приятных отрезков тишины. Два отрезка \([l_1 \ldots r_1]\), \([l_2 \ldots r_2]\) считаются различными, если \(l_1 \neq l_2\) или \(r_1 \neq r_2\) или и то, и то одновременно.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 1000\), \(1 \le n \cdot m \le 2 \cdot 10^5\)) — размеры парка.

Каждая из следующих \(n\) строк содержит по \(m\) целых чисел \(f_{i,j}\) (\(1 \le f_{i,j} \le n \cdot m\)) — громкость тишины в клетке \((i, j)\).

Гарантируется, что все \(f_{i,j}\) различны.

Выходные данные

Выведите одно число — количество приятных отрезков тишины.

Примечание

В первом примере все отрезки тишины приятные.

Во втором примере приятными являются следующие отрезки тишины:

B. Петя и делители

Бинарный поиск Структуры данных теория чисел *1900

Маленький Петя любит искать делители у чисел. Однажды Петя столкнулся со следующей задачей.

Дано n запросов вида «xi yi». Для каждого запроса Пете нужно посчитать, сколько существует делителей числа xi, которые не делят ни одно из чисел xi - yi, xi - yi + 1, ..., xi - 1. Помогите ему.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105). В каждой из последующих n строк через пробел записано по два целых числа xi и yi (1 ≤ xi ≤ 105, 0 ≤ yi ≤ i - 1, где i — порядковый номер запроса, нумерация начинается с 1).

Ответом на запрос, для которого yi = 0, является количество делителей числа xi, при этом предыдущие числа x учитывать не следует.

Выходные данные

Для каждого запроса выведите ответ в отдельной строке: количество таких положительных целых чисел k, что

Примечание

Выпишем делители, которые дают ответ для первых 5 запросов:

1) 1, 2, 4

2) 3

3) 5

4) 2, 6

5) 9, 18

F. Ближайший лист

Деревья Структуры данных *2600

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


next_id = 1
id = массив длины n, заполненный -1
visited = массив длины n, заполненный false

function dfs(v):
visited[v] = true
id[v] = next_id
next_id += 1
for to по соседям v в порядке возрастания:
if not visited[to]:
dfs(to)

Дано взвешенное дерево, вершины которого пронумеровали в порядке эйлерова обхода целыми числами от \(1\) до \(n\) при помощи алгоритма, описанного выше.

Назовём листом вершину дерева, соединённую ребром ровно с одной другой вершиной. В данном вам дереве вершина \(1\) не является листом. Расстоянием между двумя вершинами дерева назовём сумму весов рёбер на единственном простом пути между ними.

Требуется ответить на \(q\) запросов следующего вида: по заданным числам \(v\), \(l\) и \(r\) сообщить кратчайшее расстояние от вершины \(v\) до одного из листов дерева, имеющего номер от \(l\) до \(r\) (включительно).

Входные данные

В первой строке даны два целых числа \(n\) и \(q\) (\(3 \leq n \leq 500\,000, 1 \leq q \leq 500\,000\)) — количество вершин в дереве и количество запросов соответственно.

Следующие \(n - 1\) строк задают рёбра дерева: \((i - 1)\)-я строка содержит два целых числа \(p_i\) и \(w_i\) (\(1 \leq p_i < i, 1 \leq w_i \leq 10^9\)), обозначающие ребро между вершинами \(p_i\) и \(i\) с весом \(w_i\).

Гарантируется, что заданные рёбра задают дерево, вершины которого пронумерованы в порядке эйлерова обхода, и что вершина с номером \(1\) не является листом.

Следующие \(q\) строк содержат описания запросов. Каждая из них содержит три целых числа \(v_i\), \(l_i\), \(r_i\) (\(1 \leq v_i \leq n, 1 \leq l_i \leq r_i \leq n\)), обозначающие параметры запроса, описанные в условии. Гарантируется, что существует хотя бы один лист с номером \(x\) такой, что \(l_i \leq x \leq r_i\).

Выходные данные

Выведите \(q\) чисел — ответы на запросы в порядке, в котором они заданы во входных данных.

Примечание

В первом примере дерево выглядит так:

В первом запросе ближайший к вершине \(1\) лист имеет номер \(4\). Расстояние до него равно \(3\). Во втором запросе ближайшим к вершине \(5\) листом является вершина с номером \(5\), расстояние до которой равно \(0\). В третьем примере ближайшим к вершине \(4\) листом является вершина с номером \(4\), однако она не попадает в отрезок вершин \([1, 2]\) запроса. Единственным листом с номером, попадающим в отрезок \([1, 2]\) является вершина с номером \(2\), расстояние до которой от вершины \(4\) равно \(13\).

E. Дерево

графы Деревья дп поиск в глубину и подобное Структуры данных *2500

Дано дерево из \(n\) вершин и \(q\) запросов.

Каждый запрос начинается с трех целых чисел \(k\), \(m\) и \(r\), и продолжается \(k\) вершинами дерева \(a_1, a_2, \ldots, a_k\). Чтобы ответить на запрос, предположите, что дерево подвешено за вершину \(r\). Рассмотрим разбиения данных \(k\) вершин на не более чем \(m\) групп так, что выполняются следующие условия:

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

Выведите количество различных таких разбиений по модулю \(10^{9}+7\) для каждого запроса.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 10^{5}\)) — количество вершин в дереве и количество запросов, соответственно.

Каждая из следующих \(n-1\) вершин содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n, u \ne v\)), обозначающие ребро между вершинами \(u\) и \(v\). Гарантируется, что данный граф является деревом.

Каждая из следующих \(q\) строк начинается с трех целых чисел \(k\), \(m\) и \(r\) (\(1 \le k, r \le n\), \(1 \le m \le min(300,k)\)) — количество вершин, максимальный размер группы и корень дерева для данного запроса, соответственно. После этого следуют \(k\) различных целых чисел \(a_1, a_2, \ldots, a_k\) (\(1 \le a_i \le n\)) — вершины текущего запроса.

Гарантируется, что сумма значений \(k\) по всем запросам не превосходит \(10^{5}\).

Выходные данные

Выведите \(q\) строк, где \(i\)-я строка содержит ответ на \(i\)-й запрос.

Примечание

Рассмотрим первый пример.

В первом запросе нужно разделить три данные вершины (\(7\), \(4\) и \(3\)) на не более чем три группы, считая, что корнем дерева является вершина \(2\). Когда дерево подвешено за вершину \(2\), вершина \(4\) является предком вершин \(3\) и \(7\). Поэтому нельзя все вершины отнести к одной группе. Есть только \(1\) способ разделить эти вершины на две группы: \([4]\) и \([3, 7]\). Кроме того, есть один способ разделить данные вершины на три группы: \([7]\), \([4]\) и \([3]\). Таким образом, есть всего \(2\) способа разбить данные вершины на не более чем три группы.

Во втором запросе дерево подвешено за вершину \(4\), при этом \(6\) является предком \(2\), а \(2\) является предком \(1\). Поэтому нельзя все вершины отнести к одной группе.

F. Очередная задача про запросы к массиву

битмаски математика разделяй и властвуй Структуры данных теория чисел *2400

Вам дан массив \(a_1, a_2, \ldots, a_n\).

Необходимо выполнить \(q\) запросов следующих двух видов:

  1. «MULTIPLY l r x» — для каждого \(i\) (\(l \le i \le r\)) нужно умножить \(a_i\) на \(x\).
  2. «TOTIENT l r» — вычислить \(\varphi(\prod \limits_{i=l}^{r} a_i)\) по модулю \(10^9+7\), где \(\varphi\) обозначает функцию Эйлера.

Функцией Эйлера целого положительного числа \(n\) (обозначается как \(\varphi(n)\)) называется количество целых чисел \(x\) (\(1 \le x \le n\)), таких что \(\gcd(n,x) = 1\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n \le 4 \cdot 10^5\), \(1 \le q \le 2 \cdot 10^5\)) — количество элементов в массиве \(a\) и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 300\)) — элементы массива \(a\).

Следующие \(q\) строк задают запросы в формате, приведённом в условии.

  1. «MULTIPLY l r x» (\(1 \le l \le r \le n\), \(1 \le x \le 300\)) означает запрос умножения.
  2. «TOTIENT l r» (\(1 \le l \le r \le n\)) означает запрос вычисления функции Эйлера.

Гарантируется, что существует хотя бы один запрос типа «TOTIENT».

Выходные данные

Для каждого запроса типа «TOTIENT» выведите ответ на него.

Примечание

В первом примере \(\varphi(1) = 1\) для первого запроса, \(\varphi(2) = 1\) для второго запроса и \(\varphi(6) = 2\) для третьего.

G. Рекурсивные запросы

Структуры данных *2500

Вам задана перестановка \(p_1, p_2, \dots, p_n\). Вам необходимо ответить на \(q\) запросов. Каждый запрос представляет из себя пару \((l_i, r_i)\) и Вам необходимо посчитать \(f(l_i, r_i)\).

Пусть \(m_{l, r}\) — это позиция максимума в подотрезке \(p_l, p_{l+1}, \dots, p_r\).

Тогда, \(f(l, r) = (r - l + 1) + f(l, m_{l,r} - 1) + f(m_{l,r} + 1, r)\) если \(l \le r\) либо \(0\) в противном случае.

Входные данные

В первой строке заданы два целых числа \(n\) и \(q\) (\(1 \le n \le 10^6\), \(1 \le q \le 10^6\)) — длина перестановки \(p\) и количество запросов.

Во второй строке заданы \(n\) попарно различных целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\), \(p_i \neq p_j\) for \(i \neq j\)) — перестановка \(p\).

В третьей строке заданы \(q\) целых чисел \(l_1, l_2, \dots, l_q\) — первые половины запросов.

В четвертой строке заданы \(q\) целых чисел \(r_1, r_2, \dots, r_q\) — вторые половины запросов.

Гарантируется, что \(1 \le l_i \le r_i \le n\) для всех запросов.

Выходные данные

Выведите \(q\) целых чисел — значения \(f(l_i, r_i)\) для соответствующих запросов.

Примечание

Разбор запросов:

  1. \(f(2, 2) = (2 - 2 + 1) + f(2, 1) + f(3, 2) = 1 + 0 + 0 = 1\);
  2. \(f(1, 3) = (3 - 1 + 1) + f(1, 2) + f(4, 3) = 3 + (2 - 1 + 1) + f(1, 0) + f(2, 2) = 3 + 2 + (2 - 2 + 1) = 6\);
  3. \(f(1, 4) = (4 - 1 + 1) + f(1, 2) + f(4, 4) = 4 + 3 + 1 = 8\);
  4. \(f(2, 4) = (4 - 2 + 1) + f(2, 2) + f(4, 4) = 3 + 1 + 1 = 5\);
  5. \(f(1, 1) = (1 - 1 + 1) + 0 + 0 = 1\).

F. Нияз и маленькие степени

Деревья дп Структуры данных *3400

У Нияза есть дерево из \(n\) вершин, пронумерованных от \(1\) до \(n\). Деревом называется связный граф без циклов.

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

Нияз не любит, когда вершины в дереве имеют слишком большие степени, поэтому он хочет найти для каждого \(x\) от \(0\) до \((n-1)\), ребра какого минимального суммарного веса нужно удалить, чтобы степени всех вершин стали не более \(x\).

Входные данные

Первая строка содержит единственное целое число \(n\) (\(2 \le n \le 250\,000\)) — количество вершин в дереве Нияза.

Каждая из следующих \((n - 1)\) строк содержит три целых числа \(a\), \(b\), \(c\) (\(1 \le a, b \le n\), \(1 \leq c \leq 10^6\)) — номера вершин, которые соединяет очередное ребро дерева и его вес, соответственно. Гарантируется, что заданные ребра образуют дерево.

Выходные данные

Выведите \(n\) целых чисел, разделенных пробелами: для каждого \(x = 0, 1, \ldots, (n-1)\) выведите минимальный суммарный вес такого множества ребер, при удалении которого степень всех вершин становится не больше \(x\).

Примечание

В первом примере в графе вершина \(1\) соединена со всеми остальными. Таким образом, для всеx \(x\) достаточно удалить \((4-x)\) ребер минимальной стоимости, исходящих из вершины \(1\), таким образом, ответы равны \(1+2+3+4\), \(1+2+3\), \(1+2\), \(1\), и \(0\).

Во втором примере при \(x=0\) необходимо удалить все ребра, при \(x=1\) достаточно удалить два ребра веса \(1\) и \(5\), а при \(x \geq 2\) ребра удалять необязательно, поэтому ответы равны \(1+2+5+14\), \(1+5\), \(0\), \(0\) и \(0\).

C. Азбука Морзе

Бинарный поиск дп сортировки Строки строковые суфф. структуры Структуры данных хэши *2400

В азбуке Морзе каждая буква латинского алфавита определена как строка некоторый длины от \(1\) до \(4\), состоящая из точек и тире. В этой задаче мы будем обозначать точку как «0», а тире как «1».

Так как существует \(2^1+2^2+2^3+2^4 = 30\) строк длины от \(1\) до \(4\), состоящих только из «0» и «1», не все из них соответствуют какой-то из \(26\) букв латинского алфавита. А именно, все строки из «0» и/или «1» длины не более \(4\) соответствуют разным буквы латинского алфавита, кроме следующих четырех строк, которые ничему не соответствуют: «0011», «0101», «1110» и «1111».

Вы работаете на строке \(S\), которая изначально пуста. \(m\) раз далее либо точка, либо тире будут дописаны к \(S\), по одному символу за раз. Ваша задача — после каждого добавления к строке \(S\) найти количество непустых последовательностей букв латинского алфавита, которые представляются в азбуке Морзе как некоторая подстрока \(S\).

Так как ответы могут быть очень большим, выводите их по модулю \(10^9 + 7\).

Входные данные

Первая строка содержит одно целое число \(m\) (\(1 \leq m \leq 3\,000\)) — количество модификаций строки \(S\).

Каждая из следующих \(m\) строк содержит или «0» (обозначающий точку), или «1» (обозначающую тире), описывающее, какой символ добавляется к \(S\).

Выходные данные

Выведите \(m\) строк, \(i\)-я из которых должна содержать ответ после \(i\)-й модификации \(S\).

Примечание

Рассмотрим первый тестовый пример, после того, как к \(S\) будут дописаны все буквы, т.е. «111».

Как вы можете видеть, «1», «11» и «111» соответствуют каким-то буквам латинского алфавита. Более точно, они переводятся в 'T', 'M', и в 'O', соответственно. Все слова, которые переводятся в подстроку строки \(S\) в азбуке Морзе, таким образом, равны:

  1. «T» (переводится в «1»)
  2. «M» (переводится в «11»)
  3. «O» (переводится в «111»)
  4. «TT» (переводится в «11»)
  5. «TM» (переводится в «111»)
  6. «MT» (переводится в «111»)
  7. «TTT» (переводится в «111»)

Хоть это и не нужно в этой задаче, таблица переводов букв латинского алфавита в азбуку Морзе: здесь.

D. Изоляция

дп Структуры данных *2900

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

Так как ответ может быть очень большим, выведите остаток от деления ответа на \(998\,244\,353\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\), разделенных пробелами (\(1 \leq k \leq n \leq 10^5\)) — количество элементов в массиве \(a\) и ограничение из условия.

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)) — элементы массива \(a\).

Выходные данные

Первая и единственная строка вывода должна содержать количество способов разбить элементы массива \(a\) по модулю \(998\,244\,353\).

Примечание

В первом примере возможных разбиений три:

  • \([[1], [1], [2]]\)
  • \([[1, 1], [2]]\)
  • \([[1, 1, 2]]\)

Разбиение \([[1], [1, 2]]\) невозможно, потому что два целых числа встречаются ровно один раз на отрезке \([1, 2]\).

B. Petr#

Перебор Строки Структуры данных хэши *2000

Когда Петя еще учился в школе, он очень увлекался грамматикой языка Petr#. На одном из уроков Петю заинтересовал следующий вопрос: сколько различных подстрок, начинающихся строкой sbegin этого языка и заканчивающихся строкой send (возможно, sbegin = send), существует у заданной строки t. Подстроки называются различными, если различно их содержание, при этом позиции вхождения не имеют значения. В школе Петя не дружил с математикой, поэтому он не смог посчитать это количество. Помогите ему!

Входные данные

Входной файл состоит из трех строк. В первой строке задана строка t. Во второй и третьей строках заданы строки sbegin и send, соответственно. Все три строки непустые, состоят из строчных латинских букв, и длина каждой из них не превышает 2000 символов.

Выходные данные

Выведите единственное число — количество различных подстрок строки t, которые начинаются со строки sbegin и заканчиваются строкой send.

Примечание

В третьем тесте есть четыре различные подходящие подстроки: ab, abab, ababab, abababab.

В четвертом тесте подстроки, соответствующие sbegin и send, пересекаются.

G. Самая опасная акула

дп Структуры данных *2700

Акула Семён участвует в самом престижном соревновании Мирового океана на звание самой опасной акулы. Во время этого состязания акулы соревнуются в различных дисциплинах: плавание на скорость, маскировка, навигация по картам и многим другим. Сейчас Семён проходит испытание под названием «разрушение».

Во время этого испытания перед акулой ставят \(m\) доминошек. Все доминошки стоят на одной прямой, однако высоты доминошек могут различаться. Расстояние между соседними доминошками равно \(1\). Кроме того, у каждой доминошки есть своя стоимость, выраженная целым числом. Цель акулы — уронить все доминошки. Для этого акула может толкнуть любую доминошку влево или вправо, после чего она начнёт падать в этом направлении. Если во время падения доминошка задевает другие, они также начинают падать в ту же сторону, в которую падала исходная, таким образом начинается цепная реакция, в результате которой может упасть много доминошек. Падающая доминошка задевает другую, если и только если расстояние между ними строго меньше высоты падающей доминошки, причём доминошки не обязательно должны быть соседними.

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

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

Входные данные

Для уменьшения размера ввода высоты и стоимости доминошек задаются при помощи блоков.

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 250\,000, 1 \leq m \leq 10^7\)) — количество блоков и суммарное количество доминошек, которые надо уронить Семёну.

Затем следует описание \(n\) блоков. Описание каждого блока состоит из трёх строк.

В первой строке описания блока содержится целое число \(k_i\) (\(1 \leq k_i \leq 250\,000, \sum_{i = 1}^{n}{k_i} \leq 250\,000\)) — количество доминошек в блоке.

Во второй строке описания блока содержатся \(k_i\) целых чисел \(a_j\) (\(1 \leq a_j \leq m\)) — высоты доминошек в блоке.

В третьей строке описания содержатся \(k_i\) целых чисел \(c_j\) (\(1 \leq c_j \leq 100\,000\)) — стоимости доминошек в блоке.

Далее следует описание последовательности доминошек, которые надо уронить Семёну, в порядке слева направо.

В первой строке описания последовательности задано целое число \(q\) (\(n \leq q \leq 250\,000\)) — количество блоков в последовательности доминошек, которые надо уронить.

Каждая из следующих \(q\) строк содержит пары целых чисел \(id_i, mul_i\) (\(1 \leq id_i \leq n\), \(1 \leq mul_i \leq 100\,000\)), обозначающие, что очередные \(k_{id_i}\) в порядке слева направо доминошек — это доминошки блока \(id_i\), чьи стоимости были умножены на число \(mul_i\).

Гарантируется, что \(\sum_{i = 1}^{q}{k_{id_i}} = m\), а также, что каждый блок встречается хотя бы один раз в последовательности доминошек, которые требуется уронить.

Выходные данные

Выведите одно целое число — минимальную суммарную стоимость доминошек, которые надо толкнуть, чтобы все доминошки упали.

Примечание

В первом примере перед Семёном стоят \(7\) доминошек. Их высоты равны \([3, 1, 2, 2, 1, 2, 2]\), а стоимости равны \([4, 3, 6, 3, 1, 2, 1]\). Сначала Семёну следует уронить доминошку с номером \(7\) влево, она упадёт и заденет доминошку с номером \(6\). Доминошка \(6\), падая, заденет доминошку с номером \(5\), которая упадёт, но не заденет другие доминошки. Затем Семён должен уронить доминошку с номером \(1\) вправо, она, падая, заденет доминошки с номерами \(2\) и \(3\), а доминошка \(3\), падая, заденет доминошку \(4\), таким образом все доминошки упадут.

Во втором примере перед Семёном стоит одна доминошка стоимостью \(10000000000\).

G. Жадные подпоследовательности

Деревья дп Структуры данных *2400

Для массива \(c\) назовем жадной подпоследовательностью последовательность индексов \(p_1\), \(p_2\), ..., \(p_l\), такую, что \(1 \le p_1 < p_2 < \dots < p_l \le |c|\), и для всех \(i \in [1, l - 1]\), \(p_{i + 1}\) — минимальный индекс, для которого выполняются условия: \(p_{i + 1} > p_i\) и \(c[p_{i + 1}] > c[p_i]\).

Вам дан массив \(a_1, a_2, \dots, a_n\). Для каждого его подотрезка длины \(k\) посчитайте длину его самой длинной жадной подпоследовательности.

Входные данные

В первой строке заданы два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 10^6\)) — длина массива \(a\) и длина подотрезков.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — массив \(a\).

Выходные данные

Выведите \(n - k + 1\) чисел — максимальные длины жадных подпоследовательностей для каждого подотрезка длины \(k\). Первое число должно быть ответом для подотрезка \(a[1..k]\), второе — для \(a[2..k + 1]\), и так далее.

Примечание

В первом примере:

  • \([1, 5, 2, 5]\) — наидлиннейшими являются подпоследовательности \(1, 2\) (\([c_1, c_2] = [1, 5]\)) или \(3, 4\) (\([c_3, c_4] = [2, 5]\)).
  • \([5, 2, 5, 3]\) — подпоследовательность \(2, 3\) (\([c_2, c_3] = [2, 5]\)).
  • \([2, 5, 3, 6]\) — подпоследовательность \(1, 2, 4\) (\([c_1, c_2, c_4] = [2, 5, 6]\)).

Во втором примере:

  • \([4, 5, 2, 5, 3, 6]\) — наидлиннейшими являются подпоследовательности \(1, 2, 6\) (\([c_1, c_2, c_6] = [4, 5, 6]\)) или \(3, 4, 6\) (\([c_3, c_4, c_6] = [2, 5, 6]\)).
  • \([5, 2, 5, 3, 6, 6]\) — подпоследовательность \(2, 3, 5\) (\([c_2, c_3, c_5] = [2, 5, 6]\)).

E. Настя не придумала легенду

Бинарный поиск Структуры данных *2200

В этой задаче вместо легенды Настя попросила нас написать формальное условие.

Дан массив чисел \(a\) длины \(n\) и массив чисел \(k\) длины \(n-1\). Нужно обрабатывать два типа запросов:

  • увеличить \(a_i\) на \(x\). После этого, если \(a_{i+1} < a_i + k_i\), то \(a_{i+1}\) становится равно \(a_i + k_i\), затем, если \(a_{i+2} < a_{i+1} + k_{i+1}\), то \(a_{i+2}\) становится равно \(a_{i+1} + k_{i+1}\), затем то же самое происходит для \(a_{i+3}\), ..., \(a_n\);
  • вывести сумму чисел на отрезке c \(l\) по \(r\) в массиве \(a\).

Гарантируется, что изначально для любого \(1 \leq i \leq n-1\) верно, что \(a_i + k_i \leq a_{i+1}\).

Входные данные

В первой строке вводится целое число \(n\) (\(2 \leq n \leq 10^{5}\)) — число элементов массива \(a\).

Во второй строке вводятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^{9} \leq a_i \leq 10^{9}\)) — элементы массива \(a\).

В третьей строке вводится \(n-1\) целое число \(k_1, k_2, \ldots, k_{n-1}\) (\(-10^{6} \leq k_i \leq 10^{6}\)) — элементы массива \(k\).

В четвертой строке вводится целое число \(q\) (\(1 \leq q \leq 10^{5}\)) — количество запросов.

В следующих \(q\) строках вводятся запросы одного из двух видов, по одному в строке:

  • если запрос первого типа, то вводится символ «+» (без кавычек), затем вводятся целые числа \(i\) и \(x\) (\(1 \leq i \leq n\), \(0 \leq x \leq 10^{6}\)), что значит, что число \(x\) добавляется к \(i\)-му элементу массива \(a\), как описано в условии;
  • если запрос второго типа, то вводится символ «s» (без кавычек), затем вводятся два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq n\)).
Выходные данные

Для каждого запроса второго типа в отдельной строке выведите одно целое число — сумму на соответствующем отрезке.

Примечание

В первом примере:

  • после первого изменения \(a = [3, 4, 3]\);
  • после второго изменения \(a = [3, 4, 4]\).

Во втором примере:

  • после первого изменения \(a = [6, 9, 10]\);
  • после второго изменения \(a = [6, 13, 14]\).

E. Выбор вагона

жадные алгоритмы Структуры данных *2700

Вася любит ездить на поездах, но не любит, когда вагон, в котором он едет, расположен в хвосте.

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

  1. К голове поезда подцепляют некоторое количество вагонов;
  2. К хвосту поезда подцепляют некоторое количество вагонов;
  3. Вася пересчитывает величину, с помощью которой он оценивает удобство вагона (подробнее о ней ниже).

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

Чтобы выбрать, в каком вагоне ехать, Вася ввёл для каждого вагона величину \(A_i\) (где \(i\) — номер вагона), которая вычисляется следующим образом:

  • В начале поездки \(A_i=0\), это также верно для новых вагонов в момент их добавления.
  • Во время очередного пересчёта Вася выбирает целые положительные числа \(b\) и \(s\) и прибавляет к \(A_i\) величину \(b + (i - 1) \cdot s\).

Вася ещё не решил, откуда и куда ехать, поэтому после каждого события одного из трёх типов он хочет знать номер наиболее близкого к голове поезда вагона из таких, что его значение \(A_i\) минимально среди всех вагонов поезда. Так как вагонов очень много, Вася попросил Вас написать программу, отвечающую на его вопросы.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 10^9\), \(1 \leq m \leq 300\,000\)) — количество вагонов в поезде на момент отправления с вокзала и количество станций соответственно.

Следующие \(m\) строк задают описания событий. Каждое событие одного из трёх следующих видов:

  • «\(1\) \(k\)» (\(1 \le k \le 10^9\)), нужно подцепить к голове поезда \(k\) вагонов.
  • «\(2\) \(k\)» (\(1 \le k \le 10^9\)), нужно подцепить к хвосту поезда \(k\) вагонов.
  • «\(3\) \(b\) \(s\)» (\(1 \le b, s \le 10^9\)), нужно пересчитать удобство всех вагонов поезда.

Гарантируется, что в любой момент времени времени длина поезда не превышает \(10^9\). Также гарантируется, что числа \(A_i\) не станут слишком большими. Формально, гарантируется, что если просуммировать по всем запросам \(3\)-го типа самое большое прибавление (то есть \(b + (n - 1) \cdot s\), где \(n\) — это количество вагонов в момент этого запроса), то такая сумма не будет превосходить \(10^{18}\).

Выходные данные

После каждого из \(m\) запросов выведите два целых числа: \(j\) и \(A_j\) — номер наиболее близкого к голове поезда вагона, что его значение \(A_j\) минимально, и само значение \(A_j\).

Примечание
  • Изначально поезд состоит из одного вагона \(A_1 = 0\), обозначим для простоты его как \([0]\).
  • После прицепления одного вагона к голове, получается поезд \([0, 0]\).
  • После уточнения с параметрами \(b=1, s=1\), получается поезд \([1, 2]\).
  • После ещё одного уточнения с параметрами \(b=1, s=1\), получается поезд \([2, 4]\).
  • После подцепления одного вагона в конец, получается поезд \([2, 4, 0]\).
  • После ещё одного подцепления одного вагона в конец, получается поезд \([2, 4, 0, 0]\).
  • После уточнения с параметрами \(b=1\), \(s=1\), получается поезд \([3, 6, 3, 4]\).
  • После подцепления одного вагона в конец, получается поезд \([3, 6, 3, 4, 0]\).
  • После уточнения с параметрами \(b=1\), \(s=5\), получается поезд \([4, 12, 14, 20, 21]\).

F. Спички детям не игрушка

Деревья Структуры данных *3400

Лена играется со спичками. Естественный вопрос, посещающий любого школьника, играющего со спичками — а можно ли поджечь спичкой дерево?

Скажем, что дерево — это связный граф без циклов, вершины которого пронумерованы целыми числами \(1, 2, \ldots, n\), в каждой вершине которого также записано некоторое целое число \(p_v\), являющееся приоритетом вершины \(v\). Все приоритеты различны.

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

Лена приготовила дерево из \(n\) вершин и в каждой вершине записала приоритет \(p_v = v\). Лене с одной стороны интересно посмотреть, как горит дерево, но с другой она понимает, что если дерево поджечь, оно исчезнет насовсем. Лена добрая девочка, и деревья ей жалко, так что она хочет ограничиться выяснением ответов на некоторые вопросы про процесс сгорания дерева в уме. Лена хочет ответить на \(q\) вопросов, каждый из которых относится к одному из трёх следующих видов:

  • «up \(v\)», присвоить вершине \(v\) приоритет \(1 + \max\{p_1, p_2, \ldots, p_n\}\);
  • «when \(v\)», выяснить, какой по счёту сгорит вершина \(v\), если дерево поджечь сейчас;
  • «compare \(v\) \(u\)», выяснить, какая из вершин \(v\) и \(u\) сгорит раньше, если дерево поджечь сейчас.

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

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2 \le n \le 200\,000\), \(1 \le q \le 200\,000\)) — количество вершин дерева и количество вопросов.

В \(i\)-й из следующих \(n - 1\) строк находятся два целых числа \(v_i\), \(u_i\) (\(1 \le v_i, u_i \le n\)), задающие концы \(i\)-го ребра дерева.

Каждая из оставшихся \(q\) строк содержит операцию одного из трёх типов.

  • «up \(v\)» (\(1 \le v \le n\)) — присвоить новый приоритет вершине \(v\);
  • «when \(v\)» (\(1 \le v \le n\)) — определить момент сгорания вершины \(v\) для текущего дерева;
  • «compare \(v\) \(u\)» (\(1 \le v, u \le n\), \(v \ne u\)) — определить, какая из вершин \(v\) и \(u\) сгорит раньше для текущего дерева.

Гарантируется, что среди запросов хотя бы один имеет тип «when» или «compare».

Выходные данные

Для каждого запроса типа «when» нужно вывести одно целое число от \(1\) до \(n\) — момент времени, когда сгорит вершина \(v\).

Для запроса типа «compare» выведите \(v\) или \(u\), в зависимости от того, какая вершина сгорит раньше.

Примечание

В первом примере процесс сгорания исходного дерева проиллюстрирован на картинке:

В частности, порядок сгорания вершин следующий: \([2, 4, 3, 1, 5]\).

Во втором примере после применения операции «up» порядок сгорания вершин станет следующим: \([2, 4, 3, 5, 1]\)

F. Покупка блюд

разделяй и властвуй Структуры данных *2500

В городе живут \(m\) людей. Также в городе есть в продаже \(n\) блюд, где \(i\)-е блюде имеет цену \(p_i\), уровень \(s_i\) и симпатичность \(b_i\). У \(j\)-го человека есть доход \(inc_j\) и предпочтительная симпатичность \(pref_j\).

Ни один человек никогда не купит блюдо, уровень которого ниже, чем его доход. Также, ни один человек не может позволить купить себе блюдо, с ценой выше, чем его доход. Иными словами, человек \(j\) может купить блюдо \(i\), если \(p_i \leq inc_j \leq s_i\).

Также человек \(j\) может купить блюдо \(i\), только если \(|b_i-pref_j| \leq (inc_j-p_i)\). Иначе говоря, если цена блюда на \(k\) меньше, чем доход какого-то человека, то этот человек согласен на не более чем \(k\) абсолютную разницу между симпатичностью блюда и предпочитаемой симпатичностью этого человека.

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

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 10^5\), \(1 \leq m \leq 10^5\)), количество блюд, продаваемых в городе и количество людей, в нём живущих.

Вторая строка содержит \(n\) целых чисел \(p_i\) (\(1 \leq p_i \leq 10^9\)) — цена каждого блюда.

Третья строка содержит \(n\) целых чисел \(s_i\) (\(1 \leq s_i \leq 10^9\)) — уровень каждого блюда.

Четвёртая строка содержит \(n\) целых чисел \(b_i\) (\(1 \leq b_i \leq 10^9\)) — симпатичность каждого блюда.

Пятая строка содержит \(m\) целых чисел \(inc_j\) (\(1 \leq inc_j \leq 10^9\)) — доход каждого человека.

Шестая строка содержит \(m\) целых чисел \(pref_j\) (\(1 \leq pref_j \leq 10^9\)) — предпочтительная симпатичность для каждого человека.

Гарантируется, что для всех целых чисел \(i\) от \(1\) до \(n\), верно, что \(p_i \leq s_i\).

Выходные данные

Выведите \(m\) целых чисел — количество блюд, которые может купить каждый человек, живущий в городе.

Примечание

В первом примере первый человек может купить блюдо \(2\), второй человек может купить блюда \(1\) и \(2\), а третий человек не может купить ни одного блюда.

Во втором примере первый человек не может купить ни одного блюда, второй человек может купить блюда \(1\) и \(4\), а третий человек может купить блюда \(1\), \(2\) и \(4\).

C. Плейлист

Перебор сортировки Структуры данных *1600

В вашем плейлисте есть \(n\) песен. \(i\)-я песня характеризуется двумя числами \(t_i\) и \(b_i\) — длиной и красотой соответственно. Удовольствие от прослушивания множества песен равно суммарной длине этих песен умноженной на минимальную красоту среди них. Например, удовольствие от прослушивания \(3\) песен с длинами \([5, 7, 4]\) и красотами \([11, 14, 6]\) равна \((5 + 7 + 4) \cdot 6 = 96\).

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

Входные данные

Первая строка содержит два числа \(n\) и \(k\) (\(1 \le k \le n \le 3 \cdot 10^5\)) – количество песен в плейлисте и максимальное количество песен, которое вы можете выбрать.

Каждая из следующих \(n\) строк содержит по два числа \(t_i\) и \(b_i\) (\(1 \le t_i, b_i \le 10^6\)) — длина и красота \(i\)-й песни.

Выходные данные

Выведите одно число — максимальное удовольствие, которое вы можете получить.

Примечание

В первом тестовом примере вам нужно выбрать песни \({1, 3, 4}\), и удовольствие будет равно \((4 + 3 + 6) \cdot 6 = 78\).

Во втором тестовом примере нужно просто выбрать песню под номером \(3\). Удоволоствие от неё будет равно \(100 \cdot 100 = 10000\).

F. Расширение множества точек

разделяй и властвуй снм Структуры данных *2600

Для заданного множества точек на координатной плоскости \(S\) обозначим его расширение \(E(S)\) как результат следующего алгоритма:

Создадим другое множество точек \(R\), изначально равное \(S\). Затем, пока существуют четыре числа \(x_1\), \(y_1\), \(x_2\) и \(y_2\), такие, что \((x_1, y_1) \in R\), \((x_1, y_2) \in R\), \((x_2, y_1) \in R\) и \((x_2, y_2) \notin R\), добавим \((x_2, y_2)\) к \(R\). Когда такую четверку чисел найти будет нельзя, прекратим алгоритм и скажем, что множество \(R\) — результат.

А теперь — сама задача. У вас есть множество \(S\), изначально пустое. Надо обрабатывать два типа запросов: добавить какую-нибудь точку в \(S\), или удалить точку. После каждого запроса выведите, чему равен размер множества \(E(S)\).

Входные данные

В первой строке задано одно целое число \(q\) (\(1 \le q \le 3 \cdot 10^5\)) — количество запросов.

Затем следуют \(q\) строк, в каждой из которых записаны два целых числа \(x_i\), \(y_i\) (\(1 \le x_i, y_i \le 3 \cdot 10^5\)), обозначающих \(i\)-й запрос следующим образом: если \((x_i, y_i) \in S\), удалить эту точку из \(S\), иначе вставить \((x_i, y_i)\) в \(S\).

Выходные данные

Выведите \(q\) целых чисел. \(i\)-е число должно быть равно размеру \(E(S)\) после первых \(i\) запросов.

G. Двойное дерево

Деревья кратчайшие пути разделяй и властвуй Структуры данных *2700

Вам дан неориентированный граф специального вида. Он состоит из \(2n\) вершин, пронумерованных от \(1\) до \(2n\). Граф обладает следующими свойствами:

  • в нем ровно \(3n-2\) ребра: \(n\) ребер соединяют вершины с четными номерами и вершины с нечетными номерами, \(n - 1\) ребер соединяют вершины с нечетными номерами друг с другом, и \(n - 1\) ребер соединяют вершины с четными номерами друг с другом;
  • для каждого ребра \((u, v)\) между вершинами с нечетными номерами существует ребро \((u + 1, v + 1)\), и наоборот;
  • для каждого нечетного числа \(u \in [1, 2n - 1]\) существует ребро \((u, u + 1)\);
  • граф является связным; более того, если мы удалим все четные вершины и ребра, инцидентные им, граф станет деревом (то же самое произойдет, если удалить все нечетные вершины).

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

Ребра графа являются взвешенными. Длина простого пути в этом графе определяется как сумма весов всех ребер, по которым проходит путь.

Вам даны \(q\) запросов к графу; в каждом запросе требуется подсчитать длину кратчайшего пути между какой-то парой вершин. Можете ли вы справиться со всеми запросами?

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)).

Во второй строке записаны \(n\) целых чисел \(w_{1, 2}\), \(w_{3,4}\), ..., \(w_{2n - 1, 2n}\) (\(1 \le w_{i, i + 1} \le 10^{12}\)). Эти числа обозначают веса ребер, соединяющих вершины разной четности.

Затем следуют \(n-1\) строк. В \(i\)-й строке записаны четыре числа \(x_i\), \(y_i\), \(w_{i, 1}\) и \(w_{i, 2}\) (\(1 \le x_i, y_i \le n\), \(x_i \ne y_i\), \(1 \le w_{i, j} \le 10^{12}\)); она обозначает два ребра, одно из которых соединяет \(2x_i - 1\) с \(2y_i - 1\) и имеет вес \(w_{i, 1}\); а второе соединяет \(2x_i\) с \(2y_i\) и имеет вес \(w_{i, 2}\).

В следующей строке записано одно целое число \(q\) (\(1 \le q \le 6 \cdot 10^5\)) — количество запросов.

Затем следуют \(q\) строк, \(i\)-я строка содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le 2n\), \(u_i \ne v_i\)). Она обозначает запрос «посчитайте длину кратчайшего пути между вершинами \(u_i\) и \(v_i\)».

Выходные данные

Выведите \(q\) целых чисел, \(i\)-е из которых должно быть ответом на \(i\)-й запрос.

Примечание

Граф в первом тесте выглядит следующим образом:

F2. Блоки равной суммы (усложненная редакция)

жадные алгоритмы Структуры данных *1900

Эта задача дана в двух редакциях, которые различаются исключительно ограничением на число \(n\).

Дан массив целых чисел \(a[1], a[2], \dots, a[n].\) Назовём его блоком (подмассивом) последовательность подряд идущих элементов \(a[l], a[l+1], \dots, a[r]\) (\(1 \le l \le r \le n\)). Таким образом, блок определяется парой индексов его границ \((l, r)\).

Найдите такой набор блоков \((l_1, r_1), (l_2, r_2), \dots, (l_k, r_k)\), что:

  • Они не пересекаются (то есть нет пары пересекающихся блоков). Формально, для любой пары блоков \((l_i, r_i)\) и \((l_j, r_j\)), где \(i \neq j\), либо \(r_i < l_j\) либо \(r_j < l_i\).
  • Блоки имеют одинаковую сумму элементов. Формально, \(\)a[l_1]+a[l_1+1]+\dots+a[r_1]=a[l_2]+a[l_2+1]+\dots+a[r_2]=\(\) \(\)\dots =\(\) \(\)a[l_k]+a[l_k+1]+\dots+a[r_k].\(\)
  • Количество блоков в наборе максимально возможное. Формально, не существует такого набора блоков \((l_1', r_1'), (l_2', r_2'), \dots, (l_{k'}', r_{k'}')\), который удовлетворяет паре условий выше и \(k' > k\).
Картинка соответствует первому примеру. Синие прямоугольники иллюстрируют блоки.

Напишите программу, которая выводит искомый набор блоков.

Входные данные

Первая строка содержит целое \(n\) (\(1 \le n \le 1500\)) — длину заданного массива. Вторая строка содержит последовательность элементов массива — целые числа \(a[1], a[2], \dots, a[n]\) (\(-10^5 \le a_i \le 10^5\)).

Выходные данные

В первую строку выведите \(k\) (\(1 \le k \le n\)). Следующие \(k\) строк должны содержать описания блоков, по одному в строке. В каждую из этих строк выведите пару индексов \(l_i, r_i\) (\(1 \le l_i \le r_i \le n\)) — границы \(i\)-го блока. Вы можете выводить блоки в любом порядке. Если ответов несколько, выведите любой из них.

B. Lynyrd Skynyrd

Деревья дп математика поиск в глубину и подобное Структуры данных *2000

Недавно Линэрд и Скинэрд отправились в магазин, где Линэрд купил себе перестановку \(p\) длины \(n\), а Скинэрд купил себе массив \(a\) длины \(m\), состоящий из чисел от \(1\) до \(n\).

Линэрду и Скинэрду скучно, поэтому они решили задать вам \(q\) вопросов, имеющих следующий вид: «есть ли у подотрезка массива \(a\) c \(l\)-й по \(r\)-ю позицию включительно подпоследовательность, которая является циклическим сдвигом \(p\)?».

Перестановка длины \(n\) — это последовательность из \(n\) чисел, в которой каждое число от \(1\) до \(n\) встречается ровно один раз.

Циклический сдвиг перестановки \((p_1, p_2, \ldots, p_n)\) — это перестановка \((p_i, p_{i + 1}, \ldots, p_{n}, p_1, p_2, \ldots, p_{i - 1})\) для какого-то \(i\) от \(1\) до \(n\). Так, например, у перестановки \((2, 1, 3)\) есть три различных циклических сдвига: \((2, 1, 3)\), \((1, 3, 2)\), \((3, 2, 1)\).

Подпоследовательность подотрезка массива \(a\) с \(l\)-й по \(r\)-ю позицию включительно — это последовательность \(a_{i_1}, a_{i_2}, \ldots, a_{i_k}\) для каких-то \(i_1, i_2, \ldots, i_k\) таких, что \(l \leq i_1 < i_2 < \ldots < i_k \leq r\).

Входные данные

В первой строке даны три целых числа \(n\), \(m\), \(q\) (\(1 \le n, m, q \le 2 \cdot 10^5\)) — длина перестановки \(p\), длина массива \(a\) и число запросов.

В следующей строке даны \(n\) целых чисел от \(1\) до \(n\), \(i\)-е из них — \(i\)-й элемент перестановки. Каждое число от \(1\) до \(n\) встречается ровно один раз.

В следующей строке даны \(m\) целых чисел от \(1\) до \(n\), \(i\)-е из них — \(i\)-й элемент массива \(a\).

В следующих \(q\) строках дано описание запросов. В \(i\)-й из этих строк даны два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le m\)), означающие, что \(i\)-й вопрос относится к отрезку массива с \(l_i\)-й по \(r_i\)-ю позицию включительно.

Выходные данные

В единственной строке выведите строку длины \(q\), состоящую из \(0\) и \(1\), при этом на \(i\)-й позиции должна стоять \(1\), если у подотрезка массива \(a\) c \(l_i\)-й по \(r_i\)-ю позицию включительно есть подпоследовательность, которая является циклическим сдвигом \(p\), и \(0\) в противном случае.

Примечание

В первом примере отрезок с \(1\)-й по \(5\)-ю позицию это \(1, 2, 3, 1, 2\). В нём есть подпоследовательность \(1, 3, 2\), которая является циклическим сдвигом перестановки. В отрезке с \(2\)-й по \(6\)-ю позицию есть подпоследовательность \(2, 1, 3\), совпадающая с перестановкой. Отрезок с \(3\)-й по \(5\)-ю позицию это \(3, 1, 2\), в нём есть только одна подпоследовательность длиной \(3\) (\(3, 1, 2\)), но она не совпадает ни с каким циклическим сдвигом перестановки.

Во втором примере у перестановки циклические сдвиги это \(1, 2\) и \(2, 1\). Отрезок с \(1\)-й по \(2\)-ю позицию это \(1, 1\), его подпоследовательности не совпадает ни с каким циклическим сдвигом перестановки. Отрезок с \(2\)-й по \(3\)-ю позицию это \(1, 2\), он совпадает с перестановкой. Отрезок с \(3\)-й по \(4\)-ю позицию это \(2, 2\), его подпоследовательности не совпадает ни с каким циклическим сдвигом перестановки.

E. Холодное тепло

битмаски разделяй и властвуй реализация Структуры данных *2400

Вам дан массив из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\).

Вам нужно выполнить \(q\) операций. В \(i\)-й операции у вас есть символ \(s_i\), который равен либо «<», либо «>», и число \(x_i\).

Вы создаете новый массив \(b\) такой, что \(b_j = -a_j\), если \(a_j s_i x_i\) и \(b_j = a_j\) в противном случае (то есть, если \(s_i\) равен «>», то все знаки в \(a_j > x_i\) поменяются). После выполнения всех этих замен значения чисел в массиве \(a\) меняются на значения в \(b\).

Вы хотите знать, как выглядит ваш массив после выполнения всех операций.

Входные данные

Первая строка содержит два целых числа \(n,q\) (\(1 \leq n,q \leq 10^5\)) — количество чисел и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^5 \leq a_i \leq 10^5\)) — числа.

Каждая из следующих \(q\) строк содержит символ и число \(s_i, x_i\). (\(s_i \in \{<, >\}, -10^5 \leq x_i \leq 10^5\)) – запрос.

Выходные данные

Выведите \(n\) чисел \(c_1, c_2, \ldots, c_n\) — числа массива после выполнений всех операций.

Примечание

В первом примере массив изменяется следующим способом:

  • сначала: \([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]\)
  • \(> 2\): \([-5, -4, -3, -2, -1, 0, 1, 2, -3, -4, -5]\)
  • \(> -4\): \([-5, -4, 3, 2, 1, 0, -1, -2, 3, -4, -5]\)
  • \(< 5\): \([5, 4, -3, -2, -1, 0, 1, 2, -3, 4, 5]\)

H. Holy Diver

Структуры данных *3500

Вам дан массив, изначально он пустой. Вам нужно выполнить \(n\) операций следующего вида:

  • «\(a\) \(l\) \(r\) \(k\)»: дописать \(a\) в конец текущего массива, а затем подсчитать число пар целых чисел \(x, y\) таких, что \(l \leq x \leq y \leq r\) и \(\operatorname{mex}(a_{x}, a_{x+1}, \ldots, a_{y}) = k\).

Элементы массива пронумерованы с \(1\) в том порядке, в котором они добавляются в массив.

Чтобы сделать эту задачу более идейной, мы не будем сообщать вам реальные параметры запросов. Вместо этого вам будут даны целые числа \(a'\), \(l'\), \(r'\), \(k'\). Чтобы получить \(a\), \(l\), \(r\), \(k\) на \(i\)-й операции, вам нужно выполнить следующие действия:

  • \(a := (a' + lans) \bmod(n + 1)\),
  • \(l := (l' + lans) \bmod{i} + 1\),
  • \(r := (r' + lans) \bmod{i} + 1\),
  • если \(l > r\), то поменять местами \(l\) и \(r\),
  • \(k := (k' + lans) \bmod(n + 1)\),
где \(lans\) — ответ на предыдущую операцию, изначально \(lans\) равен нулю. \(i\) — номер операции, операции нумеруются с \(1\).

\(\operatorname{mex}(S)\), где \(S\) это мультимножество целых неотрицательных чисел, есть наименьшее неотрицательное целое число, не входящее в это множество. Например, \(\operatorname{mex}(\{2, 2, 3\}) = 0\), а \(\operatorname{mex} (\{0, 1, 4, 1, 6\}) = 2\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество запросов.

Следующие \(n\) строк содержат описания запросов.

Каждая из этих \(n\) строк содержит четыре целых неотрицательных целых числа \(a'\), \(l'\), \(r'\), \(k'\) (\(0, \leq a', l', r', k' \leq 10^9\)).

Выходные данные

Для каждого запроса выведите единственное число — ответ на запрос.

Примечание

Для первого теста из условия расшифрованные значения \(a\), \(l\), \(r\), \(k\) следующие:

\(a_1=0,l_1=1,r_1=1,k_1=1\)

\(a_2=1,l_2=1,r_2=2,k_2=0\)

\(a_3=0,l_3=1,r_3=3,k_3=1\)

\(a_4=1,l_4=1,r_4=4,k_4=2\)

\(a_5=2,l_5=1,r_5=5,k_5=3\)

Для второго теста из условия расшифрованные значения \(a\), \(l\), \(r\), \(k\) следующие:

\(a_1=2,l_1=1,r_1=1,k_1=2\)

\(a_2=2,l_2=1,r_2=2,k_2=1\)

\(a_3=0,l_3=1,r_3=3,k_3=0\)

\(a_4=0,l_4=2,r_4=2,k_4=3\)

\(a_5=0,l_5=3,r_5=4,k_5=0\)

C. Генератор Деревьев™

Деревья реализация Структуры данных *2700

Сов Пачино всегда интересовался деревьями — невзвешенными подвешенными деревьями, если быть точным. Он любит определять диаметр каждого дерева, что видит — максимальную длину простого пути в дереве.

Друзья Сова Пачино решили подарить ему Генератор Деревьев™ — мощное устройство, позволяющее создавать деревья по их описанию. Подвешенное дерево из \(n\) вершин может быть описано скобочной последовательностью длины \(2(n - 1)\) следующим образом: рассмотрим любой обход дерева, который начинается и заканчивается в корне, и проходит по каждому ребру ровно два раза — один раз вниз по дереву, другой раз вверх. Затем в порядке пути выпишем «(» (открывающую скобку) если по ребру прошли вниз, и «)» (закрывающую скобку), иначе.

На следующей иллюстрации расположены примеры подвешенных деревьев и их описания:

Сов выписал описание подвешенного дерева из \(n\) вершин. Затем, он изменил его описание \(q\) раз. Каждый раз, когда он выписывал новое описание, он выбирал два разных символа в описании, которое он написал в прошлый раз, менял их местами и записывал полученную строку. Он всегда следил за тем, чтобы каждая записанная строка была описанием подвешенного дерева.

Затем Пачино использовал Генератор Деревьев™ для каждого описания, которое он выписал. Какие диаметры у всех построенных деревьев?

Входные данные

В первой строке записано два целых числа \(n, q\) (\(3 \le n \le 100\,000\), \(1 \le q \le 100\,000\)) — количество вершин в дереве и количество изменений описания дерева.

Во второй строке записано описание исходного дерева — строка длины \(2(n-1)\), состоящая из открывающих и закрывающих скобок.

В каждой из следующих \(q\) строк записаны пары целых чисел \(a_i, b_i\) (\(2 \leq a_i, b_i \leq 2n-3\)) обозначающих позиции двух скобок, которые меняются местами. Вы можете предполагать, что описание каждый раз изменится и что по этому описанию можно будет построить дерево.

Выходные данные

Выведите \(q + 1\) целых чисел — диаметр каждого построенного по описанию дерева, в порядке, в котором эти описания выписывались.

Примечание

На следующей иллюстрации изображены все построенные деревья и их описания из первого примера:

E. Гонки в Линейном Королевстве

дп Структуры данных *2400

Вы — организатор гонок, и вы хотите провести серию заездов в Линейном Королевстве.

В Линейном Королевстве n дорог, пронумерованных от 1 до n. Дороги идут одна за другой слева направо, в порядке возрастания номера. Вам поступило несколько предложений проведения заездов. Для каждого заезда известно, на каких дорогах предлагается его проводить — некоторый набор последовательных дорог Королевства. Также известно ваше вознаграждение, в случае если вы решите провести данный заезд. Все заезды предлагается проводить в разное время, то есть одна и та же дорога может использоваться в нескольких заездах.

К несчастью, некоторые дороги в плохом состоянии, и их нужно чинить. Для каждой дороги известна стоимость ее ремонта. Заезд можно проводить только если отремонтированы все дороги, на которых проходит гонка. Ваша задача — отремонтировать такой набор дорог (возможно, все, или ни одной), чтобы ваша прибыль была как можно больше. Прибыль считается как сумма вознаграждений, полученных за проведение заездов, минус сумма денег, потраченных на ремонт дорог. Заметьте, что вы можете не чинить дороги вообще и получить нулевую прибыль.

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

Входные данные

В первой строке через пробел записано два целых числа n и m (1 ≤ n, m ≤ 2·105) — количество дорог и предложенных заездов соответственно.

Далее следует n строк. Каждая строка содержит одно целое неотрицательное число, не превосходящее 109 — стоимость починки очередной дороги. Стоимости починки даны в порядке начиная с дороги номер 1 заканчивая дорогой номер n.

Далее следует m строк по три числа в каждой: lb, ub, и p (1 ≤ lb ≤ ub ≤ n, 1 ≤ p ≤ 109). Каждая строка описывает очередной заезд: предлагается использовать дороги с lb по ub включительно, и вознаграждение будет составлять p.

Выходные данные

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

Пожалуйста, не используйте спецификатор %lld для чтения и записи 64-битных целых чисел в C++. Рекомендуется использовать потоки cin, cout (также вы можете использовать спецификатор %I64d).

Примечание

В первом примере выгодно чинить дороги 1, 2, 3 и 7. Три заезда приносят доход 15. Ремонт стоит 11, значит прибыль равна 4.

E. Количество компонент

дп Комбинаторика математика Структуры данных *2100

Королевство Кремляндия представляет собой дерево (связный неориентированный граф без циклов), состоящее из \(n\) вершин. У каждой вершины \(i\) есть своя стоимость \(a_i\). Все вершины последовательно соединены рёбрами. Формально, для каждого \(1 \leq i < n\) существует ребро между вершинами \(i\) и \(i+1\).

Введём понятие функции \(f(l, r)\), принимающую два целых числа \(l\) и \(r\) (\(l \leq r\)):

  • Оставим в дереве только вершины, стоимости которых находятся в пределах от \(l\) до \(r\).
  • Значением функции будет количество компонент связности в новом графе.

Ваша задача состоит в том, чтобы посчитать следующую сумму: \(\)\sum_{l=1}^{n} \sum_{r=l}^{n} f(l, r) \(\)

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество вершин в дереве.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)) — стоимости вершин.

Выходные данные

Выведите одно число — ответ на задачу.

Примечание

В первом примере значения функции будут такими:

  • \(f(1, 1)=1\) (остается только вершина под номером \(2\), которая образует одну компоненту)
  • \(f(1, 2)=1\) (остаются вершины \(1\) и \(2\), которые образуют одну компоненту)
  • \(f(1, 3)=1\) (все вершины остаются, получается одна компонента)
  • \(f(2, 2)=1\) (только вершина под номером \(1\))
  • \(f(2, 3)=2\) (остаются вершины \(1\) и \(3\), которые образуют две компоненты)
  • \(f(3, 3)=1\) (только вершина \(3\))
Суммарно выходит \(7\).

Во втором примере значения функции будут такими:

  • \(f(1, 1)=1\)
  • \(f(1, 2)=1\)
  • \(f(1, 3)=1\)
  • \(f(1, 4)=1\)
  • \(f(2, 2)=1\)
  • \(f(2, 3)=2\)
  • \(f(2, 4)=2\)
  • \(f(3, 3)=1\)
  • \(f(3, 4)=1\)
  • \(f(4, 4)=0\) (никакой вершины не остаётся, а значит количество компонент равно \(0\))
Суммарно выходит \(11\).

E. Две команды

реализация сортировки Структуры данных *1800

В ряд выстроены \(n\) студентов. Два тренера набирают две команды — первый тренер выбирает первую команду, а второй тренер выбирает вторую команду.

Умение программировать \(i\)-го студента равно целому числу \(a_i\). Все умения программировать различны и лежат в отрезке от \(1\) до \(n\).

Сначала первый тренер выбирает себе студента с максимальным умением программировать среди всех студентов, не взятых в какую-либо команду, а также \(k\) студентов, стоящих ближе всего слева от него и \(k\) студентов, стоящих ближе всего справа от него (если слева или справа стоит меньше, чем \(k\) студентов, все они будут взяты). Все выбранные студенты покидают ряд и присоединяются к первой команде. Затем второй тренер делает такой же ход (но все студенты, выбранные им, присоединяются ко второй команде). Затем опять первый тренер делает такой же ход, и так далее. Это продолжается до тех пор, пока есть хотя бы один студент, стоящий в ряду.

Ваша задача — определить, какие студенты будут взяты в первую команду, а какие будут взяты во вторую команду.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)) — количество студентов и значение, определяющее отрезок выбранных студентов соответственно.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)), где \(a_i\) равно умению программировать \(i\)-го студента. Гарантируется, что все умения программировать различны.

Выходные данные

Выведите строку, состоящую из \(n\) символов; \(i\)-й символ должен быть равен 1, если \(i\)-й студент присоединится к первой команде и 2 в ином случае.

Примечание

В первом тестовом примере первый тренер выберет студента на позиции \(3\) и ряд станет пустым (все студенты пойдут в первую команду).

Во втором тестовом примере первый тренер выберет студента на позиции \(4\) и ряд превратится в \([2, 1]\) (студенты с умениями программировать \([3, 4, 5]\) пойдут в первую команду). Затем второй тренер выберет студента на позиции \(1\) и ряд станет пустым (и студенты с умениями программировать \([1, 2]\) пойдут во вторую команду).

В третьем тестовом примере первый тренер выберет студента на позиции \(1\) и ряд превратится в \([1, 3, 5, 4, 6]\) (студенты с умениями программировать \([2, 7]\) пойдут в первую команду). Затем второй тренер выберет студента на позиции \(5\) и ряд превратится в \([1, 3, 5]\) (студенты с умениями программировать \([4, 6]\) пойдут во вторую команду). Затем первый тренер выберет студента на позиции \(3\) и ряд превратится в \([1]\) (студенты с умениями программировать \([3, 5]\) пойдут в первую команду). И затем второй тренер выберет оставшегося студента (и студент с умением программировать \(1\) пойдет во вторую команду).

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

D. Красивый массив

дп жадные алгоритмы Перебор разделяй и властвуй Структуры данных *1900

Вам дан массив \(a\) состоящий из \(n\) целых чисел. Красота массива – это максимальная сумма какого-то последовательного подотрезка этого массива (этот подотрезок может быть пустым). Например красота массива [10, -5, 10, -4, 1] равна 15, а красота массива [-3, -5, -1] равна 0.

Вы можете выбрать не более одного последовательного подотрезка массива \(a\) и домножить все элементы этого подотрезка на \(x\). Вы хотите максимизировать красоту массива после применения такой операции.

Входные данные

Первая строка содержит два целых числа \(n\) и \(x\) (\(1 \le n \le 3 \cdot 10^5, -100 \le x \le 100\)) — длина массива \(a\) и число \(x\) соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — сам массив \(a\).

Выходные данные

Выведите одно число — максимальную красоту массива \(a\) после не более одного домножения непрерывного подотрезка этого массива на \(x\).

Примечание

В первом тестовом примере нужно домножить подотрезок [-2, 1, -6], после этого массив примет вид [-3, 8, 4, -2, 12] с красотой 22 ([-3, 8, 4, -2, 12]).

Во втором примере нам не нужно домножать какой-либо подотрезок массива вообще.

В третьем тестовом примере независимо от того, какой подотрезок мы домножим, красота массива будет равна 0.

E. Специальные подотрезки перестановки

разделяй и властвуй снм Структуры данных *2200

Вам дана перестановка \(p\) состоящая из \(n\) чисел \(1\), \(2\), ..., \(n\) (перестановка — это массив, в котором каждый элемент от \(1\) до \(n\) встречается ровно один раз).

Назовем подотрезок этой перестановки \(p[l, r]\) специальным, если \(p_l + p_r = \max \limits_{i = l}^{r} p_i\). Вам нужно посчитать количество специальных подотрезков заданной перестановки.

Входные данные

Первая строка содержит одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(p_1\), \(p_2\), ..., \(p_n\) (\(1 \le p_i \le n\)). Все эти числа попарно различны.

Выходные данные

Выведите количество специальных подотрезков заданной перестановки.

Примечание

В первом тестовом примере два специальных подотрезка — \([1, 5]\) и \([1, 3]\).

Во втором тестовом примере только один специальный подотрезок — \([1, 3]\).

E. Минимальный массив

Бинарный поиск жадные алгоритмы Структуры данных *1700

Вам даны два массива \(a\) и \(b\), в каждом из которых по \(n\) элементов. Все элементы не меньше \(0\) и не больше \(n-1\).

Вы можете переставить элементы массива \(b\) (можно и оставить порядок тем же самым). После этого будет создан новый массив \(c\) из элементов \(n\), \(i\)-й элемент которого равен \(c_i = (a_i + b_i) \% n\), где \(x \% y\) — остаток от деления \(x\) на \(y\).

Ваше задание — переставить элементы массива \(b\) таким образом, чтобы получить лексикографически минимальный массив \(c\).

Массив \(x\) длины \(n\) лексикографически меньше, чем массив \(y\) длины \(n\), если существует такой индекс \(i\) (\(1 \le i \le n\)), что \(x_i < y_i\), и для всех индексов \(j\) (\(1 \le j < i\)) \(x_j = y_j\).

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество элементов в \(a\), \(b\) и \(c\).

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i < n\)), где \(a_i\)\(i\)-й элемент массива \(a\).

В третьей строке записаны \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(0 \le b_i < n\)), где \(b_i\)\(i\)-й элемент массива \(b\).

Выходные данные

Выведите лексикографически минимальный массив \(c\). Напоминаем, ваша задача состоит в том, чтобы переставить элементы массива \(b\) и получить лексикографически минимальный массив \(c\), где \(i\)-й элемент \(c\) — это \(c_i = (a_i + b_i) \% n\).

C. Восстановление перестановки

графы жадные алгоритмы Конструктив математика поиск в глубину и подобное сортировки Структуры данных *2100

Вася написал в тетради некоторую перестановку \(p_1, p_2, \ldots, p_n\) чисел от \(1\) до \(n\), то есть для всех \(1 \leq i \leq n\) выполнено \(1 \leq p_i \leq n\), и все \(p_1, p_2, \ldots, p_n\) различны. После этого он записал \(n\) значений \(next_1, next_2, \ldots, next_n\). Значение \(next_i\) равно минимальному индексу \(i < j \leq n\), такому что \(p_j > p_i\). Если такого \(j\) не существует, то определим значение как \(next_i = n + 1\).

Вечером Вася шел домой из школы, и из-за дождя тетрадь намокла. Теперь некоторые написанные числа невозможно разобрать. Перестановка, а также некоторые значения \(next_i\) полностью утеряны! Если для какого-то \(i\) значение \(next_i\) теперь неизвестно, то скажем, что \(next_i = -1\).

Вам даны значения \(next_1, next_2, \ldots, next_n\) (возможно, некоторые числа теперь равны \(-1\)). Помогите Васе найти любую такую перестановку \(p_1, p_2, \ldots, p_n\) чисел от \(1\) до \(n\), что он может записать её в тетрадь, и все значения \(next_i\), не равные \(-1\), будут посчитаны правильно.

Входные данные

В первой строке находится одно целое число \(t\) — количество тестовых случаев (\(1 \leq t \leq 100\,000\)).

В следующих \(2 \cdot t\) строках находится описание тестовых случаев, по две строки на каждый. В первой из этих строк находится единственное целое число \(n\) — количество чисел в перестановке, выписанной Васей (\(1 \leq n \leq 500\,000\)). В следующей строке находится \(n\) целых чисел \(next_1, next_2, \ldots, next_n\), разделенных пробелами (\(next_i = -1\) или \(i < next_i \leq n + 1\)).

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(500\,000\).

Во взломах разрешается использовать только один тестовый случай, то есть \(T = 1\).

Выходные данные

Выведите \(T\) строк, в \(i\)-й ответ на \(i\)-й тестовый случай.

Если таких перестановок \(p_1, p_2, \ldots, p_n\) чисел от \(1\) до \(n\), которые мог выписать Вася не существует, то выведите единственное число \(-1\).

Иначе выведите \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\), разделённых пробелами (\(1 \leq p_i \leq n\)). Все определённые значения \(next_i\), не равные \(-1\), должны быть вычислены верно из перестановки \(p_1, p_2, \ldots, p_n\) по определению из условия задачи. Если существует несколько таких перестановок, найдите любую.

Примечание

В первом тестовом случае для перестановки \(p = [1, 2, 3]\) получится \(next = [2, 3, 4]\), так как каждый элемент перестановки меньше следующего. Можно заметить, что это единственная подходящая перестановка.

Во третьем тестовом случае подойдет любая перестановка, так как все значения \(next_i\) неизвестны.

В четвертом тестовом случае не существует ни одной подходящей перестановки, поэтому ответ \(-1\).

B1. Кошачья вечеринка (упрощённая версия)

реализация Структуры данных *1500

Эта задача такая же как и следующая, но с меньшими ограничениями.

Широ только что переехала в новый дом. Она хочет позвать друзей в гости, чтобы поиграть в монополию. Однако её дом достаточно мал, так что она может позвать в гости не более одного друга за раз.

В каждый из \(n\) дней, начиная с дня, в который Широ переехала в новый дом, к ней будет в гости ровно одна кошка. Кошка приходящая в \(i\)-й день носит ленточку цвета \(u_i\). Широ хочет узнать наибольшее число \(x\), такое что если рассмотреть префикс из первых \(x\) дней, то можно убрать ровно один день из них, что каждый цвет ленточек, который встречался среди оставшихся \(x - 1\) дней встречается одинаковое число раз.

Например, рассмотрим следующую последовательность \(u_i\): \([2, 2, 1, 1, 5, 4, 4, 5]\). Тогда \(x = 7\) образует подходящий префикс, так как если удалить самый левый день с \(u_i = 5\), то получится что среди оставшихся \(x - 1\) дней каждый цвет встречается два раза. Обратите внимание, что \(x = 8\) не образует подходящий префикс, так как нужно убрать ровно один день.

Так как Широ всего лишь кошка, она не очень хороша в подсчётах и ей нужна ваша помощь с вычислением наибольшего подходящего префикса.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество дней.

Вторая строка содержит \(n\) целых чисел \(u_1, u_2, \ldots, u_n\) (\(1 \leq u_i \leq 10\)) — цвета ленточек у кошек-гостей.

Выходные данные

Выведите одно целое число \(x\) — максимальное количество дней в подходящем префиксе.

Примечание

В первом примере можно рассмотреть префикс из \(13\) дней, так как если убрать последний день из этого префиса, то все оставшиеся цвета \(1\), \(2\), \(3\), и \(4\) будут встречаться одинаковое число раз (\(3\) раза). Обратите внимание, что подходит также префикс из \(10\) дней (нужно удалить \(10\)-й день), однако требуется найти наибольший подходящий префикс.

В четвёртом примере, если рассмотреть префикс из первых \(6\) дней, то можно убрать третий день, тогда останутся цвета \(1\), \(2\), \(3\), \(4\) и \(5\), встречающиеся по одному разу.

B2. Кошачья вечеринка (усложнённая версия)

реализация Структуры данных *1600

Эта задача такая же как и предыдущая, но с большими ограничениями.

Широ только что переехала в новый дом. Она хочет позвать друзей в гости, чтобы поиграть в монополию. Однако её дом достаточно мал, так что она может позвать в гости не более одного друга за раз.

В каждый из \(n\) дней, начиная с дня, в который Широ переехала в новый дом, к ней будет в гости ровно одна кошка. Кошка приходящая в \(i\)-й день носит ленточку цвета \(u_i\). Широ хочет узнать наибольшее число \(x\), такое что если рассмотреть префикс из первых \(x\) дней, то можно убрать ровно один день из них, что каждый цвет ленточек, который встречался среди оставшихся \(x - 1\) дней встречается одинаковое число раз.

Например, рассмотрим следующую последовательность \(u_i\): \([2, 2, 1, 1, 5, 4, 4, 5]\). Тогда \(x = 7\) образует подходящий префикс, так как если удалить самый левый день с \(u_i = 5\), то получится что среди оставшихся \(x - 1\) дней каждый цвет встречается два раза. Обратите внимание, что \(x = 8\) не образует подходящий префикс, так как нужно убрать ровно один день.

Так как Широ всего лишь кошка, она не очень хороша в подсчётах и ей нужна ваша помощь с вычислением наибольшего подходящего префикса.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество дней.

Вторая строка содержит \(n\) целых чисел \(u_1, u_2, \ldots, u_n\) (\(1 \leq u_i \leq 10^5\)) — цвета ленточек у кошек-гостей.

Выходные данные

Выведите одно целое число \(x\) — максимальное количество дней в подходящем префиксе.

Примечание

В первом примере можно рассмотреть префикс из \(13\) дней, так как если убрать последний день из этого префиса, то все оставшиеся цвета \(1\), \(2\), \(3\), и \(4\) будут встречаться одинаковое число раз (\(3\) раза). Обратите внимание, что подходит также префикс из \(10\) дней (нужно удалить \(10\)-й день), однако требуется найти наибольший подходящий префикс.

В четвёртом примере, если рассмотреть префикс из первых \(6\) дней, то можно убрать третий день, тогда останутся цвета \(1\), \(2\), \(3\), \(4\) и \(5\), встречающиеся по одному разу.

C2. Передача энергии (усложнённая версия)

геометрия математика реализация Структуры данных *1900

Эта задача такая же как и предыдущая, но с большими ограничениями.

Воскресным утром, три друга Селена, Широ и Кэти решили отправится на прогулку к ближайшей электростанции (не повторяйте этого дома). Когда они туда пришли, кошки впечатлились огромной системой передачи энергии, состоящей из множества дымоходов, электрических полюсов и проводов. Будучи кошками, они сочли эти вещи просто гигантскими.

На входе на станцию висит карта, описывающая систему проводов электростанции. Селена лучше всего из друзей разбирается в математике. Он решил нарисовать карту на декартовой плоскости. Теперь каждый полюс это точка по координатам \((x_i, y_i)\). Так как все полюса различны, то различны и точки, представляющие их. Также каждые два полюса соединены друг с другом проводом, представляющим из себя бесконечную в обе стороны прямую на плоскости. В случае если более двух полюсов лежат на одной прямой, то они все соединены одним общим проводом.

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

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 1000\)) — количество электрических полюсов.

Каждая из \(n\) следующих строк содержит два целых числа \(x_i\) и \(y_i\) (\(-10^4 \le x_i, y_i \le 10^4\)) — координаты полюсов.

Гарантируется что все эти \(n\) точек различны.

Выходные данные

Выведите одно целое число — количество пересекающихся пар проводов.

Примечание

В первом примере:

Во втором примере:

Обратите внимание, что три полюса \((0, 0)\), \((0, 2)\) и \((0, 4)\) соединены одним проводом.

В третьем примере:

E. Волшебные перестановки

битмаски графы Конструктив математика Перебор Структуры данных *2400

Куро только что узнал о перестановках и этого его вдохновило придумать новый вид перестановок. Он выбрал \(n\) различных целых положительных чисел и сделал из них множество \(S\). Теперь он определяет волшебную перестановку следующим образом:

  • Это перестановка всех целых чисел от \(0\) до \(2^x - 1\), где \(x\) это какое-то неотрицательное целое число.
  • Побитовое исключающее или любых двух соседних элементов перестановки лежит в множестве \(S\).

Так как Куро очень восхищённо относится к волшебным перестановкам, то он хочет создать самую длинную возможную волшебную перестановку. Иначе говоря, он хочет найти такое наибольшее неотрицательное целое число \(x\), что существует волшебная перестановка целых чисел от \(0\) до \(2^x - 1\). Поскольку он немного новичок в вопросе перестановок, он хочет чтобы вы ему помогли и нашли это \(x\), а также волшебную перестановку для этого \(x\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество элементов в множестве \(S\).

Вторая строка содержит \(n\) различных целых чисел \(S_1, S_2, \ldots, S_n\) (\(1 \leq S_i \leq 2 \cdot 10^5\)) — элементы множества \(S\).

Выходные данные

В первой строке выведите наибольшее неотрицательное целое число \(x\), такое что существует волшебная перестановка чисел от \(0\) до \(2^x - 1\).

Затем выведите \(2^x\) целых чисел задающую волшебную перестановку чисел от \(0\) до \(2^x - 1\). В случае если существует несколько таких волшебных перестановок, выведите любую из них.

Примечание

В первом примере \(0, 1, 3, 2\) образует волшебную перестановку так как:

  • \(0 \oplus 1 = 1 \in S\)
  • \(1 \oplus 3 = 2 \in S\)
  • \(3 \oplus 2 = 1 \in S\)

Где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

F. Цена поездки

графы кратчайшие пути Структуры данных *3000

В стране Капипаленд, в которой живут Куро и Широ, есть \(n\) городов, пронумерованных от \(1\) до \(n\), и \(m\) двусторонних дорог их соединяющих, пронумерованных от \(1\) до \(m\), \(i\)-я дорога соединяет города \(u_i\) и \(v_i\). Путешествовать между городами достаточно непросто, поэтому крайне развита индустрия такси. Чтобы выжить конкуренцию с другим такси, каждая компания должна найти свой особый подход к клиентам.

Куро является владельцем одной такси-компании. Он хочет ввести новую ценовую политику в своей компании, согласно которой цена поездки зависит не от длины поездки, а от суммы цен дорог, по которым проедет такси. Цену каждой из \(m\) дорог назначает лично Куро.

В настоящий момент, цена \(i\)-й дороги равна \(w_i\) и соответственно цена поездки на такси по дорогам \(e_1, e_2, \ldots, e_k\) равна \(\sum_{i=1}^k w_{e_i}\).

Однако Куро сам по себе не очень решительный человек, так что он подготовил \(q\) планов по изменению цен дорог. Каждый из планов основан на изначальных ценах \(w_i\), за исключением одной дороги \(t_j\), цена которой меняется на \(x_j\). Обратите внимание, что все планы независимы друг от друга.

Широ является постоянным клиентом такси Куро, так как она использует такси между городами \(1\) и \(n\) каждый день. Так как она настолько регулярный клиент, Куро решил показать ей все \(q\) своих планов перед тем как их опубликовать. Широ интересуется, какую наименьшую цену ей придётся заплатить за поездку из города \(1\) в город \(n\) в каждом из планов Куро.

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(q\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le m, q \le 2 \cdot 10^5\)) — количество городов, количество дорог и количество планов, которые набросал Куро.

\(i\)-я из следующих \(m\) строк содержит три целых числа \(u_i\), \(v_i\) и \(w_i\) (\(1 \le u_i, v_i \le n\), \(1 \le w_i \le 10^9\), \(u_i \ne v_i\)) — концы и исходная цена \(i\)-й дороги.

Гарантируется, что существует хотя бы один способ добраться из города \(1\) в город \(n\) по данным \(m\) двусторонним дорогам.

Каждая из следующих \(q\) строк содержит два целых числа \(t_j\) и \(x_j\) (\(1 \leq t_j \leq m, 1 \leq x_j \leq 10^9\)) — номер дороги меняющейся в очередном плане и её новая цена.

Выходные данные

Выведите \(q\) целых чисел — наименьшую цену поездки, которую Широ придётся заплатить, чтобы добраться из города \(1\) в город \(n\) в каждом из \(q\) планов.

Примечание

В первом примере, дорожная система Капипаленд выглядит следующим образом, где число на дороге обозначает её изначальную цену:

В первом плане цены выглядят следующим образом:

Наименьшая возможная цену поездки Широ в этом плане равна \(4\), для этого ей нужно поехать по пути \(1 \rightarrow 4\).

Во втором плане цены выглядят следующим образом:

Наименьшая возможная цену поездки Широ в этом плане равна \(2\), для этого ей нужно поехать по пути \(1 \rightarrow 3 \rightarrow 4\).

В третьем плане цены выглядят следующим образом:

Наименьшая возможная цену поездки Широ в этом плане равна \(5\), для этого ей нужно поехать по пути \(1 \rightarrow 2 \rightarrow 4\).

B. Тренировки Поликарпа

жадные алгоритмы сортировки Структуры данных *1000

Поликарп хочет потренироваться перед очередным важным соревнованием по программированию. В течение первого дня его тренировок он хочет решить ровно \(1\) задачу, в течение второго дня — ровно \(2\) задачи, в течение третьего дня — ровно \(3\) задачи, и так далее. В течение \(k\)-го дня он хочет решить ровно \(k\) задач.

У Поликарпа есть список из \(n\) контестов, \(i\)-й контест состоит из \(a_i\) задач. В течение каждого дня Поликарп будет выбирать ровно один из контестов, который он еще не решал до этого, и решать его. Он решает ровно \(k\) задач из этого контеста. Остальные задачи исключаются из контеста. Если контестов, состоящих из не менее \(k\) задач, которые Поликарп еще не решал, в течение \(k\)-го дня нет, то Поликарп прекращает тренироваться.

Как много дней Поликарп сможет тренироваться, если будет выбирать контесты оптимально?

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество контестов.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)) — количество задач в \(i\)-м контесте.

Выходные данные

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

F. Служба доставки Вики

графы снм Структуры данных хэши *2400

В одной волшебной стране ровно \(n\) городов, пронумерованных \(1, 2, \dots, n\). Некоторые пары городов соединены волшебными цветными дорогами. Волшебство непостоянно, поэтому иногда между городами возникают новые дороги.

Работа ведьмы Вики — доставлять посылки из одних городов в другие. Вики — новичок, поэтому она может выполнить доставку, только если существует двойной радужный путь из начального города в конечный. Двойным радужным путем называется последовательность городов \(c_1, c_2, \dots, c_k\), удовлетворяющая следующим свойствам:

  • Для каждого \(i\), где \(1 \le i \le k - 1\), города \(c_i\) и \(c_{i + 1}\) соединены дорогой.
  • Для каждого \(i\), где \(1 \le i \le \frac{k - 1}{2}\), дороги, соединяющие \(c_{2i}\) с городами \(c_{2i - 1}\) и \(c_{2i + 1}\), должны иметь один и тот же цвет.

Например, если \(k = 5\), то дорога между городами \(c_1\) и \(c_2\) должна быть того же цвета, что и дорога между \(c_2\) и \(c_3\), а дорога между \(c_3\) и \(c_4\) должна иметь тот же цвет, что и дорога между \(c_4\) и \(c_5\).

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

Входные данные

Первая строка содержит четыре целых числа \(n\), \(m\), \(c\) и \(q\) (\(2 \le n \le 10^5\), \(1 \le m, c, q \le 10^5\)) — число городов, число дорог изначально, число различных цветов, которые может иметь дорога, и количество событий, соответственно.

Каждая из следующих \(m\) строк содержит три целых числа \(x\), \(y\) и \(z\) (\(1 \le x, y \le n\), \(1 \le z \le c\)), описывающих, что изначально существует двунаправленная дорога цвета \(z\) между городами \(x\) и \(y\).

Далее следуют \(q\) строк, описывающих события. Каждое событие описано в одном из следующих форматов:

  1. + x y z (\(1 \le x, y \le n\), \(1 \le z \le c\)): означает, что между городами \(x\) и \(y\) появляется дорога цвета \(z\);
  2. ? x y (\(1 \le x, y \le n\)): означает, что вы должны определить, может ли Вики совершить доставку из города \(x\) в город \(y\). Гарантируется, что \(x \neq y\).

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

Выходные данные

Для каждого события сторого типа выведите одну строку, содержащую «Yes» (без кавычек), если доставку можно осуществить, и «No» (без кавычек) иначе.

Примечание

Пример соответствует рисунку.

Для первой доставки Вики может использовать путь 1, 2, 3, 4, который является двойным радужным. Вторую доставку нельзя осуществить, так как лучшее, что может сделать Вики — добраться до города \(3\). После добавления новой дороги между городами \(1\) и \(3\), Вики может добраться из города \(4\) в город \(1\) по двойному радужному пути 4, 3, 1.

E. Удаление отрезка

Бинарный поиск Комбинаторика Структуры данных *2100

Вам задан массив, состоящий из \(n\) целых чисел \(a_1, a_2, \dots , a_n\) и целое число \(x\). Гарантируется, что для любого \(i\) выполняется \(1 \le a_i \le x\).

Функция \(f(l, r)\) удаляет все числа из массива \(a\), для которых выполняется \(l \le a_i \le r\), и возвращает полученный массив. Например, если \(a = [4, 1, 1, 4, 5, 2, 4, 3]\), тогда \(f(2, 4) = [1, 1, 5]\).

Вам нужно посчитать количество пар \((l, r)\), таких, что \(1 \le l \le r \le x\) и массив \(f(l, r)\) отсортирован в порядке неубывания. Обратите внимание, что пустой массив тоже считается отсортированным.

Входные данные

Первая строка содержит два числа \(n\) и \(x\) (\(1 \le n, x \le 10^6\)) — длина массива \(a\) и верхнее ограничение на его значения, соответственно.

Вторая строка содержит \(n\) чисел \(a_1, a_2, \dots a_n\) (\(1 \le a_i \le x\)).

Выходные данные

Выведите количество пар \(1 \le l \le r \le x\), таких, что массив \(f(l, r)\) отсортирован в порядке неубывания.

Примечание

В первом тестовом примере подходящие пары — это \((1, 1)\), \((1, 2)\), \((1, 3)\) и \((2, 3)\).

Во втором тестовом примере подходящие пары — это \((1, 3)\), \((1, 4)\), \((2, 3)\), \((2, 4)\), \((3, 3)\) и \((3, 4)\).

F. Скалярные запросы

Комбинаторика математика сортировки Структуры данных *2300

Вам задан массив \(a_1, a_2, \dots, a_n\). Все \(a_i\) попарно различные.

Определим функцию \(f(l, r)\) следующим образом:

  • создадим массив \(b_1, b_2, \dots, b_{r - l + 1}\), где \(b_i = a_{l - 1 + i}\);
  • отсортируем массив \(b\) в порядке возрастания;
  • результатом функции \(f(l, r)\) назовем значение \(\sum\limits_{i = 1}^{r - l + 1}{b_i \cdot i}\).

Посчитайте \(\left(\sum\limits_{1 \le l \le r \le n}{f(l, r)}\right) \mod (10^9+7)\). Другими словами — сумму функций \(f\) для всех подотрезков массива \(a\) по модулю \(10^9+7\).

Входные данные

В первой строке содержится целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — длина массива \(a\).

Во второй строке содержится \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\), \(a_i \neq a_j\) for \(i \neq j\)) — массив \(a\).

Выходные данные

Выведите единственное число — сумму функций \(f\) для всех подотрезков массива \(a\) по модулю \(10^9+7\).

Примечание

Описание первого примера:

  • \(f(1, 1) = 5 \cdot 1 = 5\);
  • \(f(1, 2) = 2 \cdot 1 + 5 \cdot 2 = 12\);
  • \(f(1, 3) = 2 \cdot 1 + 4 \cdot 2 + 5 \cdot 3 = 25\);
  • \(f(1, 4) = 2 \cdot 1 + 4 \cdot 2 + 5 \cdot 3 + 7 \cdot 4 = 53\);
  • \(f(2, 2) = 2 \cdot 1 = 2\);
  • \(f(2, 3) = 2 \cdot 1 + 4 \cdot 2 = 10\);
  • \(f(2, 4) = 2 \cdot 1 + 4 \cdot 2 + 7 \cdot 3 = 31\);
  • \(f(3, 3) = 4 \cdot 1 = 4\);
  • \(f(3, 4) = 4 \cdot 1 + 7 \cdot 2 = 18\);
  • \(f(4, 4) = 7 \cdot 1 = 7\);

E. Дерево или не дерево

графы Деревья разделяй и властвуй реализация Структуры данных *2900

Дан неориентированный связный граф G из n вершин и n ребер. G не содержит петель и кратных ребер. Пусть у каждого ребра этого графа есть два состояния: включено и выключено. Изначально все ребра выключены.

Также вам даны m запросов вида (v, u) — изменить состояние всех ребер на кратчайшем пути из вершины v в вершину u в графе G, если таких путей несколько, выбирается лексикографически наименьший. Более формально, рассмотрим все кратчайшие пути из вершины v в вершину u как последовательности вершин v, v1, v2, ..., u. Среди таких последовательностей выбирается лексикографически наименьшая.

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

Входные данные

В первой строке задано два целых числа — n и m (3 ≤ n ≤ 105, 1 ≤ m ≤ 105). Далее в n строках заданы ребра графа в виде a b (1 ≤ a, b ≤ n). В следующих m строках заданы запросы в виде v u (1 ≤ v, u ≤ n).

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

Выходные данные

Выведите m строк по одному целому числу в каждой — ответы на запросы.

Примечание

Рассмотрим первый пример. Будем синим выделять на рисунке включенные ребра.

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

  • Граф после запроса v = 5, u = 4. Видно, что в графе 3 компоненты, если рассматривать только включенные ребра.

  • Граф после запроса v = 1, u = 5. Видно, что в графе 3 компоненты, если рассматривать только включенные ребра.

Лексикографическое сравнение двух последовательностей одинаковой длины (k чисел) происходит следующим образом. Последовательность x лексикографически меньше последовательности y если существует такое i (1 ≤ i ≤ k), что xi < yi, а для любого j (1 ≤ j < i) xj = yj.

D. Декодирование числовых последовательностей

*особая задача реализация Структуры данных

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

Поликарп разработал следующий метод кодирования:

  • Будем считать, что последовательности пронумерованы от \(1\) до \(n\).
  • Допишем к каждой последовательности в конец специальный маркер окончания последовательности — элемент равный -1.
  • Результат кодирования — это одна новая последовательность, которая содержит в себе все элементы заданных \(n\) в специальном порядке: сначала добавим в результат кодирования все первые элементы последовательностей (в порядке от \(1\)-й до \(n\)-й), затем все вторые элементы (в порядке от \(1\)-й до \(n\)-й) и так далее, если у последовательности нет очередного элемента, то она просто пропускается. Процесс заканчивается, когда добавлены все элементы всех последовательностей.

Например, если требуется закодировать три последовательности \([3, 1, 4]\), \([2, 7]\) и \([1, 2, 3, 4]\), то последовательность действий будет такая:

  • модифицируем все три последовательности, добавив туда по -1: \([3, 1, 4, -1]\), \([2, 7, -1]\) и \([1, 2, 3, 4, -1]\);
  • выпишем все первые элементы, получим \([3, 2, 1]\);
  • затем выпишем все вторые элементы, получим \([3, 2, 1, 1, 7, 2]\);
  • затем выпишем все третьи элементы, получим \([3, 2, 1, 1, 7, 2, 4, -1, 3]\);
  • затем выпишем все четвёртые элементы, получим \([3, 2, 1, 1, 7, 2, 4, -1, 3, -1, 4]\) (обратите внимание, что вторая последовательность уже закончилась);
  • затем выпишем все пятые элементы, получим \([3, 2, 1, 1, 7, 2, 4, -1, 3, -1, 4, -1]\) (обратите внимание, что первая и вторая последовательности уже закончились);
  • теперь закончились все последовательности, и процесс кодирования завершается;
  • результат кодирования равен \([3, 2, 1, 1, 7, 2, 4, -1, 3, -1, 4, -1]\).

Ваша задача — реализовать декодирование по заданному результату кодирования.

Входные данные

В первой строке записано целое число \(m\) (\(1 \le m \le 3\cdot10^5\)) — длина результата кодирования. Далее во второй строке записан результат кодирования в виде последовательности целых чисел \(b_1, b_2, \dots, b_m\) (\(-1 \le b_i \le 100\)).

Гарантируется, что в последовательностях до кодирования были только неотрицательные целые числа от \(0\) до \(100\), что вам в самом деле задан результат корректного кодирования (иными словами, гарантируется, что ответ существует). Возможно, что одна или несколько последовательностей до кодирования были пусты.

Выходные данные

Выведите \(n\), где \(n\) — количество закодированных последовательностей. Далее выведите \(n\) строк в формате \(k_i, a_{i1}, a_{i2}, \dots, a_{ik_i}\), где \(k_i\) — длина \(i\)-й последовательности, а \(a_{i1}, a_{i2}, \dots, a_{ik_i}\) — её элементы. Числа в строках разделяйте пробелами. Обратите внимание, что кодирование устроено таким образом, что ответ всегда определён однозначно.

E. Nauuo и ODT

Структуры данных *3300

Nauuo — девочка, которая любит путешествовать.

Однажды она пришла к дереву, называемому Old Driver Tree, если буквально, то к дереву, на котором был старый водитель.

Дерево — это связный граф с \(n\) вершинами и \(n-1\) ребром. У каждой вершины есть цвет, и Nauuo проедет по простому пути в ODT на машине старого водителя.

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

Также ODT иногда ремонтируется, поэтому к нему будет произведено \(m\) модификаций, каждая модификация изменяет цвет вершины. Nauuo также хочет узнать ответ после каждой модификации.

Обратите внимания, что в этой задаче мы считаем, что простой путь из \(u\) в \(v\) и простой путь из \(v\) в \(u\) различны тогда и только тогда, когда \(u\ne v\).

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(2\le n\le 4\cdot 10^5\), \(1\le m\le 4\cdot 10^5\)) — количество вершин в дереве и количество модификаций.

Во второй строке записаны \(n\) целых чисел \(c_1,c_2,\ldots,c_n\) (\(1\le c_i\le n\)), где \(c_i\) означает исходный цвет вершины \(i\).

В каждой из следующих \(n-1\) строк записаны два целых числа \(u\) и \(v\) (\(1\le u,v\le n\)), обозначающие ребро между вершинами \(u\) и \(v\). Гарантируется, что данные ребра образуют дерево.

В каждой из следующих \(m\) строк записаны два целых числа \(u\) и \(x\) (\(1\le u,x\le n\)), описывающих модификацию, которая меняет цвет вершины \(u\) на \(x\).

Выходные данные

Выведите \(m+1\) целое число — первое из них должно быть равно ответу в начале, остальные должны содержать ответы после модификаций в данном порядке.

Примечание

Пример 1

Количество цветов на каждом простом пути в начале:

F. Nauuo и ошибка

Структуры данных *3300

Nauuo — девочка, которая любит программировать.

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

Она написала следующий код и получила вердикт «Неправильный ответ».

Вскоре она нашла свою ошибку: функция ModAdd работает только для чисел в полуинтервале \([0,p)\), но числа в этой задаче могут быть вне этого диапазона. Она заинтересовалась неправильной функцией и захотела узнать результат ее выполнения.

К сожалению исходный код работает слишком долго, так что она попросила вас помочь.

Вам дан массив целых чисел \(a_1,a_2,\ldots,a_n\) и число \(p\), Nauuo сделает \(m\) запросов. В каждом запросе вам даны \(l\) и \(r\), вам нужно посчитать результат выполнения Sum(a,l,r,p). Вы можете посмотреть определение функции Sum в данном псевдокоде.

Обратите внимания, что числа в данном коде не переполняются.

Входные данные

В первой строке записаны три целых числа \(n\), \(m\), \(p\) (\(1 \le n \le 10^6\), \(1 \le m \le 2 \cdot 10^5\), \(1 \le p \le 10^9\)) — длина данного массива, количество запросов и модуль. Обратите внимание, что модуль используется только в функции ModAdd.

Во второй строке записаны \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(-10^9\le a_i\le10^9\)) — данный массив.

В каждой из следующих \(m\) строк записаны два целых числа \(l\), \(r\) (\(1\le l\le r\le n\)) — вам нужно посчитать значение функции Sum(a,l,r,p).

Выходные данные

Выведите \(m\) целы чисел, ответов на запросы в данном порядке.

B. Поймай переполнение!

Разбор выражений реализация Структуры данных *1600

Задана функция \(f\), написанная на довольно примитивном языке. Функция принимает целое значение, которое сразу записывается в переменную \(x\). \(x\) — это целочисленная переменная, которая может принимать значения от \(0\) до \(2^{32}-1\). Функция содержит три типа команд:

  • for \(n\) — цикл for;
  • end — каждая команда между «for \(n\)» и соответствующим «end» выполняется \(n\) раз;
  • add — прибавляет 1 к \(x\).

После выполнения команд возвращается значение \(x\).

Каждый «for \(n\)» имеет парный «end», поэтому гарантируется, что функция корректна. За «for \(n\)» может сразу следовать «end». «add» может быть расположен вне циклов for.

Заметили, что команда «add» может переполнить значение \(x\)! Это значит, что значение \(x\) становится больше \(2^{32}-1\) после некоторой команды «add».

Теперь запускается \(f(0)\), а ваша задача — узнать, корректно ли полученное значение \(x\) или переполнение сделает его некорректным.

Если произошло переполнение, то выведите «OVERFLOW!!!», иначе выведите полученное значение \(x\).

Входные данные

В первой строке записано одно целое число \(l\) (\(1 \le l \le 10^5\)) — количество строк в функции.

В каждой из следующих \(l\) строк записана одна команда одного из трех типов:

  • for \(n\) (\(1 \le n \le 100\)) — цикл for;
  • end — каждая команда между «for \(n\)» и соответствующим «end» выполняется \(n\) раз;
  • add — прибавляет 1 к \(x\).
Выходные данные

Если во время выполнения \(f(0)\) произошло переполнение, то выведите «OVERFLOW!!!», иначе выведите полученное значение \(x\).

Примечание

В первом примере первая команда «add» выполнится 1 раз, вторая — 150 раз и последняя — 10 раз. Обратите внимание, что за «for \(n\)» может сразу следовать «end» и что «add» может быть расположен вне циклов for.

Во втором примере нет команд «add», поэтому полученное значение равно 0.

В третьем примере команда «add» выполняется слишком много раз, что делает значение \(x\) больше \(2^{32}-1\).

E. Минимальное покрытие отрезков

Деревья дп жадные алгоритмы поиск в глубину и подобное разделяй и властвуй реализация Структуры данных *2200

Даны \(n\) отрезков в формате \([l; r]\) на числовой прямой.

Также даны \(m\) запросов в формате \([x; y]\). Какое минимальное число отрезков надо взять так, чтобы каждая точка (не обязательно целочисленная) от \(x\) до \(y\) была покрыта хотя бы одним из них?

Если нельзя выбрать отрезки так, чтобы каждая точка от \(x\) до \(y\) была покрыта, тогда выведите -1 на этот запрос.

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество отрезков и количество запросов, соответственно.

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

В каждой из следующих \(m\) строк записаны по два целых числа \(x_i\) и \(y_i\) (\(0 \le x_i < y_i \le 5 \cdot 10^5\)) — запросы.

Выходные данные

Выведите \(m\) целых чисел. \(i\)-е число должно быть ответом на \(i\)-й запрос: либо минимальное число отрезков необходимое, чтобы каждая точка (не обязательно целочисленная) от \(x_i\) до \(y_i\) была покрыта хотя бы одним из них, либо -1, если нельзя выбрать отрезки так, чтобы каждая точка от \(x_i\) до \(y_i\) была покрыта.

Примечание

В первом примере три запроса:

  1. запрос \([1; 3]\) может быть покрыт отрезком \([1; 3]\);
  2. запрос \([1; 4]\) может быть покрыт отрезками \([1; 3]\) и \([2; 4]\). Нельзя покрыть \([1; 4]\) одним отрезком;
  3. запрос \([3; 4]\) может быть покрыт отрезком \([2; 4]\); Не важно, что покрыты какие-то точки вне данного запроса.

Во втором примере четыре запроса:

  1. запрос \([1; 2]\) может быть покрыт отрезком \([1; 3]\). Обратите внимание, что можно выбрать любой из отрезков \([1; 3]\);
  2. запрос \([1; 3]\) может быть покрыт отрезком \([1; 3]\);
  3. запрос \([1; 4]\) не может быть покрыт никаким набором отрезков;
  4. запрос \([1; 5]\) не может быть покрыт никаким набором отрезков. Обратите внимание, что отрезки \([1; 3]\) и \([4; 5]\) вместе не покрывают \([1; 5]\), потому что даже нецелые точки должны быть покрыты. Здесь \(3.5\) не покрыта, например.

F. Количество подперестановок

математика Перебор разделяй и властвуй Структуры данных хэши *2500

У вас есть массив \(a_1, a_2, \dots, a_n\).

Назовем подотрезок \(a_l, a_{l + 1}, \dots , a_r\) этого массива подперестановкой если он содержит все числа от \(1\) до \(r-l+1\) ровно по одному разу. Например, массив \(a = [2, 2, 1, 3, 2, 3, 1]\) содержит \(6\) подотрезков, являющихся подперестановками: \([a_2 \dots a_3]\), \([a_2 \dots a_4]\), \([a_3 \dots a_3]\), \([a_3 \dots a_5]\), \([a_5 \dots a_7]\), \([a_7 \dots a_7]\).

Вам нужно посчитать количество подперестановок.

Входные данные

Первая строка содержит число \(n\) (\(1 \le n \le 3 \cdot 10^5\)).

Вторая строка содержит \(n\) чисел \(a_1, a_2, \dots , a_n\) (\(1 \le a_i \le n\)).

Этот массив может содержать одинаковые числа.

Выходные данные

В единственной строке выведите количество подперестановок массива \(a\).

Примечание

В первом тестовом примере \(7\) подперестановок: \([1, 4]\), \([3, 3]\), \([3, 6]\), \([4, 7]\), \([6, 7]\), \([7, 7]\) и \([7, 8]\).

Во втором тестовом примере \(6\) подперестановок: \([1, 1]\), \([2, 2]\), \([2, 3]\), \([3, 4]\), \([4, 4]\) и \([4, 5]\).

G. Очередная задача на разбиения

геометрия дп разделяй и властвуй Структуры данных *3000

Вам задан массив \(a_1, a_2, \dots, a_n\). Вам необходимо разделить его на \(k\) подотрезков (так, что каждый элемент принадлежит ровно одному подотрезку).

Весом подотрезка \(a_l, a_{l+1}, \dots, a_r\) назовем значение \((r - l + 1) \cdot \max\limits_{l \le i \le r}(a_i)\). Весом разбиения — суммарный вес его подотрезков.

Найдите разбиение минимального веса.

Входные данные

В первой строке заданы два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^4\), \(1 \le k \le \min(100, n)\)) — длина массива \(a\) и количество подотрезков в разбиении.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^4\)) — массив \(a\).

Выходные данные

Выведите единственное число — минимальный вес среди всех возможных разбиений.

Примечание

Оптимальное разбиение в первом примере: \(6\) \(1\) \(7\) \(\bigg|\) \(4\).

Оптимальное разбиение во втором примере: \(6\) \(\bigg|\) \(1\) \(\bigg|\) \(7\) \(4\).

Одно из оптимальных разбиений в третьем примере: \(5\) \(\bigg|\) \(1\) \(5\) \(\bigg|\) \(1\) \(\bigg|\) \(5\).

G. Самая удивительная вершина

поиск в глубину и подобное Структуры данных *3000

Вам дано корневое дерево с \(n\) вершинами. Вершины нумеруются от \(1\) до \(n\); корнем является вершина \(1\).

С каждой вершиной связаны два числа: \(a_i\) и \(b_i\). Обозначим множество всех предков \(v\) (включая саму вершину \(v\)) как \(R(v)\). Обозначим крутость вершины \(v\) как

\(\)\left| \sum_{w \in R(v)} a_w\right| \cdot \left|\sum_{w \in R(v)} b_w\right|,\(\)

где \(|x|\) обозначает абсолютную величину \(x\).

Нужно выполнить \(q\) запросов двух типов:

  • 1 v x — увеличить \(a_v\) на положительное число \(x\).
  • 2 v — найти максимальную крутость в поддереве вершины \(v\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \leq n \leq 2\cdot 10^5, 1 \leq q \leq 10^5\)) — количество вершин в дереве и количество запросов соответственно.

Вторая строка содержит \(n - 1\) целых чисел \(p_2, p_3, \dots, p_n\) (\(1 \leq p_i < i\)), где \(p_i\) значит, что есть ребро между вершинами \(i\) и \(p_i\).

Третья строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-5000 \leq a_i \leq 5000\)) — начальные значения \(a_i\) для каждой вершины.

Четвертая строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(-5000 \leq b_i \leq 5000\)) — значения \(b_i\) для каждой вершины.

Каждая из следующих \(q\) строк описывает запрос. Каждая из них имеет одну из двух форм:

  • 1 v x  (\(1 \leq v \leq n\), \(1\leq x \leq 5000\)).
  • 2 v  (\(1 \leq v \leq n\)).
Выходные данные

Для каждого запроса второго типа нужно в отдельной строке вывести максимальную крутость в соответствующем поддереве.

Примечание

Начальная крутость вершин равна \([100, 91, 57, 64, 57]\). Самая крутая вершина в поддереве вершины \(1\) (первый запрос) — это вершина \(1\), а самая крутая вершина в поддереве вершины \(2\) (второй запрос) — это вершина \(2\).

После первого обновления (третий запрос), крутость вершин станет равна \([100, 169, 57, 160, 57]\), и поэтому самая крутая вершина во всем дереве (четвертый запрос) теперь \(2\).

После второго обновления (пятый запрос), крутость вершин станет равна \([100, 234, 57, 240, 152]\), поэтому самая крутая вершина (шестой запрос) теперь \(4\).

A. Валера и дек

реализация Структуры данных *1500

Недавно на курсе по алгоритмам и структурам данных Валера научился пользоваться деком. Он построил дек, заполненный \(n\) элементами. \(i\)-й элемент равен \(a_i\) (\(i\) = \(1, 2, \ldots, n\)). Он последовательно берет из дека два первых (то есть крайних слева) элемента (назовем их \(A\) и \(B\) соответственно) и делает следующее: если \(A > B\), то он \(A\) записывает в начало, а \(B\) записывает в конец дека, иначе он записывает в начало \(B\), а \(A\) записывает в конец дека. Назовем эту последовательность действий операцией.

Например если дек был \([2, 3, 4, 5, 1]\), после операции он запишет \(B=3\) в начало и \(A=2\) в конец, таким образом он получит \([3, 4, 5, 1, 2]\).

Преподаватель курса, увидев увлеченного своим делом Валеру, подошел к нему и задал ему \(q\) вопросов. Каждый вопрос состоит из единственного числа \(m_j\) \((j = 1, 2, \ldots, q)\). Требуется для каждого вопроса ответить какие два элемента он вытащит на \(m_j\)-й операции.

Обратите внимание, что запросы независимы, а числа \(A\) и \(B\) для каждого из запросов нужно вывести в том порядке, в котором они будут вытащены из дека.

Дек — структура данных, представляющая из себя список элементов, в которой добавление новых элементов и удаление существующих производится с обоих концов.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2 \leq n \leq 10^5\), \(0 \leq q \leq 3 \cdot 10^5\)) — количество элементов в деке и количество вопросов преподавателя соответственно. Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\), где \(a_i\) \((0 \leq a_i \leq 10^9)\) — элемент дека в \(i\)-й позиции. Следующие \(q\) строк содержат по одному числу, обозначающее \(m_j\) (\(1 \leq m_j \leq 10^{18}\)).

Выходные данные

Для каждого вопроса преподавателя выведите два числа \(A\) и \(B\) — числа, которые вытащит Валера из дека на \(m_j\)-й операции.

Примечание
    Рассмотрим все 10 шагов для первого теста подробно:
  1. \([1, 2, 3, 4, 5]\) — на первой операции \(A\) и \(B\) равны соответственно \(1\) и \(2\).

    Значит, \(2\) мы запишем в начало дека, а \(1\) — в конец.

    Получим следующее состояние дека: \([2, 3, 4, 5, 1]\).

  2. \([2, 3, 4, 5, 1] \Rightarrow A = 2, B = 3\).
  3. \([3, 4, 5, 1, 2]\)
  4. \([4, 5, 1, 2, 3]\)
  5. \([5, 1, 2, 3, 4]\)
  6. \([5, 2, 3, 4, 1]\)
  7. \([5, 3, 4, 1, 2]\)
  8. \([5, 4, 1, 2, 3]\)
  9. \([5, 1, 2, 3, 4]\)
  10. \([5, 2, 3, 4, 1] \Rightarrow A = 5, B = 2\).

C. Сергей и школьная столовая

Бинарный поиск Деревья жадные алгоритмы математика Паросочетания реализация Структуры данных *2200

Сергей пришел в школьную столовую и с ужасом обнаружил, что там уже очередь из целых \(m\) человек! Теперь он не уверен, стоит ли дожидаться конца этой очереди, поэтому хочет узнать, какое же блюдо ему достанется, если он это сделает. Так как Сергей устал после занятий, он попросил вас посчитать это за него.

Всего в столовой есть \(n\) блюд со стоимостями \(a_1, a_2, \ldots, a_n\). Также есть очередь из \(m\) человек, у которых есть \(b_1, \ldots, b_m\) тугриков (школьники пронумерованы в том же порядке, как они стоят в очереди, то есть \(b_1\) означает, сколько тугриков у школьника, который стоит в очереди первым, а \(b_m\) — сколько у школьника, стоящего последним).

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

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

Еще в школе Сергея сейчас нестабильная экономическая ситуация, поэтому, иногда могут изменяться стоимости некоторых блюд или количество денег у некоторых школьников. Поэтому вам нужно обработать \(q\) запросов двух типов:

  • изменить \(a_i\) на \(x\). То есть стоимость \(i\) блюда становится равна \(x\).
  • изменить \(b_i\) на \(x\). То есть у \(i\) школьника становится \(x\) тугриков.

После каждого запроса нужно вывести стоимость блюда, которое получит Сергей, если дождется своей очереди, или \(-1\), если к этому моменту уже ничего не останется.

Входные данные

В первой строке вводятся числа \(n\) и \(m\) (\(1 \leq n, m \leq 300\ 000\)) — количество блюд и количество школьников в очереди. Во второй строке вводятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^{6}\)) — элементы массива \(a\). В третьей строке вводятся \(m\) целых чисел \(b_1, b_2, \ldots, b_{m}\) (\(1 \leq b_i \leq 10^{6}\)) — элементы массива \(b\). В четвертой строке вводится целое число \(q\) (\(1 \leq q \leq 300\ 000\)) — количество запросов.

В следующих \(q\) строках вводятся запросы одного из двух типов, по одному в строке:

  • если запрос первого типа, то вводится \(1\), затем вводятся целые числа \(i\) и \(x\) (\(1 \leq i \leq n\), \(1 \leq x \leq 10^{6}\)), что значит, что \(a_i\) становится равно \(x\).
  • если запрос второго типа, то вводится \(2\), затем вводятся целые числа \(i\) и \(x\) (\(1 \leq i \leq m\), \(1 \leq x \leq 10^{6}\)), что значит, что \(b_i\) становится равно \(x\).
Выходные данные

Выведите \(q\) строк, \(i\)-я из которых содержит ответ на вопрос Сергея после \(i\) изменения (стоимость блюда, которое получит Сергей, если дождется своей очереди, или \(-1\), если к этому моменту уже ничего не останется).

Примечание

В первом примере после первого запроса в столовой есть одно блюдо стоимостью \(100\) тугриков и один школьник с одним тугриком, поэтому Сергей купит блюдо со стоимостью \(100\).

Во втором примере после первого запроса есть одно блюдо со стоимостью один тугрик и один школьник, у которого есть \(100\) тугриков, поэтому Сергей ничего не получит.

В третьем примере после первого запроса никто не сможет купить блюдо стоимостью \(8\), так что его получит Сергей. После второго запроса все блюда уже будут куплены до того, как настанет очередь Сергея. После третьего запроса запросе третий и пятый школьники купят соответственно первое и второе блюдо, а четвертое уже не купит никто.

D. Фёдор идет в президенты

Деревья дп Структуры данных *2700

Фёдор выдвигается в президенты Байтландии! На дебатах (да-да!) его, конечно же, спросят, как он собирается решать транспортную проблему Байтландии? Дело действительно непростое, так как транспортная система Байтландии сейчас представляет собой дерево (связный граф без циклов). В министерстве транспорта Байтландии команда Федора выяснила, что средств в казне хватит на постройку всего одной дополнительной дороги. На дебатах Фёдор собирается сказать, что построит эту дорогу так, чтобы в стране было как можно больше различных простых путей. Простой путь — это путь, который проходит через каждую вершину не более одного раза. (два простых пути называются различными, если различается множество ребер, в них входящих).

Однако наука Байтландии в упадке, и команде Фёдора не удалось найти ученых, которые быстро выяснят, а какого же максимальноого количества простых путей можно достичь добавлением в транспортную систему одного ребра? Поэтому он обратился к вам. Ответьте на этот вопрос.

Можно добавлять ребро между вершинами, между которыми оно уже есть, но нельзя добавлять петлю.

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

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \leq n \leq 500\ 000\)) — количество вершин.

Каждая из следующих \(n - 1\) строк содержит два целых числа \(v_i\) и \(u_i\) (\(1 \leq v_i, u_i \leq n\)). Гарантируется что граф — дерево.

Выходные данные

Выведите одно число — максимальное количество простых путей, которого можно добиться добавлением в граф ровно одного ребра.

D. Ирригация

Бинарный поиск Деревья реализация сортировки Структуры данных *2200

Мальчика Мишу с юных лет волновали вопросы доставки воды. вот почему мама Миши отправила сына на ежегодную инновационную олимпиаду по ирригации (ИОИ). На этой олимпиаде школьники со всех концов Берляндии соревнуются в умении доставить воду для поливки растений самыми причудливыми способами. Проведение подобной олимпиады весьма затратно, поэтому спустя \(n\) первых проведений олимпиады было решено ввести правило, по которому будет определяться место проведения соревнования в следующий год.

Город для проведения олимпиады выбирается следующим образом: всего в Берляндии есть \(m\) городов, пронумерованных от \(1\) до \(m\), готовых принять соревнование. Каждый год олимпиада проводится в городе, в котором она проводилась наименьшее число раз. Если таких городов несколько, то олимпиада проводится в городе с наименьшим номером среди городов с минимальным числом проведений олимпиады.

Мишина мама очень волнуется за сына, поэтому её интересует, в каком городе будет проходить олимпиада в определённые годы. Единственная информация, которой располагает мама Миши, — места проведения олимпиады в первые \(n\) лет. Помогите маме Миши, и она попросит Мишу не залить вашу квартиру.

Входные данные

В первой строке заданы три целых числа \(n\), \(m\) и \(q\) (\(1 \leq n, m, q \leq 500\,000\)) — количество проведений олимпиады до введения правила, количество городов в Берляндии, готовых провести олимпиаду, и число лет, про которые маму Миши интересует место проведения олимпиады, соответственно.

В следующей строке содержится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq m\)), где \(a_i\) — номер города, в котором проводилась олимпиада в год \(i\). Обратите внимание, что до принятия правила место проведения олимпиады могло выбираться произвольным образом.

В следующих \(q\) строках заданы целые числа \(k_i\) (\(n + 1 \leq k_i \leq 10^{18}\)) — номера годов, для которых маму Миши интересует место проведения олимпиады.

Выходные данные

Выведите \(q\) целых чисел. В строке с номером \(i\) выведите одно целое число — место проведения олимпиады в год \(k_i\).

Примечание

В первом примере Мишина мама интересуется о первых \(10\) годах после принятия нового правила, в эти года олимпиада пройдёт в городах 4, 3, 4, 2, 3, 4, 1, 2, 3, 4.

Во втором примере после принятия нового правила олимпиада пройдёт в городах 2, 3, 1, 2, 3, 5, 1, 2, 3, 4, 5, 1.

C. Красивые строфы

жадные алгоритмы Строки Структуры данных *1700

Вам дано \(n\) слов, состоящих из строчных букв алфавита. Все слова имеют как минимум одну гласную букву. Вы хотите выбрать некоторые из заданных слов и составить из них как можно больше красивых строф.

Каждая строфа состоит из двух строк. Каждая строка состоит из двух слов, разделенных пробелом.

Строфа красивая тогда и только тогда, когда строфа удовлетворяет всем условиям ниже.

  • Количество гласных в первом слове первой строки совпадает с количеством гласных в первом слове второй строки.
  • Количество гласных во втором слова первой строки совпадает с количеством гласных во втором слове второй строки.
  • Последняя гласная в первой строке совпадает с последней гласной во второй строке. Обратите внимание, что после гласной могут быть согласные.

Буквы «a», «e», «o», «i» и «u» гласные. Обратите внимание, что «y» никогда не является гласной.

Пример красивой строфы:

"hello hellooowww"

"whatsup yowowowow"

она красивая, потому что есть две гласные буквы в «hello» и «whatsup», четыре гласные буквы в «hellooowww» и «yowowowow» (не забывайте, что «y» — не гласная), и последняя гласная — это «o».

Пример некрасивой строфы:

"hey man"

"iam mcdic"

эта строфа некрасивая, потому что слова «hey» и «iam» имеют неодинаковое количество гласных букв и две строки имеют разные последние гласные («a» в первой и «i» во второй).

Сколько красивых строф вы можете написать по заданным словам? Обратите внимание, что вы не можете использовать слово больше раз, чем оно было дано вам. Например, если слово было дано три раза, вы можете использовать это слово максимум три раза.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^{5}\)) — количество слов.

\(i\)-я из следующих \(n\) строк содержит строку \(s_{i}\), которая состоит из английских букв в нижнем регистре, — \(i\)-е слово. Гарантируется, что сумма длин всех строк не превышает \(10^{6}\). Все слова имеют как минимум одну гласную букву.

Выходные данные

В первой строке выведите \(m\) — максимальное количество красивых строф.

В следующих \(2m\) строках выведите \(m\) красивых строф (две строки на строфу).

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере те строфы являют одним из возможных ответов. Посмотрим на первую строфу. «about proud hooray round» — красивая строфа, потому что слова «about» и «hooray» имеют одинаковое количество гласных, «proud» и «round» имеют одинаковое количество гласных и у них последняя гласная совпадает. С другой стороны, вы не можете использовать слово «codeforces», чтобы сформировать красивую строфу.

Во втором примере вы не можете составить красивую строфу из заданных слов.

В третьем примере вы можете использовать слово «same» до трех раз.

F. Максимальный синус

Бинарный поиск Структуры данных теория чисел *2700

Вам даны числа \(a\), \(b\), \(p\) и \(q\). Пусть \(f(x) = \text{abs}(\text{sin}(\frac{p}{q} \pi x))\).

Найдите минимальное возможное целое число \(x\), которое максимизирует \(f(x)\), где \(a \le x \le b\).

Входные данные

Каждый тест содержит несколько тестовых случаев.

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество тестовых случаев.

Первая строка каждого теста содержит четыре целых числа \(a\), \(b\), \(p\) и \(q\) (\(0 \le a \le b \le 10^{9}\), \(1 \le p\), \(q \le 10^{9}\)).

Выходные данные

Для каждого теста в новой строке выведите минимально возможно целое число \(x\).

Примечание

В первом примере, \(f(0) = 0\), \(f(1) = f(2) \approx 0.866\), \(f(3) = 0\).

Во втором примере, \(f(55) \approx 0.999969\), которое максимально возможное число среди всех возможных чисел.

C2. Хайди и тест Тьюринга (средняя)

Структуры данных *2200

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

После того, как драка прекратилась, Хайди дала им ещё одну времязатратную задачу.

На плоскости даны \(n\) точек, а также дан радиус \(r\). Найдите наибольшее число точек, которые можно покрыть \(L^1\)-шариком с радиусом \(r\).

\(L^1\)-шариком с радиусом \(r\) и центром \((x_0, y_0)\) называется множество точек \((x, y)\), таких что манхэттенское расстояние между \((x_0, y_0)\) и \((x, y)\) не превосходит \(r\).

Манхэттенское расстояние между \((x_0, y_0)\) и \((x, y)\) определяется как \(|x - x_0| + |y - y_0|\).

Входные данные

Первая строка содержит целые числа \(n, r\) (\(1 \le n \le 300\,000, 1 \le r \le 10^6\)) — количество точек и радиус шарика.

Каждая из следующих \(n\) строк содержит целые числа \(x_i, y_i\) (\(-10^6 \leq x_i, y_i \leq 10^6\)), задающие координаты \(i\)-й точки.

Гарантируется, что все точки различны.

Выходные данные

Выведите одно целое число — максимальное количество точек, которое может покрыть \(L^1\)-шарик радиуса \(r\).

Примечание

В первом примере шарик с центром \((1, 0)\) покрывает точки \((1, 1)\), \((1, -1)\), \((2, 0)\).

Во втором примере шарик с центром в \((0, 0)\) покрывает все точки.

Обратите внимание, что \(x_0\) и \(y_0\) не обязаны быть целыми числами.

E3. Вторжение Далеков (сложная)

графы Деревья снм Структуры данных *2400

С вашей помощью Хайди подготовила план размещения ловушки и защиты. Однако внезапно из ТАРДИС выпрыгнул Доктор и сказал ей, что он шпионил за подготовкой Далеков, и что их больше, чем когда-либо. Отчаянные времена требует отчаянных мер, поэтому Хайди собирается рискнуть и встретится с Далеками и что она рассмотрит вариант размещения ловушки вдоль любого Коридора.

Это означает что ей опять нужна ваша помощь с вычислением \(E_{max}(c)\) — наибольшего \(e \le 10^9\), такого что если мы сменим требуемый уровень энергии у \(c\) на \(e\), то Далеки возможно воспользуются \(c\) в своём вторжении. Теперь нужно вычислить эту функцию для всех Временных Коридоров.

Входные данные

Первая строка содержит целые числа \(n\) и \(m\) (\(2 \leq n \leq 10^5\), \(n - 1 \leq m \leq 10^6\)) — количество точек и количество коридоров.

Каждая из следующих \(m\) строк содержит точки \(a\), \(b\) и уровень энергии \(e\) (\(1 \leq a, b \leq n\), \(a \neq b\), \(0 \leq e \leq 10^9\)).

Гарантируется, что ни одна пара \(\{a, b\}\) не повторяется и что граф является связным. Не гарантируется, что все уровни энергии \(e\) различны или что минимальное остовное дерево уникально.

Выходные данные

Выведите \(m\) целых чисел: для каждого \(i\), \(E_{max}(c_i)\) для Коридора \(c_i\) из входных данных.

C2. Экзамен в БерГУ (усложнённая версия)

жадные алгоритмы математика Перебор Структуры данных *1700

Единственное отличие этой версии от упрощённой — это ограничения.

Если вы пишете на Python, то, наверняка, при отправке вашего решения на PyPy оно будет работать значительно быстрее.

В Берляндском государственном университете началась сессия. Многие студенты уже сдают экзамены.

Совсем скоро Полиграф Полиграфович примет экзамен у группы из \(n\) студентов. Студенты будут сдавать экзамен подряд один за другим в порядке от \(1\)-го до \(n\)-го. Процесс сдачи происходит следующим образом:

  • \(i\)-й студент подходит к преподавательскому столу и тянет билет;
  • если студент понимает, что билет для него слишком сложный, то он отказывается отвечать и уходит домой (этот процесс происходит настолько быстро, что считается, что на него не расходуется время);
  • если студент посчитал, что билет несложный, то он тратит ровно \(t_i\) минут на сдачу экзамена, после чего он получает отметку и уходит домой.

Студенты сдают экзамен один за другим без перерывов. Полиграф Полиграфович в один момент времени принимает экзамен у одного студента.

Длительность всего экзамена составляет \(M\) минут (\(\max t_i \le M\)), поэтому чем ближе студент находится к концу списка, тем больше вероятность того, что он не успеет сдать экзамен.

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

Для каждого студента \(i\) ответ надо искать независимо, то есть если при нахождении ответа для студента \(i_1\) про какого-то студента \(j\) выяснилость, что он должен уйти, то при нахождении ответа для \(i_2\) (\(i_2>i_1\)) студент \(j\) не обязательно должен уйти домой.

Входные данные

В первой строке входных данных содержатся два целых числа \(n\) и \(M\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le M \le 2 \cdot 10^7\)) — количество студентов и длительность всего экзамена в минутах, соответственно.

Во второй строке входных данных содержится \(n\) целых чисел \(t_i\) (\(1 \le t_i \le 100\)) — длительность сдачи экзамена \(i\)-го студента.

Гарантируется, что все значения \(t_i\) не превосходят \(M\).

Выходные данные

Выведите \(n\) чисел: \(i\)-е число должно быть равно минимальному количеству студентов, которые должны уйти с экзамена, чтобы \(i\)-й студент успел ответить (полностью).

Примечание

Пояснение к примеру 1.

Обратите внимание, что сумма первых пяти длительностей сдач не превосходит \(M=15\) (сумма равна \(1+2+3+4+5=15\)). Таким образом, первые пять студентов могут сдавать экзамен даже если все студенты до них тоже сдают экзамен. Иными словами, первые пять чисел в ответе равны \(0\).

Для того, чтобы \(6\)-й студент сдал экзамен необходимо, чтобы не менее \(2\)-х студентов до него отказались сдавать (например, \(3\)-й и \(4\)-й, тогда \(6\)-й закончит свою сдачу через \(1+2+5+6=14\) минут, что не превосходит \(M\)).

Для того, чтобы \(7\)-й студент успел сдать экзамен необходимо, чтобы не менее \(3\)-х студентов до него отказались сдавать (например, \(2\)-й, \(5\)-й и \(6\)-й, тогда \(7\)-й закончит свою сдачу через \(1+3+4+7=15\) минут, что не превосходит \(M\)).

D. Сортировка подотрезков

сортировки Структуры данных *2400

Вам заданы массивы \(a_1, a_2, \dots, a_n\) и \(b_1, b_2, \dots, b_n\).

За одну операцию вы можете отсортировать в порядке неубывания подотрезок \(a[l \dots r]\) массива \(a\).

Например, если \(a = [4, 2, 2, 1, 3, 1]\) и вы выбрали подотрезок \(a[2 \dots 5]\), тогда массив примет вид: \([4, 1, 2, 2, 3, 1]\).

Вам нужно определить, можно ли превратить массив \(a\) в массив \(b\), применяя к нему описанную выше операцию любое (возможно нулевое) количество раз.

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 3 \cdot 10^5\)) — количество запросов.

Первая строка каждого запроса содержит число \(n\) (\(1 \le n \le 3 \cdot 10^5\)).

Вторая строка каждого запроса содержит \(n\) чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)).

Третья строка каждого запроса содержит \(n\) чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le n\)).

Гарантируется, что условие \(\sum n \le 3 \cdot 10^5\) выполняется для всех тестов.

Выходные данные

На каждый запрос в отдельной строке выведите YES (в любом регистре) если возможно получить массив \(b\) и NO (в любом регистре) в обратном случае.

Примечание

В первом тестовом примере мы можем отсортировать подотрезок \(a_1 \dots a_5\), тогда массив \(a\) превратится в \([1, 1, 4, 4, 7, 5, 6]\), а затем отсортировать подотрезок \(a_5 \dots a_6\).

C. Конфеты!

дп математика реализация Структуры данных *1400

Рассмотрим последовательность цифр длины \(2^k\) \([a_1, a_2, \ldots, a_{2^k}]\). Будем выполнять с ней следующую операцию: заменить пару \((a_{2i+1}, a_{2i+2})\) на \((a_{2i+1} + a_{2i+2})\bmod 10\) для \(0\le i<2^{k-1}\). За каждое \(i\) такое, что \(a_{2i+1} + a_{2i+2}\ge 10\), мы получаем конфету! В результате, мы получим последовательность цифр длины \(2^{k-1}\).

Менее формально, последовательность длины \(2^k\) мы разбиваем на \(2^{k-1}\) пар, каждая из которых состоит из двух чисел: первая пара состоит из первых двух чисел, вторая из третьего и четвертого, \(\ldots\), последняя пара состоит из (\(2^k-1\))-го и (\(2^k\))-го чисел. За каждую пару, сумма чисел в которой не менее \(10\), мы получаем конфету. После этого, мы заменяем каждую пару чисел на остаток от деления их суммы на \(10\) (при этом сохраняем порядок чисел).

Будем выполнять данную операцию с последовательностью, пока она не станет длины \(1\). Пусть \(f([a_1, a_2, \ldots, a_{2^k}])\) обозначает количество конфет, которые мы получим в процессе.

К примеру: если изначальной последовательностью была \([8, 7, 3, 1, 7, 0, 9, 4]\), то:

После первой операции последовательность станет \([(8 + 7)\bmod 10, (3 + 1)\bmod 10, (7 + 0)\bmod 10, (9 + 4)\bmod 10]\) \(=\) \([5, 4, 7, 3]\), и мы получим \(2\) конфеты так как \(8 + 7 \ge 10\) и \(9 + 4 \ge 10\).

После второй операции последовательность станет \([(5 + 4)\bmod 10, (7 + 3)\bmod 10]\) \(=\) \([9, 0]\), и мы получим еще одну конфету так как \(7 + 3 \ge 10\).

После последней операции последовательность станет \([(9 + 0) \bmod 10]\) \(=\) \([9]\).

Следовательно, \(f([8, 7, 3, 1, 7, 0, 9, 4]) = 3\), так как мы получили всего \(3\) конфеты.

Вам дана последовательность цифр длины \(n\) \(s_1, s_2, \ldots s_n\). Вы должны ответить на \(q\) запросов вида \((l_i, r_i)\), где для \(i\)-го запроса вы должны вывести \(f([s_{l_i}, s_{l_i+1}, \ldots, s_{r_i}])\). Гарантируется, что \(r_i-l_i+1\) имеет вид \(2^k\) для некоторого неотрицательного целого \(k\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину последовательности.

Вторая строка содержит \(n\) цифр \(s_1, s_2, \ldots, s_n\) (\(0 \le s_i \le 9\)).

Третья строка содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов.

Каждая из следующих \(q\) строк содержит два целых числа \(l_i\), \(r_i\) (\(1 \le l_i \le r_i \le n\)) — \(i\)-й запрос. Гарантируется, что \(r_i-l_i+1\) является неотрицательной целой степенью \(2\).

Выходные данные

Выведите \(q\) строк, в \(i\)-й строке выведите единственное число — \(f([s_{l_i}, s_{l_i + 1}, \ldots, s_{r_i}])\), ответ на \(i\)-й запрос.

Примечание

Первый пример иллюстрирует пример из условия

\(f([7, 3, 1, 7]) = 1\): последовательность операций такая — \([7, 3, 1, 7] \to [(7 + 3)\bmod 10, (1 + 7)\bmod 10]\) \(=\) \([0, 8]\) и одна конфета так как \(7 + 3 \ge 10\) \(\to\) \([(0 + 8) \bmod 10]\) \(=\) \([8]\), поэтому мы получаем всего \(1\) конфету.

\(f([9]) = 0\), так как мы не выполняем с ним операции.

D. Tokitsukaze и странный прямоугольник

разделяй и властвуй сортировки Структуры данных *2000

Дано \(n\) точек на плоскости, \(i\)-я из которых расположена в \((x_i, y_i)\). Tokitsukaze хочет нарисовать странную прямоугольную область и взять все точки в этой области.

Странная область ограничена тремя прямыми, \(x = l\), \(y = a\) и \(x = r\), это ее левая, нижняя и правая сторона, соответственно, где \(l\), \(r\) и \(a\) могут являться любыми вещественными числами, удовлетворяющими \(l < r\). Верхняя сторона области неограничена, то есть можно считать, что она ограничена прямой, параллельной оси \(x\), и бесконечно удаленной. Странная прямоугольная область изображена на следующей иллюстрации.

Точка \((x_i, y_i)\) находится в странной прямоугольной области тогда и только тогда, когда \(l < x_i < r\) и \(y_i > a\). К примеру, на иллюстрации выше \(p_1\) находится в области, а \(p_2\) — нет.

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

Входные данные

В первой строке записано единственное число \(n\) (\(1 \leq n \leq 2 \times 10^5\)) — количество точек на плоскости.

В \(i\)-й из следующих \(n\) строк записаны два целых числа \(x_i\), \(y_i\) (\(1 \leq x_i, y_i \leq 10^9\)) — координаты \(i\)-й точки.

Гарантируется, что все точки различные.

Выходные данные

Выведите единственное целое число — количество различных непустых множеств точек, которые она может получить.

Примечание

В первом примере существует только одно множество, содержащее \(k\) точек для \(k = 1, 2, 3\), поэтому общее число множеств равно \(3\).

Во втором примере количества множеств размера \(k\) для \(k = 1, 2, 3\) равны \(3\), \(2\), \(1\) соответственно, и их сумма равна \(6\).

В третьем примере, как показывает следующая иллюстрация, есть

  • \(2\) множества из одной точки;
  • \(3\) множества из двух точек;
  • \(1\) множество из четырех точек.

Исходя из этого, количество различных непустых множеств в этом примере равно \(2 + 3 + 0 + 1 = 6\).

B. Динамический диаметр

*особая задача Деревья поиск в глубину и подобное разделяй и властвуй Структуры данных

Вам дано взвешенное неориентированное дерево с \(n\) вершинами, а также список из \(q\) обновлений. Каждое обновление меняет вес одного ребра. Ваша задача — вычислить диаметр дерева после каждого обновления.

(Расстоянием между двумя вершинами называется сумма весов ребер на единственном простом пути между этими двумя вершинами. Диаметр дерева — наибольшее из этих расстояний.)

Входные данные

Первая строка содержит три разделенных пробелом целых числа \(n\), \(q\) и \(w\) (\(2 \leq n \leq 100,000, 1 \leq q \leq 100,000\), \(1 \leq w \leq 20,000,000,000,000\)) – число вершин в дереве, число обновлений и ограничение на вес ребер. Вершины пронумерованы от \(1\) до \(n\).

Следующие \(n-1\) строк описывают изначальное дерево. \(i\)-я из этих строк содержит три целых числа \(a_i\), \(b_i\), \(c_i\) (\(1 \leq a_i, b_i \leq n\), \(0 \leq c_i < w\)), обозначающих, что изначально есть ребро между вершинами \(a_i\) и \(b_i\) с весом \(c_i\). Гарантируется, что эти \(n-1\) строк описывают дерево.

Последние \(q\) строк описывают обновления. \(j\)-я из этих строк содержт два целых числа \(d_j\), \(e_j\) (\(0 \leq d_j < n - 1, 0 \leq e_j < w\)). Эти два числа вы должны изменить следующим образом:

  • \(d'_j = (d_j + last) \bmod (n - 1)\),
  • \(e'_j = (e_j + last) \bmod w\),
где \(last\) — диаметр дерева после предыдущего обновления (изначально \(last=0\)). Пара \((d'_j, e'_j)\) обозначает, что в данном обновлении вес \(d'_j+1\)-го ребра становится равным \(e'_j\).
Выходные данные

Выведите \(q\) строк. Для всех возможных \(i\) строка \(i\) должна содержать диаметр дерева после \(i\)-го обновления.

Система оценки

Подзадача 1 (11 баллов): \(n,q \leq 100\) и \(w \leq 10,000\)

Подзадача 2 (13 баллов): \(n,q \leq 5,000\) и \(w \leq 10,000\)

Подзадача 3 (7 баллов): \(w \leq 10,000\), и все ребра дерева имеют вид \(\{1, i\}\) (То есть граф имеет вид «звезды» с центром в вершине 1.)

Подзадача 4 (18 баллов): \(w \leq 10,000\), и все ребра дерева имеют вид \(\{i, 2i\}\) и \(\{i, 2i+1\}\) (То есть если мы подвесим дерево за вершину 1, то оно будет иметь вид сбалансированного бинарного дерева.)

Подзадача 5 (24 балла): гарантируется, что после каждого обновления по крайней мере один из наидлиннейших простых путей проходит через вершину \(1\)

Подзадача 6 (27 баллов): нет дополнительных ограничений

Примечание

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

Первое обновление меняет вес \(3\)-го ребра, т.е. \(\{2, 4\}\), на \(1030\). Наибольшее расстояние между какой-либо парой вершин равно \(2030\) — расстояние между \(3\) и \(4\).

Так как ответ равен \(2030\), то для второго обновления \(\)d'_2 = (1 + 2030) \bmod 3 = 0\(\) \(\)e'_2 = (1020 + 2030) \bmod 2000 = 1050\(\) Поэтому вес ребра \(\{1, 2\}\) меняется на \(1050\). Теперь наибольшее расстояние между вершинами \(\{1, 4\}\), оно равно \(2080\).

Для третьего обновления имеем \(\)d'_3 = (1 + 2080) \bmod 3 = 2\(\) \(\)e'_3 = (890 + 2080) \bmod 2000 = 970\(\) Теперь, так как вес ребра \(\{2, 4\}\) уменьшается до \(970\), наиболее удаленная пара вершин, внезапно, \(\{1, 3\}\), а расстояние — \(2050\).

B. Волшебное дерево

*особая задача Деревья дп Структуры данных

У нас есть волшебное дерево: корневое дерево с \(n\) вершинами. Вершины пронумерованы от \(1\) до \(n\). Вершина \(1\) является корнем.

Волшебное дерево дает волшебные плоды. Плоды растут только в тех вершинах, которые не являются корнем. В каждой вершине может быть максимум один плод.

Сейчас день 0 и ни один плод еще не поспел. Каждый плод будет спелым лишь в течение одного дня. Для каждого плода известна вершина \(v_j\), где он растет, день \(d_j\), когда он будет спелым, а также объем \(w_j\) волшебного сока, который мы можем получить, если соберем этот плод в тот день, когда он спелый.

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

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

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

Входные данные

Первая строка содержит три целых числа \(n\) (\(2 \le n \le 100,000\)), \(m\) (\(1 \le m \le n-1\)) и \(k\) (\(1 \le k \le 100,000\)) — количество вершин, количество плодов и максимальное количество дней, через которое плоды могут стать спелыми.

Следующие \(n-1\) строк содержат числа \(p_2, \dots, p_n\) по одному в строке. Для всех \(i\) (от \(2\) до \(n\) включительно) вершина \(p_i\) (\(1 \leq p_i \le i-1\)) является предком вершины \(i\).

Каждая из последних \(m\) строк описывает один плод. \(j\)-я из этих строк имеет вид «\(v_j\ d_j\ w_j\)» (\(2 \le v_j \le n\), \(1 \le d_j \le k\), \(1 \le w_j \le 10^9\)).

Гарантируется, что никакая вершина не содержит более, чем один плод (т. е. все значения \(v_j\) различны).

Выходные данные

Выведите одно целое число — максимальных объем волшебного сока, который вы можете получить с дерева.

Система оценки

Подзадача 1 (6 баллов): \(n, k \leq 20\), а также \(w_j = 1\) для всех \(j\)

Подзадача 2 (3 балла): фрукты растут только в листьях дерева

Подзадача 3 (11 баллов): \(p_i = i-1\) для всех \(i\), а также \(w_j = 1\) для всех \(j\)

Подзадача 4 (12 баллов): \(k \leq 2\)

Подзадача 5 (16 баллов): \(k \leq 20\), а также \(w_j = 1\) для всех \(j\)

Подзадача 6 (13 баллов): \(m \leq 1,000\)

Подзадача 7 (22 балла): \(w_j = 1\) для всех \(j\)

Подзадача 8 (17 баллов): нет дополнительных ограничений

Примечание

В примере одно из оптимальных решений выглядит так:

  • В день 4 отрезать ребро между вершинами 4 и 5 и собрать спелый плод с 1 единицей волшебного сока. В тот же день отрезать ребро между вершинами 1 и 2 и собрать 5 единиц волшебного сока со спелого плода в вершине 3.
  • В день 7 ничего не делать. Мы могли бы собрать плод из вершины 4, но это не оптимально.
  • В день 9 отрезать ребро между вершинами 1 и 4. Плод в вершине 4 уже не спелый, так что его нужно выбросить, а собрать 3 единицы волшебного сока со спелого фрукта в вершине 6. Кроме того, того же эффекта мы бы добились, отрезав ребро между вершинами 4 и 6.

E. Посчитайте четырехугольники

битмаски геометрия Перебор сортировки Структуры данных *2200

На плоскости нарисовано \(n\) отрезков; \(i\)-й отрезок соединяет две точки (\(x_{i, 1}\), \(y_{i, 1}\)) и (\(x_{i, 2}\), \(y_{i, 2}\)). Каждый отрезок невырожден и является либо горизонтальным, либо вертикальным — формально, для любого \(i \in [1, n]\) выполняется ровно одно из двух условий: \(x_{i, 1} = x_{i, 2}\) или \(y_{i, 1} = y_{i, 2}\) . Только отрезки разных типов могут пересекаться, т. е. горизонтальные отрезки не имеют общих точек, то же самое верно и для вертикальных.

Четыре отрезка с индексами \(h_1\), \(h_2\), \(v_1\) и \(v_2\), такие, что \(h_1 < h_2\) и \(v_1 < v_2\), образуют прямоугольник при выполнение следующих условий:

  • отрезки \(h_1\) и \(h_2\) горизонтальные;
  • отрезки \(v_1\) и \(v_2\) вертикальные;
  • отрезок \(h_1\) пересекается с отрезком \(v_1\);
  • отрезок \(h_2\) пересекается с отрезком \(v_1\);
  • отрезок \(h_1\) пересекается с отрезком \(v_2\);
  • отрезок \(h_2\) пересекается с отрезком \(v_2\).

Подсчитайте количество способов выбрать четыре отрезка так, чтобы они образовывали прямоугольник. Не забывайте, что условия \(h_1 < h_2\) и \(v_1 < v_2\) должны выполняться.

Входные данные

Первая строка содержит целое число \(n\) (\(1 \le n \le 5000\)) — количество отрезков.

Далее следуют \(n\) строк. В \(i\)-й строке содержатся четыре целых числа \(x_{i, 1}\), \(y_{i, 1}\), \(x_{i, 2}\) и \(y_{i, 2}\), обозначающие концы \(i\)-го отрезка. Все координаты концов отрезков находятся в диапазоне \([-5000, 5000]\).

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

Выходные данные

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

Примечание

На следующих картинках нарисованы тестовые примеры:

E. OpenStreetMap

Структуры данных *2100

Сережа проводит спецкурс по построению карты высот базы отдыха Стёпаново. Он наложил на карту базы прямоугольную сетку размера \(n \times m\) клеток, строки которой нумеруются от \(1\) до \(n\) с севера на юг, а столбцы — от \(1\) до \(m\) с запада на восток. После этого он измерил в каждой клетке среднюю высоту земли над уровнем Рыбинского моря и получил матрицу высот размера \(n \times m\). Клетка \((i, j)\) находится на пересечении \(i\)-й строки и \(j\)-го столбца и имеет высоту \(h_{i, j}\).

Теперь Сережа просматривает результат своих трудов в браузере. На экран Сережи помещается подпрямоугольник размера \(a \times b\) матрицы высот (\(1 \le a \le n\), \(1 \le b \le m\)). Он пытается определить, где на базе будут скапливаться лужи после дождя. Для этого он находит на отображаемой на экране части карты клетку с минимальной высотой.

Помогите Сереже посчитать сумму высот таких клеток для всех возможных частей карты, которые могут отображаться на экране. То есть, нужно посчитать сумму по всем \(1 \le i \le n - a + 1\) и \(1 \le j \le m - b + 1\) минимальных высот в подматрицах размера \(a \times b\), верхние левые углы которых находятся в клетках \((i, j)\).

Рассмотрим последовательность \(g_i = (g_{i - 1} \cdot x + y) \bmod z\). Числа \(g_0\), \(x\), \(y\) и \(z\) вам даны.

По чудесному стечению обстоятельств, \(h_{i, j} = g_{(i - 1) \cdot m + j - 1}\) (\((i - 1) \cdot m + j - 1\) — это индекс).

Входные данные

В первой строке даны четыре целых числа \(n\), \(m\), \(a\) и \(b\) — размеры матрицы и подматрицы, которая помещается на экране (\(1 \le n, m \le 3\,000\), \(1 \le a \le n\), \(1 \le b \le m\)).

Во второй строке даны четыре целых числа \(g_0\), \(x\), \(y\) и \(z\) (\(0 \le g_0, x, y < z \le 10^9\)).

Выходные данные

Выведите одно целое число — ответ на задачу.

Примечание

В примере матрица высот выглядит так:

F. Клуб анонимных геометров

геометрия математика сортировки Структуры данных *2500

Сегодня Денис проводит в ЛКШ клуб анонимных геометров. Он заготовил для клуба \(n\) выпуклых многоугольников, пронумерованных от \(1\) до \(n\). Он планирует предложить участникам клуба посчитать суммы Минковского этих многоугольников. А именно, он планирует дать \(q\) заданий, в \(i\)-м из них нужно посчитать сумму Минковского многоугольников с номерами от \(l_i\) до \(r_i\) включительно.

Суммой Минковского двух множеств \(A\) и \(B\) называется множество \(C = \{a + b : a \in A, b \in B\}\). Можно доказать, что если \(A\) и \(B\) являются выпуклыми многоугольниками, то \(C\) тоже будет выпуклым многоугольником.

Сумма двух выпуклых многоугольников

Чтобы посчитать сумму Минковского \(p\) многоугольников (\(p > 2\)), нужно посчитать сумму Минковского первых \(p - 1\) многоугольников, а потом сумму Минковского результата и \(p\)-го многоугольника.

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

Входные данные

В первой строке дано одно целое число \(n\) — количество выпуклых многоугольников, которые подготовил Денис (\(1 \le n \le 100\,000\)).

Далее дано описание \(n\) выпуклых многоугольников. Описание \(i\)-го многоугольника начинается с целого числа \(k_i\) — количество вершин в \(i\)-м многоугольнике (\(3 \le k_i\)). После чего в \(k_i\) строках даны по два целых числа \(x_{ij}\), \(y_{ij}\) — координаты вершин \(i\)-го многоугольника в порядке обхода против часовой стрелки (\(|x_{ij}|, |y_{ij}| \le 10 ^ 9\)).

Гарантируется, что многоугольники не содержат трех последовательных вершин, лежащих на одной прямой. Суммарное количество вершин в многоугольниках не превышает \(300\,000\).

В следующей строке одно целое число \(q\) — количество заданий (\(1 \le q \le 100\,000\)). В следующих \(q\) строках дано описание заданий. Описание \(i\)-го задания содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)).

Выходные данные

Для каждого задания выведите одно целое число — количество вершин в сумме Минковского многоугольников с номерами от \(l_i\) до \(r_i\).

Примечание

Пояснение к примеру:

Первый, второй и третий многоугольники из тестового примера
Суммы Минковского первого и второго, второго и третьего и всех трех многоугольников соответственно

D2. Подстрока RGB (сложная версия)

дп реализация Структуры данных *1600

Единственное отличие между простой и сложной версиями — размер входных данных.

Вам задана строка \(s\), состоящая из \(n\) символов, каждый символ равен 'R', 'G' или 'B'.

Вам также задано целое число \(k\). Ваша задача — изменить минимальное количество символов в изначальной строке \(s\) таким образом, что после этих изменений найдется строка длины \(k\) такая, что она является и подстрокой \(s\), и подстрокой бесконечной строки «RGBRGBRGB ...».

Строка \(a\) называется подстрокой \(b\), если существует положительное целое число \(i\), что \(a_1 = b_i\), \(a_2 = b_{i + 1}\), \(a_3 = b_{i + 2}\), ..., \(a_{|a|} = b_{i + |a| - 1}\). Например, строки «GBRG», «B», «BR» являются подстроками бесконечной строки «RGBRGBRGB ...»,а строки «GR», «RGR» и «GGG» — нет.

Вам необходимо ответить на \(q\) независимых запросов.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов. Затем следуют \(q\) запросов.

Первая строка запроса содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)) — длину строки \(s\) и длину подстроки.

Вторая строка запроса содержит строку \(s\), состоящую из \(n\) символов 'R', 'G' и 'B'.

Гарантируется, что сумма \(n\) по всем запросам не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

На каждый запрос выведите одно число — минимальное количество символов, которое вам необходимо изменить в изначальной строке \(s\), чтобы после изменений нашлась такая подстрока длины \(k\) в \(s\), что она также является подстрокой бесконечной строки «RGBRGBRGB ...».

Примечание

В первом тестовом примере вы можете изменить первый символ на 'R' и получить подстроку «RG», или изменить второй символ на 'R' и получить подстроку «BR», или изменить третий, четвертый или пятый символ на 'B' и получить «GB».

Во втором тестовом примере подстрока равна «BRG».

E. Культурный код

Бинарный поиск дп Комбинаторика кратчайшие пути сортировки Структуры данных *2300

В магазине неподалеку продаются известные русские деревянные игрушки под названием «матрешки», и вы бы хотели приобрести несколько штук. В магазине продается \(n\) различных матрешек. Любая матрешка — это фигурка объема \(out_i\) с пустотой внутри объемом \(in_i\) (конечно, \(out_i > in_i\)).

У вас не так много свободного места в сумке, но, к счастью, вы знаете, что матрешки можно вкладывать друг в друга. Формально, назовем набор матрешек вкладываемым, если мы можем переупорядочить их таким образом, что первая матрешка вкладывается во вторую, вторая — в третью и так далее. Матрешка \(i\) вкладывается в матрешку \(j\), если \(out_i \le in_j\). Только последняя игрушка из вкладываемого набора будет занимать место в вашей сумке.

Назовем пустотой вкладываемого набора общий объем пустого места внутри данной структуры. Очевидно, что она равна \(in_{i_1} + (in_{i_2} - out_{i_1}) + (in_{i_3} - out_{i_2}) + \dots + (in_{i_k} - out_{i_{k-1}})\), где \(i_1\), \(i_2\), ..., \(i_k\) — индексы выбранных матрешек в порядке их вкладывания.

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

Вы хотели бы купить много матрешек, а потому выбираете достаточно большой вкладываемый поднабор. Но автора задачи сильно расстроит, если в вашей сумке будет потрачено зря слишком много места, поэтому вы выбираете достаточно большой вкладываемый поднабор, пустота которого минимально возможная среди всех достаточно больших поднаборов. И вот возник вопрос: как много различных поднаборов удовлетворяют всем требованиям (поднаборы достаточно большие, и нет другого достаточно большого поднабора с пустотой меньше заданного). Два поднабора считаются различными, если существует хотя бы один индекс \(i\) такой, что один поднабор содержит \(i\)-ю матрешку, а другой — нет.

Так как ответ может быть очень большим — выведите его по модулю \(10^9 + 7\).

Входные данные

В первой строке содержится одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество матрешек.

Следующие \(n\) строк содержат описание каждой матрешки: два целых числа \(out_i\) и \(in_i\) (\(1 \le in_i < out_i \le 10^9\)) — внешний и внутренний объемы \(i\)-й матрёшки.

Выходные данные

Выведите единственное число — количество достаточно больших вкладываемых поднаборов таких, что пустота каждого такого поднабора минимально возможная. Так как ответ может быть очень большим, выведите его по модулю \(10^9 + 7\).

Примечание

В первом примере есть ровно \(6\) достаточно больших вкладываемых поднаборов с минимальной пустотой:

  • \(\{1, 5\}\): мы не можем добавить в него другие матрешки, не нарушая вкладываемость; пустота поднабора равна \(1\);
  • \(\{1, 6\}\);
  • \(\{2, 4, 5\}\);
  • \(\{2, 4, 6\}\);
  • \(\{3, 4, 5\}\);
  • \(\{3, 4, 6\}\).

Других «хороших» поднаборов нет, потому что, например, поднабор \(\{6, 7\}\) не достаточно большой (в него можно добавить \(4\)-ю матрешку), а поднабор \(\{4, 6, 7\}\) имеет пустоту, равную \(2\).

B. Социальное государство

Бинарный поиск Перебор сортировки Структуры данных *1600

В некотором государстве живёт \(n\) граждан. Количество денег у \(i\)-го из них равно \(a_{i}\). Государство внимательно следит за благосостоянием своих граждан. Если гражданин совершил покупку или заработал денег, то он обязан отправить в социальные службы справку об изменении баланса с указанием текущего количества денег. Иногда государство делает выплаты малоимущим гражданам: всем гражданам, у кого текущее количество денег строго меньше \(x\), выплачивают пособие такого размера, чтобы количество денег у них стало ровно \(x\). В таком случае гражданин не должен отправлять справку о изменении баланса.

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

Входные данные

В первой строке записано одно число \(n\) (\(1 \le n \le 2 \cdot 10^{5}\)) — количество граждан.

В следующей строке записаны \(n\) чисел, разделённых пробелами, \(a_1\), \(a_2\), ..., \(a_n\) (\(0 \le a_{i} \le 10^{9}\)) — начальные балансы граждан.

В следующей строке записано одно число \(q\) (\(1 \le q \le 2 \cdot 10^{5}\)) — длина лога действий. В следующих \(q\) строках записаны действия в хронологическом порядке, по одному в строке.

Описание одного действия имеет либо вид 1 p x (\(1 \le p \le n\), \(0 \le x \le 10^{9}\)), либо вид 2 x (\(0 \le x \le 10^{9}\)). В первом случае была получена справка о том, что новый баланс гражданина \(p\) равен \(x\). Во втором — была проведена выплата с параметром \(x\).

Выходные данные

Выведите \(n\) чисел, разделённых пробелами, — балансы всех граждан после всех событий.

Примечание

Процесс изменения балансов в первом примере: 1 2 3 4 \(\rightarrow\) 3 3 3 4 \(\rightarrow\) 3 2 3 4 \(\rightarrow\) 3 2 3 4

Процесс изменения балансов во втором примере: 3 50 2 1 10 \(\rightarrow\) 3 0 2 1 10 \(\rightarrow\) 8 8 8 8 10 \(\rightarrow\) 8 8 20 8 10

D. Бал

сортировки Структуры данных *2400

На бал в королевском дворце пришли N дам. Каждая дама характеризуется тремя параметрами: красотой, умом и богатством. Королевский церемониймейстер знает, что дамы — существа особенные. А именно, если какая-то дама видит, что на балу присутствует другая дама, которая умнее, красивее и богаче ее, то она может выброситься с балкона королевского дворца. Ему известны параметры всех дам и он хочет выяснить, сколько в этот вечер будет потенциальных дам-самоубийц. Обозначим красоту i-й дамы за Bi, ум за Ii и размер состояния за Ri. Тогда i-я дама является потенциальной самоубийцей, если для какой-то дамы j выполняется Bi < Bj, Ii < Ij, Ri < Rj. Найдите число потенциальных самоубийц.

Входные данные

В первой строке задано целое число N (1 ≤ N ≤ 500000). Во второй строке записано N целых чисел Bi, разделенных одиночными пробелами. В третьей и четвертой строках записаны, соответственно, последовательности Ii и Ri в таком же формате. Гарантируется, что 0 ≤ Bi, Ii, Ri ≤ 109.

Выходные данные

Выведите ответ на задачу.

A. Отельер

Перебор реализация Структуры данных *800

Амуга владеет отелем, представимым в виде длинного коридора с \(10\) комнатами, идущими подряд. Комнаты пронумерованы цифрами от \(0\) до \(9\) слева направо.

В отель есть два входа: с левого конца коридора и с правого. Если гость заходит с левого конца коридора, то он будет расположен в ближайшей к левому входу свободной комнате. Аналогично, если гость заходит с правого конца коридора, то ему будет назначена ближайшая к правому входу свободная комната.

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

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество событий в памяти Амуга.

Вторая строка содержит строку длины \(n\), описывающую события, которые помнит Амуга, заданные в хронологическом порядке. Символы заданной строки могут быть следующими:

  • «L»: новый гость зашёл в отель с левого конца коридора.
  • «R»: новый гость зашёл в отель с правого конца коридора.
  • «0», «1», ..., «9»: гость из комнаты \(x\) (\(0\), \(1\), ..., \(9\) соответственно) покинул отель.

Гарантируется, что в отеле имеется хотя бы одна свободная комната, когда появляется новый гость. Также гарантируется, что, если задано \(x\) (\(0\), \(1\), ..., \(9\)), то в комнате \(x\) находится гость. В начальный момент времени все комнаты свободны.

Выходные данные

В единственной строке выведите статус занятости комнат, начиная с комнаты \(0\) и заканчивая комнатой \(9\). Свободную комнату обозначайте как «0», а занятую — как «1». Символы выводите без пробелов.

Примечание

В первом примере статус занятости комнат после каждого из событий следующий:

  • Изначально все комнаты свободны. Статус занятости: 0000000000.
  • L: гость заходит в отель через вход слева. Статус занятости: 1000000000.
  • L: ещё один гость заходит через вход слева. Статус занятости: 1100000000.
  • R: ещё один гость заходит через вход справа. Статус занятости: 1100000001.
  • L: ещё один гость заходит через вход слева. Статус занятости: 1110000001.
  • 1: гость из комнаты \(1\) покидает отель. Статус занятости: 1010000001.
  • R: ещё один гость заходит через вход справа. Статус занятости: 1010000011.
  • L: ещё один гость заходит через вход слева. Статус занятости: 1110000011.
  • 1: гость из комнаты \(1\) покидает отель. Статус занятости: 1010000011.

Таким образом, финальный статус занятости комнат следующий: 1010000011.

Во втором примере статус занятости комнат после каждого из событий следующий:

  • L: гость заходит в отель через вход слева. Статус занятости: 1000000000.
  • 0: гость из комнаты \(0\) покидает отель. Статус занятости: 0000000000.
  • L: гость заходит в отель через вход слева. Статус занятости: 1000000000.
  • 0: гость из комнаты \(0\) покидает отель. Статус занятости: 0000000000.
  • L: гость заходит в отель через вход слева. Статус занятости: 1000000000.
  • L: ещё один гость заходит через вход слева. Статус занятости: 1100000000.
  • R: ещё один гость заходит через вход справа. Статус занятости: 1100000001.
  • R: oещё один гость заходит через вход справа. Статус занятости: 1100000011.
  • 9: гость из комнаты \(9\) покидает отель. Статус занятости: 1100000010.

Таким образом, финальный статус занятости комнат следующий: 1100000010.

D. Белые полосы

дп Перебор реализация Структуры данных *1900

Гильдон приобрел известный графический редактор cfpaint. Рабочая зона cfpaint — квадрат, состоящий из \(n\) строк и \(n\) столбцов квадратных клеток. Строки пронумерованы от \(1\) до \(n\) сверху вниз, а столбцы — от \(1\) до \(n\) слева направо. Будем обозначать клетку в строке \(r\) и столбце \(c\) как \((r, c)\). Каждая клетка может иметь один из двух цветов — белый или черный.

В cfpaint есть инструмент, называемый ластиком. Ластик имеет размер \(k\) (\(1 \le k \le n\)). Чтобы его использовать, Гильдон должен щелкнуть в некоторую клетку \((i, j)\), где \(1 \le i, j \le n - k + 1\). Если он щелкнет в клетку \((i, j)\), то все клетки \((i', j')\) такие, что \(i \le i' \le i + k - 1\) и \(j \le j' \le j + k - 1\) станут белыми. Иными словами, квадрат со стороной в \(k\) клеток, левый верхний угол которого находится в клетке \((i, j)\), будет закрашен белым.

Белой полосой называется строка или столбец, не содержащие черных клеток.

Гильдон уже некоторое время использовал cfpaint, поэтоому некоторый клетки (возможно, все или ни одной) сейчас черные. Он хочет узнать максимальное число белых полос после того, как он использует ластик ровно один раз. Помогите Гильдону найти ответ на его вопрос.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2000\)) — количество строк и столбцов и размер ластика.

Каждая из следующих \(n\) строк содержит \(n\) символов без пробелов. Символ \(j\) в \(i\)-й строке описывает клетку \((i,j)\). Каждый символ — либо «B», что обозначает черную клетку, либо «W», что обозначает белую клетку.

Выходные данные

Выведите одно целое число: максимальное количество белых полос после ровно одного использования ластика.

Примечание

В первом примере Гильдон может щелкнуть в клетку \((2, 2)\), тогда рабочая зона будет выглядеть так:

BWWW
WWWW
WWWW
WWWB

Здесь есть четыре белых полосы: \(2\)-я и \(3\)-я строки, а также \(2\)-й и \(3\)-й столбцы.

Во втором примере нажатие на клетку \((2, 3)\) сделает \(2\)-ю строку белой.

В третьем примере \(2\)-й столбец и \(5\)-я строка станут белыми полосами, если щелкнуть в клетку \((3, 2)\).

F. Graph Traveler

графы дп математика Перебор поиск в глубину и подобное реализация Структуры данных теория чисел *2300

Гильдон проводит эксперименты с интересной машиной под названием Graph Traveler. В этой машине есть ориентированный граф из \(n\) вершин, пронумерованных от \(1\) до \(n\). \(i\)-я вершина имеет \(m_i\) выходящих ребер, они обозначаются \(e_i[0]\), \(e_i[1]\), \(\ldots\), \(e_i[m_i-1]\), где каждый элемент обозначает номер вершины конца ребра. В графе могут быть кратные ребра и петли. Кроме того, в каждой вершине \(i\) написано некоторое целое число \(k_i\).

Путь по графу определяется следующим образом.

  1. Гильдон выбирает вершину, с которой начнет путь, а также некоторое начальное целое число. Запомним это число в переменную \(c\).
  2. Когда Гильдон приходит в вершину \(i\), а также, в начале, если путь начинается с вершины \(i\), он добавляет значение \(k_i\) к \(c\).
  3. Следующая вершина пути — это \(e_i[x]\), где \(x\) — такое целое число \(0 \le x \le m_i-1\), что \(x \equiv c \pmod {m_i}\). Гильдон переходит в эту следующую вершину и возвращается на шаг 2.

Ясно, что такой путь никогда не кончается, потому что шаги 2 и 3 будут повторяться бесконечное число раз.

Например, предположим, что Гильдон начинает в вершине \(1\) с \(c = 5\), при этом \(m_1 = 2\), \(e_1[0] = 1\), \(e_1[1] = 2\), \(k_1 = -3\). Сразу после того, как он начинает в вершине \(1\), \(c\) становится равным \(2\). Так как единственное целое число \(x\) (\(0 \le x \le 1\)) такое, что \(x \equiv c \pmod {m_i}\), это \(0\), то Гильдон пойдет в вершину \(e_1[0] = 1\). После того как он попадет в вершину \(1\) снова, \(c\) станет равной \(-1\). Единственное целое число \(x\), удовлетворяющее сравнению, есть \(1\), поэтому он идет в вершину \(e_1[1] = 2\), и так далее.

Так как Гильдон достаточно любознательный, он хочет спросить у вас \(q\) вопросов. Каждый раз он хочет узнать, сколько различных вершин он посетит бесконечное число раз, если он начнет с определенной вершины с определенным числом \(c\). Обратите внимание, что не нужно учитывать вершины, которые будут посещены только конечное число раз.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 1000\)) — количество вершин в графе.

Вторая строка содержит \(n\) целых чисел. \(i\)-е из них равно \(k_i\) (\(-10^9 \le k_i \le 10^9\)) — число, написанное в \(i\)-й вершине.

Следующие \(2 \cdot n\) строк описывают ребра, выходящие из каждой вершины. \((2 \cdot i + 1)\)-я строка содедржит одно целое число \(m_i\) (\(1 \le m_i \le 10\)) — число исходящих ребер из вершины \(i\). \((2 \cdot i + 2)\)-я строка содержит \(m_i\) целых чисел \(e_i[0]\), \(e_i[1]\), \(\ldots\), \(e_i[m_i-1]\), все значения которых лежат в пределах от \(1\) до \(n\) включительно.

Следующая строка содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество вопросов Гильдона.

Каждая из следующих \(q\) строк содержит два целых числа \(x\) и \(y\) (\(1 \le x \le n\), \(-10^9 \le y \le 10^9\)), которые означают, что Гильдон хочет начать путь с вершины \(x\), а начальное значение переменной \(c\) должно быть \(y\).

Выходные данные

Для каждого запроса выведите количество различных вершин, которые будут посещены бесконечно много раз, если Гильдон начнет путь из вершины \(x\) с начальным значением \(y\).

Примечание

Граф в первом примере показан на рисунке ниже:

Три числа, показанные на вершине \(i\), равны соответственно \(i\), \(k_i\) и \(m_i\). Числа на ребрах показывают их номер в списке выходящих ребер из \(i\)-й вершины.

Путь для каждого запроса показан ниже. Он описывается последовательностью фраз, каждая в формате «вершина (\(c\) после добавления \(k_i\))».

  • \(1(0) \to 2(0) \to 2(0) \to \ldots\)
  • \(2(0) \to 2(0) \to \ldots\)
  • \(3(-1) \to 1(-1) \to 3(-1) \to \ldots\)
  • \(4(-2) \to 2(-2) \to 2(-2) \to \ldots\)
  • \(1(1) \to 3(1) \to 4(1) \to 1(1) \to \ldots\)
  • \(1(5) \to 3(5) \to 1(5) \to \ldots\)

Во втором примере граф такой же, как в первом, но у вершин ненулевые значения. Поэтому ответы отличаются от ответов в первом примере.

Пути во втором примере показаны ниже:

  • \(1(4) \to 2(-1) \to 2(-6) \to \ldots\)
  • \(2(-5) \to 2(-10) \to \ldots\)
  • \(3(-4) \to 1(0) \to 2(-5) \to 2(-10) \to \ldots\)
  • \(4(-3) \to 1(1) \to 3(-2) \to 4(-3) \to \ldots\)
  • \(1(5) \to 3(2) \to 1(6) \to 2(1) \to 2(-4) \to \ldots\)
  • \(1(9) \to 3(6) \to 2(1) \to 2(-4) \to \ldots\)

C. Вам задана WASD-строка...

дп жадные алгоритмы математика Перебор реализация Строки Структуры данных *2100

У вас есть строка \(s\) — последовательность команд для робота. Робот находится в одной из клеток клетчатого поля. Он может выполнять следующие команды:

  • 'W' — переместиться на одну клетку вверх;
  • 'S' — переместиться на одну клетку вниз;
  • 'A' — переместиться на одну клетку влево;
  • 'D' — переместиться на одну клетку вправо.

\(Grid(s)\) — прямоугольное поле минимальной площади, такое, что на нем можно выбрать стартовую позицию робота так, что при выполнении всей последовательностей комнад \(s\) робот не выйдет за пределы прямоугольника. Например, если \(s = \text{DSAWWAW}\), то \(Grid(s)\) — это прямоугольник \(4 \times 3\).

  1. вы можете поместить робота в клетку \((3, 2)\);
  2. робот выполняет команду 'D' и перемещается в \((3, 3)\);
  3. робот выполняет команду 'S' и перемещается в \((4, 3)\);
  4. робот выполняет команду 'A' и перемещается в \((4, 2)\);
  5. робот выполняет команду 'W' и перемещается в \((3, 2)\);
  6. робот выполняет команду 'W' и перемещается в \((2, 2)\);
  7. робот выполняет команду 'A' и перемещается в \((2, 1)\);
  8. робот выполняет команду 'W' и перемещается в \((1, 1)\).

У вас есть \(4\) дополнительных буквы: одна 'W', одна 'A', одна 'S' и одна 'D'. Вы можете вставить одну из них (либо не вставлять вообще) в любую позицию в строке \(s\) для минимизации площади \(Grid(s)\).

Какую минимальную площадь \(Grid(s)\) вы можете получить?

Входные данные

Первая строка содержит число \(T\) (\(1 \le T \le 1000\)) — количество запросов.

Следующие \(T\) строк содержат запросы. Каждый запрос содержит строку \(s\) (\(1 \le |s| \le 2 \cdot 10^5\), \(s_i \in \{\text{W}, \text{A}, \text{S}, \text{D}\}\)) — последовательность команд.

Гарантируется, что суммарная длина строк \(s\) по всем запросам не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(T\) строк, по одному числу в каждой строке.

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

Примечание

В первом запросе вам нужно получить строку \(\text{DSAWW}\underline{D}\text{AW}\).

Во втором и третьем запросах вы не можете уменьшить площадь \(Grid(s)\).

D2. Кёрк и бинарная строка (сложная версия)

жадные алгоритмы математика Строки Структуры данных *2100

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

У Кёрка есть бинарная строка \(s\) (строка, содержащая только нули и единицы) длины \(n\), и он просит вас найти бинарную строку \(t\) такой же длины, для которой выполняются следующие условия:

  • Для любых \(l\) и \(r\) (\(1 \leq l \leq r \leq n\)) длина наибольшей неубывающей подпоследовательности в подстроке \(s_{l}s_{l+1} \ldots s_{r}\) равна длине наибольшей неубывающей подпоследовательности в подстроке \(t_{l}t_{l+1} \ldots t_{r}\);
  • Количество нулей в строке \(t\) — максимально возможное.

Неубывающая подпоследовательность в строке \(p\) — это такая последовательность индексов \(i_1, i_2, \ldots, i_k\), что \(i_1 < i_2 < \ldots < i_k\) и \(p_{i_1} \leq p_{i_2} \leq \ldots \leq p_{i_k}\). Число \(k\) называется длиной подпоследовательности.

Если существует несколько строк, удовлетворяющих условиям, то выведите любую.

Входные данные

Единственная строка содержит бинарную строку длины не больше \(10^5\).

Выходные данные

Выведите бинарную строку, для которой выполняются указанные условия. Если существует несколько таких строк, выведите любую.

Примечание

В первом примере:

  • Для подстрок длины \(1\) длина наибольшей неубывающей подпоследовательности равна \(1\);
  • Для \(l = 1, r = 2\) наибольшая неубывающая подпоследовательность для подстроки \(s_{1}s_{2}\) — \(11\), для подстроки \(t_{1}t_{2}\) — \(01\);
  • Для \(l = 2, r = 3\) наибольшая неубывающая подпоследовательность для подстроки \(s_{2}s_{3}\) — \(1\), для подстроки \(t_{2}t_{3}\) — \(1\);
  • Для \(l = 1, r = 3\) наибольшая неубывающая подпоследовательность для подстроки \(s_{1}s_{3}\) — \(11\), для подстроки \(t_{1}t_{3}\) — \(00\);

Второй пример аналогичен первому.

F. Задача об остатках

Перебор реализация Структуры данных *2100

У вас есть массив \(a\), состоящий из \(500000\) целых чисел (элементы нумеруются от \(1\) до \(500000\)). Изначально все элементы \(a\) — нули.

К этому массиву поступают запросы двух типов:

  • \(1\) \(x\) \(y\) — увеличить \(a_x\) на \(y\);
  • \(2\) \(x\) \(y\) — посчитать \(\sum\limits_{i \in R(x, y)} a_i\), где \(R(x, y)\) — множество всех целых чисел от \(1\) до \(500000\), дающих остаток \(y\) при делении на \(x\).

Можете ли вы обработать все запросы?

Входные данные

В первой строке записано одно целое число \(q\) (\(1 \le q \le 500000\)) — количество запросов.

Затем следуют \(q\) строк, каждая из которых задает запрос. В \(i\)-й строке записаны три целых числа \(t_i\), \(x_i\) и \(y_i\) (\(1 \le t_i \le 2\)). Если \(t_i = 1\), то это запрос первого типа, \(1 \le x_i \le 500000\), и \(-1000 \le y_i \le 1000\). Если \(t_i = 2\), то это запрос второго типа, \(1 \le x_i \le 500000\), и \(0 \le y_i < x_i\).

Гарантируется, что во входных данных есть хотя бы один запрос типа \(2\).

Выходные данные

Для каждого запроса типа \(2\) выведите одно целое число — ответ на этот запрос.

G. Инди альбом

Деревья поиск в глубину и подобное Строки строковые суфф. структуры Структуры данных хэши *2700

Любимая экспериментальная инди группа Мишки недавно выпустила новый альбом! У песен этого альбома есть одна общая особенность. Название каждой песни \(s_i\) — одно из следующих типов:

  • \(1~c\) — одна строчная латинская буква;
  • \(2~j~c\) — название \(s_j\) (\(1 \le j < i\)) с приписанной к нему справа одной строчной латинской буквой.

Песни пронумерованы от \(1\) до \(n\). Гарантируется, что первая песня всегда типа \(1\).

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

  • \(i~t\) — посчитать количество вхождений строки \(t\) в \(s_i\) (название \(i\)-й песни альбома), как подстроки, \(t\) состоит только из строчных латинских букв.

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

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 4 \cdot 10^5\)) — количество песен в альбоме.

В каждой из следующих \(n\) строк записано название \(i\)-й песни альбома в следующем формате:

  • \(1~c\)\(s_i\) — это одна строчная латинская буква;
  • \(2~j~c\)\(s_i\) — это название \(s_j\) (\(1 \le j < i\)) с приписанной к нему справа одной строчной латинской буквой.

В следующей строке записано одно целое число \(m\) (\(1 \le m \le 4 \cdot 10^5\)) — количество вопросов Вовы.

В каждой из следующих \(m\) строк записан \(j\)-й вопрос Вовы в следующем формате:

  • \(i~t\) (\(1 \le i \le n\), \(1 \le |t| \le 4 \cdot 10^5\)) — посчитать количество вхождений строки \(t\) в \(s_i\) (название \(i\)-й песни альбома), как подстроки, \(t\) состоит только из строчных латинских букв.

Гарантируется, что суммарная длина всех строк \(t\) из вопросов не превосходит \(4 \cdot 10^5\).

Выходные данные

На каждый вопрос выведите одно целое число — количество вхождений строки вопроса \(t\) в название \(i\)-й песни альбома, как подстроки.

Примечание

Названия песен из первого примера:

  1. d
  2. da
  3. dad
  4. dada
  5. dadad
  6. dadada
  7. dadadad
  8. dadadada
  9. d
  10. do
  11. dok
  12. doki
  13. dokid
  14. dokido
  15. dokidok
  16. dokidoki
  17. do
  18. dok
  19. doki
  20. dokidoki

Тогда вхождения для каждого вопроса следующие:

  1. строка «da» начинается в позициях \([1, 3, 5, 7]\) в названии «dadadada»;
  2. строка «dada» начинается в позициях \([1, 3, 5]\) в названии «dadadada»;
  3. строка «ada» начинается в позициях \([2, 4, 6]\) в названии «dadadada»;
  4. строка «dada» начинается в позициях \([1, 3]\) в названии «dadada»;
  5. нет вхождений строки «dada» в названии «dad»;
  6. строка «doki» начинается в позиции \([1]\) в названии «doki»;
  7. строка «ok» начинается в позиции \([2]\) в названии «doki»;
  8. строка «doki» начинается в позициях \([1, 5]\) в названии «dokidoki»;
  9. строка «doki» начинается в позиции \([1]\) в названии «dokidok»;
  10. строка «d» начинается в позиции \([1]\) в названии «d»;
  11. нет вхождений строки «a» в названии «d»;
  12. строка «doki» начинается в позициях \([1, 5]\) в названии «dokidoki».

D. Восстановить перестановку

Бинарный поиск жадные алгоритмы реализация Структуры данных *1900

Последовательность целых чисел \(p_{1},p_{2}, \ldots,p_{n}\) называется перестановкой, если она содержит каждое число от \(1\) до \(n\) ровно один раз. Например, следующие последовательности перестановки: \([3,1,2], [1], [1,2,3,4,5]\) и \([4,3,1,2]\). А следующие последовательности не являются перестановками: \([2], [1,1], [2,3,4]\).

Загадана перестановка длины \(n\).

Для каждого индекса \(i\) вам дано \(s_{i}\), равное сумме всех таких \(p_{j}\), что \(j < i\) и \(p_{j} < p_{i}\). Иначе говоря, \(s_i\) — это сумма всех элементов до \(i\)-го элемента, которые меньше \(i\)-го элемента.

Ваша задача — восстановить перестановку.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^{5}\)) — размер перестановки.

Вторая строка содержит \(n\) целых чисел \(s_{1}, s_{2}, \ldots, s_{n}\) (\(0 \le s_{i} \le \frac{n(n-1)}{2}\)).

Гарантируется, что \(s\) соответствует корректной перестановке длины \(n\).

Выходные данные

Выведите \(n\) целых чисел \(p_{1}, p_{2}, \ldots, p_{n}\) — элементы восстановленной перестановки.

Можно показать, что ответ всегда уникальный.

Примечание

В первом примере для каждого \(i\) не существует позиции \(j\), удовлетворяющей обоим условиям, соответственно \(s_i\) всегда равен \(0\).

Во втором примере для \(i = 2\) позиция \(j = 1\) удовлетворяет условиям, так что \(s_2 = p_1\).

В третьем примере для \(i = 2, 3, 4\) только позиция \(j = 1\) удовлетворяет условиям, так что \(s_2 = s_3 = s_4 = 1\). Для \(i = 5\) возможны все позиции \(j = 1, 2, 3, 4\), и \(s_5 = p_1 + p_2 + p_3 + p_4 = 10\).

E. Пусть скользят

реализация Структуры данных *2200

Вам дано \(n\) массивов, которые могут иметь разные длины. Также вам дана таблица с \(w\) столбцами и \(n\) строками. \(i\)-й массив горизонтально расположен в \(i\)-й строке. Вы можете двигать каждый массив внутри его строки, но он должен всегда занимать подряд идущие клетки и лежать полностью внутри таблицы.

Вам нужно найти наибольшую возможную сумму чисел в \(j\)-м столбце для каждого \(j\) от \(1\) до \(w\) независимо.

Оптимальные расположения для столбцов \(1\), \(2\) и \(3\) изображены на изображениях слева направо.

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

Входные данные

В первой строке ввода записано два целых числа \(n\) (\(1 \le n \le 10^{6}\)) и \(w\) (\(1 \le w \le 10^{6}\)) — количество массивов и ширина таблицы.

Каждая из следующих \(n\) строк содержит целое число \(l_{i}\) (\(1 \le l_{i} \le w\)) — длина \(i\)-го массива, за которой следуют \(l_{i}\) целых чисел \(a_{i1}, a_{i2}, \ldots, a_{il_i}\) (\(-10^{9} \le a_{ij} \le 10^{9}\)) — элементы массива.

Суммарная длина массивов не превосходит \(10^{6}\).

Выходные данные

Выведите \(w\) целых чисел, \(i\)-е из них должно равно максимальной сумме для столбца \(i\).

Примечание

Изображения для первого примера находятся в условии.

H. Красно-синее дерево

Деревья реализация Структуры данных *3500

Вам дано дерево с \(n\) вершинами. Дерево подвешено за вершину \(1\), которая не считается листом не зависимо от ее степени.

Каждый лист покрашен в один из двух цветов: красный или синий. Листовая вершина с номером \(v\) исходно имеет цвет \(s_{v}\).

Цвет каждой из внутренней вершины (включая корень) определятся следующим образом.

  • Обозначим за \(b\) количество синих непосредственных детей, и за \(r\) количество красных непосредственных детей данной вершины.
  • Тогда цвет этой вершины синий тогда и только тогда, когда \(b - r \ge k\), иначе он красный.

Число \(k\) это параметр, одинаковый для всех вершин.

Вам необходимо обработать запросы следующих типов:

  • 1 v: вывести цвет вершины \(v\);
  • 2 v c: изменить цвет листа \(v\) на \(c\) (\(c = 0\) означает красный, \(c = 1\) означает синий);
  • 3 h: изменить текущее значение \(k\) на \(h\).
Входные данные

Первая строка ввода содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 10^{5}\), \(-n \le k \le n\)) — количество вершин и исходное значение \(k\).

Каждая из следующих \(n - 1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u,v \le n\)), описывающих, что есть ребро, соединяющее вершины \(u\) и \(v\).

Следующая строка состоит из \(n\) целых чисел, разделенных пробелами — исходный массив \(s\) (\(-1 \le s_i \le 1\)). \(s_{i} = 0\) означает, что цвет вершины \(i\) красный. \(s_{i} = 1\) означает, что цвет вершины \(i\) синий. \(s_{i} = -1\) означает, что вершина \(i\) не является листом.

Следующая строка содержит целое число \(q\) (\(1 \le q \le 10^5\)), количество запросов.

Затем следуют \(q\) строк, каждая содержит запрос, который необходимо обработать:

  • 1 v (\(1 \le v \le n\)): вывести цвет вершины \(v\);
  • 2 v c (\(1 \le v \le n\), \(c = 0\) or \(c = 1\)): изменить цвет листа \(v\) на \(c\) (\(c = 0\) означает красный, \(c = 1\) означает синий). Гарантируется, что \(v\) это лист;
  • 3 h (\(-n \le h \le n\)): изменить текущее значение \(k\) на \(h\).
Выходные данные

Для каждого запроса первого типа выведите \(0\), если цвет вершины \(v\) красный, и \(1\) иначе.

Примечание

(i) Исходное дерево

(ii) Дерево после 3-го запроса

(iii) Дерево после 7-го запроса

F. Коала и блокнот

графы Деревья кратчайшие пути поиск в глубину и подобное Строки Структуры данных *2600

Страна коал состоит из \(n\) городов и \(m\) двусторонних дорог, их соединяющих. Дороги пронумерованы от \(1\) до \(m\) в порядке входных данных. Гарантируется, что можно добраться от каждого города до любого другого города.

Коала начинает путешествие из города \(1\). Каждый раз, когда он проходит по дороге, он записывает её номер в блокнот. Он не делает пробелов между числами, так что все записи склеятся в одно большое число.

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

Так как эти числа могут быть достаточно большими, вычислите их по модулю \(10^9+7\). Обратите внимание, что нужно вычислить остаток минимального возможного числа, не минимально возможный остаток.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 10^5, n - 1 \le m \le 10^5\)) — количество городов и количество дорог соответственно.

\(i\)-я из следующих \(m\) строк содержит целые числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\), \(x_i \ne y_i\)), обозначающие двустороннюю дорогу между \(x_i\) и \(y_i\).

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

Выходные данные

Выведите \(n - 1\) целое число — ответ для каждого города за исключением первого.

\(i\)-е число должно быть равно наименьшему числу, которое получилось бы для конечной точки \(i+1\). Так как это число может быть достаточно большим, выведите его остаток по модулю \(10^9+7\).

G1. На блоки (упрощенная версия)

жадные алгоритмы реализация снм Структуры данных *2000

Это более простая версия следующей задачи. В данной версии \(q = 0\).

Последовательность чисел называется хорошей, если элементы разбиты на блоки как в \([3, 3, 3, 4, 1, 1]\). Формально, если два элемента равны, то все элементы между ними должны быть тоже равны тому же значению.

Определим сложность последовательности как минимальное число элементов, которое нужно поменять, чтобы получить хорошую последовательность. Однако, если вы заменяете хотя бы один \(x\) на какое-то значение \(y\), нужно заменить все остальные значения \(x\) на \(y\) тоже. Например, для \([3, 3, 1, 3, 2, 1, 2]\) не разрешается поменять первую \(1\) на \(3\), а вторую \(1\) на \(2\). Вы можете или не заменять \(1\) совсем, или заменить их все на что-то одно.

Вам дана последовательность целых чисел \(a_1, a_2, \ldots, a_n\) и \(q\) изменений.

Каждое изменение имеет вид «\(i\) \(x\)» — заменить \(a_i\) на \(x\).

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

Входные данные

Первая строка содержит целые числа \(n\) и \(q\) (\(1 \le n \le 200\,000\), \(q = 0\)) — длина последовательности и число изменений.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 200\,000\)) — изначальную последовательность.

Каждая из следующих \(q\) строк содержит целые числа \(i_t\) и \(x_t\) (\(1 \le i_t \le n\), \(1 \le x_t \le 200\,000\)) — позицию и новое значение.

Выходные данные

Выведите \(q+1\) целое число — ответ для изначальной последовательности и ответ после каждого изменения.

G2. На блоки (усложнённая версия)

Структуры данных *3200

Это сложная версия задачи. В данной версии \(q \le 200\,000\).

Последовательность чисел называется хорошей, если элементы разбиты на блоки как в \([3, 3, 3, 4, 1, 1]\). Формально, если два элемента равны, то все элементы между ними должны быть тоже равны тому же значению.

Определим сложность последовательности как минимальное число элементов, которое нужно поменять, чтобы получить хорошую последовательность. Однако, если вы заменяете хотя бы один \(x\) на какое-то значение \(y\), нужно заменить все остальные значения \(x\) на \(y\) тоже. Например, для \([3, 3, 1, 3, 2, 1, 2]\) не разрешается поменять первую \(1\) на \(3\), а вторую \(1\) на \(2\). Вы можете или не заменять \(1\) совсем, или заменить их все на что-то одно.

Вам дана последовательность целых чисел \(a_1, a_2, \ldots, a_n\) и \(q\) изменений.

Каждое изменение имеет вид «\(i\) \(x\)» — заменить \(a_i\) на \(x\).

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

Входные данные

Первая строка содержит целые числа \(n\) и \(q\) (\(1 \le n \le 200\,000\), \(0 \le q \le 200\,000\)) — длина последовательности и число изменений.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 200\,000\)) — изначальную последовательность.

Каждая из следующих \(q\) строк содержит целые числа \(i_t\) и \(x_t\) (\(1 \le i_t \le n\), \(1 \le x_t \le 200\,000\)) — позицию и новое значение.

Выходные данные

Выведите \(q+1\) целое число — ответ для изначальной последовательности и ответ после каждого изменения.

H. Траволаторы

жадные алгоритмы математика Структуры данных *3300

В аэропортах часто используются траволаторы, потому что они помогают проходить большие расстояния быстрее. Каждый траволатор имеет некоторую собственную скорость, которая увеличивает скорость, с которой вы идёте. Вы можете просто стоять на траволаторе (тогда вы будете двигаться со скоростью траволатора), либо вы можете ещё и идти, тогда ваша итоговая скорость будет равна сумме скорости, с который вы идёте, и скорости траволатора.

Лимак хочет добраться из точки \(0\) в точку \(L\), расположенные на одной прямой. Между ними есть \(n\) дизъюнктных траволаторов. \(i\)-й из них описывается целыми числами \(x_i\), \(y_i\) и вещественным числом \(s_i\). \(i\)-й траволатор начинается в \(x_i\), заканчивается в \(y_i\) и имеет скорость \(s_i\).

Каждый траволатор расположен внутри отрезка \([0, L]\) и никакие два траволатора не имеют ненулевую длину пересечения. При этом траволаторы могут касаться.

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

Изначально энергия Лимака равна \(0\), и она никогда не должна падать ниже этого значения. В каждый момент он может идти со скоростью \(v\) в диапазоне \([0, 2]\), и это будет стоить ему \(v\) энергии. Также его энергия постоянно пополняется со скоростью \(1\) единица энергии в секунду. Таким образом, если он идёт со скоростью \(v\), его энергия растёт со скоростью \((1-v)\). Обратите внимание, что негативный рост означает убывание энергии.

В частности, Лимак может идти со скоростью \(1\), и это никак не будет влиять на его уровень энергии, а если он будет идти со скорость \(0.77\), то энергия будет расти на \(0.23\).

Лимак может выбирать свою скорость произвольным образом (любое вещественное число в диапазоне \([0, 2]\)) в каждый момент времени (в том числе в моменты, когда он находится в нецелых позициях). Всё происходит непрерывно (не дискретно).

За какое минимальное время Лимак сможет добраться из \(0\) в \(L\)?

Входные данные

Первая строка содержит целые числа \(n\) и \(L\) (\(1 \le n \le 200\,000\), \(1 \le L \le 10^9\)), число траволаторов и расстояние, которое нужно пройти.

Каждая из следующих \(n\) строк содержит целые числа \(x_i\), \(y_i\) и вещественное число \(s_i\) (\(0 \le x_i < y_i \le L\), \(0.1 \le s_i \le 10.0\)). Значение \(s_i\) дано с не более, чем \(9\) знаками после запятой.

Гарантируется, что никакие два траволатора не имеют пересечения ненулевой длины. Траволаторы перечислены слева направо. Иначе говоря, \(y_i \le x_{i + 1}\) при \(1 \le i \le n - 1\).

Выходные данные

Выведите одно вещественное число — минимальное время, которое нужно чтобы достичь \(L\). Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить \(10^{-9}\).

Примечание

Картинка изображает первые два примера. В первом примере есть траволатор из \(0\) в \(2\) скорости \(2.0\), а Лимак хочет попасть в точку \(5\). Во втором примере есть траволатор из \(2\) в \(4\) скорости \(0.91\).

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

  • Добраться из \(0\) в \(2\) просто стоя на траволаторе. Траволатор едет со скоростью \(2\), значит понадобится всего \(1\) секунда времени и энергия увеличится на \(1\).
  • Добраться из \(2\) в \(4\) идя со скоростью \(2\) в течении \(1\) секунды. За эту \(1\) секунду уровень энергии понизится до \(0\).
  • Добраться из \(4\) в \(5\) идя со скоростью \(1\). На это понадобится \(1\) секунда и уровень энергии будет равен \(0\) всё это время.

Тем самым общее время равно \(1 + 1 + 1 = 3\).

E. Счастливый массив

Структуры данных *2400

Петя любит счастливые числа. Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

У Пети есть массив из n чисел. Он хочет выполнить m операций двух типов:

  • add l r d — прибавить целое число d ко всем элементам с индексами в интервале от l до r включительно (1 ≤ l ≤ r ≤ n, 1 ≤ d ≤ 104);
  • count l r — найти и вывести на экран количество счастливых чисел среди элементов с индексами в интервале от l до r включительно (1 ≤ l ≤ r ≤ n). Каждое счастливое число нужно учесть столько раз, сколько оно встречается в интервале.

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

Входные данные

В первой строке задано два целых числа n и m (1 ≤ n, m ≤ 105) — количество чисел в массиве и количество операций соответственно. Во второй строке задано n целых положительных чисел, каждое из которых не превосходит 104 — числа массива. В следующих m строках заданы операции, по одной на строке. Они соответствуют описанию в условии.

Гарантируется, что после выполнения всех операций каждое число в массиве будет не больше 104.

Выходные данные

Для каждой операции второго типа на отдельной строке выведите одно целое число — количество счастливых чисел в соответствующем интервале.

Примечание

В первом примере после первого прибавления массив будет выглядеть следующим образом:

4 5 6

После второго прибавления:

4 8 9

Во втором примере после первого прибавления:

7 7 7 7

После второго прибавления:

7 47 47 7

B. Плохие цены

реализация Структуры данных *1100

Поликарп анализирует цену на новую модель berPhone. В его распоряжении цены за \(n\) последних дней: \(a_1, a_2, \dots, a_n\), где \(a_i\) — цена berPhone в день \(i\).

Поликарп считает цену в день \(i\) плохой, если позже (то есть в день с большим номером) berPhone продавался по меньшей цене. Например, если \(n=6\) и \(a=[3, 9, 4, 6, 7, 5]\), то количество дней с плохой ценой равно \(3\) — это дни \(2\) (\(a_2=9\)), \(4\) (\(a_4=6\)) и \(5\) (\(a_5=7\)).

Выведите количество дней с плохой ценой по мнению Поликарпа.

Вам необходимо ответить на \(t\) независимых наборов входных данных.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10000\)) — количество наборов входных данных в тесте. Наборы входных данных надо обрабатывать независимо, один за другим.

Каждый набор входных данных состоит из двух строк. Первая строка содержит целое число \(n\) (\(1 \le n \le 150000\)) — количество дней. Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)), где \(a_i\) — цена в \(i\)-й день.

Гарантируется, что сумма \(n\) по всем наборам входных данных в тесте не превосходит \(150000\).

Выходные данные

Выведите \(t\) целых чисел, \(j\)-е из них должно быть равно количеству дней с плохой ценой в \(j\)-м наборе входных данных.

F. Нестабильная сортировка строки

графы жадные алгоритмы поиск в глубину и подобное реализация снм Строки Структуры данных *2100

Авторы загадали строку \(s\), состоящую из \(n\) строчных букв латинского алфавита.

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

Для всех \(i\) от \(1\) до \(n-1\) выполняются следующие свойства: \(s[p_i] \le s[p_{i + 1}]\) и \(s[q_i] \le s[q_{i + 1}]\). Это значит, что если вы выпишете все символы \(s\) в порядке индексов в перестановке, результирующая строка получится отсортированной в неубывающем порядке.

Ваша задача — восстановить любую строку \(s\) длины \(n\), состоящую хотя бы из \(k\) различных строчных букв латинского алфавита, которая подходит к заданным перестановкам.

Если существует несколько возможных ответов, вы можете вывести любой.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5, 1 \le k \le 26\)) — длину строки и необходимое количество различных символов.

Вторая строка входных данных содержит \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\), все \(p_i\) являются различными целыми числами от \(1\) до \(n\)) — перестановку \(p\).

Третья срока входных данных содержит \(n\) целых чисел \(q_1, q_2, \dots, q_n\) (\(1 \le q_i \le n\), все \(q_i\) являются различными целыми числами от \(1\) до \(n\)) — перестановку \(q\).

Выходные данные

Если невозможно найти подходящую строку, выведите «NO» в первой строке.

Иначе выведите «YES» в первой строке и строку \(s\) во второй строке. Она должна состоять ровно из \(n\) строчных букв латинского алфавита, содержать хотя бы \(k\) различных символов и подходить заданным перестановкам.

Если существует несколько возможных ответов, вы можете вывести любой.

C. Плохая последовательность

жадные алгоритмы Структуры данных *1200

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

Чтобы исправить последовательность Петя собирается не более одного раза взять произвольную скобку и вынуть её из последовательности (при этом оставшиеся скобки сдвигаются), после чего вставить её обратно в произвольное место в последовательности. Разворачивать скобку при этом не разрешается.

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

  • \(s\) является пустой;
  • \(s\) равна «(\(t\))», где \(t\) — правильная скобочная последовательность;
  • \(s\) равна \(t_1 t_2\), то есть конкатенации \(t_1\) и \(t_2\), где \(t_1\) и \(t_2\) являются правильными скобочными последовательностями.

Например, последовательности «(()())», «()» являются правильными, а «)(» и «())» нет. Помогите Пете понять, сможет ли он переставить скобку так, чтобы скобочная последовательность стала правильной.

Входные данные

В первой строке входных данных записано единственное число \(n\) (\(1 \leq n \leq 200\,000\)) — длина последовательности, которую друзья подарили Пете.

Во второй строке входных данных записана строка длины \(n\), состоящая из символов «()» и «)».

Выходные данные

Выведите «Yes», если Петя сможет получить правильную скобочную последовательность сделав не более одной перестановки скобки. В противном случае выведите «No».

Примечание

В первом примере Петя может переставить первую скобку в конец, тогда получится строка «()», которая является правильной скобочной последовательностью.

Во втором примере не существует способа переставить одну скобку так, чтобы строка стала правильной скобочной последовательностью.

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

G. Хорошее настроение

битмаски Структуры данных *3200

Недавно биологами было сделано удивительное открытие, позволяющее определять в каком настроении находится хамелеон. Для простоты будем считать, что туловище хамелеона имеет вид таблицы размером \(n \times m\), каждая клетка которой может быть зеленой или синей и изменять свой цвет. Будем обозначать за \((x, y)\) (\(1 \leq x \leq n\), \(1 \leq y \leq m\)) клетку, которая находится в строке с номером \(x\) и столбце с номером \(y\).

Будем называть признаком хорошего настроения хамелеона такую четверку клеток, являющихся угловыми клетками некоторого прямоугольника внутри таблицы, что цвета клеток в противоположных углах совпадают, но при этом не все четыре клетки одного цвета. Более формально, это четверка клеток \((x_1, y_1)\), \((x_1, y_2)\), \((x_2, y_1)\), \((x_2, y_2)\) для некоторых \(1 \leq x_1 < x_2 \leq n\), \(1 \leq y_1 < y_2 \leq m\), что цвета \((x_1, y_1)\) и \((x_2, y_2)\) совпадают и цвета \((x_1, y_2)\) и \((x_2, y_1)\) совпадают, но при этом не все четыре клетки имеют одинаковый цвет. Было обнаружено, что если такая четверка клеток существует, то у хамелеона хорошее настроение; в противном случае настроение хамелеона плохое.

Вас просят помочь учёным написать программу, которая определяет настроение хамелеона. Будем считать, что изначально хамелеон полностью зеленый, то есть все клетки таблицы имеют зеленый цвет. После этого окраска хамелеона может несколько раз измениться. За один раз цвет клеток некоторого отрезка одной строки таблицы может измениться на противоположный. Более формально, каждое изменение окраски хамелеона задается числами \(a\), \(l\), \(r\) (\(1 \leq a \leq n\), \(1 \leq l \leq r \leq m\)). При этом цвет всех клеток \((a, b)\), таких, что \(l \leq b \leq r\), меняется на противоположный.

Напишите программу, которая после каждого изменения окраски будет сообщать настроение хамелеона. При этом, если настроение хамелеона хорошее, то программа должна сообщать любые подходящие \(x_1\), \(y_1\), \(x_2\), \(y_2\), такие, что четверка клеток \((x_1, y_1)\), \((x_1, y_2)\), \((x_2, y_1)\), \((x_2, y_2)\) является признаком хорошего настроения.

Входные данные

В первой строке находятся три целых числа \(n\), \(m\), \(q\) (\(1 \leq n, m \leq 2000\), \(1 \leq q \leq 500\,000\)) — размеры таблицы и количество изменений окраски хамелеона.

В следующих \(q\) строках находятся по 3 целых числа \(a_i\), \(l_i\), \(r_i\) (\(1 \leq a_i \leq n\), \(1 \leq l_i \leq r_i \leq m\)) — описание \(i\)-го по порядку изменения окраски хамелеона.

Выходные данные

Выведите \(q\) строк. В \(i\) строке выведите описание настроения хамелеона после первых \(i\) изменений окраски для всех \(1 \leq i \leq q\).

Если настроение хамелеона плохое, то выведите единственное число \(-1\).

Иначе выведите четыре целых числа \(x_1\), \(y_1\), \(x_2\), \(y_2\) (\(1 \leq x_1 < x_2 \leq n\), \(1 \leq y_1 < y_2 \leq m\)), таких что четверка клеток \((x_1, y_1)\), \((x_1, y_2)\), \((x_2, y_1)\), \((x_2, y_2)\) является признаком хорошего настроения хамелеона. Если возможных четвёрок несколько, разрешается вывести любую из них.

F. Wi-Fi

дп жадные алгоритмы Структуры данных *2100

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

Вы хотите подключить все \(n\) комнат к интернету.

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

В некоторых комнатах также есть место для установки роутера. Стоимость установки роутера в \(i\)-й комнате также равна \(i\) монет. Вы не можете поставить роутер в комнате, в которой нет места для его установки. Когда вы ставите роутер в комнате \(i\), вы подключаете все комнаты с номерами от \(max(1,~i - k)\) до \(min(n,~i + k)\) включительно к интернету, где \(k\) — это радиус действия роутера. Значение \(k\) одинаково для всех роутеров.

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

Входные данные

В первой строке следуют два целых числа \(n\) и \(k\) (\(1 \le n, k \le 2 \cdot 10^5\)) — количество комнат и радиус действия каждого роутера.

Во второй строке следует строка \(s\) длины \(n\), состоящая только из нулей и единиц. Если \(i\)-й символ строки равен единице, то в \(i\)-й комнате есть место для установки роутера. Если \(i\)-й символ строки равен нулю, то в \(i\)-й комнате нет места для установки роутера.

Выходные данные

Выведите одно целое число — минимальную стоимость подключения всех \(n\) комнат к интернету.

Примечание

В первом примере достаточно установить роутер в комнату \(3\), тогда все комнаты будут подключены к интернету. Стоимость подключения равна \(3\).

Во втором примере нельзя устанавливать роутеры ни в одну из комнат, поэтому все комнаты нужно подключать напрямую кабелем. Таким образом, стоимость подключения всех комнат равна \(1 + 2 + 3 + 4 + 5 + 6 = 21\).

В третьем примере комнату \(1\) нужно подключить напрямую кабелем, а в комнату \(3\) установить роутер. Таким образом, стоимость подключения всех комнат равна \(1 + 3 = 4\).

В четвертом примере нужно установить роутеры в комнаты \(5\) и \(10\). Тогда все комнаты будут подключены к интернету. Стоимость подключения равна \(5 + 10 = 15\).

E. Запросы суммы?

жадные алгоритмы математика реализация Структуры данных *2300

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

Например, мультимножество \(\{20, 300, 10001\}\)хорошее, а мультимножество \(\{20, 310, 10001\}\)плохое:

Красным отмечены те числа и разряды, в которых те же цифры, что и в сумме. Сумма первого мультимножества равна \(10321\), для каждого разряда есть необходимая цифра. Сумма второго мультимножества равна \(10331\), и для второго с конца разряда не сушествует числа с такой же цифрой, что делает мультимножество плохим.

Вам дан массив из \(n\) целых чисел \(a_1, a_2, \dots, a_n\).

Необходимо ответить на запросы к нему. Запросы могут быть двух типов:

  • \(1~i~x\) — заменить \(a_i\) на \(x\);
  • \(2~l~r\) — найти плохое подмножество мультимножества чисел \(a_l, a_{l + 1}, \dots, a_r\) с минимальной суммой или сказать, что плохих подмножеств не существует.

Обратите внимание, что пустое подмножество является хорошим.

Для каждого запроса второго типа выведите наименьшую сумму плохого подмножества. Выведите -1, если не существует плохого подмножества.

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество элементов в массиве и количество запросов, соответственно.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i < 10^9\)).

В каждой из следующих \(m\) строк записан запрос одного из двух типов:

  • \(1~i~x\) (\(1 \le i \le n\), \(1 \le x < 10^9\)) — заменить \(a_i\) на \(x\);
  • \(2~l~r\) (\(1 \le l \le r \le n\)) — найти плохое подмножество мультимножества чисел \(a_l, a_{l + 1}, \dots, a_r\) с минимальной суммой или сказать, что плохих подмножеств не существует.

Гарантируется, что есть хотя бы один запрос второго типа.

Выходные данные

Для каждого запроса второго типа выведите наименьшую сумму плохого подмножества. Выведите -1, если не существует плохого подмножества.

Примечание

Все подмножества мультимножества \(\{20, 300, 10001\}\) являются хорошими, поэтому ответ -1.

Все возможные плохие подмножества в третьем запросе: \(\{20, 310\}\) и \(\{20, 310, 10001\}\). С меньшей суммой — \(\{20, 310\}\). Обратите внимание, что требуется найти подмножество, а не подотрезок, поэтому выбранные элементы не обязательно будут стоять рядом в массиве.

В четвертом запросе есть только пустое подножество и подмножество \(\{20\}\). Оба они хорошие.

В последнем запросе есть пустое подмножество и подмножества \(\{20\}\), \(\{20\}\) и \(\{20, 20\}\). Только \(\{20, 20\}\)плохое, его сумма равна \(40\). Обратите внимание, что требуется выбрать мультимножество, поэтому оно может включать в себя одинаковые элементы.

F. Задача с обязательными онлайн-запросами

графы Деревья разделяй и властвуй снм Структуры данных *2600

Дан неориентированный граф из \(n\) вершин и без ребер. Вершины пронумерованы от \(1\) до \(n\).

Необходимо ответить на запросы к нему. Пусть \(last\) будет ответом на предыдущий запрос второго типа (или \(0\), если таких запросов еще не было). Тогда запросы следующие:

  • \(1~x~y\) (\(1 \le x, y \le n\), \(x \ne y\)) — добавить неориентированное ребро между вершинами \((x + last - 1)~mod~n + 1\) и \((y + last - 1)~mod~n + 1\), если такого в графе нет, а иначе удалить его;
  • \(2~x~y\) (\(1 \le x, y \le n\), \(x \ne y\)) — проверить, что существует путь между вершинами \((x + last - 1)~mod~n + 1\) и \((y + last - 1)~mod~n + 1\), который проходит только через существующие ребра, и выставить \(last\) значение \(1\), если есть, и \(0\) иначе.

Удачи!

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(2 \le n, m \le 2 \cdot 10^5\)) — количество вершин в графе и количество запросов, соответственно.

В каждой из следующих \(m\) строк записан запрос одного из выше приведенных типов. Гарантируется, что есть хотя бы один запрос второго типа.

Выходные данные

Выведите строку, состоящую из символов '0' и '1'. \(i\)-й символ должен быть равен ответу на \(i\)-й запрос второго типа. Таким образом, длина строки должна быть равна количеству запросов второго типа.

Примечание

Преобразованные запросы из первого примера:

  • 1 1 2
  • 1 1 3
  • 2 3 2
  • 1 3 5
  • 2 4 5
  • 1 2 4
  • 2 3 4
  • 1 2 4
  • 2 5 4

Преобразованные запросы из второго примера:

  • 1 1 2
  • 1 2 3
  • 1 3 1
  • 2 1 3
  • 1 1 3
  • 2 3 1
  • 1 2 3
  • 2 2 3
  • 2 1 2

B. Guarding warehouses

геометрия Структуры данных *3000

Bob Bubblestrong just got a new job as security guard. Bob is now responsible for safety of a collection of warehouses, each containing the most valuable Bubble Cup assets - the high-quality bubbles. His task is to detect thieves inside the warehouses and call the police.

Looking from the sky, each warehouse has a shape of a convex polygon. Walls of no two warehouses intersect, and of course, none of the warehouses is built inside of another warehouse.

Little did the Bubble Cup bosses know how lazy Bob is and that he enjoys watching soap operas (he heard they are full of bubbles) from the coziness of his office. Instead of going from one warehouse to another to check if warehouses are secured, the plan Bob has is to monitor all the warehouses from the comfort of his office using the special X-ray goggles. The goggles have an infinite range, so a thief in any of the warehouses could easily be spotted.

However, the goggles promptly broke and the X-rays are now strong only enough to let Bob see through a single wall. Now, Bob would really appreciate if you could help him find out what is the total area inside of the warehouses monitored by the broken goggles, so that he could know how much area of the warehouses he needs to monitor in person.

Input

The first line contains one integer \(N\) (\(1\) \(\leq\) \(N\) \(\leq\) \(10^4\)) – the number of warehouses.

The next \(N\) lines describe the warehouses.

The first number of the line is integer \(c_i\) (\(3\) \(\leq\) \(c_i\) \(\leq\) \(10^4\)) – the number corners in the \(i^{th}\) warehouse, followed by \(c_i\) pairs of integers. The \(j^{th}\) pair is \((x_j, y_j)\) – the coordinates of the \(j^{th}\) corner (\(|x_j|\), \(|y_j|\) \(\leq\) \(3 * 10^4\)). The corners are listed in the clockwise order. The total number of corners in all the warehouses is at most \(5 * 10^4\).

Bob's office is positioned at the point with coordinates \((0, 0)\). The office is not contained within any of the warehouses.

Output

Print a single line containing a single decimal number accurate to at least four decimal places – the total area of the warehouses Bob can monitor using the broken X-ray goggles.

Note

Areas monitored by the X-ray goggles are colored green and areas not monitored by the goggles are colored red.

The warehouses \(ABCD\), \(IJK\) and \(LMNOPQ\) are completely monitored using the googles.

The warehouse \(EFGH\) is partially monitored using the goggles: part \(EFW\) is not monitored because to monitor each point inside it, the X-rays must go through two walls of warehouse \(ABCD\).

The warehouse \(RUTS\) is not monitored from the Bob's office, because there are two walls of the warehouse \(IJK\) between Bob's office and each point in \(RUTS\).

The total area monitored by the goggles is \(P\) = \(P_{ABCD}\) + \(P_{FGHW}\) + \(P_{IJK}\) + \(P_{LMNOPQ}\) = \(4\) + \(3.333333333333\) + \(2\) + \(4\) = \(13.333333333333\).

F. Workout plan

жадные алгоритмы Структуры данных *1500

Alan decided to get in shape for the summer, so he created a precise workout plan to follow. His plan is to go to a different gym every day during the next N days and lift \(X[i]\) grams on day \(i\). In order to improve his workout performance at the gym, he can buy exactly one pre-workout drink at the gym he is currently in and it will improve his performance by \(A\) grams permanently and immediately. In different gyms these pre-workout drinks can cost different amounts \(C[i]\) because of the taste and the gym's location but its permanent workout gains are the same. Before the first day of starting his workout plan, Alan knows he can lift a maximum of \(K\) grams. Help Alan spend a minimum total amount of money in order to reach his workout plan. If there is no way for him to complete his workout plan successfully output \(-1\).

Input

The first one contains two integer numbers, integers \(N\) \((1 \leq N \leq 10^5)\) and \(K\) \((1 \leq K \leq 10^5)\) – representing number of days in the workout plan and how many grams he can lift before starting his workout plan respectively. The second line contains \(N\) integer numbers \(X[i]\) \((1 \leq X[i] \leq 10^9)\) separated by a single space representing how many grams Alan wants to lift on day \(i\). The third line contains one integer number \(A\) \((1 \leq A \leq 10^9)\) representing permanent performance gains from a single drink. The last line contains \(N\) integer numbers \(C[i]\) \((1 \leq C[i] \leq 10^9)\) , representing cost of performance booster drink in the gym he visits on day \(i\).

Output

One integer number representing minimal money spent to finish his workout plan. If he cannot finish his workout plan, output -1.

Note

First example: After buying drinks on days 2 and 4 Alan can finish his workout plan. Second example: Alan cannot lift 40000 grams on day 2.

F. Садовод Леша

Бинарный поиск Структуры данных *2700

Садовод Леша очень любит выращивать деревья. Напомним, что деревом называется связный ациклический граф на \(n\) вершинах.

Сегодня он решил вырастить подвешенное бинарное дерево. Бинарным деревом называется дерево, в котором у каждой вершины не больше двух сыновей. К счастью, у Леши еще с прошлого дня рождения завалялась перестановка чисел от \(1\) до \(n\), поэтому он решил вырастить дерево по этой перестановке. Для этого он совершает следующий процесс: находит минимум в перестановке, создает соответствующую ему вершину и делает ее корнем дерева. После этого перестановка разделяется на две части: все, что левее минимального элемента, и все, что правее. Минимумы на левой и правой части становятся левыми и правыми сыновьями корня соответственно, после чего на левой и правой части производится рекурсивно тот же процесс.

Теперь Леша хочет вырастить целый лес деревьев: по одному дереву на каждый циклический сдвиг перестановки. Ему интересно, при каком циклическом сдвиге глубина полученного дерева будет минимальной. Но, к сожалению, выращивание леса — дело долгое, а ответ интересен Леше прямо сейчас. Поможете ему?

Напомним, что циклическим сдвигом перестановки \(a_1, a_2, \ldots, a_k, \ldots, a_n\) на \(k\) элементов влево называется перестановка \(a_{k + 1}, a_{k + 2}, \ldots, a_n, a_1, a_2, \ldots, a_k\).

Входные данные

Первая строка содержит целое число \(n ~ (1 \leqslant n \leqslant 200\,000)\) — длина перестановки.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n ~ (1 \leqslant a_i \leqslant n)\), при этом гарантируется, что каждое число встречается ровно один раз.

Выходные данные

Через пробел выведите два числа: минимальная глубина дерева, которую можно получить, и на сколько нужно циклически сдвинуть перестановку влево, чтобы получить дерево минимальной глубины. Величина сдвига должна быть числом от \(0\) до \(n - 1\). Если возможных ответов несколько, выведите любой.

Примечание

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

F. Выбери квадрат

Бинарный поиск сортировки Структуры данных *2400

Недавно Петя нашел игру «Выбери квадрат». В игре на бесконечном поле расположено \(n\) точек, пронумерованных целыми числами от \(1\) до \(n\). Точка номер \(i\) имеет координаты \((x_i, y_i)\) и стоимость \(c_i\).

Необходимо выбрать квадрат, стороны которого параллельны осям координат, левый нижний и правый верхний угол лежат на прямой \(y = x\), и все углы имеют целые координаты.

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

Петя просит вас помочь ему найти максимальный счет в игре, выбрав ровно один квадрат.

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — количество точек на поле.

Каждая из следующих \(n\) строк содержит три целых числа \(x_i, y_i, c_i\) (\(0 \le x_i, y_i \le 10^9, -10^6 \le c_i \le 10^6\)) — координаты \(i\)-й точки и ее стоимость, соответственно.

Выходные данные

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

Во второй строке выведите четыре целых числа \(x_1, y_1, x_2, y_2\) (\(0 \le x_1, y_1, x_2, y_2 \le 2 \cdot 10^9, x_1 = y_1, x_2 = y_2, x_1 \le x_2\)), разделенные пробелами — координаты левого нижнего и правого верхнего углов квадрата, которые необходимо выбрать Пете, чтобы набрать максимальный счет.

Примечание

Игровое поле, соответствующее первому тестовому примеру:

F. Стек-уничтожимые массивы

дп разделяй и властвуй Структуры данных хэши *2600

Давайте рассмотрим следующий процесс: изначально у вас есть пустой стек и массив \(s\) длины \(l\). Вы пытаетесь добавлять элементы массива в стек в порядке \(s_1, s_2, s_3, \dots s_{l}\). Причем если стек пустой или элемент на вершине стека не равен текущему, то вы просто добавляете текущий элемент на вершину стека. Иначе вы не добавляете элемент и более того, удаляете верхний элемент стека.

Если после данного процесса стек окажется пустым, то массив \(s\) считается стек-уничтожимым.

Примеры стек-уничтожимых массивов:

  • \([1, 1]\);
  • \([2, 1, 1, 2]\);
  • \([1, 1, 2, 2]\);
  • \([1, 3, 3, 1, 2, 2]\);
  • \([3, 1, 3, 3, 1, 3]\);
  • \([3, 3, 3, 3, 3, 3]\);
  • \([5, 1, 2, 2, 1, 4, 4, 5]\);

Давайте рассмотрим изменения стека более подробно при \(s = [5, 1, 2, 2, 1, 4, 4, 5]\) (элемент на вершине текста выделен жирным шрифтом).

  1. после добавления \(s_1 = 5\) стек будет равен \([\textbf{5}]\);
  2. после добавления \(s_2 = 1\) стек будет равен \([5, \textbf{1}]\);
  3. после добавления \(s_3 = 2\) стек будет равен \([5, 1, \textbf{2}]\);
  4. после добавления \(s_4 = 2\) стек будет равен \([5, \textbf{1}]\);
  5. после добавления \(s_5 = 1\) стек будет равен \([\textbf{5}]\);
  6. после добавления \(s_6 = 4\) стек будет равен \([5, \textbf{4}]\);
  7. после добавления \(s_7 = 4\) стек будет равен \([\textbf{5}]\);
  8. после добавления \(s_8 = 5\) стек станет пустым.

Вам задан массив \(a_1, a_2, \ldots, a_n\). Вам нужно посчитать количество подотрезков этого массива, которые являются стек-уничтожимыми.

Обратите внимание, что вам нужно ответить на \(q\) независимых запросов.

Входные данные

Первая строка содержит целое число \(q\) (\(1 \le q \le 3 \cdot 10^5\)) — количество запросов.

Первая строка каждого запроса содержит единственное целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого запроса содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем запросам не превосходит \(3 \cdot 10^5\).

Выходные данные

На каждый запрос выведите одно число — количество стек-уничтожимых подотрезков массива \(a\).

Примечание

В первом запросе есть четыре стек-уничтожимых подотрезка: \(a_{1 \ldots 4} = [2, 1, 1, 2], a_{2 \ldots 3} = [1, 1], a_{2 \ldots 5} = [1, 1, 2, 2], a_{4 \ldots 5} = [2, 2]\).

Во втором запросе только один стек-уничтожимый подотрезок  — \(a_{3 \ldots 4}\).

В третьем запросе есть восемь стек-уничтожимых подотрезков: \(a_{1 \ldots 8}, a_{2 \ldots 5}, a_{2 \ldots 7}, a_{2 \ldots 9}, a_{3 \ldots 4}, a_{6 \ldots 7}, a_{6 \ldots 9}, a_{8 \ldots 9}\).

D1. Оптимальные подпоследовательности (упрощённая версия)

жадные алгоритмы Структуры данных *1600

Это упрощенная версия задачи, в этой версии \(1 \le n, m \le 100\). Вы можете взламывать эту задачу, только если вы заблокировали обе версии.

Пусть задана последовательность целых чисел \(a=[a_1,a_2,\dots,a_n]\) длины \(n\). Её подпоследовательностью называется любая такая, которая получена удалением нуля или более элементов из последовательности \(a\) (они не обязательно идут подряд). Например, для последовательности \(a=[11,20,11,33,11,20,11]\):

  • \([11,20,11,33,11,20,11]\), \([11,20,11,33,11,20]\), \([11,11,11,11]\), \([20]\), \([33,20]\) — подпоследовательности (некоторые из большого списка);
  • \([40]\), \([33,33]\), \([33,20,20]\), \([20,20,11,11]\) — не являются подпоследовательностями.

Пусть дополнительно задано целое неотрицательное число \(k\) (\(1 \le k \le n\)), тогда подпоследовательность называется оптимальной, если:

  • она имеет длину \(k\) и сумма её элементов максимальная возможная среди всех подпоследовательностей длины \(k\);
  • и среди всех подпоследовательностей длины \(k\), которые удовлетворяют предыдущему пункту она лексикографически минимальна.

Напомним, что последовательность \(b=[b_1, b_2, \dots, b_k]\) лексикографически меньше последовательности \(c=[c_1, c_2, \dots, c_k]\), если первый слева элемент в котором они различаются меньше в последовательности \(b\) чем в \(c\). Формально: существует такое \(t\) (\(1 \le t \le k\)), что \(b_1=c_1\), \(b_2=c_2\), ..., \(b_{t-1}=c_{t-1}\) и одновременно \(b_t<c_t\). Например:

  • \([10, 20, 20]\) лексикографически меньше чем \([10, 21, 1]\),
  • \([7, 99, 99]\) лексикографически меньше чем \([10, 21, 1]\),
  • \([10, 21, 0]\) лексикографически меньше чем \([10, 21, 1]\).

Вам задана последовательность \(a=[a_1,a_2,\dots,a_n]\) и \(m\) запросов, каждый состоит из двух чисел \(k_j\) и \(pos_j\) (\(1 \le k \le n\), \(1 \le pos_j \le k_j\)). Для каждого запроса выведите значение, которое стоит в индексе \(pos_j\) оптимальной подпоследовательности заданной последовательности \(a\) для \(k=k_j\).

Например, если \(n=4\), \(a=[10,20,30,20]\), \(k_j=2\), тогда оптимальная подпоследовательность равна \([20,30]\) — она минимальная лексикографически среди всех подпоследовательностей длины \(2\) с максимальной суммой элементов. Таким образом, ответом на запрос вида \(k_j=2\), \(pos_j=1\) будет число \(20\), а ответом на запрос вида \(k_j=2\), \(pos_j=2\) будет число \(30\).

Входные данные

В первой строке записано целое число \(n\) (\(1 \le n \le 100\)) — длина последовательности \(a\).

Вторая строка содержит элементы последовательности \(a\) — целые числа \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Третья строка содержит целое число \(m\) (\(1 \le m \le 100\)) — количество запросов.

Следующие \(m\) строк содержат пары целых чисел \(k_j\) и \(pos_j\) (\(1 \le k \le n\), \(1 \le pos_j \le k_j\)) — параметры запросов.

Выходные данные

Выведите \(m\) целых чисел \(r_1, r_2, \dots, r_m\) (\(1 \le r_j \le 10^9\)) по одному в строке — ответы на запросы в порядке их следования во входных данных. Значение \(r_j\) должно быть равно значению, которое содержится в позиции \(pos_j\) оптимальной подпоследовательности для \(k=k_j\).

Примечание

В первом примере, для \(a=[10,20,10]\) оптимальные подпоследовательности:

  • для \(k=1\) — это \([20]\),
  • для \(k=2\) — это \([10,20]\),
  • для \(k=3\) — это \([10,20,10]\).

D2. Оптимальные подпоследовательности (усложненная версия)

жадные алгоритмы Структуры данных *1800

Это усложненная версия задачи, в этой версии \(1 \le n, m \le 2\cdot10^5\). Вы можете взламывать эту задачу, если вы ее заблокировали. Но вы можете взламывать предыдущую версию задачи, только если вы заблокировали обе версии.

Пусть задана последовательность целых чисел \(a=[a_1,a_2,\dots,a_n]\) длины \(n\). Её подпоследовательностью называется любая такая, которая получена удалением нуля или более элементов из последовательности \(a\) (они не обязательно идут подряд). Например, для последовательности \(a=[11,20,11,33,11,20,11]\):

  • \([11,20,11,33,11,20,11]\), \([11,20,11,33,11,20]\), \([11,11,11,11]\), \([20]\), \([33,20]\) — подпоследовательности (некоторые из большого списка);
  • \([40]\), \([33,33]\), \([33,20,20]\), \([20,20,11,11]\) — не являются подпоследовательностями.

Пусть дополнительно задано целое неотрицательное число \(k\) (\(1 \le k \le n\)), тогда подпоследовательность называется оптимальной, если:

  • она имеет длину \(k\) и сумма её элементов максимальная возможная среди всех подпоследовательностей длины \(k\);
  • и среди всех подпоследовательностей длины \(k\), которые удовлетворяют предыдущему пункту она лексикографически минимальна.

Напомним, что последовательность \(b=[b_1, b_2, \dots, b_k]\) лексикографически меньше последовательности \(c=[c_1, c_2, \dots, c_k]\), если первый слева элемент в котором они различаются меньше в последовательности \(b\) чем в \(c\). Формально: существует такое \(t\) (\(1 \le t \le k\)), что \(b_1=c_1\), \(b_2=c_2\), ..., \(b_{t-1}=c_{t-1}\) и одновременно \(b_t<c_t\). Например:

  • \([10, 20, 20]\) лексикографически меньше чем \([10, 21, 1]\),
  • \([7, 99, 99]\) лексикографически меньше чем \([10, 21, 1]\),
  • \([10, 21, 0]\) лексикографически меньше чем \([10, 21, 1]\).

Вам задана последовательность \(a=[a_1,a_2,\dots,a_n]\) и \(m\) запросов, каждый состоит из двух чисел \(k_j\) и \(pos_j\) (\(1 \le k \le n\), \(1 \le pos_j \le k_j\)). Для каждого запроса выведите значение, которое стоит в индексе \(pos_j\) оптимальной подпоследовательности заданной последовательности \(a\) для \(k=k_j\).

Например, если \(n=4\), \(a=[10,20,30,20]\), \(k_j=2\), тогда оптимальная подпоследовательность равна \([20,30]\) — она минимальная лексикографически среди всех подпоследовательностей длины \(2\) с максимальной суммой элементов. Таким образом, ответом на запрос вида \(k_j=2\), \(pos_j=1\) будет число \(20\), а ответом на запрос вида \(k_j=2\), \(pos_j=2\) будет число \(30\).

Входные данные

В первой строке записано целое число \(n\) (\(1 \le n \le 2\cdot10^5\)) — длина последовательности \(a\).

Вторая строка содержит элементы последовательности \(a\) — целые числа \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Третья строка содержит целое число \(m\) (\(1 \le m \le 2\cdot10^5\)) — количество запросов.

Следующие \(m\) строк содержат пары целых чисел \(k_j\) и \(pos_j\) (\(1 \le k \le n\), \(1 \le pos_j \le k_j\)) — параметры запросов.

Выходные данные

Выведите \(m\) целых чисел \(r_1, r_2, \dots, r_m\) (\(1 \le r_j \le 10^9\)) по одному в строке — ответы на запросы в порядке их следования во входных данных. Значение \(r_j\) должно быть равно значению, которое содержится в позиции \(pos_j\) оптимальной подпоследовательности для \(k=k_j\).

Примечание

В первом примере, для \(a=[10,20,10]\) оптимальные подпоследовательности:

  • для \(k=1\) — это \([20]\),
  • для \(k=2\) — это \([10,20]\),
  • для \(k=3\) — это \([10,20,10]\).

B2. Социальная сеть (сложная версия)

реализация Структуры данных *1300

Единственное отличие между простой и сложной версиями — ограничения на \(n\) и \(k\).

Вы общаетесь в одной из популярных социальных сетей, используя свой смартфон. Ваш смартфон может показывать не более \(k\) самых недавних бесед с вашими друзьями. Изначально экран смартфона пуст (то есть количество показанных бесед равно \(0\)).

Каждая беседа — это ваш диалог с каким-то из ваших друзей. Всего существует не более одной беседы с каждым из ваших друзей. Таким образом, каждая беседа однозначно определяется вашим другом.

Вы (внезапно!) обладаете возможностью видеть будущее. Вы знаете, что в течение дня вы получите \(n\) сообщений, \(i\)-е сообщение будет получено от друга с ID \(id_i\) (\(1 \le id_i \le 10^9\)).

Если вы получаете сообщение от друга \(id_i\) тогда, когда беседа с ним сейчас показана на экране смартфона, то ничего не происходит: беседы на экране не меняются и не меняют свой относительный порядок, вы просто читаете сообщение и продолжаете ждать новых сообщений.

Иначе (то есть тогда, когда на экране нет беседы с другом \(id_i\)):

  • Сначала, если количество бесед, отображенных на экране, равно \(k\), последняя беседа (которая имеет позицию \(k\)) удаляется с экрана.
  • Теперь количество бесед на экране гарантированно меньше \(k\) и беседа с другом \(id_i\) не отображена на экране.
  • Беседа с другом \(id_i\) появляется на первой (верхней) позиции на экране и все другие отображенные беседы сдвигаются на одну позицию вниз.

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

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n, k \le 2 \cdot 10^5)\) — количество сообщений и количество бесед, которые может показывать ваш смартфон.

Вторая строка входных данных содержит \(n\) целых чисел \(id_1, id_2, \dots, id_n\) (\(1 \le id_i \le 10^9\)), где \(id_i\) равно ID друга, который отправит вам \(i\)-е сообщение.

Выходные данные

В первой строке выходных данных выведите одно целое число \(m\) (\(1 \le m \le min(n, k)\)) — количество бесед, показанных на экране после получения всех \(n\) сообщений.

Во второй строке выходных данных выведите \(m\) целых чисел \(ids_1, ids_2, \dots, ids_m\), где \(ids_i\) должно быть равно ID друга, соответствующего беседе, отображенной на позиции \(i\) после получения всех \(n\) сообщений.

Примечание

В первом тестовом примере список бесед будет изменяться следующим образом (в порядке от первого к последнему сообщению):

  • \([]\);
  • \([1]\);
  • \([2, 1]\);
  • \([3, 2]\);
  • \([3, 2]\);
  • \([1, 3]\);
  • \([1, 3]\);
  • \([2, 1]\).

Во втором тестовом примере список бесед будет изменяться следующим образом:

  • \([]\);
  • \([2]\);
  • \([3, 2]\);
  • \([3, 2]\);
  • \([1, 3, 2]\);
  • и затем список не изменится до самого конца.

D. Запросы на различные символы

Структуры данных *1600

Вам задана строка \(s\), состоящая из строчных букв латинского алфавита и \(q\) запросов к этой строке.

Напомним, что подстрокой \(s[l; r]\) строки \(s\) называется строка \(s_l s_{l + 1} \dots s_r\). Например, подстроками «codeforces» являются «code», «force», «f», «for», но не строки «coder» и «top».

Всего существует два вида запросов:

  • \(1~ pos~ c\) (\(1 \le pos \le |s|\), \(c\) является строчной буквой латинского алфавита): заменить \(s_{pos}\) на \(c\) (присвоить \(s_{pos} := c\));
  • \(2~ l~ r\) (\(1 \le l \le r \le |s|\)): посчитать количество различных символов в подстроке \(s[l; r]\).
Входные данные

Первая строка входных данных содержит одну строку \(s\), состоящую из не более, чем \(10^5\) строчных букв латинского алфавита.

Вторая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов.

Следующие \(q\) строк содержат запросы, по одному в строке. Каждый запрос задан в формате, описанном в условии задачи. Гарантируется, что есть хотя бы один запрос второго типа.

Выходные данные

На каждый запрос второго типа выведите ответ на него — количество различных символов в подстроке, заданной в этом запросе.

D. Алиса и кукла

жадные алгоритмы Перебор реализация Структуры данных *2300

У Алисы недавно появилась новая кукла. Она даже может ходить!

Алиса построила лабиринт для куклы и хочет протестировать его. Лабиринт имеет вид таблицы с \(n\) строками и \(m\) столбцами. Также есть \(k\) препятствий, \(i\)-е из них находится в клетке \((x_i, y_i)\), это клетка на пересечении строки с номером \(x_i\) и столбца с номером \(y_i\).

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

Более формально, всего существует \(4\) направления, в которых может смотреть кукла:

  1. Кукла смотрит в направлении вдоль строки от первой клетки к последней. Перемещаясь смотря в этом направлении, кукла переходит из клетки \((x, y)\) в клетку \((x, y + 1)\);
  2. Кукла смотрит в направлении вдоль столбца от первой клетки к последней. Перемещаясь смотря в этом направлении, кукла переходит из клетки \((x, y)\) в клетку \((x + 1, y)\);
  3. Кукла смотрит в направлении вдоль строки от последней клетки к первой. Перемещаясь смотря в этом направлении, кукла переходит из клетки \((x, y)\) в клетку \((x, y - 1)\);
  4. Кукла смотрит в направлении вдоль столбца от последней клетки к первой. Перемещаясь смотря в этом направлении, кукла переходит из клетки\((x, y)\) в клетку \((x - 1, y)\).
.

Находясь в некоторой клетке, кукла может перейти в клетку в направлении, в котором она смотрит, либо повернуться один раз направо. Поворачиваясь один раз направо, кукла меняет направление, в котором она смотрит следующим образом: \(1 \to 2\), \(2 \to 3\), \(3 \to 4\), \(4 \to 1\). В одной клетке, кукла может совершить не более одного поворота направо.

Сейчас Алиса управляет перемещениями куклы. Изначально она поставила куклу в клетку \((1, 1)\) (верхняя левая клетка лабиринта). Изначально кукла смотрит в направлении \(1\), то есть в направлении вдоль строки от первой клетки к последней. Она хочет обойти куклой все клетки лабиринта, не содержащие препятствий ровно по одному разу и закончить в любой клетке. Существует ли способ так сделать?

Входные данные

В первой строке находится три целых числа \(n\), \(m\) и \(k\), разделенных пробелами (\(1 \leq n,m \leq 10^5, 0 \leq k \leq 10^5\)) — размеры лабиринта и количество препятствий.

В следующих \(k\) строках находится описание препятствий, \(i\)-я из этих строк содержит два целых числа \(x_i\) и \(y_i\), разделенные пробелом (\(1 \leq x_i \leq n,1 \leq y_i \leq m\)), которые описывают позицию \(i\)-го препятствия.

Гарантируется, что никакие два препятствия не находятся в одной клетке и что нету препятствия в клетке \((1, 1)\).

Выходные данные

Выведите 'Yes' (без кавычек) если кукла может обойти все клетки, не содержащие препятствий по описанным выше правилам ровно по одному разу.

Если так обойти лабиринт невозможно, выведите 'No' (без кавычек).

Примечание

Картинка с лабиринтом из первого примера:

В первом примере, кукла может идти по следующему пути:

  • Кукла в клетке \((1, 1)\), смотрит в направлении \(1\). Пройти прямо;
  • Кукла в клетке \((1, 2)\), смотрит в направлении \(1\). Пройти прямо;
  • Кукла в клетке \((1, 3)\), смотрит в направлении \(1\). Повернуть направо;
  • Кукла в клетке \((1, 3)\), смотрит в направлении \(2\). Пройти прямо;
  • Кукла в клетке \((2, 3)\), смотрит в направлении \(2\). Пройти прямо;
  • Кукла в клетке \((3, 3)\), смотрит в направлении \(2\). Повернуть направо;
  • Кукла в клетке \((3, 3)\), смотрит в направлении \(3\). Пройти прямо;
  • Кукла в клетке \((3, 2)\), смотрит в направлении \(3\). Пройти прямо;
  • Кукла в клетке \((3, 1)\), смотрит в направлении \(3\). Цель достигнута, все клетки лабиринта, не содержащие препятствия посещены ровно один раз.

E. Алиса и нечестная игра

Бинарный поиск дп снм Структуры данных *2500

Алиса играет в игру со своей хорошей подругой, Марисой.

В линию располагается \(n\) коробок, пронумерованных слева направо целыми числами от \(1\) до \(n\). Мариса спрячет куклу в одной из коробок. Затем у Алисы будет \(m\) шансов угадать где находится кукла. Если Алиса хотя бы раз верно угадает номер коробки, в которой сейчас находится кукла, то она победит, иначе победит ее подруга.

Для того, чтобы победить, Мариса будет использовать некоторые нечестные трюки. После каждого раза, когда Алиса пыталась угадать коробку, она может переместить куклу в соседнюю коробку или оставить на месте. Коробки с номерами \(i\) и \(i + 1\) являются соседними, для всех \(1 \leq i \leq n - 1\). Перед тем как игра начнется, она также может сделать этот трюк один раз.

Таким образом, игра происходит следующим образом: игра начинается, Мариса делает трюк, Алиса делает первое предположение, Мариса делает трюк, Алиса делает второе предположение, Мариса делает трюк, \(\ldots\), Алиса делает \(m\)-е предположение, Мариса делает трюк, игра заканчивается.

Алиса придумала некоторую последовательность \(a_1, a_2, \ldots, a_m\). В \(i\)-м вопросе, она спросит, находится ли кукла в коробке с номером \(a_i\). Она хочет узнать сколько существует различных сценариев \((x, y)\) (для всех \(1 \leq x, y \leq n\)), таких что Мариса сможет выиграть в игре, если она положит куклу в коробку с номером \(x\) в начале игры и после того, как игра закончится, кукла будет в коробке с номером \(y\). Помогите ей и посчитайте это число.

Входные данные

В первой строке находится два целых числа \(n\) и \(m\), разделенных пробелом (\(1 \leq n, m \leq 10^5\)) — количество коробок и количество предположений, которое сделает Алиса.

В следующей строке находится \(m\) целых чисел \(a_1, a_2, \ldots, a_m\), разделенных пробелами (\(1 \leq a_i \leq n\)), число \(a_i\) означает номер коробки, которую спросит Алиса во время \(i\)-го предположения.

Выходные данные

Выведите количество сценариев в единственной строке, а именно количество пар коробок \((x, y)\) (\(1 \leq x, y \leq n\)), таких что если Мариса положит куклу в коробку \(x\), то она сможет делать трюки так, что в конце игры кукла будет в коробке \(y\) и она не проиграет игру.

Примечание

В первом тесте, возможные сценарии это \((1, 1)\), \((1, 2)\), \((2, 1)\), \((2, 2)\), \((2, 3)\), \((3, 2)\), \((3, 3)\).

Возьмем \((2, 2)\) в качестве примера. Коробки, в которых находится кукла во время игры могут быть \(2 \to 3 \to 3 \to 3 \to 2\).

B. Сбалансированный тоннель

сортировки Структуры данных *1300

Рассмотрим тоннель на односторонней дороге. В течение некоторого дня \(n\) машин, пронумерованных от \(1\) до \(n\), въехали в тоннель и выехали из него ровно по одному разу. Все машины ехали через тоннель с постоянными скоростями.

На въезде в тоннель установлена камера безопасности дорожного движения. Ещё одна такая же камера установлена на выезде из тоннеля. Идеальный баланс.

Благодаря камерам известно, в каком порядке машины въезжали в тоннель и выезжали из него. Никакие две машины не въезжали и не выезжали одновременно.

Правила дорожного движения запрещают обгоны внутри тоннеля. Если машина \(i\) обгоняет машину \(j\) внутри тоннеля, машина \(i\) должна быть оштрафована. Тем не менее, каждая машина может быть оштрафована не более одного раза.

Если говорить формально, то пусть машина \(i\) точно обогнала машину \(j\), если машина \(i\) въехала в тоннель позже машины \(j\), а выехала из тоннеля раньше машины \(j\). Тогда машина \(i\) должна быть оштрафована тогда и только тогда, когда она точно обогнала хотя бы одну другую машину.

Определите, сколько машин следует оштрафовать.

Входные данные

Первая строка содержит целое число \(n\) (\(2 \le n \le 10^5\)) — число машин.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — номера машин в порядке въезда в тоннель. Все \(a_i\) попарно различны.

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le n\)) — номера машин в порядке выезда из тоннеля. Все \(b_i\) попарно различны.

Выходные данные

Выведите число машин, которые должны быть оштрафованы.

Примечание

Первый пример изображён ниже:

Машина \(2\) точно обогнала машину \(5\), а машина \(4\) точно обогнала машины \(1\), \(2\), \(3\) и \(5\). Машины \(2\) и \(4\) должны быть оштрафованы.

Во втором примере машину \(5\) точно обогнали все другие машины.

В третьем примере никого штрафовать не нужно.

D. Сбалансированный плейлист

Бинарный поиск реализация Структуры данных *2000

Ваша любимая музыкальная платформа сформировала идеально сбалансированный плейлист специально для вас. В плейлисте \(n\) треков, пронумерованные от \(1\) до \(n\). Плейлист автоматический и циклический: когда трек \(i\) заканчивает воспроизведение, сразу включается трек \(i+1\); за треком \(n\) идёт трек \(1\).

Для каждого трека \(i\) вы оценили его крутость \(a_i\). Чем больше \(a_i\), тем круче трек \(i\).

Каждое утро вы выбираете трек. Плейлист начинает играть с этого трека в последовательном циклическом порядке. В любой момент вы помните крутость \(x\) самого крутого из уже сыгранных треков. Как только вы слышите, что начинает играть трек с крутостью строго меньше \(\frac{x}{2}\) (без округления), вы сразу же выключаете музыку, чтобы не портить себе хорошее настроение.

Для каждого трека \(i\) найдите, сколько треков вы послушаете перед тем, как выключите музыку, если начнёте утро с трека \(i\), или же определите, что вы никогда не выключите музыку. Обратите внимание, что если вы послушаете один трек несколько раз, все эти разы нужно посчитать.

Входные данные

Первая строка содержит целое число \(n\) (\(2 \le n \le 10^5\)) — число треков в плейлисте.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — крутости треков.

Выходные данные

Выведите \(n\) целых чисел \(c_1, c_2, \ldots, c_n\), где \(c_i\) — либо число треков, которые вы послушаете, если начнёте слушать с трека \(i\), либо \(-1\), если вы будете слушать музыку бесконечно.

Примечание

Вот что произойдёт в первом примере, если вы начнёте слушать с...

  • трека \(1\): послушаете трек \(1\), остановитесь, так как \(a_2 < \frac{a_1}{2}\).
  • трека \(2\): послушаете трек \(2\), остановитесь, так как \(a_3 < \frac{a_2}{2}\).
  • трека \(3\): послушаете трек \(3\), послушаете трек \(4\), послушаете трек \(1\), остановитесь, так как \(a_2 < \frac{\max(a_3, a_4, a_1)}{2}\).
  • трека \(4\): послушаете трек \(4\), послушаете трек \(1\), остановитесь, так как \(a_2 < \frac{\max(a_4, a_1)}{2}\).

Во втором примере, если вы начнёте с трека \(4\), вы послушаете трек \(4\), послушаете трек \(1\), послушаете трек \(2\), послушаете трек \(3\), послушаете снова трек \(4\), послушаете снова трек \(1\) и остановитесь, так как \(a_2 < \frac{max(a_4, a_1, a_2, a_3, a_4, a_1)}{2}\). Обратите внимание, что трек \(1\) и трек \(4\) учтены в результате дважды.

G. Сбалансированное распределение

дп жадные алгоритмы Структуры данных *3500

Вдоль кольцевой дороги живут \(n\) друзей. Друзья и их дома пронумерованы по часовой стрелке от \(0\) до \(n-1\).

Изначально у человека \(i\) есть \(a_i\) камней. Друзья хотят сделать распределение камней между ними идеально сбалансированным: у всех должно оказаться равное число камней.

Единственный способ менять распределение камней — проводить встречи. Во время встречи люди из ровно \(k\) последовательных домов (помните, что дорога кольцевая) собираются в одном месте и приносят с собой все свои камни. Все принесённые камни могут быть произвольно перераспределены между пришедшими на встречу людьми. Общее число камней до встречи и после неё должно остаться тем же. После встречи все возвращаются к себе домой.

Найдите способ сделать распределение камней идеально сбалансированным, проведя как можно меньше встреч.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(2 \le k < n \le 10^5\)) — число друзей и размер одной встречи.

Вторая строка содержит \(n\) целых чисел \(a_0, a_1, \ldots, a_{n-1}\) (\(0 \le a_i \le 10^4\)) — изначальное число камней у людей.

Сумма всех \(a_i\) делится на \(n\).

Выходные данные

Выведите наименьшее число встреч \(m\) (\(m \ge 0\)) и \(m\) описаний встреч в хронологическом порядке.

\(i\)-е описание должно состоять из целого числа \(s_i\) (\(0 \le s_i < n\)) и \(k\) неотрицательных целых чисел \(b_{i, 0}, b_{i, 1}, \ldots, b_{i, k-1}\) (\(b_{i, j} \ge 0\)). Такое описание обозначает встречу людей \(s_i, (s_i + 1) \bmod n, \ldots, (s_i + k - 1) \bmod n\), а \(b_{i,j}\) обозначает число камней, которое должно оказаться у человека \((s_i + j) \bmod n\) после \(i\)-й встречи. Сумма \(b_{i, j}\) должна совпадать с общим числом камней, которое было у этих людей до \(i\)-й встречи.

Можно показать, что решение существует для любого корректного ввода, а любой корректный вывод содержит не более \(10^7\) непробельных символов.

Примечание

В первом примере распределение камней меняется следующим образом:

  • после первой встречи: \(2\) \(6\) \(\mathbf{7}\) \(\mathbf{3}\) \(\mathbf{4}\) \(2\);
  • после второй встречи: \(\mathbf{4}\) \(\mathbf{2}\) \(7\) \(3\) \(4\) \(\mathbf{4}\);
  • после третьей встречи: \(4\) \(\mathbf{4}\) \(\mathbf{4}\) \(\mathbf{4}\) \(4\) \(4\).

Во втором примере распределение камней меняется следующим образом:

  • после первой встречи: \(1\) \(0\) \(1\) \(\mathbf{2}\) \(\mathbf{2}\) \(\mathbf{2}\) \(\mathbf{2}\) \(2\) \(4\) \(3\) \(3\);
  • после второй встречи: \(\mathbf{5}\) \(0\) \(1\) \(2\) \(2\) \(2\) \(2\) \(2\) \(\mathbf{2}\) \(\mathbf{2}\) \(\mathbf{2}\);
  • после третьей встречи: \(\mathbf{2}\) \(\mathbf{2}\) \(\mathbf{2}\) \(2\) \(2\) \(2\) \(2\) \(2\) \(2\) \(2\) \(\mathbf{2}\).

G. Адилбек и система полива

жадные алгоритмы сортировки Структуры данных *2700

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

Система полива потребляет один литр воды в минуту (если воды нет, она не работает). Она может вместить не более \(c\) литров воды. Адилбек уже налил в систему \(c_0\) литров воды. Он собирается начать поливать сад прямо сейчас и поливать его в течение \(m\) минут, а система полива должна содержать не менее одного литра воды в начале \(i\)-й минуты (для каждого \(i\) от \(0\) до \(m - 1\)).

Адилбеку интересно, что он будет делать, если в системе полива кончится вода. Он позвонил \(n\) своим друзьям и спросил их, могут ли они принести воды. \(i\)-й друг ответил, что он может принести не более \(a_i\) литров воды; он придет в начале \(t_i\)-й минуты и выльет всю воду, которая у него есть, в систему (если система не может вместить такое количество воды, избыток воды выливается); а затем он попросит Адилбека заплатить \(b_i\) долларов за каждый литр воды, который он принес. Можете считать, что если друг прибывает в начале \(t_i\)-й минуты, а в начале той же минуты в системе заканчивается вода, друг наливает воду достаточно быстро, чтобы система не перестала работать.

Конечно, Адилбек не хочет платить своим друзьям, но ему нужно поливать сад. Поэтому он должен сказать своим друзьям, сколько воды они должны принести. Формально Адилбек хочет выбрать \(n\) целых чисел \(k_1\), \(k_2\), ..., \(k_n\) таким образом, чтобы:

  • если друг \(i\) приносит ровно \(k_i\) литров воды, то система полива работает в течение всего времени, необходимого для полива сада;
  • сумма \(\sum\limits_{i = 1}^{n} k_i b_i\) минимально возможна.

Помогите Адилбеку определить минимальную сумму, которую он должен заплатить своим друзьям, или определите, что Адилбеку не удастся поливать сад в течение \(m\) минут.

Вам нужно ответить на \(q\) независимых запросов.

Входные данные

Первая строка содержит целое число \(q\) (\(1 \le q \le 5 \cdot 10^5\)) — количество запросов.

Первая строка каждого запроса содержит четыре целых числа \(n, m, c\) and \(c_0\) (\(0 \le n \le 5 \cdot 10^5, 2 \le m \le 10^9, 1 \le c_0 \le c \le 10^9\)) — количество друзей, количество минут полива, вместимость системы и количество литров, которое налил Адилбек.

Следующие \(n\) строк содержат по три целых числа \(t_i, a_i, b_i\) (\( 0 < t_i < m, 1 \le a_i \le c, 1 \le b_i \le 10^9\)) — время прибытия \(i\)-го друга, максимальное количество воды, которое может принести \(i\)-й друг и стоимость \(1\) литра воды у \(i\)-го друга.

Гарантируется, что сумма \(n\) по всем запросам не превосходит \(5 \cdot 10^5\).

Выходные данные

На каждый запрос выведите одно целое число — минимальную сумму, которую Адилбек должен заплатить своим друзьям, или \(-1\), если Адилбеку не удастся поливать сад в течение \(m\) минут.

C. Очередь в поезде

жадные алгоритмы реализация Структуры данных *2300

В вагоне поезда есть \(n\) мест, на каждом месте сидит ровно один человек. Места пронумерованы слева направо от \(1\) до \(n\). Поездка долгая, поэтому каждый человек в какой-то момент поездки проголодается и захочет заварить лапшу быстрого приготовления кипятком. Человек на месте \(i\) (\(1 \leq i \leq n\)) захочет выйти за кипятком ровно на \(t_i\)-й минуте.

Бак с кипятком находится левее \(1\)-го места за дверью. Люди, выходящие за кипятком, могут образовывать очередь у бака в порядке выхода, так как баком может одновременно пользоваться не более одного человека. Каждый человек пользуется баком ровно \(p\) минут. Можно считать, что люди выходят к баку или возвращаются на своё место после получения кипятка мгновенно.

Люди не любят просто так стоять в очереди. Поэтому, как только человек на месте с номером \(i\) захочет сходить за кипятком, он сначала посмотрит на все места с номерами от \(1\) до \(i - 1\). Если хотя бы одно из этих мест пустое, он предполагает что все эти люди стоят в очереди, а значит выходить за кипятком пока нецелесообразно. Тем не менее, он выйдет за кипятком в ближайший удобный момент, как только все места с номерами меньше \(i\) будут снова заняты. Люди не видят самого бака и очереди возле него за дверью, поэтому смотрят только на места в вагоне.

В поезде действует негласное правило: если в какой-то момент возникает ситуация, что за кипятком одновременно могут выйти несколько человек, то выходит только самый левый из них (имеющий место с наименьшим номером), а остальные остаются дожидаться следующего подходящего момента.

Задача состоит в том, чтобы для каждого человека определить, на какой минуте он получит кипяток для своей лапши.

Входные данные

Первая строка содержит два целых числа \(n\) и \(p\) (\(1 \leq n \leq 100\,000\), \(1 \leq p \leq 10^9\)) — количество людей в вагоне и время, в течение которого один человек пользуется баком.

Во второй строке содержатся \(n\) целых чисел \(t_1, t_2, \dots, t_n\) (\(0 \leq t_i \leq 10^9\)) — времена, когда соответствующий пассажир вагона захочет выйти за кипятком.

Выходные данные

Выведите \(n\) целых чисел, \(i\)-е из которых — время в минутах, когда человек на месте \(i\) получит кипяток.

Примечание

В примере в \(0\)-ю минуту за кипятком одновременно захотели пойти \(1\)-й и \(5\)-й человек, первый вышел сразу и на \(314\)-й минуте вернулся от бака. За это время множество желающих выйти за кипятком пополнилось \(2\)-м человеком, и следующим пошел \(2\)-й человек и т.д. \(5\)-й человек в итоге вышел последним.

D2. Слишком много отрезков (сложная версия)

жадные алгоритмы сортировки Структуры данных *1800

Единственное ограничение между простой и сложной версиями — ограничения.

Вам задано \(n\) отрезков на координатной оси \(OX\). Отрезки могут пересекаться, вкладываться или даже совпадать. \(i\)-й отрезок равен \([l_i; r_i]\) (\(l_i \le r_i\)) и покрывает все такие целочисленные точки \(j\), что \(l_i \le j \le r_i\).

Целочисленная точка называется плохой, если она покрыта строго больше, чем \(k\) отрезками.

Ваша задача — удалить минимальное количество отрезков таким образом, чтобы плохих точек не осталось вообще.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)) — количество отрезков и максимальное количество отрезков, которым может быть покрыта каждая целочисленная точка.

Следующие \(n\) строк содержат отрезки. \(i\)-я строка содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le 2 \cdot 10^5\)) — границы \(i\)-го отрезка.

Выходные данные

В первой строке выведите одно целое число \(m\) (\(0 \le m \le n\)) — минимальное количество отрезков, которое надо удалить, чтобы не осталось плохих точек.

Во второй строке выведите \(m\) различных целых чисел \(p_1, p_2, \dots, p_m\) (\(1 \le p_i \le n\)) — индексы отрезков, которые вы удаляете, в любом порядке. Если существует несколько возможных ответов, вы можете вывести любой из них.

C. Trip to Saint Petersburg

Структуры данных *2100

You are planning your trip to Saint Petersburg. After doing some calculations, you estimated that you will have to spend \(k\) rubles each day you stay in Saint Petersburg — you have to rent a flat, to eat at some local cafe, et cetera. So, if the day of your arrival is \(L\), and the day of your departure is \(R\), you will have to spend \(k(R - L + 1)\) rubles in Saint Petersburg.

You don't want to spend a lot of money on your trip, so you decided to work in Saint Petersburg during your trip. There are \(n\) available projects numbered from \(1\) to \(n\), the \(i\)-th of them lasts from the day \(l_i\) to the day \(r_i\) inclusive. If you choose to participate in the \(i\)-th project, then you have to stay and work in Saint Petersburg for the entire time this project lasts, but you get paid \(p_i\) rubles for completing it.

Now you want to come up with an optimal trip plan: you have to choose the day of arrival \(L\), the day of departure \(R\) and the set of projects \(S\) to participate in so that all the following conditions are met:

  • your trip lasts at least one day (formally, \(R \ge L\));
  • you stay in Saint Petersburg for the duration of every project you have chosen (formally, for each \(s \in S\) \(L \le l_s\) and \(R \ge r_s\));
  • your total profit is strictly positive and maximum possible (formally, you have to maximize the value of \(\sum \limits_{s \in S} p_s - k(R - L + 1)\), and this value should be positive).

You may assume that no matter how many projects you choose, you will still have time and ability to participate in all of them, even if they overlap.

Input

The first line contains two integers \(n\) and \(k\) (\(1 \le n \le 2\cdot10^5\), \(1 \le k \le 10^{12}\)) — the number of projects and the amount of money you have to spend during each day in Saint Petersburg, respectively.

Then \(n\) lines follow, each containing three integers \(l_i\), \(r_i\), \(p_i\) (\(1 \le l_i \le r_i \le 2\cdot10^5\), \(1 \le p_i \le 10^{12}\)) — the starting day of the \(i\)-th project, the ending day of the \(i\)-th project, and the amount of money you get paid if you choose to participate in it, respectively.

Output

If it is impossible to plan a trip with strictly positive profit, print the only integer \(0\).

Otherwise, print two lines. The first line should contain four integers \(p\), \(L\), \(R\) and \(m\) — the maximum profit you can get, the starting day of your trip, the ending day of your trip and the number of projects you choose to complete, respectively. The second line should contain \(m\) distinct integers \(s_1\), \(s_2\), ..., \(s_{m}\) — the projects you choose to complete, listed in arbitrary order. If there are multiple answers with maximum profit, print any of them.

E1. Голосование (упрощённая версия)

дп жадные алгоритмы Структуры данных *2300

Единственное отличие между простой и сложной версиями — ограничения.

Сейчас в Берляндии проходят выборы и вы хотите победить в них. А точнее, вы не просто хотите победить, а сделать так, чтобы все проголосовали за вас.

Всего есть \(n\) голосующих и два варианта сделать так, чтобы они проголосовали за вас. Первый вариант это заплатить \(i\)-му голосующему \(p_i\) монет. Второй вариант, это сделать так, чтобы \(m_i\) других людей проголосовало за вас, и тогда \(i\)-й голосующий проголосует бесплатно.

Более того, процесс такого голосования проходит в несколько шагов. Например, если есть пять голосующих \(m_1 = 1\), \(m_2 = 2\), \(m_3 = 2\), \(m_4 = 4\), \(m_5 = 5\), то вы можете купить голос пятого, и в конце концов все проголосуют за вас. Множество людей, голосующих за вас, будет меняться следующим образом: \({5} \rightarrow {1, 5} \rightarrow {1, 2, 3, 5} \rightarrow {1, 2, 3, 4, 5}\).

Посчитайте минимально количество монет, которое вам нужно потратить, чтобы все проголосовали за вас.

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит число \(n\) (\(1 \le n \le 5000\)) — количество голосующих.

Следующие \(n\) строк содержат описание голосующих. \(i\)-я строка содержит два числа \(m_i\) и \(p_i\) (\(1 \le p_i \le 10^9, 0 \le m_i < n\)).

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(5000\).

Выходные данные

На каждый набор выведите одно число — минимально количество монет, которое вам нужно потратить, чтобы все проголосовали за вас.

Примечание

В первом наборе вам нужно купить голос третьего голосующего. Тогда множество людей, голосующих за вас, будет меняться следующим образом: \({3} \rightarrow {1, 3} \rightarrow {1, 2, 3}\).

Во втором наборе вам не нужно покупать голоса. Множество людей, голосующих за вас, будет меняться следующим образом: \({1} \rightarrow {1, 3, 5} \rightarrow {1, 2, 3, 5} \rightarrow {1, 2, 3, 5, 6, 7} \rightarrow {1, 2, 3, 4, 5, 6, 7}\).

В третьем наборе вам нужно купить голоса второго и пятого голосующих. Тогда множество людей, голосующих за вас, будет меняться следующим образом: \({2, 5} \rightarrow {1, 2, 3, 4, 5} \rightarrow {1, 2, 3, 4, 5, 6}\).

E2. Голосование (усложнённая версия)

Бинарный поиск жадные алгоритмы Структуры данных *2400

Единственное отличие между простой и сложной версиями — ограничения.

Сейчас в Берляндии проходят выборы и вы хотите победить в них. А точнее, вы не просто хотите победить, а сделать так, чтобы все проголосовали за вас.

Всего есть \(n\) голосующих и два варианта сделать так, чтобы они проголосовали за вас. Первый вариант это заплатить \(i\)-му голосующему \(p_i\) монет. Второй вариант, это сделать так, чтобы \(m_i\) других людей проголосовало за вас, и тогда \(i\)-й голосующий проголосует бесплатно.

Более того, процесс такого голосования проходит в несколько шагов. Например, если есть пять голосующих \(m_1 = 1\), \(m_2 = 2\), \(m_3 = 2\), \(m_4 = 4\), \(m_5 = 5\), то вы можете купить голос пятого, и в конце концов все проголосуют за вас. Множество людей, голосующих за вас, будет меняться следующим образом: \({5} \rightarrow {1, 5} \rightarrow {1, 2, 3, 5} \rightarrow {1, 2, 3, 4, 5}\).

Посчитайте минимально количество монет, которое вам нужно потратить, чтобы все проголосовали за вас.

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество наборов входных данных.

Первая строка каждого набора содержит число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество голосующих.

Следующие \(n\) строк содержат описание голосующих. \(i\)-я строка содержит два числа \(m_i\) и \(p_i\) (\(1 \le p_i \le 10^9, 0 \le m_i < n\)).

Гарантируется, что сумма \(n\) по всем тест-кейсам не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор выведите одно число — минимально количество монет, которое вам нужно потратить, чтобы все проголосовали за вас.

Примечание

В первом наборе вам нужно купить голос третьего голосующего. Тогда множество людей, голосующих за вас, будет меняться следующим образом: \({3} \rightarrow {1, 3} \rightarrow {1, 2, 3}\).

Во втором наборе вам не нужно покупать голоса. Множество людей, голосующих за вас, будет меняться следующим образом: \({1} \rightarrow {1, 3, 5} \rightarrow {1, 2, 3, 5} \rightarrow {1, 2, 3, 5, 6, 7} \rightarrow {1, 2, 3, 4, 5, 6, 7}\).

В третьем наборе вам нужно купить голоса второго и пятого голосующих. Тогда множество людей, голосующих за вас, будет меняться следующим образом: \({2, 5} \rightarrow {1, 2, 3, 4, 5} \rightarrow {1, 2, 3, 4, 5, 6}\).

C. Even Path

реализация Структуры данных *1600

Pathfinding is a task of finding a route between two points. It often appears in many problems. For example, in a GPS navigation software where a driver can query for a suggested route, or in a robot motion planning where it should find a valid sequence of movements to do some tasks, or in a simple maze solver where it should find a valid path from one point to another point. This problem is related to solving a maze.

The maze considered in this problem is in the form of a matrix of integers \(A\) of \(N \times N\). The value of each cell is generated from a given array \(R\) and \(C\) of \(N\) integers each. Specifically, the value on the \(i^{th}\) row and \(j^{th}\) column, cell \((i,j)\), is equal to \(R_i + C_j\). Note that all indexes in this problem are from \(1\) to \(N\).

A path in this maze is defined as a sequence of cells \((r_1,c_1), (r_2,c_2), \dots, (r_k,c_k)\) such that \(|r_i - r_{i+1}| + |c_i - c_{i+1}| = 1\) for all \(1 \le i < k\). In other words, each adjacent cell differs only by \(1\) row or only by \(1\) column. An even path in this maze is defined as a path in which all the cells in the path contain only even numbers.

Given a tuple \(\langle r_a,c_a,r_b,c_b \rangle\) as a query, your task is to determine whether there exists an even path from cell \((r_a,c_a)\) to cell \((r_b,c_b)\). To simplify the problem, it is guaranteed that both cell \((r_a,c_a)\) and cell \((r_b,c_b)\) contain even numbers.

For example, let \(N = 5\), \(R = \{6, 2, 7, 8, 3\}\), and \(C = \{3, 4, 8, 5, 1\}\). The following figure depicts the matrix \(A\) of \(5 \times 5\) which is generated from the given array \(R\) and \(C\).

Let us consider several queries:

  • \(\langle 2, 2, 1, 3 \rangle\): There is an even path from cell \((2,2)\) to cell \((1,3)\), e.g., \((2,2), (2,3), (1,3)\). Of course, \((2,2), (1,2), (1,3)\) is also a valid even path.
  • \(\langle 4, 2, 4, 3 \rangle\): There is an even path from cell \((4,2)\) to cell \((4,3)\), namely \((4,2), (4,3)\).
  • \(\langle 5, 1, 3, 4 \rangle\): There is no even path from cell \((5,1)\) to cell \((3,4)\). Observe that the only two neighboring cells of \((5,1)\) are cell \((5,2)\) and cell \((4,1)\), and both of them contain odd numbers (7 and 11, respectively), thus, there cannot be any even path originating from cell \((5,1)\).
Input

Input begins with a line containing two integers: \(N\) \(Q\) (\(2 \le N \le 100\,000\); \(1 \le Q \le 100\,000\)) representing the size of the maze and the number of queries, respectively. The next line contains \(N\) integers: \(R_i\) (\(0 \le R_i \le 10^6\)) representing the array \(R\). The next line contains \(N\) integers: \(C_i\) (\(0 \le C_i \le 10^6\)) representing the array \(C\). The next \(Q\) lines each contains four integers: \(r_a\) \(c_a\) \(r_b\) \(c_b\) (\(1 \le r_a, c_a, r_b, c_b \le N\)) representing a query of \(\langle r_a, c_a, r_b, c_b \rangle\). It is guaranteed that \((r_a,c_a)\) and \((r_b,c_b)\) are two different cells in the maze and both of them contain even numbers.

Output

For each query in the same order as input, output in a line a string "YES" (without quotes) or "NO" (without quotes) whether there exists an even path from cell \((r_a,c_a)\) to cell \((r_b,c_b)\).

Note

Explanation for the sample input/output #1

This is the example from the problem description.

D. Find String in a Grid

Деревья дп Строки Структуры данных *3000

You have a grid \(G\) containing \(R\) rows (numbered from \(1\) to \(R\), top to bottom) and \(C\) columns (numbered from \(1\) to \(C\), left to right) of uppercase characters. The character in the \(r^{th}\) row and the \(c^{th}\) column is denoted by \(G_{r, c}\). You also have \(Q\) strings containing uppercase characters. For each of the string, you want to find the number of occurrences of the string in the grid.

An occurrence of string \(S\) in the grid is counted if \(S\) can be constructed by starting at one of the cells in the grid, going right \(0\) or more times, and then going down \(0\) or more times. Two occurrences are different if the set of cells used to construct the string is different. Formally, for each string \(S\), you would like to count the number of tuples \(\langle r, c, \Delta r, \Delta c \rangle\) such that:

  • \(1 \le r \le R\) and \(r \le r + \Delta r \le R\)
  • \(1 \le c \le C\) and \(c \le c + \Delta c \le C\)
  • \(S = G_{r, c} G_{r, c + 1} \dots G_{r, c + \Delta c} G_{r + 1, c + \Delta c} \dots G_{r + \Delta r, c + \Delta c}\)
Input

Input begins with a line containing three integers: \(R\) \(C\) \(Q\) (\(1 \le R, C \le 500\); \(1 \le Q \le 200\,000\)) representing the size of the grid and the number of strings, respectively. The next \(R\) lines each contains \(C\) uppercase characters representing the grid. The \(c^{th}\) character on the \(r^{th}\) line is \(G_{r, c}\). The next \(Q\) lines each contains a string \(S\) containing uppercase characters. The length of this string is a positive integer not more than \(200\,000\). The sum of the length of all \(Q\) strings combined is not more than \(200\,000\).

Output

For each query in the same order as input, output in a line an integer representing the number of occurrences of the string in the grid.

Note

Explanation for the sample input/output #1

  • There are \(2\) occurrences of "ABC", represented by the tuples \(\langle 1, 1, 1, 1 \rangle\) and \(\langle 1, 1, 0, 2 \rangle\).
  • There are \(3\) occurrences of "BC", represented by the tuples \(\langle 1, 2, 0, 1 \rangle\), \(\langle 1, 2, 1, 0 \rangle\), and \(\langle 2, 1, 0, 1 \rangle\).
  • There is \(1\) occurrence of "BD", represented by the tuple \(\langle 2, 1, 1, 0 \rangle\).
  • There is no occurrence of "AC".
  • There are \(2\) occurrences of "A", represented by the tuples \(\langle 1, 1, 0, 0 \rangle\) and \(\langle 3, 2, 0, 0 \rangle\).

G. Performance Review

Структуры данных *2100

Randall is a software engineer at a company with \(N\) employees. Every year, the company re-evaluates its employees. At the end of every year, the company replaces its several worst-performing employees and replaces with the same number of new employees, so that the company keeps having \(N\) employees. Each person has a constant performance and can be represented by an integer (higher integer means better performance), and no two people have the same performance.

The performance of the initial employees are represented by an array of integers \(A = [A_1, A_2, \dots, A_N]\) where \(A_i\) is the performance of the \(i^{th}\) employee. Randall is employee \(1\), so his performance is \(A_1\). We will consider the first \(M\) years. At the end of the \(i^{th}\) year, the company replaces its \(R_i\) worst-performing employees and replaces with \(R_i\) new employees. The performance of these new employees are represented by an array of integers \(B_i = [(B_i)_1, (B_i)_2, \dots, (B_i)_{R_i}]\) where \((B_i)_j\) is the performance of the \(j^{th}\) new employee.

He will consider \(Q\) scenarios. On the \(i^{th}\) scenario, he will change the value of \((B_{X_i})_{Y_i}\) to \(Z_i\). For each scenario, Randall is wondering whether he will still be in the company after \(M\) years. Note that the changes in each scenario are kept for the subsequent scenarios.

Input

Input begins with a line containing three integers: \(N\) \(M\) \(Q\) (\(2 \le N \le 100\,000\); \(1 \le M, Q \le 100\,000\)) representing the number of employees, the number of years to be considered, and the number of scenarios, respectively. The next line contains \(N\) integers: \(A_i\) (\(0 \le A_i \le 10^9\)) representing the performance of the initial employees. The next \(M\) lines each contains several integers: \(R_i\) \((B_i)_1\), \((B_i)_2\), \(\cdots\), \((B_i)_{R_i}\) (\(1 \le R_i < N\); \(0 \le (B_i)_j \le 10^9\)) representing the number of employees replaced and the performance of the new employees, respectively. It is guaranteed that the sum of \(R_i\) does not exceed \(10^6\). The next \(Q\) lines each contains three integers: \(X_i\) \(Y_i\) \(Z_i\) (\(1 \le X_i \le M\); \(1 \le Y_i \le R_{(X_i)}\); \(0 \le Z_i \le 10^9\)) representing a scenario. It is guaranteed that all integers in all \(A_i\), \((B_i)_j\), and \(Z_i\) (combined together) are distinct.

Output

For each scenario in the same order as input, output in a line an integer \(0\) if Randall will not be in the company after \(M\) years, or \(1\) if Randall will still be in the company after \(M\) years.

Note

Explanation for the sample input/output #1

Randall performance is represented by \(50\). For the first scenario, the value of \((B_1)_3\) is updated to \(300\), causes the following:

  • Initially, the performance of the employees is \([50, 40, 30, 20, 10]\).
  • At the end of the first year, \(4\) worst-performing employees are replaced by employees with performance \([300, 100, 2, 1]\). Therefore, the performance of the employees is \([300, 100, 50, 2, 1]\).
  • At the end of the second year, the performance of the employees is \([300, 100, 50, 4, 2]\).
  • At the end of the third year, the performance of the employees is \([300, 100, 50, 7, 6]\).
Therefore, Randall will still be in the company after \(3\) years.

For the second scenario, the value of \((B_2)_1\) is updated to \(400\), causes the following:

  • Initially, the performance of the employees is \([50, 40, 30, 20, 10]\).
  • At the end of the first year, the performance of the employees is \([300, 100, 50, 2, 1]\). Recall that the change in the first scenario is kept for this scenario as well.
  • At the end of the second year, the performance of the employees is \([400, 300, 100, 50, 2]\).
  • At the end of the third year, the performance of the employees is \([400, 300, 100, 7, 6]\).
Therefore, Randall will not be in the company after \(3\) years.

K. Addition Robot

математика матрицы Структуры данных *2100

Adding two numbers several times is a time-consuming task, so you want to build a robot. The robot should have a string \(S = S_1 S_2 \dots S_N\) of \(N\) characters on its memory that represents addition instructions. Each character of the string, \(S_i\), is either 'A' or 'B'.

You want to be able to give \(Q\) commands to the robot, each command is either of the following types:

  • 1 \(L\) \(R\). The robot should toggle all the characters of \(S_i\) where \(L \le i \le R\). Toggling a character means changing it to 'A' if it was previously 'B', or changing it to 'B' if it was previously 'A'.
  • 2 \(L\) \(R\) \(A\) \(B\). The robot should call \(f(L, R, A, B)\) and return two integers as defined in the following pseudocode:
        function f(L, R, A, B):
    FOR i from L to R
    if S[i] = 'A'
    A = A + B
    else
    B = A + B
    return (A, B)

You want to implement the robot's expected behavior.

Input

Input begins with a line containing two integers: \(N\) \(Q\) (\(1 \le N, Q \le 100\,000\)) representing the number of characters in the robot's memory and the number of commands, respectively. The next line contains a string \(S\) containing \(N\) characters (each either 'A' or 'B') representing the initial string in the robot's memory. The next \(Q\) lines each contains a command of the following types.

  • 1 \(L\) \(R\) (\(1 \le L \le R \le N\))
  • 2 \(L\) \(R\) \(A\) \(B\) (\(1 \le L \le R \le N\); \(0 \le A, B \le 10^9\))
There is at least one command of the second type.
Output

For each command of the second type in the same order as input, output in a line two integers (separated by a single space), the value of \(A\) and \(B\) returned by \(f(L, R, A, B)\), respectively. As this output can be large, you need to modulo the output by \(1\,000\,000\,007\).

Note

Explanation for the sample input/output #1

For the first command, calling \(f(L, R, A, B)\) causes the following:

  • Initially, \(A = 1\) and \(B = 1\).
  • At the end of \(i = 1\), \(A = 2\) and \(B = 1\).
  • At the end of \(i = 2\), \(A = 2\) and \(B = 3\).
  • At the end of \(i = 3\), \(A = 5\) and \(B = 3\).
  • At the end of \(i = 4\), \(A = 8\) and \(B = 3\).
  • At the end of \(i = 5\), \(A = 11\) and \(B = 3\).
Therefore, \(f(L, R, A, B)\) will return \((11, 3)\).

For the second command, string \(S\) will be updated to "ABBBB".

For the third command, the value of \(A\) will always be \(0\) and the value of \(B\) will always be \(1\,000\,000\,000\). Therefore, \(f(L, R, A, B)\) will return \((0, 1\,000\,000\,000)\).

E. Покрытие антеннами

дп жадные алгоритмы сортировки Структуры данных *2200

Мэр Центрального Города решил модернизировать Центральную Улицу, представленную в этой задаче в виде оси \((Ox)\).

На этой улице стоит \(n\) антенн, пронумерованных от \(1\) до \(n\). \(i\)-я антенна стоит в точке \(x_i\) и имеет изначальный радиус \(s_i\): Она покрывает все целые точки в интервале \([x_i - s_i; x_i + s_i]\).

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

Чтобы модернизировать улицу, нам необходимо, чтобы все целые точки от \(1\) до \(m\) включительно были покрыты хотя бы одной антенной. Обратите внимание, что разрешается покрывать точки за пределами интервала \([1; m]\), однако, это не требуется.

Какое минимальное количество монет требуется, чтобы добиться модернизации?

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 80\) и \(n \le m \le 100\ 000\)).

В \(i\)-й из следующих \(n\) строк записаны два целых числа \(x_i\) и \(s_i\) (\(1 \le x_i \le m\) and \(0 \le s_i \le m\)).

На каждой позиции стоит не более одной антенны (все позиции \(x_i\) попарно различны).

Выходные данные

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

Примечание

В первом примере, одна из возможных стратегий это:

  • Увеличить радиус первой антенны на \(40\), чтобы он стал \(2 + 40 = 42\). Эта антенна будет покрывать интервал \([43 - 42; 43 + 42]\), который равен \([1; 85]\)
  • Увеличить радиус второй антенны на \(210\), чтобы он стал \(4 + 210 = 214\). Эта антенна будет покрывать интервал \([300 - 214; 300 + 214]\), который равен \([86; 514]\)
  • Увеличить радиус третьей антенны \(31\), чтобы он стал \(10 + 31 = 41\). Эта антенна будет покрывать интервал \([554 - 41; 554 + 41]\), равный \([513; 595]\)

Итоговая стоимость равна \(40 + 210 + 31 = 281\). Можно показать, что это минимальная стоимость, необходимая, чтобы интервал от \(1\) до \(595\) был покрыт хотя бы одной антенной.

Обратите внимание, что точки \(513\) и \(514\) в этом решении покрыты двумя антеннами, но это не важно.

Во втором примере, первая антенна исходно покрывает интервал \([0; 2]\), так что нам не нужно ничего делать.

Обратите внимание, что единственная позиция, которую вам нужно покрыть это \(1\); позиции \(0\) и \(2\) покрыты, но это не важно.

D. Запросы на дереве

Деревья Структуры данных Теория вероятностей *2700

Хэнх — известный биолог. Он любит выращивать деревья и проводить эксперименты в своем собственном саду.

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

Теперь Хэнх выполняет \(q\) запросов, каждых из которых имеет один из следующих типов:

  • Тип \(1\): Хэнх выбирает вершину \(v\) и целое число \(d\). Затем он выбирает некоторую вершину \(r\) полностью случайно, и для каждой вершины \(u\) такой, что путь от \(r\) до \(u\) проходит через \(v\), увеличивает значение в вершине \(u\) на \(d\).
  • Тип \(2\): Хэнх выбирает вершину \(v\) и считает математическое ожидание значения вершины \(v\).

Поскольку Хэнх биолог, а не математик, ему нужна ваша помощь.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \leq n, q \leq 150\,000\)) — количество вершин в дереве Хэнха и количество запросов.

Каждая из следующих \(n - 1\) содержит два целых числа \(u\) и \(v\) (\(1 \leq u, v \leq n\)), которые обозначают, что есть ребро между вершинами \(u\) и \(v\). Гарантируется, что эти \(n-1\) ребра создают дерево.

Каждая из следующих \(q\) строк описывает запросы:

  • \(1\) \(v\) \(d\) (\(1 \leq v \leq n, 0 \leq d \leq 10^7\)), обозначают первый тип запроса.
  • \(2\) \(v\) (\(1 \leq v \leq n\)), обозначают второй тип запроса.

Гарантируется, что есть как минимум один запрос второго типа.

Выходные данные

Для каждого запроса второго типа выведите математическое ожидание.

Пусть \(M = 998244353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

Рисунок ниже показывает дерево в примере.

Для первого запроса, где \(v = 1\) и \(d = 1\):

  • Если \(r = 1\), значения всех вершин увеличатся.
  • Если \(r = 2\), значения вершин \(1\) и \(3\) увеличатся.
  • Если \(r = 3\), значения вершин \(1\), \(2\), \(4\) и \(5\) увеличатся.
  • Если \(r = 4\), значения вершин \(1\) и \(3\) увеличатся.
  • Если \(r = 5\), значения вершин \(1\) и \(3\) увеличатся.

Поэтому математические ожидания вершин после первого запроса такие: (\(1, 0.4, 0.8, 0.4, 0.4\)).

Для второго запроса, где \(v = 2\) и \(d = 2\):

  • Если \(r = 1\), значения вершин \(2\), \(4\) и \(5\) увеличатся.
  • Если \(r = 2\), значения всех вершин увеличатся.
  • Если \(r = 3\), значения вершин \(2\), \(4\) и \(5\) увеличатся.
  • Если \(r = 4\), значения вершин \(1\), \(2\), \(3\) и \(5\) увеличатся.
  • Если \(r = 5\), значения вершин \(1\), \(2\), \(3\) и \(4\) увеличатся.

Поэтому математические ожидания вершин после второго запроса такие: (\(2.2, 2.4, 2, 2, 2\)).

D. Очередная задача на сражение с монстрами

Бинарный поиск дп жадные алгоритмы сортировки Структуры данных *1700

Вы играете в компьютерную игру. В этой игре вы являетесь главой партии из \(m\) героев, и вам нужно зачистить подземелье, в котором находится \(n\) монстров. Каждый монстр характеризуется своей силой \(a_i\). Каждый герой характеризуется своей силой \(p_i\) и выносливостью \(s_i\).

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

Когда герой заходит в подземелье, он начинает сражаться с первым монстром, не побежденным в прошлые дни (т. е. если уже было побеждено \(k\) монстров, то этот герой будет сражаться с монстром под номером \(k + 1\)). Когда герой сражается с монстром, возможно два варианта:

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

После победы над монстром герой либо продолжает сражаться с монстрами, либо уходит из подземелья. Он уходит, если он в этот день победил количество монстров, равное его выносливости (таким образом, \(i\)-й герой не может победить больше \(s_i\) монстров в течение одного дня), либо если все монстры побеждены — в противном случае герой сражается со следующим монстром. Когда герой покидает пещеру, текущий день заканчивается.

Ваша задача — победить всех монстров. Какое минимальное количество дней вам понадобится для этого? Каждый день вы выбираете ровно одного героя; возможно, некоторые герои не будут сражаться вообще, а некоторые будут сражаться несколько раз.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Каждый набор данных выглядит следующим образом.

Первая строка содержит целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество монстров в подземелье.

Вторая строка содержит \(n\) чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — сила \(i\)-го монстра.

Третья строка содержит целое число \(m\) (\(1 \le m \le 2 \cdot 10^5\)) — количество героев в вашей партии.

После следуют \(m\) строк, каждая описывает героя. Каждая такая строка содержит два числа \(p_i\) и \(s_i\) (\(1 \le p_i \le 10^9\), \(1 \le s_i \le n\)) — силу и выносливость \(i\)-го героя.

Гарантируется, что сумма \(n + m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

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

E. Контест

дп жадные алгоритмы Структуры данных *2000

Команда из трех человек пришла писать контест. Всего в контесте есть \(n\) задач, пронумерованных от \(1\) до \(n\). Каждая задача находится ровно на одном листе. Участники по привычке решили разделить условия на три части: первый взял какой-то префикс листов (какое-то количество первых листов) из набора условий, третий взял какой-то суффикс листов (какое-то количество последних листов) из набора условий, а второй взял себе все то, что осталось. Но произошла непредвиденная ситуация — условия распечатались неправильно и порядок задач перемешался.

Таким образом, первый участник получил задачи с номерами \(a_{1, 1}, a_{1, 2}, \dots, a_{1, k_1}\). Второй — с номерами \(a_{2, 1}, a_{2, 2}, \dots, a_{2, k_2}\). Третий участник получил все оставшиеся задачи (\(a_{3, 1}, a_{3, 2}, \dots, a_{3, k_3}\)).

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

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

Входные данные

Первая строка входных данных содержит три целых числа \(k_1, k_2\) и \(k_3\) (\(1 \le k_1, k_2, k_3 \le 2 \cdot 10^5, k_1 + k_2 + k_3 \le 2 \cdot 10^5\)) — количество задач, полученным первым участником, вторым участником и третьим участником, соответственно.

Вторая строка входных данных содержит \(k_1\) целых чисел \(a_{1, 1}, a_{1, 2}, \dots, a_{1, k_1}\) — номера задач, полученных первым участником.

Третья строка входных данных содержит \(k_2\) целых чисел \(a_{2, 1}, a_{2, 2}, \dots, a_{2, k_2}\) — номера задач, полученных вторым участником.

Четвертая строка входных данных содержит \(k_3\) целых чисел \(a_{3, 1}, a_{3, 2}, \dots, a_{3, k_3}\) — номера задач, полученных третьих участником.

Гарантируется, что среди всех заданных номеров задач нет совпадающих и для всех номеров задач \(a_{i, j}\) выполняется условие \(1 \le a_{i, j} \le n\), где \(n = k_1 + k_2 + k_3\).

Выходные данные

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

Примечание

В первом примере третий участник должен отдать задачу \(2\) первому участнику. Тогда у первого участника будут \(3\) первые задачи, у третьего — \(1\) последняя задача, а у второго — \(1\) оставшаяся задача.

Во втором примере распределение задач менять не нужно: у первого участника \(3\) первых задачи, у третьего участника \(1\) последняя задача, и у второго участника две \(2\) оставшиеся задачи.

В третьем примере выгодно отдать все задачи третьему участнику.

В четвертом примере выгодно отдать все задачи второму участнику.

F. Покрашенное дерево

Деревья Структуры данных *2700

У вас есть дерево из \(n\) вершин. Цвет \(i\)-й вершины — \(h_{i}\).

Стоимость дерева определяется как \(\sum\limits_{h_{i} = h_{j}, 1 \le i < j \le n}{dis(i,j)}\), где \(dis(i,j)\) — количество ребер на кратчайшем пути между \(i\) и \(j\).

Вы не помните точные цвета вершин. Все, что вы помните — \(h_{i}\) может быть любым целым числом из \([l_{i}, r_{i}]\) (включая границы). Вы хотите посчитать суммарную стоимость всех деревьев, удовлетворяющих этим ограничениям, по модулю \(10^9 + 7\) (множество ребер фиксировано, но точные цвета неизвестны, поэтому всего таких деревьев \(\prod\limits_{i = 1}^{n} (r_{i} - l_{i} + 1)\)).

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 10^5\)) — количество вершин.

Затем следуют \(n\) строк, в каждой строке заданы два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le 10^5\)), обозначающих отрезок возможных цветов вершины \(i\).

Затем следуют \(n - 1\) строк, в каждой строке заданы два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \ne v\)), обозначающих ребро дерева. Гарантируется, что данные ребра задают дерево.

Выходные данные

Выведите одно целое число — суммарную стоимость всех деревьев, соответствующих ограничениям, взятую по модулю \(10^9 + 7\).

Примечание

В первом примере существует четыре способа покрасить дерево (то есть там надо просуммировать стоимость четырех деревьев):

  • дерево со следующими цветами: \(\lbrace 1,1,1,1 \rbrace\). Его стоимость равна \(dis(1,2)+dis(1,3)+dis(1,4)+dis(2,3)+dis(2,4)+dis(3,4) = 10\);
  • дерево со следующими цветами: \(\lbrace 1,2,1,1 \rbrace\). Его стоимость равна \(dis(1,3)+dis(1,4)+dis(3,4)=4\);
  • дерево со следующими цветами: \(\lbrace 1,1,1,2 \rbrace\). Его стоимость равна \(dis(1,2)+dis(1,3)+dis(2,3)=4\);
  • дерево со следующими цветами: \(\lbrace 1,2,1,2 \rbrace\). Его стоимость равна \(dis(1,3)+dis(2,4)=4\).

Суммарная стоимость равна \(10+4+4+4=22\).

E. Редактор

реализация Структуры данных *2100

Разработка текстового редактора — непростая задача. Ваша задача реализовать вспомогательный модуль для подсистемы подсветки скобок в тексте.

Ваш редактор состоит из строки бесконечной длины и курсора, который указывает на текущий символ. Обратите внимание, что он указывает точно на один из символов (а не между парой символов). Таким образом, положение курсора характеризуется индексом символа, на который он указывает. Пользователь может двигать курсор влево или вправо на одну позицию. Если курсор уже находится на первом (самом левом) символе, то сдвиг влево не производится.

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

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

Ваш редактор должен уметь проверять, является ли текущая строка, набранная пользователем, «корректным текстом». Текст является корректным, если скобки в нём образуют правильную скобочную последовательность.

Формально, корректный текст (КТ) должен удовлетворять следующим правилам:

  • любая строка без скобок является КТ (строка может содержать пробелы);
  • если первый символ строки — это '(', последний — это ')', а все остальные (промежуточные) образуют КТ, то вся строка является КТ;
  • два подряд написанных КТ также являются КТ.

Примеры корректных текстов: «hello(codeforces)», «round», «((i)(write))edi(tor)s», «( me)». Примеры текстов, которые не являются корректными: «hello)oops(», «round)», «((me)».

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

Соответствие команд и символов следующее:

  • 'L' — сдвинуть курсор на один символ влево (остаётся на месте, если уже указывает на первый символ);
  • 'R' — сдвинуть курсор на один символ вправо;
  • любая строчная английская буква или круглая скобка '(' или ')' — записать введённый символ в позицию, на которой сейчас стоит курсор.

Для полного понимания изучите первый пример и его иллюстрации в примечании ниже.

Вам дана строка, содержащая символы, которые вводил пользователь. Для работы подсистемы подсветки скобок Вам требуется после каждой команды:

  • проверить, является ли текущий текст в редакторе корректным;
  • если является, то вывести наименьшее количество цветов, в которые можно раскрасить все пары скобок.

Если две пары скобок являются вложенными (первая во вторую или наоборот), то эти пары скобок должны быть раскрашены в разные цвета. Если две пары скобок не вложены, то они могут быть покрашены как в разные, так и в одинаковые цвета. Например, для скобочной последовательности «()(())()()» наименьшее количество цветов равно \(2\), а для для скобочной последовательности «(()(()())())(())» — равно \(3\).

Напишите программу, которая выводит требуемую информацию после обработки каждой команды.

Входные данные

Первая строка входных данных содержит целое число \(n\) (\(1 \le n \le 10^6\)) — количество команд. Вторая строка содержит \(s\) — последовательность команд. Строка \(s\) состоит из \(n\) символов. Гарантируется, что все символы в строке являются корректными командами.

Выходные данные

В единственной строке выведите \(n\) целых чисел, где \(i\)-е число равно:

  • \(-1\), если строка, полученная после обработки первых \(i\) команд, не является корректным текстом,
  • минимальному количеству цветов в случае корректного текста.
Примечание

В первом примере текст в редакторе будет принимать следующий вид:

  1. (
    ^
  2. (
    ^
  3. (a
    ^
  4. (a
    ^
  5. (ab
    ^
  6. (ab
    ^
  7. (ab)
    ^
  8. (ab)
    ^
  9. (a))
    ^
  10. (a))
    ^
  11. (())
    ^

F. Экономические проблемы

графы Деревья дп поиск в глубину и подобное Потоки Структуры данных *2400

Электросеть дворцов в Берляндии состоит из 2-х сетей: основной и запасной. Провода во дворцах сделаны из дорогого материала, поэтому их продажа будет отличной идеей!

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

Иными словами, каждая из сетей является отдельным корневым ориентированным деревом с \(n\) листьями и с корнем в вершине \(1\). В каждом дереве свои вершины и своя независимая нумерация вершин.

Кроме электросетей во дворце есть \(n\) приборов, каждый из которых соединён с одним из узлов основной и с одним из узлов запасной сети. Приборы соединяются только с такими узлами, из которых ток не распространяется далее (то есть, которые являются листьями). Каждый такой узел (лист дерева) соединён ровно с одним прибором.

В этом примере основная сеть содержит \(6\) узлов (изображена сверху), а запасная — \(4\) узла (изображена снизу). Количество приборов равно \(3\), они пронумерованы синим цветом.

Гарантируется, что вся электросеть (две сети и \(n\) приборов) может быть изображена на схеме способом, аналогичным картинке выше:

  • основная сеть будет составлять дерево сверху, в котором все провода ведут в направлении «сверху вниз»,
  • запасная сеть будет составлять дерево снизу, в котором все провода ведут в направлении «снизу вверх»,
  • приборы — горизонтальный ряд между ними, пронумерованный от \(1\) до \(n\) слева направо,
  • провода между узлами сетей изображены непересекающимися отрезками.

Формально, для каждого дерева существует такой обход в глубину из вершины \(1\), что его листья посещаются в порядке их присоединения к приборам \(1, 2, \dots, n\) (то есть сначала узел, присоединенный к прибору \(1\), затем узел, присоединенный к прибору \(2\), и так далее).

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

Входные данные

В первой строке записано целое число \(n\) (\(1 \le n \le 1000\)) — количество приборов во дворце.

В следующей строке записано целое число \(a\) (\(1 + n \le a \le 1000 + n\)) — количество узлов в основной электросети.

В следующей строке содержатся \(a - 1\) целых чисел \(p_i\) (\(1 \le p_i \le a\)). Каждое число \(p_i\) задает провод от \(p_i\)-го узла к \((i + 1)\)-му.

В следующей строке записаны \(n\) чисел \(x_i\) (\(1 \le x_i \le a\)) — номер узла в основной электросети, с которым соединен \(i\)-й электроприбор.

В следующей строке записано целое число \(b\) (\(1 + n \le b \le 1000 + n\)) — количество узлов в запасной электросети.

В следующей строке содержатся \(b - 1\) целых чисел \(q_i\) (\(1 \le q_i \le b\)). Каждое число \(q_i\) задает провод от \(q_i\)-го узла к \((i + 1)\)-му.

В следующей строке записаны \(n\) чисел \(y_i\) (\(1 \le y_i \le b\)) — номер узла в запасной электросети, с которым соединен \(i\)-й электроприбор.

Гарантируется, что каждая сеть представляет собой дерево, у каждого из которых ровно \(n\) листьев, причем каждый лист соединен с одним прибором. Также гарантируется, что для каждой сети существует такой порядок обхода в глубину из вершины \(1\), что листы появляются в данном обходе в порядке нумерации соответствующих приборов.

Выходные данные

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

Примечание

Для первого примера ниже на картинке изображен один из возможных вариантов решения (красным цветом отмечены провода, которые можно удалить):

Второй и третий примеры изображены ниже:

C. Красивые зеркала с запросами

Структуры данных Теория вероятностей *2400

У Creatnx есть \(n\) зеркал, пронумерованных от \(1\) до \(n\). Каждый день Creatnx спрашивает ровно одно зеркало «Красивый ли я?». \(i\)-е зеркало скажет Creatnx, что он красивый с вероятностью \(\frac{p_i}{100}\) для всех \(1 \le i \le n\).

Некоторые зеркала называются чекпойнтами. Изначально, только \(1\)-е зеркало является чекпойнтом. Это зеркало будет оставаться чекпойнтом все время.

Creatnx спрашивает зеркала одно за другим, начиная с \(1\)-о зеркала. Каждый день, если он спрашивает \(i\)-е зеркало, есть две возможности:

  • \(i\)-е зеркало скажет Creatnx, что он красивый. В этом случае, если \(i = n\) Creatnx остановится и станет счастливым, иначе он продолжит спрашивать \(i+1\)-е зеркало на следующий день;
  • В другом случае Creatnx очень расстроится. На следующий день, Creatnx начнет спрашивать зеркало с максимальным номером, являющееся чекпойнтом, с номером не больше чем \(i\).

Иногда происходят следующие изменения: некоторые зеркала становятся чекпойнтами и некоторые зеркала перестают быть чекпойнтами. Вам дано \(q\) запросов, каждый запрос задается номером зеркала \(u\): если \(u\)-е зеркало не было чекпойнтом, тогда мы делаем его чекпойнтом. Иначе, \(u\)-е зеркало перестает быть чекпойнтом.

После каждого запроса, вам нужно посчитать математическое ожидание количества дней, до того как Creatnx станет счастливым.

Эти числа нужно найти по модулю \(998244353\). Формально, пусть \(M = 998244353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) целые числа и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

В первой строке находятся два целых числа \(n\), \(q\) (\(2 \leq n, q \le 2 \cdot 10^5\))  — количество зеркал и запросов.

Во второй строке находится \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq 100\)).

Каждая из следующих \(q\) строк содержит единственное целое число \(u\) (\(2 \leq u \leq n\)) — очередной запрос.

Выходные данные

Выведите \(q\) целых чисел — ответ на задачу после каждого запроса, взятый по модулю \(998244353\).

Примечание

В первом тесте после первого запроса, первое и второе зеркала являются чекпойнтами. Creatnx будет спрашивать первое зеркало, пока оно не скажет, что он красивый, после этого он будет спрашивать второе зеркало, пока оно не скажет, что он красивый, потому что оно является чекпойнтом. После этого он станет счастливым. Вероятности, что зеркала скажут, что он красивый равны \(\frac{1}{2}\). Поэтому математическое ожидание количества дней, пока одно зеркало скажет, что он красивый равно \(2\) и ответ равен \(4 = 2 + 2\).

B. Красивые числа

математика реализация Структуры данных *1300

Вам дана перестановка \(p=[p_1, p_2, \ldots, p_n]\) целых чисел от \(1\) до \(n\). Назовем число \(m\) (\(1 \le m \le n\)) красивым, если существует два индекса \(l, r\) (\(1 \le l \le r \le n\)), таких что \([p_l, p_{l+1}, \ldots, p_r]\) это перестановка чисел \(1, 2, \ldots, m\).

Например, пусть \(p = [4, 5, 1, 3, 2, 6]\). В этом случае числа \(1, 3, 5, 6\) красивые, а \(2, 4\) нет. Это так, потому что:

  • если \(l = 3\) и \(r = 3\) мы получим перестановку \([1]\) для \(m = 1\);
  • если \(l = 3\) и \(r = 5\) мы получим перестановку \([1, 3, 2]\) для \(m = 3\);
  • если \(l = 1\) и \(r = 5\) мы получим перестановку \([4, 5, 1, 3, 2]\) для \(m = 5\);
  • если \(l = 1\) и \(r = 6\) мы получим перестановку \([4, 5, 1, 3, 2, 6]\) для \(m = 6\);
  • невозможно взять некоторые \(l\) и \(r\), так что \([p_l, p_{l+1}, \ldots, p_r]\) будет перестановкой чисел \(1, 2, \ldots, m\) для \(m = 2\) и для \(m = 4\).

Вам дана перестановка \(p=[p_1, p_2, \ldots, p_n]\). Для всех \(m\) (\(1 \le m \le n\)) определите, является ли это число красивым или нет.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 1000\))  — количество тестовых случаев. В следующих строках находятся описания тестовых случаев.

В первой строке описания тестового случая находится единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина перестановки \(p\). Следующая строка содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\), все \(p_i\) различны) — данная перестановка \(p\).

Гарантируется, что сумма \(n\) по всем тестовым случаям во входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк — ответы на тестовые случаи, в порядке их следования во входных данных.

Ответом на тестовый случай является строка длины \(n\), где \(i\)-й символ равен \(1\), если \(i\) это красивое число и равен \(0\) если \(i\) не является красивым числом.

Примечание

Первый тестовый случай описан в условии задачи.

Во втором тестовом случае все числа от \(1\) до \(5\) красивые:

  • если \(l = 3\) и \(r = 3\) мы получим перестановку \([1]\) для \(m = 1\);
  • если \(l = 3\) и \(r = 4\) мы получим перестановку \([1, 2]\) для \(m = 2\);
  • если \(l = 2\) и \(r = 4\) мы получим перестановку \([3, 1, 2]\) для \(m = 3\);
  • если \(l = 2\) и \(r = 5\) мы получим перестановку \([3, 1, 2, 4]\) для \(m = 4\);
  • если \(l = 1\) и \(r = 5\) мы получим перестановку \([5, 3, 1, 2, 4]\) для \(m = 5\).

E. Красивые зеркала

дп математика Структуры данных Теория вероятностей *2100

У Creatnx есть \(n\) зеркал, пронумерованных от \(1\) до \(n\). Каждый день Creatnx спрашивает ровно одно зеркало «Красивый ли я?». \(i\)-е зеркало скажет Creatnx, что он красивый с вероятностью \(\frac{p_i}{100}\) для всех \(1 \le i \le n\).

Creatnx спрашивает зеркала одно за другим, начиная с \(1\)-о зеркала. Каждый день, если он спрашивает \(i\)-е зеркало, есть две возможности:

  • \(i\)-е зеркало скажет Creatnx, что он красивый. В этом случае, если \(i = n\) Creatnx остановится и станет счастливым, иначе он продолжит спрашивать \(i+1\)-е зеркало на следующий день;
  • В другом случае Creatnx очень расстроится. На следующий день, Creatnx начнет спрашивать \(1\)-е зеркало заново.

Вам нужно посчитать математическое ожидание количества дней, до того как Creatnx станет счастливым.

Это число нужно найти по модулю \(998244353\). Формально, пусть \(M = 998244353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) целые числа и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

В первой строке находится единственное целое число \(n\) (\(1\le n\le 2\cdot 10^5\)) — количество зеркал.

Во второй строке находится \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq 100\)).

Выходные данные

Выведите ответ по модулю \(998244353\) в единственной строке.

Примечание

В первом тесте, есть единственное зеркало и оно говорит, что Creatnx красивый с вероятностью \(\frac{1}{2}\). Поэтому математическое ожидание количества дней, пока Creatnx не станет счастливым равно \(2\).

D. Уменьшаем долги

графы жадные алгоритмы Конструктив математика реализация Структуры данных *2000

Рассмотрим компанию из \(n\) людей, пронумерованных от \(1\) до \(n\). Они используют бурли, чтобы платить за товары и услуги. Иногда человеку не хватает денег на какую-либо покупку, тогда он занимает деньги у другого человека с намерением потом отдать их с процентами. Мы обозначим за \(d(a,b)\) сумму, которую \(a\) должен отдать \(b\), или \(0\), если долга нет.

Иногда система долгов может усложняться — например, в ситуации, когда один человек дал на время денег другому, но первому самому не хватает денег на покупку, а второй еще не отдал долг. Тогда первому человеку придется занимать у кого-то ещё.

Если процесс одалживания денег длится достаточно долго, система долгов может стать очень сложной и потребовать упрощения. Упрощать систему можно при помощи двух операций:

  1. Пусть \(d(a,b) > 0\) и \(d(c,d) > 0\), при этом \(a \neq c\) или \(b \neq d\). Можно уменьшить \(d(a,b)\) и \(d(c,d)\) на \(z\) и при этом увеличить \(d(c,b)\) и \(d(a,d)\) на \(z\), если \(0 < z \leq \min(d(a,b),d(c,d))\).
  2. Пусть \(d(a,a) > 0\). Можно уменьшить \(d(a,a)\) до \(0\).

Суммарный долг определяется следующей величиной:

\(\)\Sigma_d = \sum_{a,b} d(a,b)\(\)

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

Входные данные

В первой строке заданы два целых числа \(n\) (\(1 \leq n \leq 10^5\)) и \(m\) (\(0 \leq m \leq 3\cdot 10^5\)) — количество людей и долгов, соответственно.

Далее следуют \(m\) строк, каждая из которых содержит три целых числа \(u_i\), \(v_i\) (\(1 \leq u_i, v_i \leq n, u_i \neq v_i\)), \(d_i\) (\(1 \leq d_i \leq 10^9\)), обозначающих, что человек \(u_i\) должен \(d_i\) бурлей человеку \(v_i\).

Выходные данные

В первой строке выведите число \(m'\) (\(0 \leq m' \leq 3\cdot 10^5\)) — количество долгов после уменьшения системы долгов. Можно показать, что всегда существует способ упростить систему до минимального суммарного долга с соблюдением этого условия.

Далее выведите \(m'\) строк, \(i\)-я из которых содержит три целых числа \(u_i, v_i, d_i\), обозначающих, что человек \(u_i\) должен отдать человеку \(v_i\) ровно \(d_i\) бурлей. На эти числа накладываются следующие ограничения: \(1 \leq u_i, v_i \leq n\), \(u_i \neq v_i\) и \(0 < d_i \leq 10^{18}\).

Для каждой пары \(i \neq j\) должно соблюдаться условие \(u_i \neq u_j\) или условие \(v_i \neq v_j\). Иными словами, каждая пара людей должна встречаться в выходных данных только один раз.

Примечание

В первом примере одна из оптимальных последовательностей операций — следующая:

  1. Проведём операцию первого типа с \(a = 1\), \(b = 2\), \(c = 2\), \(d = 3\) и \(z = 5\). В результате система долгов становится следующей: \(d(1, 2) = 5\), \(d(2, 2) = 5\), \(d(1, 3) = 5\), все остальные долги равны \(0\);
  2. Проведём операцию второго типа с \(a = 2\). В результате система долгов становится следующей: \(d(1, 2) = 5\), \(d(1, 3) = 5\), все остальные долги равны \(0\).

Во втором примере одна из оптимальных последовательностей операций — следующая:

  1. Проведём операцию первого типа с \(a = 1\), \(b = 2\), \(c = 3\), \(d = 1\) и \(z = 10\). В результате система долгов становится следующей: \(d(3, 2) = 10\), \(d(2, 3) = 15\), \(d(1, 1) = 10\), все остальные долги равны \(0\);
  2. проведём операцию первого типа с \(a = 2\), \(b = 3\), \(c = 3\), \(d = 2\) и \(z = 10\). В результате система долгов становится следующей: \(d(2, 2) = 10\), \(d(3, 3) = 10\), \(d(2, 3) = 5\), \(d(1, 1) = 10\), все остальные долги равны \(0\);
  3. Проведём операцию второго типа с \(a = 2\). В результате система долгов становится следующей: \(d(3, 3) = 10\), \(d(2, 3) = 5\), \(d(1, 1) = 10\), все остальные долги равны \(0\);
  4. Проведём операцию второго типа с \(a = 3\). В результате система долгов становится следующей: \(d(2, 3) = 5\), \(d(1, 1) = 10\), все остальные долги равны \(0\);
  5. Проведём операцию второго типа с \(a = 1\). В результате система долгов становится следующей: \(d(2, 3) = 5\), все остальные долги равны \(0\).

E. Космический Солитер

жадные алгоритмы реализация Структуры данных *2100

Боб играет в игру «Космический Солитер». Цель этой игры — построить космический корабль, но для ее достижения требуется сначала собрать достаточное количество ресурсов \(n\) типов, пронумерованных от \(1\) до \(n\). Боб должен собрать не менее \(a_i\) единиц \(i\)-го ресурса. Для удобства назовем \(a_i\) целью для ресурса \(i\).

Для производства одной единицы любого ресурса нужно потратить \(1\) ход (и каждый ход можно производить только один ресурс). Однако для ускорения игры в ней введена система достижений. Каждое достижение описывается тройкой \((s_j, t_j, u_j)\) и обозначает следующее: как только Боб соберет \(t_j\) единиц ресурса \(s_j\), он сразу же получит дополнительную единицу ресурса \(u_j\), не тратя ход на ее производство. Возможно, награда за достижение позволит активировать другое достижение — таким образом за один ход можно набрать большое количество разных ресурсов.

Система достижений устроена таким образом, что не существует двух достижений, у которых одновременно одинаковые \(s_j\) и \(t_j\). То есть за достижение \(t_j\) единиц ресурса \(s_j\) нельзя получить в награду более одного ресурса.

Ни один бонусный ресурс не дается за достижение \(0\) единиц какого-либо ресурса. Также не существует достижений, для которых надо собрать \(a_i\) или более соответствующего ресурса. Формально, \(0 < t_j < a_{s_j}\).

Могут существовать достижения, для которых тип требуемого ресурса совпадает с типом бонусного ресурса, то есть \(s_j = u_j\).

Изначально в игре нет достижений. Вам нужно обработать \(q\) обновлений игры, каждое из которых добавляет, удаляет или меняет какое-то достижение. После каждого обновления посчитайте минимальное количество ходов, требуемое для завершения игры (то есть для того, чтобы собрать не менее \(a_i\) единиц \(i\)-го ресурса для всех \(i \in [1, n]\)).

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество типов ресурсов.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^9\)), \(i\)-е из которых — цель для \(i\)-го ресурса.

В третьей строке задано одно целое число \(q\) (\(1 \leq q \leq 10^5\)) — количество обновлений в системе достижений.

Затем следуют \(q\) строк, \(j\)-я из которых содержит три целых числа \(s_j\), \(t_j\), \(u_j\) (\(1 \leq s_j \leq n\), \(1 \leq t_j < a_{s_j}\), \(0 \leq u_j \leq n\)). Для каждой тройки проведите следующие действия:

  • Сначала, если уже существует достижение, требующее набрать \(t_j\) единиц ресурса \(s_j\), удалите его.
  • Если \(u_j = 0\), не добавляйте никаких достижений.
  • Если \(u_j \neq 0\), добавьте новое достижение: «Если вы соберете \(t_j\) единиц ресурса \(s_j\), вы получите одну единицу ресурса \(u_j\)».
  • Выведите минимальное количество ходов, требуемое для завершения игры.
Выходные данные

Выведите \(q\) строк, в \(i\)-й из которых должно быть одно целое число — ответ на задачу после \(i\)-го обновления.

Примечание

После первого обновления оптимальная стратегия — следующая: произвести ресурс \(2\) и получить бесплатно ресурс \(1\). Затем произвести ресурс \(2\) дважды и \(1\) один раз, и мы завершим игру за четыре хода.

После второго обновления оптимальная стратегия состоит в том, чтобы произвести ресурс \(2\) три раза — в первые два хода мы дополнительно получим по единице ресурса \(1\).

После третьего обновления оптимальная стратегия — следующая:

  • Сначала произвести единицу ресурса \(2\) и получить бесплатную единицу \(1\). После этого мы получим еще одну бесплатную единицу \(1\). Количество ресурсов: \([2, 1]\).
  • После этого произвести единицу ресурса \(2\) и получить еще одну бесплатную единицу \(1\).
  • Опять произвести единицу ресурса \(2\).

Количество ресурсов в конце игры: \([3, 3]\). Для достижения цели нам потребовалось три хода. Обратите внимание, что у нас есть лишняя единица ресурса \(1\).

C. K целых чисел

Бинарный поиск Структуры данных *2300

Вам дана перестановка \(p_1, p_2, \ldots, p_n\).

За одно действие вы можете поменять местами два соседних элемента.

Вы хотите сделать как можно меньше действий, чтобы в конце в перестановке был подотрезок \(1,2,\ldots, k\), иначе говоря, в конце должен существовать индекс \(i\), \(1 \leq i \leq n-k+1\), что \(p_i = 1, p_{i+1} = 2, \ldots, p_{i+k-1}=k\).

Обозначим за \(f(k)\) минимальное число действий, которое нужно сделать, чтобы подотрезок \(1,2,\ldots,k\) появился в перестановке.

Вам нужно найти \(f(1), f(2), \ldots, f(n)\).

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \leq n \leq 200\,000\)): количество элементов в перестановке.

Во второй строке записаны \(n\) целых чисел \(p_1, p_2, \ldots, p_n\): данная перестановка (\(1 \leq p_i \leq n\)).

Выходные данные

Выведите \(n\) целых чисел, минимальное число действий, которое нужно сделать, чтобы подотрезок \(1,2,\ldots,k\) появился в перестановке, для \(k=1, 2, \ldots, n\).

H. Количество компонент

Структуры данных *3300

Пусть у нас имеется массив из \(n\) различных чисел \(a_1, a_2, \dots, a_n\). Построим граф на \(n\) вершинах следующим образом: для любой пары вершин \(i < j\) соединим вершины \(i\) и \(j\) ребром, если \(a_i < a_j\). Назовем весом массива количество компонент в полученном графе. Например, вес массива \([1, 4, 2]\) равен \(1\), вес массива \([5, 4, 3]\) равен \(3\).

Вам необходимо выполнить \(q\) запросов следующего вида — изменить значение в позиции. После каждого изменения вам необходимо вывести вес полученного массива. Обратите внимание, что изменения не независимы (изменение сохраняется на будущее).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 5 \cdot 10^5\)) — размер массива и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — исходный массив.

Каждая из следующих \(q\) строк содержит два целых числа \(pos\) и \(x\) (\(1 \le pos \le n\), \(1 \le x \le 10^6, x \ne a_{pos}\)). Это значит, что необходимо сделать \(a_{pos}=x\).

Гарантируется, что в любой момент времени все числа в массиве различны.

Выходные данные

После каждого запроса выведите вес полученного массива.

Примечание

После первого запроса изменения массив имеет вид \([25, 40, 30, 20, 10]\). Вес равен \(3\).

После второго запроса изменения массив имеет вид \([25, 40, 45, 20, 10]\). Вес все еще равен \(3\).

После третьего запроса изменения массив имеет вид \([48, 40, 45, 20, 10]\). Вес равен \(4\).

D. Порталы

дп жадные алгоритмы реализация сортировки Структуры данных *2100

Вы играете в стратегическую компьютерную игру (да, у нас закончились идеи для легенд задач). В этой игре вы управляете огромной армией, и ваша задача — захватить \(n\) замков противника.

Рассмотрим игровой процесс более подробно. Изначально у вас в управлении армия из \(k\) воинов. Противник контролирует \(n\) замков; для захвата \(i\)-го замка вам потребуется \(a_i\) воинов (считается, что каждый захват замка проводится без потерь, поэтому размер армии после захвата не меняется). После захвата каждого замка вы увеличиваете свою армию, нанимая воинов в новом замке — в \(i\)-м замке вы сможете нанять \(b_i\) воинов. Помимо захвата замков, в каждом из них можно оставить охрану (только после захвата): если вы оставляете хотя бы одного воина в замке, то этот замок будет считаться охраняемым. У каждого замка есть параметр важности \(c_i\), и успешность вашей стратегии определяется суммарной важностью всех охраняемых замков в конце игры. Оставлять охрану в замке можно двумя способами:

  • если вы находитесь в замке \(i\), вы можете оставить одного воина для охраны замка \(i\);
  • замки связаны \(m\) односторонними порталами. Каждый портал характеризуется двумя номерами соединяемых замков \(u\) и \(v\) (для каждого портала \(u > v\)). Порталами можно пользоваться следующим способом: если вы находитесь в замке \(u\), вы можете отправить одного воина охранять замок \(v\) через портал.

Вы захватываете замки по очереди: сначала первый, потом второй, и так далее. После захвата замка \(i\), пока вы не захватили замок \(i + 1\), вы можете нанять воинов в замке \(i\), оставить охрану в замке \(i\), а также воспользоваться любым количеством порталов, ведущих из замка \(i\) в замки с меньшими номерами. После того, как вы захватите следующий замок, эти действия для замка \(i\) будут уже недоступны.

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

Можете ли вы разработать оптимальную стратегию захвата замков и оставления охраны?

Входные данные

В первой строке входных данных заданы три целых числа \(n\), \(m\) и \(k\) (\(1 \le n \le 5000\), \(0 \le m \le \min(\frac{n(n - 1)}{2}, 3 \cdot 10^5)\), \(0 \le k \le 5000\)) — количество замков, количество порталов и изначальное количество воинов в вашей армии, соответственно.

Далее следуют \(n\) строк, в \(i\)-й из которых содержится описание \(i\)-го замка — три целых числа \(a_i\), \(b_i\) и \(c_i\) (\(0 \le a_i, b_i, c_i \le 5000\)) — количество воинов, требуемых для захвата замка \(i\), количество воинов, которых можно нанять после захвата, и важность замка, соответственно.

Далее следуют \(m\) строк, в \(i\)-й из которых содержится описание \(i\)-го портала — два целых числа \(u_i\) и \(v_i\) (\(1 \le v_i < u_i \le n\)), соответствующих порталу, который ведет из замка \(u_i\) в замок \(v_i\). Не существует двух одинаковых порталов.

Гарантируется, что размер вашей армии ни при каких условиях не может превысить \(5000\) (то есть \(k + \sum\limits_{i = 1}^{n} b_i \le 5000\)).

Выходные данные

Если невозможно захватить все замки ни при каких обстоятельствах, выведите одно целое число \(-1\).

Иначе выведите одно целое число — максимальную суммарную важность всех охраняемых замков в конце игры.

Примечание

Лучшая стратегия в первом примере — следующая:

  1. захватить первый замок;
  2. нанять солдат в первом замке, теперь у вас \(11\) солдат;
  3. захватить второй замок;
  4. захватить третий замок;
  5. нанять солдат в третьем замке, теперь у вас \(13\) солдат;
  6. захватить четвертый замок;
  7. оставить одного воина в четвертом замке, теперь у вас \(12\) солдат.

Эта стратегия (и некоторые другие) дает в результате суммарную важность охраняемых замков, равную \(5\).

Лучшая стратегия во втором примере — следующая:

  1. захватить первый замок;
  2. нанять солдат в первом замке, теперь у вас \(11\) солдат;
  3. захватить второй замок;
  4. захватить третий замок;
  5. нанять солдат в третьем замке, теперь у вас \(13\) солдат;
  6. захватить четвертый замок;
  7. оставить одного воина в четвертом замке, теперь у вас \(12\) солдат;
  8. отправить одного воина в первый замок через третий портал, теперь у вас \(11\) солдат.

Эта стратегия (и некоторые другие) дает в результате суммарную важность охраняемых замков, равную \(22\).

В третьем примере нельзя захватить последний замок: для этого нужны \(14\) воинов, но вы можете собрать не более \(13\) до захвата последнего замка.

C. Ягодное варенье

дп жадные алгоритмы реализация Структуры данных *1700

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

Все \(2n\) банок расставлены в ряд. Лестница в подвал находится ровно в середине этого ряда. Поэтому, когда Карлсон спускается в подвал, он видит ровно \(n\) банок слева и \(n\) банок справа.

Например, подвал может выглядеть следующим образом:

Карлсон — очень прямолинейный молодой человек, поэтому он сразу начинает есть варенье. За одну минуту он опустошает либо первую непустую банку слева, либо первую непустую банку справа.

Наконец, Карлсон решил, что в конце процесса должно остаться равное количество банок с клубничным и черничным вареньем.

Например, результат может быть таким:

Он съел \(1\) банку слева, а затем \(5\) банок справа. Осталось ровно по \(3\) полных банки клубничного и черничного варенья.

Банки пронумерованы от \(1\) до \(2n\) слева направо, так что Карлсон начинает между банками \(n\) и \(n+1\).

Какое минимальное число банок Карлсону придется опустошить, чтобы осталось равное количество банок с клубничным и черничным вареньем?

Вам нужно ответить на \(t\) наборов входных данных.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 10^5\)).

В второй строке каждого набора входных данных записаны \(2n\) целых чисел \(a_1, a_2, \dots, a_{2n}\) (\(1 \le a_i \le 2\)) — \(a_i=1\) значит, что \(i\)-я банка слева — это банка клубничного варенья, а \(a_i=2\) значит, что это банка черничного варенья.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

На каждый набор входных данных выведите ответ — минимальное количество банок, которые Карлсону придется опустошить, чтобы осталось равное количество банок с клубничным и черничным вареньем.

Примечание

На картинке описывается первый набор входных данных.

Во втором наборе входных данных количества банок с клубничным и с черничным вареньем уже совпадают.

В третьем наборе входных данных Карлсону придется съесть все \(6\) банок, так чтобы осталось \(0\) банок каждого варенья.

В четвертом наборе входных данных Карлсон может либо опустошить вторую и третью банки, либо третью и четвертую. В обоих случаях останется по \(1\) банке каждого варенья.

D. Дерево отрезков

графы Деревья снм Структуры данных *2100

Как видно из названия задачи, вам предстоит решить задачу про отрезки и деревья.

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

Вам дано \(n\) отрезков \([l_1, r_1], [l_2, r_2], \dots, [l_n, r_n]\), \(l_i < r_i\) для всех \(i\). Гарантируется, что концы отрезков являются целыми числами, все концы являются уникальными — нет такой пары отрезков, которые начинались бы в одной и той же точке, заканчивались в одной и той же точке, или один бы начинался в такой точке, что другой в ней заканчивается.

Давайте построим граф с \(n\) вершинами. Вершины \(v\) и \(u\) соединены ребром тогда и только тогда, когда отрезки \([l_v, r_v]\) и \([l_u, r_u]\) пересекаются и ни один из них не лежит полностью внутри другого.

Например, пары \(([1, 3], [2, 4])\) и \(([5, 10], [3, 7])\) будут образовывать ребра, а пары \(([1, 2], [3, 4])\) и \(([5, 7], [3, 10])\) не будут.

Определите, является ли полученный граф деревом или нет.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — количество отрезков.

\(i\)-я из следующих \(n\) строк содержит описание \(i\) отрезка — два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i < r_i \le 2n\)).

Гарантируется, что концы всех отрезков попарно различны.

Выходные данные

Выведите «YES», если полученный граф является деревом и «NO» в противном случае.

Примечание

Граф полученный в первом примере:

Граф полученный во втором примере:

Граф полученный в третьем примере:

C. Стопка подарков

реализация Структуры данных *1400

Дед Мороз должен отправить подарки детям. У него есть большая стопка, в которой \(n\) подарков, пронумерованных от \(1\) до \(n\); у самого верхнего подарка номер \(a_1\), у подарка под ним номер \(a_2\), и так далее; у самого нижнего подарка номер \(a_n\). Все номера различны.

У Деда Мороза есть список из \(m\) различных номеров подарков, которые он должен отправить: \(b_1\), \(b_2\), ..., \(b_m\). Он отправит их в том порядке, в котором они располагаются в списке.

Чтобы отправить подарок, Дед Мороз должен найти его в стопке, убрав все подарки, которые выше нужного; затем он берет нужный ему подарок и возвращает убранные подарки обратно на вершину стопки. Если над подарком, который нужен Деду Морозу, \(k\) других подарков, на эти действия тратится \(2k + 1\) секунд. К счастью, Дед Мороз может ускорить процесс — когда он возвращает подарки в стопку, он может делать это в любом порядке (только те подарки, которые были над нужным подарком, могут поменять свой порядок; остальные подарки остаются на своих местах в стопке). Когда Дед Мороз отправляет подарок, он исчезает из стопки.

Какое минимальное время потребуется Деду Морозу, чтобы отправить подарки, если он будет каждый раз располагать возвращаемые подарки оптимальным образом? Дед Мороз не может как-то взаимодействовать со стопкой другими способами.

Ваша программа должна уметь обрабатывать \(t\) наборов входных данных.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Затем идут сами наборы входных данных, каждый из которых состоит из трех строк.

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le m \le n \le 10^5\)) — количество подарков в стопке и количество подарков, которые нужно отправить.

Во второй строке заданы \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le n\), все \(a_i\) различны) — порядок подарков в стопке.

В третьей строке заданы \(m\) целых чисел \(b_1\), \(b_2\), ..., \(b_m\) (\(1 \le b_i \le n\), все \(b_i\) различны) — упорядоченный список подарков, которые нужно отправить.

Сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальное количество секунд, требуемое для отправки всех подарков, если Дед Мороз возвращает их в оптимальном порядке.

E. Тортик - ложь

графы Конструктив поиск в глубину и подобное Структуры данных *2400

Мы заботимся о моральном состоянии участников соревнования. Поэтому вместо задачи мы предлагаем вам полакомиться кусочком торта.

Ох, кто-то уже разрезал торт! Мы просили их дождаться вас, но они не послушали. Если поторопитесь, успеете взять кусочек. Вы, конечно, перед тем, как попробовать торт, задумались, как торт был разрезан.

Известно, что торт изначально представлял собой правильный \(n\)-угольник, каждая вершина которого имела уникальный номер от \(1\) до \(n\). Вершины были пронумерованы в некотором произвольном порядке.

Каждый кусок торта — это треугольник. Торт разрезали на \(n - 2\) куска следующим образом: каждый раз проводили один разрез ножом (от вершины до вершины) такой, что от текущего торта отделялся ровно один треугольный кусок, а оставшаяся часть продолжала составлять выпуклый многоугольник. Иными словами, каждый раз выбирали три подряд идущие вершины многоугольника и отрезали соответствующий треугольник.

Возможный процесс разрезания торта представлен на рисунке ниже.

Пример разрезания 6-угольного торта.

Вам задан набор получившихся \(n-2\) треугольных кусочков в произвольном порядке. Вершины каждого из кусочков записаны в произвольном порядке — по или против часовой стрелки. Каждый кусочек задается тремя числами — номерами соответствующих ему вершин \(n\)-угольного торта.

Например, для ситуации с рисунком выше вам мог быть задан набор кусочков: \([3, 6, 5], [5, 2, 4], [5, 4, 6], [6, 3, 1]\).

Вас интересуют два вопроса.

  • Какая была нумерация вершин \(n\)-угольного торта?
  • В каком порядке отрезались кусочки?

Формально, вам предстоит найти две перестановки \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\)) и \(q_1, q_2, \dots, q_{n - 2}\) (\(1 \le q_i \le n - 2\)) такие, что если вершины торта пронумерованы числами \(p_1, p_2, \dots, p_n\) в порядке по или против часовой стрелки, то при отрезании кусков торта в порядке \(q_1, q_2, \dots, q_{n - 2}\) всегда отрезается треугольный кусок так, что оставшаяся часть образует один выпуклый многоугольник.

Например, для рисунка выше искомыми перестановками могли бы быть: \(p=[2, 4, 6, 1, 3, 5]\) (или любой её циклический сдвиг, или её переворот и после этого любой циклический сдвиг) и \(q=[2, 4, 1, 3]\).

Напишите программу, которая по заданным треугольным кусочкам находит любую подходящую пару перестановок \(p\) и \(q\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют \(t\) независимых наборов входных данных.

Первая строка каждого набора состоит из одного целого числа \(n\) (\(3 \le n \le 10^5\)) — количество вершин в торте.

Далее следуют \(n - 2\) строк, описывающих номера вершин кусков торта: каждая строка состоит из трех различных целых чисел \(a, b, c\) (\(1 \le a, b, c \le n\)) — номера вершин куска торта, записанные в произвольном порядке. Сами куски тоже заданы в произвольном порядке.

Гарантируется, что ответ на каждый из тестов существует. Также гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Выведите \(2t\) строк — ответы на заданные \(t\) наборов в порядке их записи во входных данных. Каждый ответ должен состоять из \(2\) строк.

В первой строке ответа на набор входных данных выведите \(n\) различных чисел \(p_1, p_2, \dots, p_n\)(\(1 \le p_i \le n\)) — номера вершин торта в порядке по или против часовой стрелки. Просмотр вершин торта можно начать с любой из них.

Во второй строке ответа на набор входных данных выведите \(n - 2\) различных чисел \(q_1, q_2, \dots, q_{n - 2}\)(\(1 \le q_i \le n - 2\)) — порядок отрезания кусков торта. Номер куска торта соответствует его номеру во входных данных.

Если существует несколько ответов, выведите любой. Гарантируется, что ответ на каждый из тестов существует.

C. Друзья и подарки

Конструктив математика Структуры данных *1500

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

Для каждого друга известно значение \(f_i\): оно или равно \(f_i = 0\), если \(i\)-й друг не знает, кому он хочет подарить подарок, или равно \(1 \le f_i \le n\), если \(i\)-й друг хочет подарить подарок другу \(f_i\).

Вы хотите заполнить неизвестные значения (\(f_i = 0\)) таким образом, чтобы каждый друг подарил ровно один подарок и получил ровно один подарок, а также не было друга, который дарит подарок сам себе. Гарантируется, что изначальная информация не противоречива.

Если существует несколько возможных ответов, выведите любой.

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество друзей.

Вторая строка входных данных содержит \(n\) целых чисел \(f_1, f_2, \dots, f_n\) (\(0 \le f_i \le n\), \(f_i \ne i\), все \(f_i \ne 0\) различны), где \(f_i\) или равно \(f_i = 0\), если \(i\)-й друг не знает, кому он хочет подарить подарок, или равно \(1 \le f_i \le n\), если \(i\)-й друг хочет подарить подарок другу \(f_i\). Также гарантируется, что есть хотя бы два значения \(f_i = 0\).

Выходные данные

Выведите \(n\) целых чисел \(nf_1, nf_2, \dots, nf_n\), где \(nf_i\) должно быть равно \(f_i\), если \(f_i \ne 0\), или номеру друга, которому \(i\)-й друг хочет подарить подарок. Все значения \(nf_i\) должны быть различны, \(nf_i\) не может быть равно \(i\). Каждый друг должен подарить ровно один подарок и получить ровно один подарок, а также не должно быть друга, который дарит подарок сам себе.

Если существует несколько возможных ответов, выведите любой.

B. Новый год и восходящая последовательность

Бинарный поиск дп Комбинаторика реализация сортировки Структуры данных *1400

Последовательность \(a = [a_1, a_2, \ldots, a_l]\) длиной \(l\) имеет восход, если существует пара таких индексов \((i, j)\), что \(1 \le i < j \le l\) и \(a_i < a_j\). Например, последовательность \([0, 2, 0, 2, 0]\) имеет восход из-за пары индексов \((1, 4)\), но последовательность \([4, 3, 3, 3, 1]\) не имеет восхода.

Назовем конкатенацией двух последовательностей \(p\) и \(q\) такую последовательность, которая получится при последовательной записи сначала \(p\), затем \(q\) друг за другом, не меняя порядок элементов в них. Например, конкатенация последовательностей \([0, 2, 0, 2, 0]\) и \([4, 3, 3, 3, 1]\) равна последовательности \([0, 2, 0, 2, 0, 4, 3, 3, 3, 1]\). Конкатенация последовательностей \(p\) и \(q\) обозначается как \(p+q\).

Кенгун считает, что последовательность с восходом приносит удачу. Поэтому он хочет сделать много таких последовательностей на новый год. У Кенгун есть \(n\) последовательностей \(s_1, s_2, \ldots, s_n\), которые могут иметь разную длину.

Кенгун рассмотрит \(n^2\) всевозможных пар последовательностей \(s_x\) и \(s_y\) (\(1 \le x, y \le n\)) и проверит содержит ли конкатенация \(s_x + s_y\) восход или нет. Обратите внимание, что порядок выбора последовательностей в пару имеет значение. Кроме того, он может выбирать последовательность в пару к самой себе.

Пожалуйста, посчитайте количество пар последовательностей (\(x, y\)) для заданного набора \(s_1, s_2, \ldots, s_n\), конкатенация \(s_x + s_y\) которых имеет восход.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 100\,000\)), обозначающее количество последовательностей.

В каждой из следующих \(n\) строк записано целое число \(l_i\) (\(1 \le l_i\)), обозначающее длину \(s_i\), после которой записано \(l_i\) целых чисел \(s_{i, 1}, s_{i, 2}, \ldots, s_{i, l_i}\) (\(0 \le s_{i, j} \le 10^6\)), обозначающие последовательность \(s_i\).

Гарантируется, что сумма всех \(l_i\) не превосходит \(100\,000\).

Выходные данные

Выведите одно целое число, количество пар последовательностей, конкатенация которых имеет восход.

Примечание

В первом примере, следующие \(9\) последовательностей имеют восход: \([1, 2], [1, 2], [1, 3], [1, 3], [1, 4], [1, 4], [2, 3], [2, 4], [3, 4]\). Одинаковые по содержимому последовательности учитываются столько раз, сколько раз они встречаются как результат конкатенации.

D. Новый год и конференция

Бинарный поиск сортировки Структуры данных хэши *2100

Наполненный оптимизмом, Хёнука проведет конференцию о том, каким будет этот новый год!

На конференции будет \(n\) лекций. У Хёнука есть два возможных места \(a\) и \(b\) для проведения лекций. Для каждой из \(n\) лекций докладчик указал два временных интервала \([sa_i, ea_i]\) (\(sa_i \le ea_i\)) и \([sb_i, eb_i]\) (\(sb_i \le eb_i\)). Если конференция расположена в месте \(a\), лекция будет проходить с \(sa_i\) до \(ea_i\), а если конференция будет проходить в месте \(b\), лекция будет проходить с \(sb_i\) до \(eb_i\). Хёнука выберет одно из этих мест, и все лекции будут проводиться в этом месте.

Две лекции пересекаются, если они имеют какой-либо общий момент времени. Формально лекция в интервале \([x, y]\) перекрывается с лекцией в интервале \([u, v]\) тогда и только тогда, когда \(\max(x, u) \le \min(y, v)\).

Участник может посетить подмножество лекций \(s\), если лекции в \(s\) попарно не перекрываются (то есть никакие две не являются пересекающимися). Обратите внимание, что возможность участия может зависеть от того, выбрал ли Хёнука место \(a\) или место \(b\) для проведения конференции.

Подмножество лекций \(s\) называется чувствительным к месту проведения, если для одного из мест участник может посетить \(s\), а для другого места участник не может посетить \(s\).

Чувствительный к месту проведения набор проблематичен для участника, который заинтересован в посещении лекций в множестве \(s\), потому что участник не может быть уверен, будет ли время лекций перекрываться. Хёнука будет счастлив тогда и только тогда, когда не будет наборов, чувствительных к месту. Определите, будет ли Хёнука счастлив.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 100\,000\)) — количество лекций на конференции.

Каждая из следующих \(n\) строк содержит четыре целых числа \(sa_i\), \(ea_i\), \(sb_i\), \(eb_i\) (\(1 \le sa_i, ea_i, sb_i, eb_i \le 10^9\), \(sa_i \le ea_i, sb_i \le eb_i\)).

Выходные данные

Выведите «YES», если Хёнука будет счастлив. Иначе выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

Во втором примере подмножество лекций \(\{1, 3\}\) чувствительное к месту, потому что участник не может посетить место \(a\), но может посетить место \(b\).

В первом и третьем примерах таких подмножеств не существует.

F. Новый год и социальная сеть

графы Деревья математика Паросочетания Структуры данных *3200

Новая социальная сеть (НСС) от Donghyun содержит \(n\) пользователей с номерами \(1, 2, \ldots, n\). Их сеть представляет собой дерево, поэтому между пользователем существует \(n-1\) прямых соединений. Каждый пользователь может связаться с другим пользователем, используя некоторую последовательность прямых соединений. Мы будем обозначать эту первичную сеть как \(T_1\).

Чтобы предотвратить возможную поломку сервера, Donghyun создал резервную сеть \(T_2\), которая соединяет тех же \(n\) пользователей как дерево. Если система выходит из строя, ровно одно ребро \(e \in T_1\) становится непригодным для использования. В этом случае Donghyun защитит ребро \(e\), выбрав другое ребро \(f \in T_2\), и добавит его в существующую сеть. Это новое ребро должно сделать сеть опять связной.

Donghyun хочет выбрать заменяющее ребро \(f \in T_2\) для максимально возможного количества ребер \(e \in T_1\). Однако, поскольку резервная сеть \(T_2\) является хрупкой, \(f \in T_2\) может быть выбрано в качестве замещающего ребра для не более одного ребра в \(T_1\). С этим ограничением Donghyun хочет защитить как можно больше ребер в \(T_1\).

Формально, пусть \(E(T)\) — множество ребер дерева \(T\). Рассмотрим двудольный граф с двумя долями \(E(T_1)\) и \(E(T_2)\). Для \(e \in E(T_1), f \in E(T_2)\), существует ребро, соединяющее \(\{e, f\}\) тогда и только тогда, когда граф \(T_1 - \{e\} + \{f\}\) — дерево. Вы должны найти максимальное паросочетание в этом двудольном графе.

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 250\,000\)) — размер обоих деревьев.

В следующих \(n-1\) строках записано по два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le n\)). Эти два числа обозначают ребро из \(T_1\).

В следующих \(n-1\) строках записано по два целых числа \(c_i\) и \(d_i\) (\(1 \le c_i, d_i \le n\)). Эти два числа обозначают ребро из \(T_2\).

Гарантируется, что оба этих множества ребер — это деревья на \(n\) вершинах.

Выходные данные

В первой строке выведите целое число \(m\) (\(0 \leq m < n\)), размер максимального по размеру паросочетания.

В следующих \(m\) строках выведите по четыре целых числа \(a_i, b_i, c_i, d_i\). Эти четыре целых числа описывают, что ребро \((a_i, b_i)\) из \(T_1\) объединено в пару с ребром \((c_i, d_i)\) из \(T_2\).

Все выведенные ребра должны принадлежать соответствующим деревьям, и все выведенные ребра одного дерева должны быть различными. Если убирают ребро \((a_i, b_i)\) из \(T_1\) и добавляют ребро \((c_i, d_i)\) из \(T_2\), то сеть должна оставаться связной. Порядок выведенных пар и порядок вершин внутри ребер не имеет значения.

Если есть несколько возможных решений, вы можете вывести любое.

E. Удали один отрезок

графы Деревья дп Конструктив Перебор сортировки Структуры данных *2300

На координатной прямой \(Ox\) заданы \(n\) отрезков \([l_1, r_1]\), \([l_2, r_2]\), ..., \([l_n, r_n]\). Отрезок \([l, r]\) покрывает все точки от \(l\) до \(r\) включительно, то есть такие \(x\), что \(l \le x \le r\).

Отрезки могут располагаться произвольным образом  — вкладываться друг в друга, совпадать и т.п. Отрезки могут вырождаться в точку, то есть допустимо, что \(l_i=r_i\).

Объединением набора отрезков называется такой минимальный набор отрезков, который покрывает в точности тот же набор точек, что и заданный набор. Например:

  • если \(n=3\) и отрезки имеют вид \([3, 6]\), \([100, 100]\), \([5, 8]\), то их объединение состоит из \(2\) отрезков: \([3, 8]\) и \([100, 100]\);
  • если \(n=5\) и отрезки имеют вид \([1, 2]\), \([2, 3]\), \([4, 5]\), \([4, 6]\), \([6, 6]\) то их объединение состоит из \(2\) отрезков: \([1, 3]\) и \([4, 6]\).

Очевидно, что объединение — это набор непересекающихся отрезков.

Требуется удалить ровно один отрезок из заданных \(n\) таким образом, чтобы количество отрезков в объединении оставшихся \(n-1\) было наибольшим.

Например, если \(n=4\) и отрезки имеют вид \([1, 4]\), \([2, 3]\), \([3, 6]\), \([5, 7]\), то:

  • если из набора удалить первый отрезок, то останутся отрезки \([2, 3]\), \([3, 6]\), \([5, 7]\), объединение которых состоит из \(1\) отрезка;
  • если из набора удалить второй отрезок, то останутся отрезки \([1, 4]\), \([3, 6]\), \([5, 7]\), объединение которых состоит из \(1\) отрезка;
  • если из набора удалить третий отрезок, то останутся отрезки \([1, 4]\), \([2, 3]\), \([5, 7]\), объединение которых состоит из \(2\) отрезков;
  • если из набора удалить четвертый отрезок, то останутся отрезки \([1, 4]\), \([2, 3]\), \([3, 6]\), объединение которых состоит из \(1\) отрезка.

Таким образом, в примере выше надо обязательно удалять третий отрезок, чтобы получить ответ \(2\).

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

Обратите внимание, что если в заданном наборе есть несколько одинаковых отрезков, то удалить вы всё-равно можете ровно один из них. То есть набор отрезков после удаления одного будет содержать ровно \(n-1\) отрезок.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте. Далее следуют описания \(t\) наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(2 \le n \le 2\cdot10^5\)) — количество отрезков в заданном наборе. Далее в \(n\) строках заданы сами отрезки парами целых чисел \(l_i\), \(r_i\) (\(-10^9 \le l_i \le r_i \le 10^9\)), где \(l_i\) и \(r_i\) — координаты левого и правого конца \(i\)-го отрезка, соответственно.

Отрезки заданы в произвольном порядке.

Гарантируется, что сумма значений \(n\) по всем наборам во входных данных не превосходит \(2\cdot10^5\).

Выходные данные

Выведите \(t\) чисел — ответы на заданные \(t\) наборов входных данных в порядке их следования в тесте. Ответ равен максимальному количеству отрезков в объединении \(n-1\) отрезка из \(n\) заданных, если допускается удалить один любой отрезок.

B. Числа на дереве

графы Деревья жадные алгоритмы Конструктив поиск в глубину и подобное Структуры данных *1800

Евлампию подарили корневое дерево, вершины которого пронумерованы от \(1\) до \(n\). В каждой \(i\)-й вершине написано число \(a_i\). Евлампий посчитал для каждой вершины \(i\) величину \(c_i\) — количество вершин \(j\) в поддереве вершины \(i\), для которых \(a_j < a_i\).

Иллюстрация ко второму примеру, первым написано \(a_i\), а в скобках написано \(c_i\)

После нового года Евлампий не смог вспомнить, каким был его подарок! Он помнит дерево и значения \(c_i\), однако совсем забыл, какие числа \(a_i\) были написаны в вершинах. Помогите ему восстановить исходные числа!

Входные данные

В первой строке содержится целое число \(n\) \((1 \leq n \leq 2000)\) — количество вершин в дереве.

Далее в \(n\) строках идёт описание вершин дерева: в \(i\)-й строке находятся два целых числа \(p_i\) и \(c_i\) (\(0 \leq p_i \leq n\); \(0 \leq c_i \leq n-1\)), где \(p_i\) — номер родителя вершины \(i\) или \(0\) для корня дерева, а \(c_i\) — количество вершин \(j\) в поддереве вершины \(i\), для которых \(a_j < a_i\).

Гарантируется, что значения \(p_i\) задают некоторое корневое дерево из \(n\) вершин.

Выходные данные

Если решение существует, то в первой строке выведите «YES», а во второй строке выведите \(n\) чисел \(a_i\) \((1 \leq a_i \leq {10}^{9})\) — искомые числа, которые были записаны в вершинах дерева. Если решений несколько, выведите любое из них. Можно показать, что если решение существует, то также существует решение, где все \(a_i\) лежат от \(1\) до \(10^9\).

Если же решения не существует, то выведите «NO».

D. ЛЧК

математика матрицы Структуры данных Теория вероятностей *3100

В Чилляндии построили бесконечно длинный Линейный Чилляндский Коллайдер (ЛЧК). К ЛЧК подсоединены \(n\) труб c координатами \(x_i\). В момент времени 0 из каждой трубки ЛЧК вылетает протон направо с вероятностью \(p_i\) и с вероятностью \((1 - p_i)\) — влево. Протон \(i\) разогнан до скорости \(v_i\). Длительность эксперимента определяется как время до первого столкновения двух протонов. В случае, если столкновений не произойдет, длительность эксперимента полагается равной нулю.

Найдите математическое ожидание длительности эксперимента.

Иллюстрация к первому примеру
Входные данные

Первая строка входных данных содержит одно целое число \(n\) — количество труб (\(1 \le n \le 10^5\)). В следующих \(n\) строках содержится по три целых числа \(x_i\), \(v_i\), \(p_i\) — координата \(i\)-й трубы, скорость \(i\)-го протона, и вероятность вылета \(i\)-го протона вправо в процентах (\(-10^9 \le x_i \le 10^9, 1 \le v \le 10^6, 0 \le p_i \le 100\)). Гарантируется, что все \(x_i\) различны и отсортированы в порядке возрастания.

Выходные данные

Можно показать, что ответ всегда можно представить в виде дроби \(P/Q\), где \(P\) — целое число, а \(Q\) — натуральное число, не кратное \(998\,244\,353\). В таком случае выведите \(P \cdot Q^{-1}\) по модулю \(998\,244\,353\).

E. Гончар Фёдор наносит ответный удар

Строки Структуры данных *3200

У Феди есть строка \(S\), изначально пустая, и массив \(W\), тоже изначально пустой.

Феде по одному приходят \(n\) запросов к этой строке и этому массиву. Запрос \(i\) состоит из строчной буквы английского алфавита \(c_i\) и целого неотрицательного числа \(w_i\). К строке \(S\) необходимо в конец приписать символ \(c_i\), а к \(W\) в конец добавить \(w_i\). Ответом на запрос является сумма подозрительностей по всем подотрезкам \([L, \ R]\) массива \(W\) \((1 \leq L \leq R \leq i)\).

Определим подозрительность подотрезка следующим образом: если подстрока \(S\), соответствующая этому подотрезку (то есть строка из идущих подряд символов от \(L\)-го до \(R\)-го включительно), совпадает с префиксом \(S\) такой же длины (то есть с подстрокой, соответствующей подотрезку \([1, \ R - L + 1]\)), то его подозрительность равна минимуму в массиве \(W\) на том же подотрезке \([L, \ R]\), а иначе она равна \(0\).

Помогите Феде ответить на все запросы, пока за ним не приехали санитары!

Входные данные

Первая строка содержит целое число \(n\) \((1 \leq n \leq 600\,000)\) — количество запросов.

Далее идут \(n\) строк: \(i\)-я из них содержит запрос \(i\): строчную букву латинского алфавита \(c_i\) и целое число \(w_i\) \((0 \leq w_i \leq 2^{30} - 1)\).

Запросы даны в зашифрованном виде. Пусть \(ans\) — ответ на предыдущий запрос (для первого запроса положим эту величину равной \(0\)). Тогда для того, чтобы получить настоящий запрос, с данными числами необходимо проделать следующие операции: \(c_i\) сдвинуть циклически по алфавиту вперёд на \(ans\), а \(w_i\) сделать равным \(w_i \oplus (ans \ \& \ MASK)\), где \(\oplus\) — побитовое исключающее «или», \(\&\) — побитовое «и», а \(MASK = 2^{30} - 1\).

Выходные данные

Выведите \(n\) строк, в строке \(i\) должно находиться одно целое число — ответ на запрос \(i\).

Примечание

Для удобства будем называть «подозрительными» те подотрезки, для которых соответствующие им строки являются префиксами \(S\), то есть те, подозрительность которых может быть не нулевой.

В результате расшифровки в первом примере из условия после всех запросов строка \(S\) равна «abacaba», а все \(w_i = 1\), то есть подозрительность всех подозрительных подотрезков просто равна \(1\). Посмотрим, как получается ответ после каждого запроса:

1. \(S\) = «a», у массива \(W\) есть единственный подотрезок — \([1, \ 1]\), и соответствующая ему подстрока равна «a», то есть всей строке \(S\), то есть она является префиксом \(S\), и подозрительность подотрезка равна \(1\).

2. \(S\) = «ab», подозрительные подотрезки: \([1, \ 1]\) и \([1, \ 2]\), всего \(2\).

3. \(S\) = «aba», подозрительные подотрезки: \([1, \ 1]\), \([1, \ 2]\), \([1, \ 3]\) и \([3, \ 3]\), всего \(4\).

4. \(S\) = «abac», подозрительные подотрезки: \([1, \ 1]\), \([1, \ 2]\), \([1, \ 3]\), \([1, \ 4]\) и \([3, \ 3]\), всего \(5\).

5. \(S\) = «abaca», подозрительные подотрезки: \([1, \ 1]\), \([1, \ 2]\), \([1, \ 3]\), \([1, \ 4]\), \([1, \ 5]\), \([3, \ 3]\) и \([5, \ 5]\), всего \(7\).

6. \(S\) = «abacab», подозрительные подотрезки: \([1, \ 1]\), \([1, \ 2]\), \([1, \ 3]\), \([1, \ 4]\), \([1, \ 5]\), \([1, \ 6]\), \([3, \ 3]\), \([5, \ 5]\) и \([5, \ 6]\) всего \(9\).

7. \(S\) = «abacaba», подозрительные подотрезки: \([1, \ 1]\), \([1, \ 2]\), \([1, \ 3]\), \([1, \ 4]\), \([1, \ 5]\), \([1, \ 6]\), \([1, \ 7]\), \([3, \ 3]\), \([5, \ 5]\), \([5, \ 6]\), \([5, \ 7]\) и \([7, \ 7]\) всего \(12\).

Во втором примере из условия после всех запросов \(S\) = «aaba», \(W = [2, 0, 2, 0]\).

1. \(S\) = «a», подозрительные подотрезки: \([1, \ 1]\) (подозрительность \(2\)), в сумме \(2\).

2. \(S\) = «aa», подозрительные подотрезки: \([1, \ 1]\) (\(2\)), \([1, \ 2]\) (\(0\)), \([2, \ 2]\) (\(0\)), в сумме \(2\).

3. \(S\) = «aab», подозрительные подотрезки: \([1, \ 1]\) (\(2\)), \([1, \ 2]\) (\(0\)), \([1, \ 3]\) (\(0\)), \([2, \ 2]\) (\(0\)), в сумме \(2\).

4. \(S\) = «aaba», подозрительные подотрезки: \([1, \ 1]\) (\(2\)), \([1, \ 2]\) (\(0\)), \([1, \ 3]\) (\(0\)), \([1, \ 4]\) (\(0\)), \([2, \ 2]\) (\(0\)), \([4, \ 4]\) (\(0\)), в сумме \(2\).

В третьем примере из условия после всех запросов \(S\) = «abcde», \(W = [7, 2, 10, 1, 7]\).

1. \(S\) = «a», подозрительные подотрезки: \([1, \ 1]\) (\(7\)), в сумме \(7\).

2. \(S\) = «ab», подозрительные подотрезки: \([1, \ 1]\) (\(7\)), \([1, \ 2]\) (\(2\)), в сумме \(9\).

3. \(S\) = «abc», подозрительные подотрезки: \([1, \ 1]\) (\(7\)), \([1, \ 2]\) (\(2\)), \([1, \ 3]\) (\(2\)), в сумме \(11\).

4. \(S\) = «abcd», подозрительные подотрезки: \([1, \ 1]\) (\(7\)), \([1, \ 2]\) (\(2\)), \([1, \ 3]\) (\(2\)), \([1, \ 4]\) (\(1\)), в сумме \(12\).

5. \(S\) = «abcde», подозрительные подотрезки: \([1, \ 1]\) (\(7\)), \([1, \ 2]\) (\(2\)), \([1, \ 3]\) (\(2\)), \([1, \ 4]\) (\(1\)), \([1, \ 5]\) (\(1\)), в сумме \(13\).

B. Гиперсет

Перебор реализация Структуры данных *1500

Пчёлки Алиса и Алеся подарили пчеловодке Полине на Новый Год знаменитую карточную игру «Set». Колода для игры состоит из карт, каждая из которых обладает набором из четырех признаков: тип фигуры, количество фигур, их цвет и текстура. Сетом называется тройка карт, у которых каждый признак либо у всех попарно отличается, либо совпадает. Рисунок ниже иллюстрирует возможные комбинации карт.

Полина придумала новый вариант игры и назвала его «Hyperset». В этой игре есть \(n\) карт, обладающих \(k\) признаками, каждый из которых принимает значение «S», «E» или «T». Оригинальная игра «Set» может быть рассмотрена как «Hyperset» с \(k = 4\).

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

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

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 1500\), \(1 \le k \le 30\)) — количество карт и количество признаков соответственно.

В каждой из следующих \(n\) строк содержится описание карт. Описание карты представляет собой строку, состоящую из \(k\) букв «S», «E», «T». Символ на позиции \(i\) описывает \(i\)-й признак этой карты. Все карты различны.

Выходные данные

Выведите единственное число — количество способов выбрать три карты, образующих сет.

Примечание

В третьем примере сетами являются следующие тройки карт:

  1. «SETT», «TEST», «EEET»
  2. «TEST», «ESTE», «STES»

E. Симулятор мессенджера

Структуры данных *2000

Поликарп — частый пользователь одного очень популярного мессенджера. Он постоянно общается со своими друзьями. У него есть \(n\) друзей, пронумерованных от \(1\) до \(n\).

Напомним, что перестановка размера \(n\) — это такой массив размера \(n\), что каждое число от \(1\) до \(n\) встречается в нем ровно один раз.

Так что его список последних диалогов может быть представлен в виде перестановки \(p\) размера \(n\). \(p_1\) — это самые недавний диалог, \(p_2\) — второй по давности и так далее.

Изначально список диалогов Поликарпа \(p\) выглядит как \(1, 2, \dots, n\) (другими словами, является тождественной перестановкой).

После этого он получает \(m\) сообщений, \(j\)-е сообщение приходит от друга \(a_j\). Тогда друг \(a_j\) перемещается на первую позицию в перестановке, сдвигая всех между первой позицией и текущей позицией \(a_j\) на \(1\). Обратите внимание, что если друг \(a_j\) уже стоит на первой позиции, то ничего не происходит.

Например, пусть список последних диалогов будет \(p = [4, 1, 5, 3, 2]\):

  • если он получает сообщение от друга \(3\), то \(p\) становится \([3, 4, 1, 5, 2]\);
  • если он получает сообщение от друга \(4\), то \(p\) не меняется \([4, 1, 5, 3, 2]\);
  • если он получает сообщение от друга \(2\), то \(p\) становится \([2, 4, 1, 5, 3]\).

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

Входные данные

В первой строке записаны два целых числа \(n\) and \(m\) (\(1 \le n, m \le 3 \cdot 10^5\)) — количество друзей Поликарпа и количество полученных сообщений, соответственно.

Во второй строке записаны \(m\) целых чисел \(a_1, a_2, \dots, a_m\) (\(1 \le a_i \le n\)) — описания полученных сообщений.

Выходные данные

Выведите \(n\) пар целых чисел. Для каждого друга выведите минимальную и максимальную позиции, на которых он был в самом начале и после получения каждого сообщения.

Примечание

В первом примере список последних диалогов Поликарпа выглядит так:

  • \([1, 2, 3, 4, 5]\)
  • \([3, 1, 2, 4, 5]\)
  • \([5, 3, 1, 2, 4]\)
  • \([1, 5, 3, 2, 4]\)
  • \([4, 1, 5, 3, 2]\)

Так что, например, позиции друга \(2\)\(2, 3, 4, 4, 5\), соответственно. Из всех них \(2\) — это минимум, а \(5\) — это максимум. Поэтому ответ для друга \(2\) — это пара \((2, 5)\).

Во втором примере список последних диалогов Поликарпа выглядит так:

  • \([1, 2, 3, 4]\)
  • \([1, 2, 3, 4]\)
  • \([2, 1, 3, 4]\)
  • \([4, 2, 1, 3]\)

A. Контроль сознания

Перебор реализация Структуры данных *1600

Вы и ваш \(n - 1\) друг нашли массив целых чисел \(a_1, a_2, \dots, a_n\). Вы решили разделить его следующим образом: все \(n\) человек встают в линию в определенном порядке. Каждую минуту, человек в начале линии выбирает либо первый, либо последний элемент массива, удаляет его и забирает себе. Затем, он выходит из линии и процесс продолжается со следующим стоящим в линии человеком.

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

Предположим, что вы сделаете ваш выбор оптимально. Чему равно максимальное целое число \(x\), такое что, вне зависимости от ходов тех друзей, которых вы не выбрали, чтобы убедить, элемент массива, который вы получите на вашем ходу, будет не меньше, чем \(x\)?

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

Входные данные

Входные данные содержат несколько тестовых случаев. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 1000\))  — количество тестовых случаев. В следующих строках находится их описание.

В первой строке описания каждого тестового случая находятся три разделенных пробелом целых числа \(n\), \(m\) и \(k\) (\(1 \le m \le n \le 3500\), \(0 \le k \le n - 1\))  — количество элементов в массиве, ваша позиция в линии и количество человек, чей выбор вы можете зафиксировать.

Во второй строке описания каждого тестового случая содержится \(n\) положительных целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\))  — элементы массива.

Гарантируется, что сумма значений \(n\) по всем тестовым случаям не превосходит \(3500\).

Выходные данные

Для каждого тестового случая, выведите наибольшее целое число \(x\), такое что вы можете гарантировать себе получить число не меньше, чем \(x\).

Примечание

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

  • первый человек возьмет последний элемент (\(5\)), потому что он или она были убеждены вами взять последний элемент. После этого хода оставшийся массив будет \([2, 9, 2, 3, 8]\);
  • второй человек возьмет первый элемент (\(2\)), потому что он или она были убеждены вами взять первый элемент. После этого хода оставшийся массив будет \([9, 2, 3, 8]\);
  • если третий человек выберет взять первый элемент (\(9\)), к вашему ходу оставшийся массив будет \([2, 3, 8]\) и вы сможете взять \(8\) (последний элемент);
  • если третий человек выберет взять последний элемент (\(8\)), к вашему ходу оставшийся массив будет \([9, 2, 3]\) и вы сможете взять \(9\) (первый элемент).

Таким образом, эта стратегия гарантирует получить в конце число не меньше, чем \(8\). Можно доказать, что не существует стратегии, гарантирующей получить число не меньше чем \(9\). Таким образом, ответ равен \(8\).

Во втором тестовом случае, одной из оптимальных стратегий является убедить первого человека взять первый элемент. Тогда, в худшем случае второй и третий человек возьмут первый элементы и вы получите число \(4\).

B. Неприводимые анаграммы

Бинарный поиск Конструктив Строки Структуры данных *1800

Назовем две строки \(s\) и \(t\) анаграммами друг друга, если можно так переставить символы в строке \(s\), чтобы получить строку, равную \(t\).

Рассмотрим две строки \(s\) и \(t\), являющиеся анаграммами друг друга. Будем говорить, что \(t\) это приводимая анаграмма строки \(s\), если существует такое целое число \(k \ge 2\) и \(2k\) непустых строк \(s_1, t_1, s_2, t_2, \dots, s_k, t_k\), которые удовлетворяют следующим условиям:

  1. Если мы запишем в линию строки \(s_1, s_2, \dots, s_k\) в таком порядке, то получившаяся строка будет равна \(s\);
  2. Если мы запишем в линию строки \(t_1, t_2, \dots, t_k\) в таком порядке, то получившаяся строка будет равна \(t\);
  3. Для всех целых \(i\) между \(1\) и \(k\) включительно, \(s_i\) и \(t_i\) являются анаграммами.

Если таких строк не существует, тогда \(t\) называется неприводимой анаграммой строки \(s\). Обратите внимание, что этот термин определяется только в случае, когда \(s\) и \(t\) это анаграммы.

Например, рассмотрим строку \(s = \) «gamegame». Тогда строка \(t = \) «megamage» это приводимая анаграмма для \(s\), потому что мы можем выбрать, например, \(s_1 = \) «game», \(s_2 = \) «gam», \(s_3 = \) «e» и \(t_1 = \) «mega», \(t_2 = \) «mag», \(t_3 = \) «e»:

С другой стороны, можно показать, что \(t = \) «memegaga» это неприводимая анаграмма для \(s\).

Вам будет дана строка \(s\) и \(q\) запросов, каждый представляется двумя целыми числами \(1 \le l \le r \le |s|\) (где за \(|s|\) обозначается длина строки \(s\)). Для каждого запроса, вы должны определить, имеет ли подстрока строки \(s\), с \(l\)-о по \(r\)-й символ, включительно, хотя бы одну неприводимую анаграмму.

Входные данные

В первой строке находится строка \(s\), состоящая из строчных символов латинского алфавита (\(1 \le |s| \le 2 \cdot 10^5\)).

Во второй строке содержится единственное целое число \(q\) (\(1 \le q \le 10^5\))  — количество запросов.

Следующие \(q\) строк содержат по два целых числа \(l\) и \(r\) (\(1 \le l \le r \le |s|\)), обозначающие очередной запрос для подстроки \(s\), состоящей из символов с \(l\)-о по \(r\)-й.

Выходные данные

Для каждого запроса, выведите единственную строку, содержащую «Yes» (без кавычек), если соответствующая запросу подстрока имеет хотя бы одну неприводимую анаграмму и «No» (без кавычек), иначе.

Примечание

В первом тесте, в первом и третьем запросах, подстрока будет «a» и она имеет саму себя как неприводимую анаграмму, так как две и больше непустые строки, записанные вместе, не смогут дать строку «a». С другой стороны, во втором запросе, подстрока будет «aaa», которая не имеет неприводимых анаграмм: ее единственная анаграмма это она сама и мы можем выбрать \(s_1 = \) «a», \(s_2 = \) «aa», \(t_1 = \) «a», \(t_2 = \) «aa», чтобы показать, что это приводимая анаграмма.

Во втором запросе второго тестового случая, подстрока будет «abb» и она имеет, например, неприводимую анаграмму «bba».

E. Декартово дерево

Структуры данных *3300

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

Декартово дерево это корневое дерево, которое может быть построено с помощью последовательности различных целых чисел. Мы строим декартово дерево следующим образом:

  1. Если последовательность пустая, верните пустое дерево;
  2. Пусть позиция максимального элемента это \(x\);
  3. Удалите элемент на позиции \(x\) из последовательности и разбейте ее на левую и правую часть от этого элемента (которые могут оказаться пустыми) (элемент на самом деле нужно не удалить навсегда, а временно забрать из последовательности);
  4. Постройте декартово дерево для каждой части;
  5. Сделайте новую вершину для элемента, который был на позиции \(x\), который станет корнем всего дерева. Теперь, если корни декартовых деревьев для левой и правой части существовали, они становятся сыновьями для этой вершины;
  6. Верните полученное дерево.

Например, это декартово дерево для последовательности \(4, 2, 7, 3, 5, 6, 1\):

После того, как Ильдар рассказал про декартово дерево, он задал домашнее задание. Он начинает с пустой последовательности \(a\).

В \(i\)-м раунде, он добавляет число \(i\) куда-то в \(a\). Затем, он задает вопрос: чему равна сумма размеров поддеревьев для всех вершин в декартовом дереве текущей последовательности \(a\)?

Вершина \(v\) находится в поддереве вершины \(u\), тогда и только тогда, когда \(v = u\) или \(v\) находится в одном из поддеревьев одного из сыновей вершины \(u\). Размер поддерева вершины \(u\) равен количеству вершин \(v\), таких что \(v\) находится в поддереве вершины \(u\).

Всего Ильдар проведет \(n\) раундов. В качестве домашней работы он просит дать ответ на эти \(n\) вопросов.

На следующий день, Ильдар сказал Харрису, что он тоже должен выполнить это домашнее задание. Харрис получил финальное состояние последовательности \(a\) от Вильяма. К сожалению, у него нету идей как получить ответы на эти \(n\) вопросов. Помогите Харрису!

Входные данные

В первой строке находится единственное целое число \(n\) (\(1 \le n \le 150000\)).

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)). Гарантируется, что каждое целое число от \(1\) до \(n\) встречается в последовательности ровно один раз.

Выходные данные

Выведите \(n\) строк, \(i\)-я строка должна содержать единственное целое число  — ответ на \(i\)-й вопрос.

Примечание

После первого раунда, последовательность это \(1\). Дерево выглядит так:

Ответ равен \(1\).

После второго раунда, последовательность это \(2, 1\). Дерево выглядит так:

Ответ равен \(2+1=3\).

После третьего раунда, последовательность это \(2, 1, 3\). Дерево выглядит так:

Ответ равен \(2+1+3=6\).

После четвертого раунда, последовательность это \(2, 4, 1, 3\). Дерево выглядит так:

Ответ равен \(1+4+1+2=8\).

После пятого раунда, последовательность это \(2, 4, 1, 5, 3\). Дерево выглядит так:

Ответ равен \(1+3+1+5+1=11\).

A. Игровой лабиринт Неко

реализация снм Структуры данных *1400

NEKO#ΦωΦ только что купила новую игру на свой компьютер!

Главный пазл этой игры это прямоугольный лабиринт \(2 \times n\). Неко должна провести Некомими девочку из клетки \((1, 1)\) в клетку \((2, n)\), тем самым выбравшись из лабиринта. Девочка может переходить только между клетками, соседними по стороне.

Однако, в некоторые моменты игры, некоторые клетки меняют своё состояние: или из земли в лаву (которая не позволяет проходить через клетку), или наоборот (что делает клетку проходимой вновь). Изначально ни в одной клетке лавы нет.

Спустя часы стриминга Неко выяснила, что есть всего \(q\) таких моментов, причём \(i\)-й из них переключает состояние клетки \((r_i, c_i)\) (с земли на лаву, или наоборот). Неко хочет узнать для каждого момента из этих \(q\), можно ли после него пройти из клетки \((1, 1)\) в \((2, n)\) не проходя через клетки с лавой.

Неко великий игрок и стример, но она всё ещё не справляется с пазлами и задачками, требующими большой силы мозга. Не могли бы вы ей помочь?

Входные данные

Первая строка содержит целые числа \(n\), \(q\) (\(2 \le n \le 10^5\), \(1 \le q \le 10^5\)).

Среди следующих \(q\) строк, \(i\)-я содержит целые числа \(r_i\), \(c_i\) (\(1 \le r_i \le 2\), \(1 \le c_i \le n\)), обозначающие координаты клетки, меняющейся в \(i\)-й момент.

Гарантируется, что клетки \((1, 1)\) и \((2, n)\) никогда не будут даны в списке запросов.

Выходные данные

Для каждого момента выведите «Yes» или «No» в зависимости от того, можно ли пройти от клетки \((1, 1)\) до \((2, n)\). Всего вам нужно вывести ровно \(q\) ответов, по одному после каждого изменения.

Каждое слово можно выводить в любом регистре (нижнем, верхнем или смешанном).

Примечание

Разберём пример из условия:

  • После первого запроса девочка всё ещё может достичь цели, один из возможных путей выглядит как \((1,1) \to (1,2) \to (1,3) \to (1,4) \to (1,5) \to (2,5)\).
  • После второго запроса, добраться до цели невозможно, самая дальняя клетка, которой она может достичь, это \((1, 3)\).
  • После четвёртого запроса, клетка \((2, 3)\) уже не заблокирована, однако теперь заблокирован весь \(4\)-й столбец, так что достичь цели не получится.
  • После пятого запроса, проблемы со столбцом пропадают, так что она снова может добраться до цели.

D. Максимизация MEX

жадные алгоритмы математика реализация Структуры данных *1600

Напомним, что MEX массива — это минимальное неотрицательное целое число, которое не представлено в массиве. Примеры:

  • для массива \([0, 0, 1, 0, 2]\) MEX равен \(3\), потому что числа \(0, 1\) и \(2\) представлены в массиве, а \(3\) является минимальным неотрицательным целым числом, не представленным в массиве;
  • для массива \([1, 2, 3, 4]\) MEX равен \(0\), потому что \(0\) является минимальным неотрицательным целым числом, не представленным в массиве;
  • для массива \([0, 1, 4, 3]\) MEX равен \(2\), потому что \(2\) является минимальным неотрицательным целым числом, не представленным в массиве.

Вам задан пустой массив \(a=[]\) (иными словами, массив нулевой длины). Также вам задано положительное целое число \(x\).

Вам дано \(q\) запросов. \(j\)-й запрос состоит из одного целого числа \(y_j\), которое означает, что вы должны дописать один элемент \(y_j\) в массив. Длина массива увеличивается на \(1\) после каждого запроса.

За один ход вы можете выбрать любой индекс \(i\) и присвоить \(a_i := a_i + x\) или \(a_i := a_i - x\) (т.е. увеличить или уменьшить любой элемент на \(x\)). Единственное ограничение — \(a_i\) не может стать отрицательным. Так как изначально массив пуст, вы можете совершать ходы только после первого запроса.

Вам нужно максимизировать MEX (minimum excluded) массива, применив какое-то количество подобных операций (вы также можете применить несколько таких операций к одному и тому же элементу).

Вам необходимо найти ответ после каждого из \(q\) запросов (то есть \(j\)-й ответ соответствует массиву длины \(j\)).

Операции отменяются после каждого запроса. То есть массив \(a\) после \(j\)-го запроса равен \([y_1, y_2, \dots, y_j]\).

Входные данные

Первая строка входных данных содержит два целых числа \(q, x\) (\(1 \le q, x \le 4 \cdot 10^5\)) — количество запросов и значение числа \(x\).

Следующие \(q\) строк описывают запросы. \(j\)-й запрос состоит из целого числа \(y_j\) (\(0 \le y_j \le 10^9\)) и означает, что вы должны дописать один элемент \(y_j\) в массив.

Выходные данные

Выведите ответ на изначальную задачу после каждого запроса — для запроса \(j\) выведите максимальное значение MEX после первых \(j\) запросов. Стоит заметить, что запроса зависимы (массив меняется после каждого запроса), но операции между запросами независимы.

Примечание

В первом тестовом примере:

  • После первого запроса массив равен \(a=[0]\): нет необходимости применять операции, максимально возможный MEX равен \(1\).
  • После второго запроса массив равен \(a=[0, 1]\): нет необходимости применять операции, максимально возможный MEX равен \(2\).
  • После третьего запроса массив равен \(a=[0, 1, 2]\): нет необходимости применять операции, максимально возможный MEX равен \(3\).
  • После четвертого запроса массив равен \(a=[0, 1, 2, 2]\): нет необходимости применять операции, максимально возможный MEX равен \(3\) (вы не можете сделать его больше, применяя операции).
  • После пятого запроса массив равен \(a=[0, 1, 2, 2, 0]\): вы можете совершить операцию \(a[4] := a[4] + 3 = 3\). Массив изменится и станет равен \(a=[0, 1, 2, 2, 3]\). Теперь MEX является максимально возможным и равен \(4\).
  • После шестого запроса массив равен \(a=[0, 1, 2, 2, 0, 0]\): вы можете совершить операцию \(a[4] := a[4] + 3 = 0 + 3 = 3\). Массив изменится и станет равен \(a=[0, 1, 2, 2, 3, 0]\). Теперь MEX является максимально возможным и равен \(4\).
  • После седьмого запроса массив равен \(a=[0, 1, 2, 2, 0, 0, 10]\). Вы можете совершить следующие операции:
    • \(a[3] := a[3] + 3 = 2 + 3 = 5\),
    • \(a[4] := a[4] + 3 = 0 + 3 = 3\),
    • \(a[5] := a[5] + 3 = 0 + 3 = 3\),
    • \(a[5] := a[5] + 3 = 3 + 3 = 6\),
    • \(a[6] := a[6] - 3 = 10 - 3 = 7\),
    • \(a[6] := a[6] - 3 = 7 - 3 = 4\).
    Результирующий массив будет равен \(a=[0, 1, 2, 5, 3, 6, 4]\). Теперь MEX является максимально возможным и равен \(7\).

E. Разделение перестановки

разделяй и властвуй Структуры данных *2200

Вам задана перестановка \(p_1, p_2, \dots , p_n\) (перестановка — это массив, в котором все числа от \(1\) до \(n\) встречаются ровно один раз). Вес \(i\)-го элемента перестановки равен \(a_i\).

Сначала вы делите вашу перестановку на два непустых множества — префикс и суффикс. Более формально, первое множество содержит элементы \(p_1, p_2, \dots , p_k\), второе — \(p_{k+1}, p_{k+2}, \dots , p_n\), где \(1 \le k < n\).

После этого вы можете перемещать элементы между множествами. Точнее, вы можете выбрать элемент первого множества и переместить его во второе множество или наоборот. Вы заплатите \(a_i\) долларов за перемещение элемента \(p_i\).

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

Например, если \(p = [3, 1, 2]\) и \(a = [7, 1, 4]\), то вам следует действовать следующим образом: разделить \(p\) на две части \([3, 1]\) и \([2]\), а затем переместить элемент, равный \(2\), в первое множество (это будет стоить \(4\)). А если \(p = [3, 5, 1, 6, 2, 4]\), \(a = [9, 1, 9, 9, 1, 9]\), то нужно делать так: разделить \(p\) на две части \([3, 5, 1]\) и \([6, 2, 4]\), а затем переместить элемент, равный \(2\), в первое множество (это стоит \(1\)), а элемент, равный \(5\) — во второе (это также стоит \(1\)).

Посчитайте минимальное количество долларов, которое вам придется потратить.

Входные данные

Первая строка содержит число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длину перестановки.

Вторая строка содержит \(n\) чисел \(p_1, p_2, \dots , p_n\) (\(1 \le p_i \le n\)). Гарантируется, что каждое число от \(1\) до \(n\) встречаются в этой перестановке ровно один раз.

Третья строка содержит \(n\) чисел \(a_1, a_2, \dots , a_n\) (\(1 \le a_i \le 10^9\)).

Выходные данные

Выведите одно число — минимальное количество долларов, которое вам придется потратить.

C. Очередной идущий робот

реализация Структуры данных *1500

На координатной плоскости стоит робот. Изначально он расположен в точке \((0, 0)\). Его путь описывается строкой \(s\) длины \(n\), состоящей из символов 'L', 'R', 'U', 'D'.

Каждый из этих символов соответствует некоторому ходу:

  • 'L' (влево): робот перемещается из точки \((x, y)\) в точку \((x - 1, y)\);
  • 'R' (вправо): робот перемещается из точки \((x, y)\) в точку \((x + 1, y)\);
  • 'U' (вверх): робот перемещается из точки \((x, y)\) в точку \((x, y + 1)\);
  • 'D' (вниз): робот перемещается из точки \((x, y)\) в точку \((x, y - 1)\).

Компания, которая создала этого робота, попросила вас оптимизировать путь робота некоторым образом. Чтобы сделать это, вы можете удалить любую непустую подстроку пути. Но эта компания не хочет, чтобы покупатели заметили перемену в поведении робота. Это означает, что если до оптимизации робот заканчивал свой путь в точке \((x_e, y_e)\), то после оптимизации (т.е. удаления некоторой единственной подстроки из \(s\)) робот тоже должен заканчивать свой путь в точке \((x_e, y_e)\).

Эта оптимизация — малобюджетный проект, поэтому вам нужно удалить кратчайшую возможную непустую подстроку, чтобы оптимизировать путь робота так, что конечная точка его пути не изменится. Возможна ситуация, когда вы не можете оптимизировать путь. Кроме того, возможно, что после оптимизации полученный путь станет пустой строкой (т.е. удаленная подстрока — это вся строка \(s\)).

Напомним, что подстрока строки \(s\) — это такая строка, которая может быть получена из \(s\) с помощью удаления некоторого числа символов (возможно, нулевого) из префикса и некоторого количества символов (возможно, нулевого) из суффикса. Например, подстроками «LURLLR» являются «LU», «LR», «LURLLR», «URL», но не «RR» и «UL».

Вам нужно ответить на \(t\) независимых наборов входных данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Следующие \(2t\) строк описывают наборы входных данных. Каждый набор задан двумя строками. Первая строка набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину пути робота. Вторая строка набора содержит одну строку \(s\), состоящую из \(n\) символов 'L', 'R', 'U', 'D' — путь робота.

Гарантируется, что сумма всех \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора входных данных выведите ответ на него. Если вы не можете удалить такую непустую подстроку, что конечная точка пути робота не изменится, выведите -1. В противном случае выведите два целых числа \(l\) и \(r\) такие, что \(1 \le l \le r \le n\) — границы подстроки, которую вы удаляете. Значение \(r-l+1\) должно быть минимальным возможным. Если существует несколько ответов, выведите любой из них.

E2. Покраска строки (сложная версия)

дп Структуры данных *2000

Это сложная версия задачи. Задачи отличаются друг от друга, но простая версия почти является подзадачей сложной версии. Обратите внимание на то, что ограничения и формат вывода различаются.

Дана строка \(s\), состоящая из \(n\) строчных латинских букв.

Вам нужно раскрасить все её символы в минимальное количество цветов (каждый символ покрашен ровно в один цвет, одинаковые буквы могут быть покрашены как одним цветом, так и разными, т.е. вам нужно выбрать ровно один цвет для каждого индекса в \(s\)).

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

Цель — сделать строку отсортированной, т.е. все символы должны быть расположены в алфавитном порядке.

Ваша задача – найти минимальное количество цветов, которое нужно, чтобы раскрасить строку так, что после раскраски она может быть отсортирована с помощью какой-либо последовательности шагов. Обратите внимание: вам нужно восстановить только раскраску, но не последовательность шагов.

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину строки \(s\).

Вторая строка входных данных содержит строку \(s\), состоящую ровно из \(n\) строчных латинских букв.

Выходные данные

В первой строке выведите одно целое число \(res\) (\(1 \le res \le n\)) — минимальное количество цветов, которое нужно, чтобы раскрасить строку так, что после раскраски она может быть отсортирована с помощью какой-либо последовательности шагов.

Во второй строке выведите любую возможную раскраску, которая может быть использована, чтобы отсортировать строку с помощью какой-либо последовательности шагов, описанных в условии задачи. Раскраской считается массив \(c\) длины \(n\), где \(1 \le c_i \le res\) и \(c_i\) содержит цвет \(i\)-го символа.

F. Фанат кино

*особая задача жадные алгоритмы реализация сортировки Структуры данных

Последнее время Поликарп фанатеет от новинок кинематографа и старается их не пропускать!

В ближайшее время выйдут \(n\) новых фильмов: \(i\)-й из них поступит в прокат в день \(a_i\) и закончит прокат в день \(b_i\). Это значит, что если Поликарп хочет посмотреть \(i\)-й фильм в кинотеатре, то должен это сделать в отрезок дней с \(a_i\) по \(b_i\) включительно.

Возможно, у Поликарпа не будет возможности посмотреть фильм в кинотеатре, тогда он может сделать это и после дня \(b_i\), посмотрев его с помощью одного из онлайн-сервисов. Конечно, это нежелательный исход для Поликарпа, ведь весь мир уже успеет обсудить этот фильм в социальных сетях!

В день Поликарп может посмотреть не более \(m\) фильмов. Помогите Поликарпу найти такое расписание просмотра фильмов, что каждый фильм будет просмотрен в кинотеатре. Если такое расписание не существует, то Поликарп хочет смотреть фильмы так, чтобы

  • для каждого фильма, который он не успеет посмотреть в кинотеатре найдём количество дней между окончанием его проката и днём, когда Поликарп сможет посмотрит фильм;
  • максимальная из величин предыдущего пункта должна быть как можно меньше.
Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте. Далее следуют описания \(t\) наборов входных данных.

Первая строка каждого из наборов содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le m \le 10^9\)) — количество фильмов и максимальное количество фильмов, сколько Поликарп может просмотреть в день.

Далее в \(n\) строках описаны сами фильмы, по одному в строке, парой целых чисел \(a_i\), \(b_i\) (\(1 \le a_i \le b_i \le 10^9\)) — первый и последний день проката для \(i\)-го фильма.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) ответов на заданные наборы входных данных в порядке их записи в тесте: \(i\)-й ответ должен состоять из двух строк. В первую строку ответа выведите целое число \(d\):

  • \(d=0\), если существует расписание, что все фильмы просмотрены во время проката;
  • \(d>0\), если такого расписания не существует — в этом случае \(d\) равно минимальному значению максимума среди всех «опозданий» просмотров после проката.

Во вторую строку ответа выведите \(n\) положительных целых чисел \(t_1, t_2, \dots, t_n\), где \(t_i\) — номер дня, когда надо посмотреть \(i\)-й фильм, в оптимальном расписании.

Если ответов несколько, то выведите любой из них.

I. Падающие блоки

*особая задача Структуры данных

Поликарп изобрел новую мобильную игру с падающими блоками.

В этой игре \(n\) блоков падают, по-одному за раз, на плоскую поверхность шириной \(d\) единиц. Каждый блок можно представить как прямоугольник с координатами от \(l_i\) до \(r_i\) и единичной шириной, падающий вниз с большой высоты. Блок падает, пока не столкнется с плоской поверхностью или другим блоком. Будем говорить, что блок \(a\) накрывает блок \(b\), если \(l_a \le l_b \le r_b \le r_a\).

Рассмотрим, что происходит, когда падает блок \(i\). Если этот (верхний) блок \(i\) сталкивается с любым блоком \(j\), таким что блок \(i\) не накрывает блок \(j\), то блок \(i\) упрется в блок \(j\), и все блоки останутся на месте. В противном случае, все блоки, с которыми блок \(i\) столкнулся и накрывает будут уничтожены, а блок \(i\) продолжит падать, не теряя способности уничтожать другие блоки.

Например, рассмотрим, что случится, когда будут падать блоки \((1,2)\), \((2,3)\) и \((1,3)\) в данном порядке. Первый блок приземлится на плоскую поверхность. Далее, второй блок упрется в первый блок. Наконец, третий блок сначала уничтожит второй блок, продолжит падать, уничтожит первый блок и приземлится на плоскую поверхность.

Выше изображен пример из условия, он же является первым примером.

Помогите Поликарпу определить количество оставшихся блоков после падения каждого из них!

Входные данные

В первой строке заданы два целых числа \(n\) и \(d\) (\(1 \le n, d \le 10^5\)) — количество падающих блоков и длина плоской поверхности.

В \(i\)-й из следующих \(n\) строк заданы два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le d\)), описывающих координаты \(i\)-го блока.

Выходные данные

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

Примечание

Первый пример соответствует примеру из условия.

Во втором примере, происходят следующие изменения:

  • Блок \(1\) приземлится на плоскую поверхность.
  • Блок \(2\) приземлится на плоскую поверхность.
  • Блок \(3\) приземлится на блоки \(1\) и \(2\). Заметим, что блок \(3\) не уничтожит блок \(2\), потому что не покрывает блок \(1\) и упирается в него.
  • Блок \(4\) уничтожит все блоки и приземлится на плоскую поверхность.
  • Блок \(5\) приземлится на блок \(4\).
  • Блок \(6\) приземлится на блок \(5\).
  • Блок \(7\) приземлится на блок \(6\). Заметим, что никакие блоки не будут уничтожены, потому что, хотя блок \(7\) покрывает блоки \(4\) и \(5\), но он их не касается.
  • Блок \(8\) уничтожит блок \(7\) и приземлится на \(6\).

C. Водный баланс

геометрия жадные алгоритмы Структуры данных *2100

\(n\) цистерн с водой стоят в ряд, \(i\)-я из них содержит \(a_i\) литров воды. Цистерны пронумерованны от \(1\) до \(n\) слева направо.

Вы можете выполнить следующую операцию: выбрать некоторый подотрезок \([l, r]\) (\(1\le l \le r \le n\)), и перераспределить воду с цистерн \(l, l+1, \dots, r\) между ними равномерно. Другими словами, заменить каждое из \(a_l, a_{l+1}, \dots, a_r\) на \(\frac{a_l + a_{l+1} + \dots + a_r}{r-l+1}\). К примеру, если для обьемов \([1, 3, 6, 7]\) вы выберете \(l = 2, r = 3\), вы получите обьемы \([1, 4.5, 4.5, 7]\). Вы можете выполнять данную операцию любое количество раз.

Какую лексикографически минимальную последовательность обьемов воды вы можете получить?

Напомним:

Последовательность \(a\) лексикографически меньше последовательности \(b\) равной длины, если и только если выполняется следующее: в первой (слева) позиции, где \(a\) и \(b\) отличаются, в последовательности \(a\) стоит меньший элемент, чем в \(b\).

Входные данные

Первая строка содержит целое число \(n\) (\(1 \le n \le 10^6\)) — количество цистерн с водой.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — обьемы воды в цистернах изначально, в литрах.

Из-за большого размера входных данных, не рекомендуется считывать их как doubles.

Выходные данные

Выведите лексикографически минимальную последовательность, которую вы можете получить. В \(i\)-й строке выведите итоговый обьем воды в \(i\)-й цистерне.

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка каждого \(a_i\) не превосходит \(10^{-9}\).

Формально, пусть ваш ответ равен \(a_1, a_2, \dots, a_n\), а ответ жюри равен \(b_1, b_2, \dots, b_n\). Ваш ответ будет зачтен, если и только если \(\frac{|a_i - b_i|}{\max{(1, |b_i|)}} \le 10^{-9}\) для каждого \(i\).

Примечание

В первом примере, вы можете получить лексикографически минимальную последоательность, применив операцию к подотрезку \([1, 3]\).

Во втором примере, вы не можете получить меньшую лексикографически последовательность.

E. Лунки

снм Структуры данных *2700

Маленький Петя очень любит играть. Больше всего он любит играть в игру «Лунки». Это игра для одного игрока со следующими правилами:

Есть N лунок, расположенных в ряд, пронумерованных слева направо числами от 1 до N. У каждой лунки изначально установлена своя сила выброса (у лунки с номером i она равна ai). Если вбросить шарик в лунку i, то он тут же вылетит из нее и попадет в лунку i + ai, после чего он опять вылетит и т.д.. Если же лунки с таким номером нету, то он просто вылетит за край ряда. На каждом из M ходов игрок выбирает одно из двух действий:

  • Установить силу выброса лунки a равной b.
  • Вбросить шарик в лунку a и посчитать количество прыжков шарика, прежде чем он вылетит за край ряда, а так же записать номер лунки, после выпрыгивания из которой шарик вылетел за край.

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

Входные данные

Первая строка содержит два числа N и M (1 ≤ N ≤ 105, 1 ≤ M ≤ 105) — количество лунок в ряду и количество ходов. Следующая строка содержит N целых положительных чисел, не превышающих N - изначальные силы выброса лунок. Следующие M строк задают ходы, сделанные Петей. Каждая строка может быть двух типов:

  • 0 a b
  • 1 a
Тут, первый тип означает что требуется установить силу выброса лунки a равной b, а второй означает что требуется вбросить мячик в лунку с номером a. Числа a и b - целые положительные и не превышают N.
Выходные данные

Для каждого хода второго типа (задающего вбрасывание шарика) в порядке следования во входном файле выведите два числа через пробел в отдельной строке — номер последней лунки перед вылетом шарика за край и количество прыжков.

E. Нанософт

Бинарный поиск дп реализация Структуры данных *2500

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

Эмблема Нанософта может быть описана как четыре квадрата одинакового размера, объединенных вместе в один большой квадрат. Левый верхний квадрат окрашен в красный цвет, правый верхний квадрат окрашен в зеленый цвет, левый нижний окрашен в желтый цвет и правый нижний окрашен в синий цвет.

Примеры некоторых корректных эмблем:

Примеры некоторых некорректных эмблем:

Вараврех пришел в магазин Адхами с целью купить необходимое изображение. Хотя магазин Адхами очень большой у него было ровно одно изображение, описываемое таблицей с \(n\) строками и \(m\) столбцами. Цвет каждой клетки этой таблицы может быть зеленым (символ 'G'), красным (символ 'R'), желтым (символ 'Y') или синим (символ 'B').

Адхами дал Варавреху \(q\) опций, в каждой опции он дал ему подпрямоугольник этого изображения и сказал ему, что он может вырезать для себя подквадрат этого подпрямоугольника. Чтобы выбрать наилучшую опцию, Вараврех хочет узнать максимальную площадь подквадрата внутри данного подпрямоугольника, который является эмблемой Нанософта. Если таких подквадратов не существует, то ответ равен \(0\).

Вараврех так и не смог выбрать наилучшую опцию сам, поэтому просит вас о помощи. Можете ли вы помочь ему?

Входные данные

В первой строке находится три целых числа \(n\), \(m\) и \(q\) \((1 \leq n , m \leq 500, 1 \leq q \leq 3 \cdot 10^{5})\)  — количество строк, столбцов и количество опций.

Каждая из следующих \(n\) строк содержит строку, содержащую \(m\) символов. В \(i\)-й строке \(j\)-й символ будет содержать цвет клетки в \(i\)-й строке и \(j\)-м столбце изображения Адхами. Цвет каждой клетки будет одним из этих: {'G','Y','R','B'}.

В каждой из следующих \(q\) строк содержится четыре целых числа \(r_1\), \(c_1\), \(r_2\) и \(c_2\) \((1 \leq r_1 \leq r_2 \leq n, 1 \leq c_1 \leq c_2 \leq m)\). В этой опции Адхами дает подпрямоугольник изображения с левым верхним углом в клетке \((r_1, c_1)\) и правым нижним углом в клетке \((r_2, c_2)\).

Выходные данные

Для каждой опции выведите максимальную площадь подквадрата внутри данного подпрямоугольника, который может быть эмблемой Нанософта. Если таких подквадратов не существует, то выведите \(0\).

Примечание

Картинка для первого теста:

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

C. Segment tree or Fenwick?

Структуры данных

This is an unusual problem in an unusual contest, here is the announcement: http://cf.m27.workers.dev/blog/entry/73543

You are given an array \(A\) of length \(n\), initially filled with zeros. You need to process \(q\) queries to the array, each of one of the following types:

  1. 1 x y: you need to assign \(A_x=y\);
  2. 2 l r: you need to print \(\sum\limits_{i=l}^r A_i\).
Furthermore, there are \(T\) independent tests you need to process.
Input

The first line contains an integer \(T\) (\(1 \leq T \leq 10^5\)) — the number of test cases.

Each test case description starts with two integers \(n, q\) (\(1 \leq n, q \leq 10^5\)) — the length of the array and the number of queries. The following \(q\) lines contain the description of queries: \(1~x~y\) (\(1 \leq x \leq n\), \(0 \leq y \leq 10^9\)) for queries of the first type and \(2~l~r\) (\(1 \leq l \leq r \leq n\)) for queries of the second type.

It is guaranteed that the sum of \(n\) as well as the sum of \(q\) does not exceed \(10^6\).

Output

For each query of the second type print its result on a separate line.

G. Сумма префиксных сумм

геометрия Деревья разделяй и властвуй Структуры данных *2700

Определим сумму префиксных сумм массива \([s_1, s_2, \dots, s_k]\) как \(s_1 + (s_1 + s_2) + (s_1 + s_2 + s_3) + \dots + (s_1 + s_2 + \dots + s_k)\).

Вам задано дерево, состоящее из \(n\) вершин. В каждой вершине \(i\) записано целое число \(a_i\). Определим значение простого пути от вершины \(u\) до вершины \(v\) следующим образом: рассмотрим все вершины на пути от \(u\) до \(v\), выпишем числа, записанные на этих вершинах, в порядке их появления на пути, и вычислим сумму префиксных сумм получившейся последовательности.

Ваша задача — найти максимальное значение по всем путям в дереве.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 150000\)) — число вершин в дереве.

Затем следует \(n - 1\) строк, описывающих ребра дерева. Каждая строка содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\), \(u_i \ne v_i\)), обозначающие ребро между вершинами \(u_i\) и \(v_i\). Гарантируется, что эти ребра образуют дерево.

Последняя строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le 10^6\)).

Выходные данные

Выведите одно целое число — максимальное значение по всем путям в дереве.

Примечание

Ответ в первом примере достигается, если выбрать путь из вершины \(3\) в вершину \(1\). Мы получаем последовательность \([3, 3, 7, 1]\), сумма префиксных сумм которой равна \(36\).

E. 1-деревья и запросы

Деревья кратчайшие пути поиск в глубину и подобное Структуры данных *2000

Гильдонг забирался на гору, проходя через миллионы деревьев. Вдохновившись ими, он внезапно придумал интересную идею про деревья: А что если мы добавим еще одно ребро в дерево?

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

Сначала, он даст вам дерево (не 1-дерево) на \(n\) вершинах, а затем задаст вам \(q\) запросов. Каждый запрос состоит из \(5\) целых чисел: \(x\), \(y\), \(a\), \(b\), и \(k\). Это означает, что вам надо проверить, есть ли путь из вершины \(a\) в вершину \(b\), которые содержит ровно \(k\) ребер, после добавления двустороннего ребра между вершинами \(x\) и \(y\). Путь может содержать одни и те же вершины и ребра несколько раз. Все запросы независимы друг от друга; т.е. добавленное ребро удаляется для следующего запроса.

Входные данные

Первая строка содержит одно целое число \(n\) (\(3 \le n \le 10^5\)), количество вершин в дереве.

Следующие \(n-1\) строки содержат по два целых числа \(u\) и \(v\) (\(1 \le u,v \le n\), \(u \ne v\)) каждая, которые означают, что есть ребро между вершинами \(u\) и \(v\). Все ребра неориентированные и различные.

В следующей строке записано одно целое число \(q\) (\(1 \le q \le 10^5\)), количество запросов, которое Гильдон хочет вам задать.

Следующие \(q\) строк содержат по пять целых чисел \(x\), \(y\), \(a\), \(b\), и \(k\) каждая (\(1 \le x,y,a,b \le n\), \(x \ne y\), \(1 \le k \le 10^9\)) — целые числа, описанные в условии. Гарантируется, что ребра между вершинами \(x\) и \(y\) не было в исходном дереве.

Выходные данные

Для каждого запроса, выведите «YES» если есть путь, который содержит ровно \(k\) ребер, от \(a\) до \(b\), после добавления неориентированного ребра между вершинами \(x\) и \(y\). Иначе, выведите «NO».

Вы можете выводить все буквы в любом регистре (верхнем или нижнем).

Примечание

Следующая картинка описывает дерево (кружочки и отрезки) и добавленные ребра для каждого запроса (пунктирные линии).

Возможные пути для ответов «YES»:

  • \(1\)-й запрос: \(1\)\(3\)\(2\)
  • \(2\)-й запрос: \(1\)\(2\)\(3\)
  • \(4\)-й запрос: \(3\)\(4\)\(2\)\(3\)\(4\)\(2\)\(3\)\(4\)\(2\)\(3\)

F1. Наблюдение за животными (упрощенная версия)

дп Структуры данных *2300

Единственное отличие этой версии от усложненной это ограничение на \(k\).

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

Гильдонг собирается снимать видео на протяжении \(n\) дней, с дня \(1\) по день \(n\). Лес разделен на \(m\) зон, пронумерованных от \(1\) до \(m\). Он будет использовать камеры следующим образом:

  • На каждый нечетный день (\(1\)-й, \(3\)-й, \(5\)-й, ...), принести красную камеру в лес и записывать видео \(2\) дня.
  • На каждый четный день (\(2\)-й, \(4\)-й, \(6\)-й, ...), принести синюю камеру в лес и записывать видео \(2\) дня.
  • Если он начнет записывать на \(n\)-й день на одну из камер, камера будет записывать только один день.

Каждая камера снимает \(k\) последовательных зон леса. Например, если \(m=5\) и \(k=3\), он может поставить камеру чтобы наблюдать за одним из этих трех отрезков два дня: \([1,3]\), \([2,4]\), и \([3,5]\).

Гильдонг получил информацию о том, сколько животных видно в каждой зоне каждый день. Так как он хочет наблюдать за как можно большим числом животных, он хочет попросить вас найти лучший способ расставить эти две камеры в \(n\) дней. Обратите внимание, что если две камеры снимают одну и ту же зону в один и тот же день, все животные этой зоны должны быть учтены только один раз.

Входные данные

В первой строке записаны три целых числа \(n\), \(m\), и \(k\) (\(1 \le n \le 50\), \(1 \le m \le 2 \cdot 10^4\), \(1 \le k \le min(m,20)\)) — количество дней, которые Гильдонг собирается записывать видео, количество зон в лесу, и диапазон камеры, соответственно.

Следующие \(n\) строк содержат по \(m\) целых чисел. \(j\)-е число в \(i+1\)-й строке это количество животных, которое можно увидеть в \(i\)-й день в \(j\)-й зоне. Каждое количество животных от \(0\) и до \(1000\), включительно.

Выходные данные

Выведите одно целое число — максимальное количество животных, за которыми вы можете наблюдать.

Примечание

Оптимальные способы наблюдать за животными в четырех тестовых примерах:

Пример 1:

Пример 2:

Пример 3:

Пример 4:

F2. Наблюдение за животными (усложненная версия)

дп жадные алгоритмы Структуры данных *2400

Единственное отличие усложненной и упрощенной версии это ограничение на \(k\).

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

Гильдонг собирается снимать видео на протяжении \(n\) дней, с дня \(1\) по день \(n\). Лес разделен на \(m\) зон, пронумерованных от \(1\) до \(m\). Он будет использовать камеры следующим образом:

  • На каждый нечетный день (\(1\)-й, \(3\)-й, \(5\)-й, ...), принести красную камеру в лес и записывать видео \(2\) дня.
  • На каждый четный день (\(2\)-й, \(4\)-й, \(6\)-й, ...), принести синюю камеру в лес и записывать видео \(2\) дня.
  • Если он начнет записывать на \(n\)-й день на одну из камер, камера будет записывать только один день.

Каждая камера снимает \(k\) последовательных зон леса. Например, если \(m=5\) и \(k=3\), он может поставить камеру чтобы наблюдать за одним из этих трех отрезков два дня: \([1,3]\), \([2,4]\), и \([3,5]\).

Гильдонг получил информацию о том, сколько животных видно в каждой зоне каждый день. Так как он хочет наблюдать за как можно большим числом животных, он хочет попросить вас найти лучший способ расставить эти две камеры в \(n\) дней. Обратите внимание, что если две камеры снимают одну и ту же зону в один и тот же день, все животные этой зоны должны быть учтены только один раз.

Входные данные

В первой строке записаны три целых числа \(n\), \(m\), и \(k\) (\(1 \le n \le 50\), \(1 \le m \le 2 \cdot 10^4\), \(1 \le k \le m\)) — количество дней, которые Гильдонг собирается записывать видео, количество зон в лесу, и диапазон камеры, соответственно.

Следующие \(n\) строк содержат по \(m\) целых чисел. \(j\)-е число в \(i+1\)-й строке это количество животных, которое можно увидеть в \(i\)-й день в \(j\)-й зоне. Каждое количество животных от \(0\) и до \(1000\), включительно.

Выходные данные

Выведите одно целое число — максимальное количество животных, за которыми вы можете наблюдать.

Примечание

Оптимальные способы наблюдать за животными в четырех тестовых примерах:

Пример 1:

Пример 2:

Пример 3:

Пример 4:

D. Корова и поля

Бинарный поиск графы жадные алгоритмы кратчайшие пути поиск в глубину и подобное сортировки Структуры данных *1900

Бесси пасется на ферме, состоящей из \(n\) полей, соединенных с помощью \(m\) двусторонних дорог. Сейчас она находится на поле \(1\), и вернется домой на поле \(n\) в конце дня.

Кор-федерация Коровников приказала Фермеру Джону построить одну дополнительную двустороннюю дорогу. У фермы есть \(k\) особых полей, и было решено построить дорогу между двумя различными особыми полями. Фермер Джон может построить дорогу даже между полями, которые уже соединены дорогой.

Уже после постройки дороги, Бесси вернется по кратчайшему пути от поля \(1\) к полю \(n\). Так как Бесси нужно больше тренироваться, Фермер Джон должен максимизировать длину данного кратчайшего пути. Помогите ему!

Входные данные

В первой строке заданы три целых числа \(n\), \(m\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\), \(n-1 \le m \le 2 \cdot 10^5\), \(2 \le k \le n\))  — количество полей на ферме, количество дорог и количество особых полей.

Во второй строке заданы \(k\) целых чисел \(a_1, a_2, \ldots, a_k\) (\(1 \le a_i \le n\))  — номера особых полей. Все \(a_i\) различны.

В \(i\)-й из следующих \(m\) строк задано два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\), \(x_i \ne y_i\)), описывающих двустороннюю дорогу между полями \(x_i\) и \(y_i\).

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

Выходные данные

Выведите единственное число  — максимально возможную длину кратчайшего пути из \(1\) в \(n\) после того, как Фермер Джон построит одну дорогу оптимально.

Примечание

Граф из первого примера изображен ниже. Особые поля отмечены красным. Для Фермера Джона оптимально построить дорогу между полями \(3\) и \(5\), тогда кратчайший путь из \(1\) в \(5\) будет равен \(3\).

Граф из второго примера изображен ниже. Фермер Джон должен построить дорогу между полями \(2\) и \(4\), тогда кратчайший путь из \(1\) в \(5\) будет равен \(3\).

A. Рекомендации

жадные алгоритмы сортировки Структуры данных *1700

Рекомендации новостей ВКонтакте ежедневно подбирают для каждого пользователя интересные публикации из \(n\) категорий. Каждая публикация принадлежит ровно к одной категории. Алгоритм массовых рекомендаций позволяет подобрать \(a_i\) новостей \(i\)-й категории.

Результаты последнего A/B теста показали, что пользователи активнее читают рекомендованные новости, если ни в каких двух категориях не рекомендовано одинаковое количество новостей. Алгоритм одиночного поиска рекомендуемой новости конкретной категории позволяет найти одну новость категории \(i\) за \(t_i\) секунд. Сколько минимально суммарно времени понадобится для того, чтобы добавить новости к уже сформированным алгоритмом массовых рекомендаций публикациям так, чтобы ни в каких двух категориях не было равное количество новостей? Уже подготовленные рекомендации нельзя исключить из предлагаемых пользователю.

Входные данные

В первой строке дано одно целое число \(n\) — количество категорий публикаций (\(1 \le n \le 200\,000\)).

Во второй строке даны \(n\) целых чисел \(a_i\) — количество публикаций \(i\)-го типа, подобранных алгоритмом массовых рекомендаций (\(1 \le a_i \le 10^9\)).

В третьей строке даны \(n\) целых чисел \(t_i\) — время работы алгоритма одиночного поиска рекомендуемой новости \(i\)-й категории (\(1 \le t_i \le 10^5)\).

Выходные данные

Выведите одно целое число — минимальное суммарное время работы алгоритма одиночного поиска.

Примечание

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

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

F. Движущиеся точки

разделяй и властвуй реализация сортировки Структуры данных *1900

На координатной оси \(OX\) находятся \(n\) точек. \(i\)-я точка располагается в целочисленной координате \(x_i\) и имеет скорость \(v_i\). Гарантируется, что никакие две точки не располагаются в одной и той же координате. Все \(n\) точек двигаются с неизменной скоростью, координата \(i\)-й точки в момент времени \(t\) (\(t\) может быть нецелым) вычисляется как \(x_i + t \cdot v_i\).

Рассмотрим две точки \(i\) и \(j\). Пусть \(d(i, j)\) равно минимально возможной дистанции между этими двумя точками по всем возможным моментам времени (даже нецелым). Это значит, что если две точки \(i\) и \(j\) совпадут в какой-то момент времени, значение \(d(i, j)\) будет равно \(0\).

Ваша задача — посчитать значение \(\sum\limits_{1 \le i < j \le n}\) \(d(i, j)\) (сумму минимальных дистанций по всем парам точек).

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество точек.

Вторая строка входных данных содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \le x_i \le 10^8\)), где \(x_i\) равно изначальной координате \(i\)-й точки. Гарантируется, что все \(x_i\) различны.

Третья строка входных данных содержит \(n\) целых чисел \(v_1, v_2, \dots, v_n\) (\(-10^8 \le v_i \le 10^8\)), где \(v_i\) равно скорости \(i\)-й точки.

Выходные данные

Выведите одно целое число — значение \(\sum\limits_{1 \le i < j \le n}\) \(d(i, j)\) (суммы минимальных дистанций по всем парам точек).

G. Автодополнение

дп поиск в глубину и подобное Структуры данных *2600

У вас есть множество строк \(S\). Каждая строка состоит из строчных букв латинского алфавита.

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

  • для текущей строки \(t\) можно выбрать любую строчную латинскую букву \(c\) и приписать ее \(t\), после чего текущая строка станет \(t + c\). Это действие требует \(1\) секунду;
  • использовать автодополнение. При использовании автодополнения с текущей строкой \(t\) вам показывается список всех таких строк \(s \in S\), что \(t\) — префикс \(s\). Этот список включает саму строку \(t\), если \(t\) принадлежит \(S\), и строки в нем расположены в лексикографическом порядке. Вы можете превратить \(t\) в \(i\)-ю строку из этого списка за \(i\) секунд. Обратите внимание, что вы можете выбирать любую строку из списка, это не обязательно должна быть та строка, которую вы хотите набрать.

Чему равно минимальное количество секунд, которое нужно затратить, чтобы набрать каждую строку из \(S\)?

Обратите внимание, что строки множества \(S\) задаются во входных данных необычным образом.

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 10^6\)).

Затем следуют \(n\) строк, в \(i\)-й из которых заданы целое число \(p_i\) (\(0 \le p_i < i\)) и одна строчная латинская буква \(c_i\). Эти строки задают множество строк, подмножеством которого является \(S\), следующим образом: всего есть \(n + 1\) строка, пронумерованная от \(0\) до \(n\); \(0\)-я строка — пустая, а \(i\)-я строка (\(i \ge 1\)) — результат приписывания символа \(c_i\) к строке \(p_i\) справа. Гарантируется, что все эти строки различны.

В следующей строке задано одно целое число \(k\) (\(1 \le k \le n\)) — количество строк в \(S\).

В последней строке заданы \(k\) целых чисел \(a_1\), \(a_2\), ..., \(a_k\) (\(1 \le a_i \le n\), все \(a_i\) попарно различны), обозначающих индексы строк, сгенерированных вышеуказанным способом, принадлежащих множеству \(S\) — формально, если обозначить \(i\)-ю сгенерированную строку как \(s_i\), то \(S = {s_{a_1}, s_{a_2}, \dots, s_{a_k}}\).

Выходные данные

Выведите \(k\) целых чисел, \(i\)-е из которых должно быть равно минимальному количеству секунд, требуемому, чтобы набрать строку \(s_{a_i}\).

Примечание

В первом примере \(S\) состоит из следующих строк: ieh, iqgp, i, iqge, ier.

C1. Небоскрёбы (упрощённая версия)

дп жадные алгоритмы Перебор Структуры данных *1500

Это более простая версия задачи. В этой версии \(n \le 1000\)

В Берляндии активно застраивается окраина столицы. Компания «Kernel Panic» руководит постройкой жилого комплекса из небоскрёбов в Новой Берлскве. Все небоскрёбы строятся вдоль шоссе. Известно, что компания уже купила \(n\) участков возле шоссе и готовится возвести \(n\) небоскрёбов, по одному зданию на один участок.

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

Более формально, пронумеруем участки целыми числами от \(1\) до \(n\). Тогда у небоскрёба на участке с номером \(i\) количество этажей \(a_i\) не может быть больше \(m_i\) (\(1 \le a_i \le m_i\)) Также не может быть, что на плане существуют два участка с номерами \(j\) и \(k\), таких что \(j < i < k\) и \(a_j > a_i < a_k\). Участки \(j\) и \(k\) не обязаны быть соседними с \(i\).

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

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \leq n \leq 1000\)) — количество участков.

Вторая строка содержит целые числа \(m_1, m_2, \ldots, m_n\) (\(1 \leq m_i \leq 10^9\)) —максимально возможное количество этажей для небоскрёба на каждом участке.

Выходные данные

Выведите \(n\) чисел \(a_i\) — количества этажей в плане для каждого небоскрёба, такие, что выполняются все ограничения, а суммарное количество этажей во всех небоскрёбах максимально возможное.

Если возможно несколько ответов, выведите любой.

Примечание

В первом примере можно построить все небоскрёбы с максимально возможной высотой.

Во втором примере придать максимальную высоту всем небоскрёбам нельзя, так как это нарушает ограничение дизайн-кода. Ответ \([10, 6, 6]\) является оптимальным. Обратите внимание, что ответ \([6, 6, 8]\) также удовлетворяет всем ограничениям, но оптимальным не является.

C2. Небоскрёбы (усложнённая версия)

дп жадные алгоритмы Структуры данных *1900

Это более сложная версия задачи. В этой версии \(n \le 500\,000\)

В Берляндии активно застраивается окраина столицы. Компания «Kernel Panic» руководит постройкой жилого комплекса из небоскрёбов в Новой Берлскве. Все небоскрёбы строятся вдоль шоссе. Известно, что компания уже купила \(n\) участков возле шоссе и готовится возвести \(n\) небоскрёбов, по одному зданию на один участок.

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

Более формально, пронумеруем участки целыми числами от \(1\) до \(n\). Тогда у небоскрёба на участке с номером \(i\) количество этажей \(a_i\) не может быть больше \(m_i\) (\(1 \le a_i \le m_i\)). Также не может быть, что на плане существуют два участка с номерами \(j\) и \(k\), таких что \(j < i < k\) и \(a_j > a_i < a_k\). Участки \(j\) и \(k\) не обязаны быть соседними с \(i\).

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

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \leq n \leq 500\,000\)) — количество участков.

Вторая строка содержит целые числа \(m_1, m_2, \ldots, m_n\) (\(1 \leq m_i \leq 10^9\)) —максимально возможное количество этажей для небоскрёба на каждом участке.

Выходные данные

Выведите \(n\) чисел \(a_i\) — количества этажей в плане для каждого небоскрёба, такие, что выполняются все ограничения, а суммарное количество этажей во всех небоскрёбах максимально возможное.

Если возможно несколько ответов, выведите любой.

Примечание

В первом примере можно построить все небоскрёбы с максимально возможной высотой.

Во втором примере придать максимальную высоту всем небоскрёбам нельзя, так как это нарушает ограничение дизайн-кода. Ответ \([10, 6, 6]\) является оптимальным. Обратите внимание, что ответ \([6, 6, 8]\) также удовлетворяет всем ограничениям, но оптимальным не является.

E. Конкатенация с пересечением

Строки Структуры данных хэши *2700

У Васи было три строки \(a\), \(b\) и \(s\), состоящие из строчных символов латинского алфавита. Длины строк \(a\) и \(b\) равны \(n\), длина строки \(s\) равна \(m\).

Вася решил выбрать подстроку из строки \(a\), затем выбрать подстроку из строки \(b\) и сконцентрировать их. Формально, он выбирает подотрезок \([l_1, r_1]\) (\(1 \leq l_1 \leq r_1 \leq n\)) и подотрезок \([l_2, r_2]\) (\(1 \leq l_2 \leq r_2 \leq n\)), а после конкатенации получает строку \(a[l_1, r_1] + b[l_2, r_2] = a_{l_1} a_{l_1 + 1} \ldots a_{r_1} b_{l_2} b_{l_2 + 1} \ldots b_{r_2}\).

Теперь Васю заинтересовал вопрос, сколькими способами он может выбрать пару отрезков так, что выполнены следующие условия:

  • отрезки \([l_1, r_1]\) и \([l_2, r_2]\) пересекаются, то есть существует хотя бы одно целое число \(x\), такое что \(l_1 \leq x \leq r_1\) и \(l_2 \leq x \leq r_2\);
  • полученная Васей в итоге строка \(a[l_1, r_1] + b[l_2, r_2]\) равна строке \(s\).
Входные данные

Первая строка содержит целые числа \(n\) и \(m\) (\(1 \leq n \leq 500\,000, 2 \leq m \leq 2 \cdot n\)) — длина строк \(a\) и \(b\) и длина строки \(s\).

Следующие три строки содержат строки \(a\), \(b\) и \(s\) соответственно. Длина строк \(a\) и \(b\) составляет \(n\), а длина строки \(s\) — \(m\).

Все строки состоят из строчных английских букв.

Выходные данные

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

Примечание

Перечислим все пары отрезков, которые мог выбрать Вася в первом примере:

  1. \([2, 2]\) и \([2, 5]\);
  2. \([1, 2]\) и \([2, 4]\);
  3. \([5, 5]\) и \([2, 5]\);
  4. \([5, 6]\) и \([3, 5]\);

F. Сила батальона

разделяй и властвуй Структуры данных Теория вероятностей *2800

В Армии Байтляндии \(n\) офицеров. У каждого офицера есть некоторая сила. Сила \(i\)-го офицера равна \(p_{i}\). Так как война приближается, Генерал хотел бы узнать силу армии.

Сила армии определяется очень странно в Байтляндии. Генерал выбирает случайное подмножество офицеров с этих \(n\) офицеров, и называет его батальоном. (Все \(2^n\) подмножеств \(n\) офицеров могут быть выбраны с равной вероятностью, включая пустое подмножество и множество всех офицеров).

Сила батальона определяется следующим образом:

Пусть силы выбранных офицеров равны \(a_{1},a_{2},\ldots,a_{k}\), где \(a_1 \le a_2 \le \dots \le a_k\). Сила этого батальона равняется \(a_1a_2 + a_2a_3 + \dots + a_{k-1}a_k\). (Если размер батальона \(\leq 1\), сила этого батальона равна \(0\)).

Сила армии равна матожиданию силы батальона.

Так как война очень длинная, силы офицеров могут измениться. А именно, будет \(q\) изменений. Каждое изменение будет иметь вид \(i\) \(x\), показывающий, что \(p_{i}\) стало равным \(x\).

Вы должны найти силу армии в самом начале, а также после каждого из \(q\) изменений.

Заметьте, что изменения необратимы.

Вы должны найти силу по модулю \(10^{9}+7\). Более формально, пусть \(M=10^{9}+7\). Можно показать, что ответ можно выразить как несократимую дробь \(p/q\), где \(p\) и \(q\) целые и \(q\not\equiv 0 \bmod M\)). Выведите число, равное \(p\cdot q^{-1} \bmod M\). Другими словами, выведите число \(x\) такое, что \(0 \leq x < M\) и \(x ⋅ q \equiv p \bmod M\)).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 3⋅10^{5}\))  — количество офицеров в Армии Байтляндии.

Вторая строка содержит \(n\) целых чисел \(p_{1},p_{2},\ldots,p_{n}\) (\(1 \leq p_{i} \leq 10^{9}\)).

Третья строка содержит одно целое число \(q\) (\(1 \leq q \leq 3⋅10^{5}\))  — количество изменений.

Каждая из следующих \(q\) строк содержит два целых числа \(i\) и \(x\) (\(1 \leq i \leq n\), \( 1 \leq x \leq 10^{9}\)), обозначающих что \(p_{i}\) стало равным \(x\) .

Выходные данные

В первой строке, выведите начальную силу армии.

В \(i\)-й из следующих \(q\) строк, выведите силу армии после \(i\)-о изменения.

Примечание

В первом примере, изначально есть четыре возможных батальона

  • {} Сила = \(0\)
  • {\(1\)} Сила = \(0\)
  • {\(2\)} Сила = \(0\)
  • {\(1,2\)} Сила = \(2\)
Поэтому матожидание силы армии равно \(\frac{0+0+0+2}{4}\) = \(\frac{1}{2}\)

После изменения \(p_{1}\) на \(2\), сила батальона {\(1,2\)} становится равной \(4\), поэтому сила армии становится равной \(1\).

После изменения \(p_{2}\) на \(1\), сила батальона {\(1,2\)} опять становится \(2\), поэтому сила армии становится равной \(\frac{1}{2}\).

B. Подарок

Бинарный поиск битмаски Конструктив математика сортировки Структуры данных *2100

На восьмое марта Катерине подарили массив чисел. Со временем ей стало скучно просто смотреть на него, и она решила посчитать некоторые его бесполезные характеристики. Со всеми, что она придумывала, ей это удавалось. Придумав очередную — xor попарных сумм чисел в массиве, она поняла, что не может придумать, как посчитать её для большого массива, и попросила вас помочь. А вы сможете? Более формально, вам нужно посчитать

\(\) (a_1 + a_2) \oplus (a_1 + a_3) \oplus \ldots \oplus (a_1 + a_n) \\ \oplus (a_2 + a_3) \oplus \ldots \oplus (a_2 + a_n) \\ \ldots \\ \oplus (a_{n-1} + a_n) \\ \(\)

Запись \(x \oplus y\) обозначает битовый XOR чисел (т.е. \(x\) ^ \(y\) для многих современных языков программирования). Об этой операции вы можете прочитать по ссылке в Wikipedia: https://tiny.cc/34xykz.

Входные данные

Первая строка содержит целое число \(n\) (\(2 \leq n \leq 400\,000\)) — количество чисел в массиве.

Вторая строка содержит целые числа \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^7\)).

Выходные данные

Выведите одно число — xor попарных сумм чисел в данном массиве.

Примечание

В первом примере есть всего одна сумма: \(1 + 2 = 3\).

Во втором примере есть три суммы: \(1 + 2 = 3\), \(1 + 3 = 4\), \(2 + 3 = 5\). В двоичной системе счисления это \(011_2 \oplus 100_2 \oplus 101_2 = 010_2\), то есть 2.

\(\oplus\) означает операцию побитового xor. Чтобы определить \(x \oplus y\) рассмотрим двоичную запись чисел \(x\) и \(y\). Скажем, что \(i\)-й бит результата равен 1, если ровно один из \(i\)-х битов \(x\) и \(y\) равен 1. В противном случае \(i\)-й бит результата равен 0. Например, \(0101_2 \, \oplus \, 0011_2 = 0110_2\).

E. Медианный горный хребет

Структуры данных *3300

Берляндия — огромная страна с разнообразной географией. Одной из самых знаменитых природных достопримечательностей Берляндии является «Медианный горный хребет». Этот горный хребет представляет из себя \(n\) подряд идущих горных вершин, расположенных на одной прямой, пронумерованных в порядке следования от \(1\) до \(n\). Высота \(i\)-й горной вершины равна \(a_i\).

«Медианный горный хребет» знаменит тем, что с ним ежедневно происходит так называемое выравнивание горных вершин. В момент выравнивания одновременно для каждой вершины от \(2\) до \(n - 1\) её высота становится равна медианной высоте среди неё и двух соседних гор. А именно, если до выравнивания высоты были равны \(b_i\), то новые высоты \(a_i\) устроены следующим образом: \(a_1 = b_1\), \(a_n = b_n\), а для всех \(i\) от \(2\) до \(n - 1\) \(a_i = \texttt{median}(b_{i-1}, b_i, b_{i+1})\). Медианой трёх чисел называется второе по счёту число, если отсортировать эти три числа по возрастанию. Например, \(\texttt{median}(5,1,2) = 2\), а \(\texttt{median}(4,2,4) = 4\).

Недавно Берляндские учёные доказали, что какими бы ни были высоты гор, процесс выравнивания рано или поздно стабилизируется, то есть в какой-то момент высоты гор перестанут изменяться после выравнивания. Правительство Берляндии хочет понять через сколько лет это произойдёт, то есть, найти величину \(c\) — сколько произойдет выравниваний, при которых у хотя бы одной горы изменится её высота. Также правительству Берляндии необходимо определить высоты гор после \(c\) выравниваний, то есть узнать, какими высоты гор останутся навсегда. Помогите ученым решить эту важную задачу!

Входные данные

Первая строка содержит число \(n\) (\(1 \le n \le 500\,000\)) — количество гор.

Вторая строка содержит целые числа \(a_1, a_2, a_3, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — текущие высоты гор.

Выходные данные

В первой строке выведите \(c\) — число выравниваний вершин, при которых высота хотя бы одной горы изменится.

Во второй строке выведите \(n\) чисел — итоговые высоты гор после \(c\) выравниваний.

Примечание

В первом примере высоты на позициях \(1\) и \(5\) не меняются. Так как медиана чисел \(1\), \(2\), \(1\) это \(1\), то на позициях 2 и 4 после первого выравнивания оказываются числа 1, и так как медиана чисел \(2\), \(1\), \(2\) это \(2\), то на позиции 3 после первого выравнивания оказывается число 2. Итого после первого выравнивания горных вершин горы имеют высоты \(1\), \(1\), \(2\), \(1\), \(1\). После второго выравнивания высоты становятся \(1\), \(1\), \(1\), \(1\), \(1\) и дальше они меняться не будут, соответственно всего было \(2\) меняющих высоты выравнивания.

В третем примере после выравнивания ни у одной горы её высота не изменится и число выравниваний, при которых высоты изменятся, равно \(0\).

C. Прыгающая лягушка

Бинарный поиск жадные алгоритмы поиск в глубину и подобное реализация Структуры данных *1100

Слева от строки \(s = s_1 s_2 \ldots s_n\), состоящей из \(n\) символов, находится лягушка (точнее, изначально лягушка находится в клетке \(0\)). Каждый символ строки \(s\) — это или 'L', или 'R'. Это значит, что если лягушка находится в \(i\)-й клетке и \(i\)-й символ — это 'L', то она может прыгать только влево. Если лягушка стоит в \(i\)-й клетке и \(i\)-й символ — это 'R', то она может прыгать только вправо. Из клетки \(0\) лягушка может прыгать только вправо.

Заметим, что лягушка может прыгать в одну и ту же клетку дважды и может совершить столько прыжков, сколько ей потребуется.

Лягушка хочет достичь \(n+1\)-й клетки. Лягушка выбирает некоторое целое положительное значение \(d\) перед самым первым прыжком (и потом не может изменить его) и прыгает не более, чем на \(d\) клеток за раз. То есть, если \(i\)-й символ — 'L', то лягушка может прыгнуть в любую клетку из отрезка \([max(0, i - d); i - 1]\), а если \(i\)-й символ — 'R', то лягушка может прыгнуть в любую клетку из отрезка \([i + 1; min(n + 1; i + d)]\).

Лягушка не хочет прыгать слишком далеко, поэтому ваша задача — найти минимальное возможное значение \(d\), при котором лягушка сможет достичь клетки \(n+1\) из клетки \(0\), если будет прыгать не более, чем на \(d\) клеток за раз. Гарантируется, что всегда возможно достичь \(n+1\) из \(0\).

Вам нужно ответить на \(t\) независимых наборов входных данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Следующие \(t\) строк описывают наборы входных данных. \(i\)-й описан строкой \(s\) состоящей из не менее, чем \(1\), и не более, чем \(2 \cdot 10^5\) символов 'L' и 'R'.

Гарантируется, что сумма длин строк по всем наборам входных данных не превосходит \(2 \cdot 10^5\) (\(\sum |s| \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора входных данных выведите ответ — минимальное возможное значение \(d\), при котором лягушка может достичь клетки \(n+1\) из клетки \(0\), если будет совершать прыжки длиной не более, чем \(d\).

Примечание

Картинка, описывающая первый набор тестовых данных из примера и один из возможных ответов:

Во втором наборе тестовых данных из примера лягушка может прыгнуть только напрямую из \(0\) в \(n+1\).

В третьем наборе тестовых данных лягушка может выбрать \(d=3\), прыгнуть в клетку \(3\) из клетки \(0\) и затем прыгнуть в клетку \(4\) из клетки \(3\).

В четвертом наборе тестовых данных из примера лягушка может выбрать \(d=1\) и прыгнуть \(5\) раз вправо.

В пятом наборе тестовых данных из примера лягушка может прыгнуть только напрямую из \(0\) в \(n+1\).

В шестом наборе тестовых данных из примера лягушка может выбрать \(d=1\) и прыгнуть \(2\) раза вправо.

D. Пара тем

Бинарный поиск сортировки Структуры данных *1400

На следующей лекции в университете нужно обсудить две темы. \(i\)-я тема интересна на \(a_i\) единиц для преподавателя и на \(b_i\) единиц для студентов.

Пара тем \(i\) и \(j\) (\(i < j\)) называется хорошей, если \(a_i + a_j > b_i + b_j\) (т.е. эта пара тем более интересна преподавателю).

Ваша задача — найти количество хороших пар тем.

Входные данные

Первая строка теста содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество тем.

Вторая строка теста содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — уровень интереса к \(i\)-й теме у преподавателя.

Третья строка теста содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^9\)), где \(b_i\) — уровень интереса к \(i\)-й теме у студентов.

Выходные данные

Выведите одно целое число — количество хороших пар тем.

E. Бомбы

Структуры данных *2400

Вам дана перестановка \(p_1, p_2, \ldots, p_n\).

Представим, что некоторые позиции этой перестановки содержат бомбы, причем существует хотя бы одна позиция без бомбы.

Для фиксированного расположения бомб, рассмотрим следующий процесс с пустым изначально множеством \(A\).

Для всех \(i\) от \(1\) до \(n\):

  • Добавить \(p_i\) в \(A\).
  • Если \(i\)-я позиция содержит бомбу, удалить максимальный элемент из \(A\).

После конца этого процесса, \(A\) будет непусто. Стоимость расположения бомб равно наибольшему элементу в \(A\).

Вам дана еще одна перестановка, \(q_1, q_2, \ldots, q_n\).

Для всех \(1 \leq i \leq n\), найдите стоимость расположения бомб на позициях \(q_1, q_2, \ldots, q_{i-1}\).

Например, для \(i=1\), вам необходимо найти стоимость расположения без бомб, а для \(i=n\), вам нужно найти стоимость расположения бомб на позициях \(q_1, q_2, \ldots, q_{n-1}\).

Входные данные

В первой строке записано целое число \(n\) (\(2 \leq n \leq 300\,000\)).

Во второй строке записано \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n)\).

В третьей строке записано \(n\) различных целых чисел \(q_1, q_2, \ldots, q_n\) (\(1 \leq q_i \leq n)\).

Выходные данные

Выведите \(n\) целых чисел, разделенных пробелами, \(i\)-е из них должно быть равно стоимости расположения бомб на позициях \(q_1, q_2, \ldots, q_{i-1}\).

Примечание

В первом тесте:

  • Если бомб нет, \(A\) будет равно \(\{1, 2, 3\}\) в конце процесса, и стоимость расположения равна \(3\).
  • Если есть одна бомба на позиции \(1\), \(A\) будет равно \(\{1, 2\}\) в конце процесса, соответственно стоимость расположения равна \(2\);
  • Если есть две бомбы на позициях \(1\) и \(2\), \(A\) будет равно \(\{1\}\) в конце процесса, и стоимость расположения равна \(1\).

Во втором тесте:

Рассмотрим процесс для \(i = 4\). Есть три бомбы на позициях \(q_1 = 5\), \(q_2 = 2\), и \(q_3 = 1\).

В начале, \(A = \{\}\).

  • Операция \(1\): Добавить \(p_1 = 2\) в \(A\), таким образом \(A\) равно \(\{2\}\). Существует бомба на позиции \(1\), так что мы должны удалить максимальный элемент из \(A\). \(A\) равно \(\{\}\).
  • Операция \(2\): Добавить \(p_2 = 3\) в \(A\), таким образом \(A\) равно \(\{3\}\). Существует бомба на позиции \(2\), так что нам нужно удалить максимальный элемент из \(A\). \(A\) равно \(\{\}\).
  • Операция \(3\): Добавить \(p_3 = 6\) в \(A\), таким образом \(A\) равно \(\{6\}\). На позиции \(3\) нет бомбы, соответственно делать ничего не требуется.
  • Операция \(4\): Добавить \(p_4 = 1\) в \(A\), таким образом \(A\) равно \(\{1, 6\}\). На позиции \(4\) нет бомбы, соответственно делать ничего не требуется.
  • Операция \(5\): Добавить \(p_5 = 5\) в \(A\), таким образом \(A\) равно \(\{1, 5, 6\}\). Существует бомба на позиции \(5\), так что нам нужно удалить максимальный элемент из \(A\). \(A\) равно \(\{1, 5\}\).
  • Операция \(6\): Добавить \(p_6 = 4\) в \(A\), таким образом \(A\) равно \(\{1, 4, 5\}\). На позиции \(6\) нет бомбы, соответственно делать ничего не требуется.

В конце \(A = \{1, 4, 5\}\), соответственно стоимость расположения равна \(5\).

F. Отрезки И

битмаски дп Комбинаторика Структуры данных *2500

Даны три целых числа \(n\), \(k\), \(m\) и \(m\) условий \((l_1, r_1, x_1), (l_2, r_2, x_2), \dots, (l_m, r_m, x_m)\).

Посчитайте количество различных массивов \(a\), состоящих из \(n\) целых чисел, таких что:

  • \(0 \le a_i < 2^k\) для всех \(1 \le i \le n\);
  • побитовое И чисел \(a[l_i] \& a[l_i + 1] \& \dots \& a[r_i] = x_i\) для всех \(1 \le i \le m\).

Два массива \(a\) и \(b\) считаются различными, если существует такая позиция \(i\), что \(a_i \neq b_i\).

Это число может быть довольно велико, поэтому выведите его по модулю \(998244353\).

Входные данные

В первой строке записаны три целых числа \(n\), \(k\) и \(m\) (\(1 \le n \le 5 \cdot 10^5\), \(1 \le k \le 30\), \(0 \le m \le 5 \cdot 10^5\)) — длина массива \(a\), значение такое, что все числа в массиве \(a\) должны быть меньше, чем \(2^k\), и количество условий соответственно.

В каждой из следующих \(m\) строк записано одно условие \(l_i\), \(r_i\) и \(x_i\) (\(1 \le l_i \le r_i \le n\), \(0 \le x_i < 2^k\)) — границы отрезка условия и необходимое значение побитового И на нем.

Выходные данные

Выведите одно целое число — количество различных массивов \(a\), для которых выполняются все приведенные выше условия, по модулю \(998244353\).

Примечание

Можете вспомнить, что такое побитовое И по ссылке.

В первом примере ответом являются следующие массивы: \([3, 3, 7, 6]\), \([3, 7, 7, 6]\) и \([7, 3, 7, 6]\).

C. Drazil любит кучи

жадные алгоритмы Конструктив реализация Структуры данных *2400

Drazil очень любит кучи, поэтому он придумал задачу про кучу:

Есть куча на максимум глубины \(h\), реализованная на массиве. Эта куча устроена следующим образом: куча содержит ровно \(2^h - 1\) различных положительных ненулевых целых чисел. Все целые числа различны. Эти числа содержатся в массиве \(a\), в котором элементы пронумерованы от \(1\) до \(2^h-1\). Для всех \(1 < i < 2^h\), \(a[i] < a[\left \lfloor{\frac{i}{2}}\right \rfloor]\).

Теперь он хочет уменьшить глубину кучи так, чтобы глубина стала \(g\), и куча содержала ровно \(2^g-1\) чисел. Чтобы уменьшить глубину, нужно применить следующую операцию \(2^h-2^g\) раз:

Выбрать индекс \(i\), который содержит элемент, и запустить функцию \(f\) от индекса \(i\):

Обратите внимание, что мы считаем, что если \(a[i]=0\), то индекс \(i\) не содержит элемент.

После всех операций, оставшиеся \(2^g-1\) элементов должны находиться в индексах от \(1\) до \(2^g-1\). Теперь Drazil хочет узнать, какая может быть минимальная сумма оставшихся \(2^g-1\) элементов. Пожалуйста, найдите эту сумму и последовательность вызовов функции, на которой эта сумма достигается.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \leq t \leq 70\,000\)): количество наборов входных данных.

Каждый набор входных данных содержит две строки. В первой строке записаны два целых числа \(h\) и \(g\) (\(1 \leq g < h \leq 20\)). Во второй строке записаны \(n = 2^h-1\) различных положительных целых чисел \(a[1], a[2], \ldots, a[n]\) (\(1 \leq a[i] < 2^{20}\)). Для всех \(i\) от \(2\) до \(2^h - 1\), \(a[i] < a[\left \lfloor{\frac{i}{2}}\right \rfloor]\).

Сумма по всем \(n\) меньше чем \(2^{20}\).

Выходные данные

Для каждого набора входных данных, выведите две строки.

В первой строке вы должны вывести минимальную сумму элементов после уменьшения глубины кучи до \(g\). Вторая строка должна содержать \(2^h - 2^g\) целых чисел \(v_1, v_2, \ldots, v_{2^h-2^g}\). В \(i\)-й операции должна быть вызвана \(f(v_i)\).

D. Dreamoon любит строки

Конструктив Структуры данных *3100

Dreamoon любит строки. Сегодня он придумал игру про строки:

Строка \(s_1, s_2, \ldots, s_n\) красивая если и только если для всех \(1 \le i < n, s_i \ne s_{i+1}\).

Исходно, у Dreamoon есть строка \(a\). За один ход Dreamoon может выбрать красивую подстроку \(a\) и удалить ее. Затем он должен сконкатенировать оставшиеся символы (в правильном порядке).

Dreamoon хочет использовать минимальное число ходов, чтобы сделать \(a\) пустой. Пожалуйста, помогите Dreamoon, и выведите любую последовательность, состоящую из минимального числа ходов, чтобы сделать \(a\) пустой.

Входные данные

В первой строке записано целое число \(t\) (\(1 \leq t \leq 200\,000\)), равное количество наборов входных данных.

Каждый набор входных данных содержит одну строку \(a\) из строчных латинских символов.

Гарантируется, что суммарный размер строк не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных, в первой строке вы должны вывести \(m\): минимальное количество ходов, чтобы сделать \(a\) пустой. Каждая из следующих \(m\) строк должна содержать два целых числа \(l_i, r_i\) (\(1 \leq l_i \leq r_i \leq |a|\)), описывающих, что на \(i\)-м шагу нужно удалить символы с индексами от \(l_i\) до \(r_i\) из исходной строки. (Индексы пронумерованы начиная с \(1\)).

Обратите внимание, что после удаления подстроки, индексы оставшихся символов могут измениться, и \(r_i\) не должен превышать текущий размер \(a\).

Если есть несколько возможных решений, вы можете вывести любое.

G. Без монотонных троек

Структуры данных *3100

Для данной последовательности целых чисел \(a\) длины \(n\) тройка \((i,j,k)\) называется монотонной, если

  • \(1 \le i<j<k\le n\);
  • \(a_i \le a_j \le a_k\) или \(a_i \ge a_j \ge a_k\) выполняется.

Например, \(a=[5,3,4,5]\), тогда \((2,3,4)\) — это монотонная тройка для последовательности \(a\), а \((1,3,4)\) нет.

Бобу на экзамене по математике дали последовательность целых чисел \(a\) длины \(n\). Сам же экзамен представляет собой вопросы вида \(L, R\), на каждый из которых его просят найти любую подпоследовательность \(b\) размера больше, чем \(2\) (то есть \(|b| \ge 3\)) последовательности \(a_L, a_{L+1},\ldots, a_{R}\).

Напомним, что последовательность \(b\) является подпоследовательностью \(a\), если \(b\) может быть получена удалением нескольких (возможно, ни одного или всех) элементов.

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

Помогите Бобу найти подпоследовательность, удовлетворяющую приведенным условиям.

Входные данные

В первой строке записаны два числа \(n\), \(q\) (\(3 \le n \le 2 \cdot 10^5\), \(1 \le q \le 2 \cdot 10^5\)) — длина последовательности \(a\) и количество запросов.

Во второй строке записаны \(n\) целых чисел \(a_1,a_2,\ldots, a_n\) (\(1 \le a_i \le 10^{9}\)) — последовательность \(a\).

Затем в каждой из следующих \(q\) строк записаны по два целых числа \(L\), \(R\) (\(1 \le L,R \le n\), \(R-L\ge 2\)).

Выходные данные

Для каждого запроса выведите \(0\), если не существует подпоследовательности \(b\), удовлетворяющей всем условиям из легенды. Можно вывести пустую строку после этого, но это не обязательно.

В противном случае выведите одно целое число \(k\) (\(k > 2\)), обозначающее длину последовательности \(b\), затем выведите \(k\) целых чисел \(i_1, i_2, \ldots, i_k\) (\(L \le i_1 < i_2<\ldots<i_k\le R\)), где \(b_j = a_{i_j}\) для \(1 \le j \le k\).

Если существует несколько ответов с наибольшей длиной, то выведите любой из них.

Примечание

В первом примере в самой последовательности уже нет монотонных троек.

Во втором примере можно показать, что не существует подпоследовательности \(b\) длиной больше, чем \(2\), такой, что в \(b\) нет монотонных троек.

C. Евгений и массив

Бинарный поиск реализация Структуры данных *1700

Евгений любит работать с массивами. Сегодня ему нужна ваша помощь, чтобы решить одну сложную задачку.

Массив \(c\) является подмассивом \(b\), если \(c\) может быть получен из \(b\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Назовем непустой массив хорошим, если для любого непустого подмассива этого массива, сумма его элементов не равна нулю. К примеру, массив \([-1, 2, -3]\) является хорошим, так как все массивы \([-1]\), \([-1, 2]\), \([-1, 2, -3]\), \([2]\), \([2, -3]\), \([-3]\) имеют ненулевую сумму элементов. В то же время, массив \([-1, 2, -1, -3]\) не является хорошим, так как его подмассив \([-1, 2, -1]\) имеет сумму элементов равную \(0\).

Помогите Евгению посчитать количество непустых хороших подмассивов данного массива \(a\).

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \times 10^5\))  — длину массива \(a\).

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\))  — элементы массива \(a\).

Выходные данные

Выведите одно целое число  — количество хороших подмассивов \(a\).

Примечание

В первом примере следующие подмассивы являются хорошими: \([1]\), \([1, 2]\), \([2]\), \([2, -3]\), \([-3]\), Однако подмассив \([1, 2, -3]\) не является хорошим, поскольку его подмассив \([1, 2, -3]\) имеет сумму элементов, равную \(0\).

Во втором примере все три подмассива размера 1 хорошие и только они. В то же время, подмассив \([41, -41, 41]\) не является хорошим, поскольку его подмассив \([41, -41]\) имеет сумму элементов, равную \(0\).

F. Странная функция

Бинарный поиск дп жадные алгоритмы Структуры данных *2500

Введем функцию \(f\) следующим образом. Эта функция принимает массив \(a\) длины \(n\) и возвращает массив. Изначально результат — пустой массив. Для каждого \(i\) от \(1\) до \(n\) мы добавляем \(a_i\) в конец результата, если этот элемент больше всех предыдущих (формально, если \(a_i > \max\limits_{1 \le j < i}a_j\)). Примеры применения функции \(f\):

  1. если \(a = [3, 1, 2, 7, 7, 3, 6, 7, 8]\), то \(f(a) = [3, 7, 8]\);
  2. если \(a = [1]\), то \(f(a) = [1]\);
  3. если \(a = [4, 1, 1, 2, 3]\), то \(f(a) = [4]\);
  4. если \(a = [1, 3, 1, 2, 6, 8, 7, 7, 4, 11, 10]\), то \(f(a) = [1, 3, 6, 8, 11]\).

Вам даны два массива: \(a_1, a_2, \dots , a_n\) и \(b_1, b_2, \dots , b_m\). Вы можете удалить некоторые элементы массива \(a\) (возможно, никакие). Чтобы удалить элемент \(a_i\), вы должны заплатить \(p_i\) монет (значение \(p_i\) может быть отрицательным, тогда за удаление элемента вы получаете \(|p_i|\) монет). Посчитайте минимальное кол-во монет (возможно, отрицательное), которое вы должны потратить, чтобы условие \(f(a) = b\) выполнялось.

Входные данные

В первой строке задано одно целое число \(n\) \((1 \le n \le 5 \cdot 10^5)\) — длина массива \(a\).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le n)\) — массив \(a\).

В третьей строке заданы \(n\) целых чисел \(p_1, p_2, \dots, p_n\) \((|p_i| \le 10^9)\) — массив \(p\).

В четвертой строке задано целое число \(m\) \((1 \le m \le n)\) — длина массива \(b\).

В пятой строке заданы \(m\) целых чисел \(b_1, b_2, \dots, b_m\) \((1 \le b_i \le n, b_{i-1} < b_i)\) — массив \(b\).

Выходные данные

Если ответ существует, выведите YES в первой строке, а во второй — минимальное количество монет, которое надо потратить, чтобы условие \(f(a) = b\) выполнилось.

Иначе выведите NO.

E1. Палиндром из трех блоков (простая версия)

Бинарный поиск дп Перебор Структуры данных *1700

Единственное отличие между простой и сложной версиями — ограничения.

Вам дана последовательность \(a\), состоящая из \(n\) положительных чисел.

Определим палиндром из трех блоков как последовательность, которая состоит из не более, чем двух различных элементов (назовем эти элементы \(a\) и \(b\), \(a\) может быть равно \(b\)) и выглядит следующим образом \([\underbrace{a, a, \dots, a}_{x}, \underbrace{b, b, \dots, b}_{y}, \underbrace{a, a, \dots, a}_{x}]\). Здесь \(x, y\) — числа, большие или равные \(0\). Например, последовательности \([]\), \([2]\), \([1, 1]\), \([1, 2, 1]\), \([1, 2, 2, 1]\) и \([1, 1, 2, 1, 1]\)палиндромы из трех блоков, но \([1, 2, 3, 2, 1]\), \([1, 2, 1, 2, 1]\) и \([1, 2]\) — нет.

Ваша задача — выбрать максимальную по длине подпоследовательность \(a\), которая является палиндромом из трех блоков.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Напомним, что последовательность \(t\) является подпоследовательностью последовательности \(s\), если \(t\) может быть получена из \(s\) после удаления нуля или более элементов без изменения порядка оставшихся элементов. Например, если \(s=[1, 2, 1, 3, 1, 2, 1]\), то возможные подпоследовательности: \([1, 1, 1, 1]\), \([3]\) и \([1, 2, 1, 3, 1, 2, 1]\), но не \([3, 2, 3]\) and \([1, 1, 1, 1, 2]\).

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2000\)) — длину \(a\). Вторая строка набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 26\)), где \(a_i\) — это \(i\)-й элемент в \(a\). Заметьте, что максимальное значение \(a_i\) может быть до \(26\).

Гарантируется, что сумма чисел \(n\) по всем наборам тестовых данных не превосходит \(2000\) (\(\sum n \le 2000\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него — максимально возможную длину некоторой подпоследовательности \(a\), которая является палиндромом из трех блоков.

E2. Палиндром из трех блоков (сложная версия)

дп Перебор Структуры данных *1800

Единственное отличие между простой и сложной версиями — ограничения.

Вам дана последовательность \(a\), состоящая из \(n\) положительных чисел.

Определим палиндром из трех блоков как последовательность, которая состоит из не более, чем двух различных элементов (назовем эти элементы \(a\) и \(b\), \(a\) может быть равно \(b\)) и выглядит следующим образом \([\underbrace{a, a, \dots, a}_{x}, \underbrace{b, b, \dots, b}_{y}, \underbrace{a, a, \dots, a}_{x}]\). Здесь \(x, y\) — числа, большие или равные \(0\). Например, последовательности \([]\), \([2]\), \([1, 1]\), \([1, 2, 1]\), \([1, 2, 2, 1]\) and \([1, 1, 2, 1, 1]\)палиндромы из трех блоков, но \([1, 2, 3, 2, 1]\), \([1, 2, 1, 2, 1]\) и \([1, 2]\) — нет.

Ваша задача — выбрать максимальную по длине подпоследовательность \(a\), которая является палиндромом из трех блоков.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Напомним, что последовательность \(t\) является подпоследовательностью последовательности \(s\), если \(t\) может быть получена из \(s\) после удаления нуля или более элементов без изменения порядка оставшихся элементов. Например, если \(s=[1, 2, 1, 3, 1, 2, 1]\), то возможные подпоследовательности: \([1, 1, 1, 1]\), \([3]\) и \([1, 2, 1, 3, 1, 2, 1]\), но не \([3, 2, 3]\) and \([1, 1, 1, 1, 2]\).

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину \(a\). Вторая строка набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 200\)), где \(a_i\) — это \(i\)-й элемент в \(a\). Заметьте, что максимальное значение \(a_i\) может быть до \(200\).

Гарантируется, что сумма чисел \(n\) по всем наборам тестовых данных не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него — максимально возможную длину некоторой подпоследовательности \(a\), которая является палиндромом из трех блоков.

F. Роботы на поле

графы жадные алгоритмы матрицы поиск в глубину и подобное снм Структуры данных *2200

Задано прямоугольное поле размера \(n \times m\). Каждая клетка поля покрашена либо в черный цвет ('0'), либо в белый цвет ('1'). Цвет клетки \((i, j)\) обозначается как \(c_{i, j}\). Вам также задана карта направлений: для каждой клетки указано направление \(s_{i, j}\), которое равно одному из четырех символов 'U', 'R', 'D' и 'L'.

  • Если \(s_{i, j}\) равно 'U', то из клетки \((i, j)\) есть переход в клетку \((i - 1, j)\);
  • если \(s_{i, j}\) равно 'R', то из клетки \((i, j)\) есть переход в клетку \((i, j + 1)\);
  • если \(s_{i, j}\) равно 'D', то из клетки \((i, j)\) есть переход в клетку \((i + 1, j)\);
  • если \(s_{i, j}\) равно 'L', то из клетки \((i, j)\) есть переход в клетку \((i, j - 1)\).

Гарантируется, что самая верхняя строка не содержит символов 'U', самая нижняя строка не содержит символов 'D', самый левый столбец не содержит символов 'L' и самый правый столбец не содержит символов 'R'.

Вы хотите поставить роботов на поле (не более одного робота в клетку). При этом следующие условия должны быть соблюдены.

  • Во-первых, каждый робот всегда обязан перемещаться (то есть он не может пропустить ход). За один ход каждый робот перемещается в соседнюю клетку в соответствии с текущим направлением.
  • Во-вторых, вам необходимо поставить роботов таким образом, что не найдется такого хода, перед которым два различных робота стоят в одной и той же клетке (это также значит, что вы не можете поставить двух роботов в одну и ту же клетку). Таким образом, Если поле равно «RL» (одна строка, два столбца, цвета здесь не важны), то вы можете поставить двух роботов в клетки \((1, 1)\) и \((1, 2)\), но если поле равно «RLL», то вы не можете поставить роботов в клетки \((1, 1)\) и \((1, 3)\), потому что в течение первой секунды оба робота будут стоять в клетке \((1, 2)\).

Роботы делают бесконечное количество ходов.

Ваша задача — поставить максимальное количество роботов таким образом, чтобы удовлетворить все условия, описанные выше, а среди всех таких способов вам необходимо выбрать такой, что количество черных клеток, на которых стоят роботы перед началом всех перемещений является максимально возможным. Заметьте, что вы можете ставить роботов только перед началом всех перемещений.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит два целых числа \(n\) и \(m\) (\(1 < nm \le 10^6\)) — количество строк и количество столбцов соответственно.

Следующие \(n\) строк содержат по \(m\) символов каждая, где \(j\)-й символ \(i\)-й строки равен \(c_{i, j}\) (\(c_{i, j}\) равно либо '0', если клетка \((i, j)\) покрашена в черный цвет, либо '1', если клетка \((i, j)\) покрашена в белый цвет).

Следующие \(n\) строк также содержат по \(m\) символов каждая, где \(j\)-й символ \(i\)-й строки равен \(s_{i, j}\) (\(s_{i, j}\) равно 'U', 'R', 'D' или 'L', и описывает направление клетки \((i, j)\)).

Гарантируется, что сумма размеров полей не превосходит \(10^6\) (\(\sum nm \le 10^6\)).

Выходные данные

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

F. Путешествия

графы Деревья разделяй и властвуй Структуры данных *3500

Где-то в дебрях, далеко-далеко находится святая земля, которая имеет форму дерева  — связного неориентированного графа, состоящего из \(n\) вершин и \(n-1\) ребра. Вершины пронумерованы целыми числами от \(1\) до \(n\).

Всего есть \(m\) путешественников, привлеченных красотой и процветанием этой земли. Каждый из них отправился в путешествие по ней. \(i\)-й путешественник проехал вдоль кратчайшего пути из \(s_i\) в \(t_i\). Во время этого путешествия, он прошел через все ребра, лежащие на кратчайшем пути из \(s_i\) в \(t_i\), который, как известно, единственный в дереве.

Во время своих путешествий, некоторые путешественники познакомились с остальными. Некоторые из путешественников станут друзьями. Более точно, \(i\)-й и \(j\)-й путешественники станут друзьями, тогда и только тогда, когда было хотя бы \(k\) ребер, по которым прошли и \(i\)-й и \(j\)-й путешественники.

Ваша задача состоит в том, чтобы найти количество пар путешественников \((i, j)\), удовлетворяющих следующим условиям:

  • \(1 \leq i < j \leq m\).
  • \(i\)-й и \(j\)-й путешественники станут друзьями.
Входные данные

В первой строке находится три целых числа \(n\), \(m\) и \(k\) (\(2 \le n, m \le 1.5 \cdot 10^5\), \(1\le k\le n\)).

Каждая из следующих \(n-1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u,v \le n\)), обозначающих, что существует ребро между \(u\) и \(v\).

\(i\)-я из следующих \(m\) строк содержит два целых числа \(s_i\) и \(t_i\) (\(1\le s_i,t_i\le n\), \(s_i \neq t_i\)), обозначающие начальную и конечную вершины \(i\)-го путешественника.

Гарантируется, что данные ребра образуют дерево.

Выходные данные

Выведите одно целое число  — количество пар путешественников, удовлетворяющих описанным условиям.

Примечание

В первом тесте существует \(4\) пары, удовлетворяющие описанным условиям: \((1,2)\), \((1,3)\), \((1,4)\), \((3,4)\).

  • \(1\)-й путешественник и \(2\)-й путешественник оба пройдут по ребру \(6-8\).
  • \(1\)-й путешественник и \(3\)-й путешественник оба пройдут по ребру \(2-6\).
  • \(1\)-й путешественник и \(4\)-й путешественник оба пройдут по ребрам \(1-2\) и \(2-6\).
  • \(3\)-й путешественник и \(4\)-й путешественник оба пройдут по ребру \(2-6\).

A. Настя и странный генератор

жадные алгоритмы Перебор реализация Структуры данных *1500

Расстроившись после такого отношения Насти, Денис был очень грустным. Ничего не могло развеселить отвергнутого парня. Чтобы хоть как-то развеселиться он решил побродить по подворотням. И, как ни странно, ему улыбнулась удача! Зайдя в первый двор, он встретил странного человека, который чем-то торговал.

Оглядевшись вокруг, Денис подошел к незнакомцу и купил загадочный товар. Им оказался... Генератор случайных перестановок! Именно это мальчик так давно искал!

Придя домой он стал изучать, как работает его генератор и узнал алгоритм. Процесс генерации перестановки состоит из \(n\) шагов. На \(i\)-м шаге выбирается позиция (индекс) для значения \(i\) \((1 \leq i \leq n)\). Позиция для значения \(i\) определяется следующим образом:

  • Для всех \(j\) от \(1\) до \(n\) посчитаем \(r_j\)  — минимальный такой индекс, что \(j \leq r_j \leq n\), a позиция \(r_j\) еще не занята в перестановке. Если таких позиций нет, то будем считать, что значение \(r_j\) не определено.
  • Для всех \(t\) от \(1\) до \(n\) посчитаем \(count_t\)  — количество таких позиций \(1 \leq j \leq n\), что значение \(r_j\) определено и \(r_j = t\).
  • Рассмотрим все еще не занятые позиции перестановки и среди таких рассмотрим позиции, для которых значение в массиве \(count\) максимально.
  • Генератор выбирает одну из таких позиций для значения \(i\). Генератор может выбрать любую позицию.

Рассмотрим работу алгоритма на следующем примере:

Пусть \(n = 5\) и алгоритм уже расставил значения \(1, 2, 3\) в перестановке. Рассмотрим, как генератор будет выбирать позицию для значения \(4\):

  • Значения \(r\) будут \(r = [3, 3, 3, 4, \times]\), где \(\times\) означает неопределенное значение.
  • Тогда значения \(count\) будут \(count = [0, 0, 3, 1, 0]\).
  • Есть только две не занятые позиции в перестановке: \(3\) и \(4\). Значение в массиве \(count\) для позиции \(3\) равно \(3\), для позиции \(4\) равно \(1\).
  • Максимальное значение достигается только для позиции \(3\), поэтому алгоритм однозначно выберет эту позицию для значения \(4\).

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

После этого он выписал первую пришедшую на ум перестановку \(p_1, p_2, \ldots, p_n\) и решил узнать, могла ли она получится в результате работы генератора.

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

Входные данные

В первой строке записано целое число \(t\) \((1 \leq t \leq 10^5)\)  — количество наборов входных данных в тесте. Далее содержатся сами описания наборов.

В первой строке каждого набора находится единственное целое число \(n\) \((1 \leq n \leq 10^5)\)  — длина перестановки.

Во второй строке набора находится \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\))  — выписанная Денисом перестановка.

Гарантируется, что сумма значений \(n\) по всем входным данным не превосходит \(10^5\).

Выходные данные

Выведите «Yes», если эта перестановка могла быть получена в результате работы генератора. В противном случае выведите «No».

Все буквы можно выводить в любом регистре.

Примечание

Промоделируем работу генератора на первом тесте.

На \(1\) шаге \(r = [1, 2, 3, 4, 5], count = [1, 1, 1, 1, 1]\). Максимальное значение достигается в любой свободной позиции, поэтому генератор может выбрать случайную позицию от \(1\) до \(5\). В нашем примере он выбрал \(5\).

На \(2\) шаге \(r = [1, 2, 3, 4, \times], count = [1, 1, 1, 1, 0]\). Максимальное значение достигается в позициях от \(1\) до \(4\), поэтому генератор может выбрать случайную позицию среди них. В нашем примере он выбрал \(1\).

На \(3\) шаге \(r = [2, 2, 3, 4, \times], count = [0, 2, 1, 1, 0]\). Максимальное значение равно \(2\) и достигается только в позиции \(2\), поэтому генератор выберет эту позицию.

На \(4\) шаге \(r = [3, 3, 3, 4, \times], count = [0, 0, 3, 1, 0]\). Максимальное значение равно \(3\) и достигается только в позиции \(3\), поэтому генератор выберет эту позицию.

На \(5\) шаге \(r = [4, 4, 4, 4, \times], count = [0, 0, 0, 4, 0]\). Максимальное значение равно \(4\) и достигается только в позиции \(4\), поэтому генератор выберет эту позицию.

Итого мы получили перестановку \(2, 3, 4, 5, 1\), то есть генератор мог её сгенерировать.

F. Настя и ПСП

Перебор Структуры данных хэши *3300

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

Дана строка \(s\), состоящая из \(k\) видов пар скобок. Каждая скобка имеет вид \(t\) — целое число, такое что \(1 \leq |t| \leq k\). Если скобка имеет вид \(t\), то:

  • Если \(t > 0\), то это открывающая скобка типа \(t\).
  • Если \(t < 0\), то это закрывающая скобка типа \(-t\).

Таким образом, всего существует \(k\) типов пар скобок.

Требуется отвечать на следующие запросы:

  1. Заменить скобку на позиции \(i\) на скобку вида \(t\).
  2. Проверить, является ли подстрока с \(l\)-й по \(r\)-ю позиции, включительно, правильной скобочной последовательностью.

Напомним определение правильной скобочной последовательности:

  • Пустая последовательность является правильной.
  • Если \(A\) и \(B\) - две правильные скобочные последовательности, то их конкатенация «\(A\) \(B\)» тоже является правильной скобочной последовательностью.
  • Если \(A\) - правильная скобочная последовательность, \(c\) \((1 \leq c \leq k)\)  — некоторый тип скобок, то последовательность «\(c\) \(A\) \(-c\)» тоже является правильной.
Входные данные

В первой строке дано \(n\) \((1 \leq n \leq 10^5)\)  — длина строки и число \(k\) \((1 \leq k \leq n)\)  — количество типов скобок.

Во второй строке дана строка \(s\) длиной \(n\) символов  — \(n\) целых чисел \(s_1, s_2, \ldots, s_n\) \((1 \leq |s_i| \leq k)\).

В третьей строке дано число \(q\) \((1 \leq q \leq 10^5)\)  — количество запросов.

Каждая из следующих \(q\) строк описывает запросы:

  • \(1\) \(i\) \(t\) - запрос \(1\)-го типа \((1 \leq i \leq n, 1 \leq |t| \leq k)\).
  • \(2\) \(l\) \(r\) - запрос \(2\)-го типа \((1 \leq l \leq r \leq n)\).
Выходные данные

Для каждого запроса \(2\) типа выведите «Yes», если подстрока из запроса является правильной скобочной последовательностью и «No», иначе.

Вы можете выводить буквы в любом регистре.

Примечание

В четвёртом тесте изначально строка не является правильной скобочной последовательностью, значит ответ на первый вопрос «No». После двух изменений она имеет вид «\(1\) \(-1\)», значит она стала правильной скобочной последовательностью и ответ на четвёртый запрос «Yes».

D. Наборы входных данных

Бинарный поиск жадные алгоритмы Конструктив сортировки Структуры данных *1900

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

Изначально каждый тест в данной задаче — это просто массив. Максимальный размер массива равен \(k\). Для простоты будем считать, что содержимое массива не важно. У вас есть \(n\) тестов; \(i\)-й тест — это массив размера \(m_i\) (\(1 \le m_i \le k\)).

Ваш координатор просит вас распределить все ваши массивы по нескольким наборам входных данных. Каждый набор может включать в себя несколько массивов. Однако, в каждом наборе входных данных должно быть не больше \(c_1\) массивов размера больше или равного \(1\) (\(\ge 1\)), не больше \(c_2\) массивов размера больше или равного \(2\), \(\dots\), не больше \(c_k\) массивов размера больше или равного \(k\). Также \(c_1 \ge c_2 \ge \dots \ge c_k\).

Теперь ваша задача — составить новые наборы входных данных так, чтобы:

  • каждый из изначальных массивов встречается ровно в одном наборе входных данных;
  • для каждого набора тестовых данных выполняются приведенные условия;
  • количество наборов тестовых данных минимально возможно.

Выведите минимальное количество наборов тестовых данных, которое можно достичь, а также размеры массивов в каждом наборе входных данных.

Входные данные

В первой строке записаны два целых числа \(n\) и \(k\) (\(1 \le n, k \le 2 \cdot 10^5\)) — изначальное количество тестов и ограничение на размер каждого массива.

Во второй строке записаны \(n\) целых чисел \(m_1, m_2, \dots, m_n\) (\(1 \le m_i \le k\)) — размеры массивов в изначальных тестах.

В третьей строке записаны \(k\) целых чисел \(c_1, c_2, \dots, c_k\) (\(n \ge c_1 \ge c_2 \ge \dots \ge c_k \ge 1\)); \(c_i\) — это максимальное количество массивов размера больше или равного \(i\), которые могут быть внутри одного набора входных данных.

Выходные данные

В первой строке выведите одно целое число \(ans\) (\(1 \le ans \le n\)) — минимальное количество наборов входных данных, которое можно достичь.

Каждая из следующих \(ans\) строк должна содержать описание набора входных данных в следующем формате:

\(t\) \(a_1\) \(a_2\) \(\dots\) \(a_{t}\) (\(1 \le t\le n\)) — в наборе входных данных содержится \(t\) массивов, \(a_i\) — это размер \(i\)-го массива в этом наборе входных данных.

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

Обратите внимание, что ответ существует всегда, потому что \(c_k \ge 1\) (а следовательно \(c_1 \ge 1\)).

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере не существует способа распределить все тесты по меньше, чем \(3\), наборам входных данных. Данный ответ удовлетворяет всем условиям: в каждом наборе входных данных не больше \(4\) массивов размера больше или равного \(1\) и не больше \(1\) массива размера больше или равного \(2\) и \(3\).

Обратите внимание, что существует несколько правильных ответов на данный тест. Например, наборы входных данных с размерами \([[2], [1, 2], [3]]\) тоже будут правильными.

Однако, наборы тестовых данных с размерами \([[1, 2], [2, 3]]\) будут неправильными, потому что во втором наборе входных данных есть \(2\) массива размера больше или равного \(2\).

Обратите внимание на разницу между третьим и четвертым примером. В третьем примере можно собрать до \(5\) массивов размера больше или равного \(1\) в набор входных данных, поэтому одного набора достаточно. А в четвертом примере можно иметь не больше \(1\) массива. Поэтому каждый массив приходится выделять в отдельный набор входных данных.

D. Одинаковая палиндромная сумма

жадные алгоритмы Перебор Структуры данных *1700

Вам задан массив \(a\), состоящий из \(n\) целых чисел (гарантируется, что \(n\) четное, то есть делится на \(2\)). Все \(a_i\) не превосходят некоторое число \(k\).

Ваша задача — заменить минимальное количество элементов (под заменой понимается следующая операция: выбрать некоторый индекс \(i\) от \(1\) до \(n\) и заменить \(a_i\) на некоторое целое число в отрезке \([1; k]\)) так, чтобы удовлетворялись следующие условия:

  • после всех замен все \(a_i\) — положительные целые числа, не превосходящие \(k\);
  • для всех \(i\) от \(1\) до \(\frac{n}{2}\) верно следующее равенство: \(a_i + a_{n - i + 1} = x\), где \(x\) должен быть одинаковым для всех \(\frac{n}{2}\) пар элементов.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 2 \cdot 10^5, 1 \le k \le 2 \cdot 10^5\)) — длину \(a\) и максимально возможное значение \(a_i\) соответственно. Гарантируется, что \(n\) четное (то есть делится на \(2\)). Вторая строка набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le k\)), где \(a_i\)\(i\)-й элемент в \(a\).

Гарантируется, что сумма чисел \(n\) (так же, как и сумма чисел \(k\)) по всем наборам тестовых данных не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\), \(\sum k \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите в ответ на него — минимальное количество элементов, которое нужно заменить в \(a\), чтобы удовлетворить все условия задачи.

F. Восстановить перестановку по отсортированным отрезкам

жадные алгоритмы Конструктив Перебор реализация Структуры данных *2400

Мы загадали перестановку \(p\), состоящую из \(n\) целых чисел. Перестановкой длины \(n\) называется массив длины \(n\), где каждый элемент от \(1\) до \(n\) встречается ровно один раз. Эта перестановка вам неизвестна.

Для каждой позиции \(r\) от \(2\) до \(n\) мы выбрали некоторый другой индекс \(l\) (\(l < r\)) и дали вам отрезок \(p_l, p_{l + 1}, \dots, p_r\) в отсортированном порядке (то есть мы переставили элементы на этом отрезке так, что элементы на этом отрезке оказались отсортированными). Таким образом, вам задан ровно \(n-1\) отрезок первоначальной перестановки, но элементы внутри каждого отрезка отсортированы. Отрезки даны вам в случайном порядке.

Например, если загаданная перестановка — \(p=[3, 1, 4, 6, 2, 5]\), то возможное заданное множество отрезков:

  • \([2, 5, 6]\)
  • \([4, 6]\)
  • \([1, 3, 4]\)
  • \([1, 3]\)
  • \([1, 2, 4, 6]\)

Ваша задача — найти любую подходящую перестановку (то есть любую перестановку, соответствующую входным данным). Гарантируется, что входные данные соответствуют некоторой перестановке (то есть перестановка существует).

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(2 \le n \le 200\)) — длину перестановки.

Следующая \(n-1\) строка описывает заданные отрезки.

\(i\)-я строка содержит описание \(i\)-го отрезка. Строка начинается с числа \(k_i\) (\(2 \le k_i \le n\)) — длины \(i\)-го отрезка. Затем следуют \(k_i\) целых чисел. Все числа в строке различны, отсортированы по возрастанию, между \(1\) и \(n\), включительно.

Гарантируется, что искомая перестановка \(p\) существует для каждого набора тестовых данных.

Также гарантируется, что сумма чисел \(n\) по всем наборам тестовых данных не превосходит \(200\) (\(\sum n \le 200\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ: \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\), все \(p_i\) должны быть различны) — любую подходящую перестановку (то есть любую перестановку, удовлетворяющую входным данным набора тестовых данных).

E. Железнодорожные пути

Деревья Структуры данных *3100

Все верно. Я студент университета Пердью и безо всякого стыда придумал задачу про поезда.

Есть \(n\) станций и \(m\) поездов. Станции соединяются \(n-1\) однонаправленной железной дорогой так, что они образуют корневое дерево с корнем в станции \(1\). Все железные дороги имеют направлены вдоль путей от корневой станции \(1\) к листьям. Каждая железная дорога ведет от станции \(u\) к станции \(v\) и имеет расстояние \(d\), обозначающее, что требуется \(d\) единиц времени, чтобы доехать от станции \(u\) к станции \(v\). Каждая станция, из которой выходит хотя бы одна железная дорога, имеет переключатель, который определяет станцию, в которую затем поедет любой поезд, приехавший на эту станцию. Например, это может выглядеть следующим образом:

Здесь станции \(1\) и \(3\) имеют переключатели, направляющие к станциям \(2\) и \(4\), соответственно.

Изначально ни на одной станции нет поезда. Поезд \(i\) появится на станции \(1\) в момент времени \(t_i\). В каждый момент времени, начиная с \(1\), будут происходить следующие два шага:

  1. Вы можете переключить переключатель не более одной станции на другую дорогу, выходящую из этой станции. Переключение происходит до шага \(2\).
  2. Любой поезд, который находится на станции \(u\), направляется к станции \(v\), в которую указывает переключатель станции \(u\). Если железная дорога от станции \(u\) к станции \(v\) имела расстояние \(d\), поезд прибудет на станцию \(v\) через \(d\) единиц времени от настоящего момента.

У каждого поезда есть станция прибытия \(s_i\). Когда он прибывает на станцию \(s_i\), он останавливается там навсегда. Если в какой-то момент времени поезд поедет в неверном направлении, то есть он никогда уже не сможет достичь станции \(s_i\) независимо от состояния переключателей, он тут же взорвется.

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

Входные данные

В первой строке находятся два целых числа \(n\) и \(m\) (\(1\le n,m\le 10^5\)) — количество станций и поездов, соответственно.

Следующие \(n-1\) строк описывают железные дороги. \(i\)-я из этих строк содержит три целых числа \(u,v,d\) (\(1\le u,v\le n\), \(1\le d\le 10^9\)), обозначающие железную дорогу от станции \(u\) к станции \(v\), имеющую расстояние \(d\). Гарантируется, что железные дороги формируют корневое дерево с корнем в станции \(1\). Переключатель в станции \(u\) изначально направлен вдоль последней в данном порядке железной дороги, выходящей из станции \(u\).

Следующие \(m\) строк описывают поезда. \(i\)-я из этих строк содержит два целых числа \(s_i,t_i\) (\(1\le s_i\le n\), \(1\le t_1<t_2<\cdots<t_m\le 10^9\)) — станция назначения и время, в которое \(i\)-й поезд прибудет на станцию \(1\), соответственно.

Выходные данные

Выведите два целых числа: наибольшее возможное время первого взрыва (или \(-1\), если можно предотвратить взрывы) и минимальное количество переключений, необходимое, чтобы достичь этого.

Примечание

В первом тесте один из возможных примеров того, как все будет происходить, описан ниже.

  • В момент времени \(1\) поезд \(1\) прибывает на станцию \(1\). Переключатель станции \(1\) направлен к станции \(2\). Поезд \(1\) отправляется к станции \(2\).
  • В момент времени \(2\) поезд \(2\) прибывает на станцию \(1\) и поезд \(1\) прибывает на станцию \(2\), где останавливается навсегда. Мы переключаем переключатель в станции \(1\) к станции \(3\). Поезд \(2\) направляется к станции \(3\).
  • В момент времени \(4\) поезд \(2\) прибывает на станцию \(3\). Мы переключаем переключатель в станции \(3\) к станции \(4\). Поезд \(2\) направляется к станции \(4\).
  • В момент времени \(5\) поезд \(2\) прибывает на станцию \(4\), где останавливается навсегда.
  • В момент времени \(6\) поезд \(3\) прибывает на станцию \(1\). Мы переключаем переключатель станции \(1\) к станции \(2\). Поезд \(3\) направляется к станции \(2\).
  • В момент времени \(7\) поезд \(3\) прибывает на станцию \(2\), где останавливается навсегда. Мы переключаем переключатель станции \(3\) к станции \(5\).
  • В момент времени \(10\) поезд \(4\) прибывает на станцию \(1\). Мы переключаем переключатель станции \(1\) к станции \(3\). Поезд \(4\) направляется к станции \(3\).
  • В момент времени \(12\) поезд \(4\) прибывает на станцию \(3\). Поезд \(4\) направляется к станции \(5\).
  • В момент времени \(15\) поезд \(4\) прибывает на станцию \(5\), где останавливается навсегда.

Во втором тесте мы не переключаем ничего. В момент времени \(4\) поезд \(2\) направляется к станции \(5\), и поезд \(4\) направляется к станции \(3\). Они оба взрываются. Невозможно предотвратить взрывы поездов к моменту времени \(4\).

В третьем тесте давайте будем обозначать переключение переключателя как \((u\to v,t)\), если мы переключаем переключатель станции \(u\) к станции \(v\) в момент времени \(t\). Одним из решений является сделать следующие \(4\) переключения: \((1\to 2,1)\), \((1\to 3,2)\), \((7\to 8,5)\), \((5\to 6,8)\). В момент времени \(11\) поезда \(4\), \(5\) и \(6\) взорвутся. Невозможно предотвратить взрывы поездов к моменту времени \(11\).

F. Dune II: Battle For Arrakis

*особая задача жадные алгоритмы математика Структуры данных *2000

Вы дошли до последней миссии в очень старой и очень популярной стратегии Dune II: Battle For Arrakis. Карта этой миссии может быть представлена в виде прямоугольной матрицы размера \(n \times m\). Изначально, в клетке \((i, j)\) стоит \(a_{i, j}\) отрядов вашей армии.

Вы готовитесь к последней битве, поэтому вы хотите собрать всю вашу армию в ровно одну клетку на карте (то есть \(nm-1\) клетка должна содержать \(0\) отрядов, а оставшаяся клетка должна содержать всю армию).

Чтобы достичь этого, вы можете совершить несколько (возможно, ноль) ходов. За один ход можно выбрать ровно один отряд из некоторой клетки и отправить его в соседнюю по стороне клетку. То есть из клетки \((i, j)\) можно отправить отряд в клетки:

  • \((i - 1, j)\);
  • \((i, j - 1)\);
  • \((i + 1, j)\);
  • \((i, j + 1)\).

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

Также, жизнь не стоит на месте, а ситуация на карте меняется. Всего есть \(q\) изменений, \(i\)-е изменение задается тремя целыми числами \(x, y, z\). Это изменение затрагивает армию в клетке \((x, y)\): после этого изменения количество отрядов в клетке \((x, y)\) становится \(z\) (то есть \(a_{x, y}\) заменяется на \(z\)).

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

Входные данные

В первой строке записаны три целых числа \(n, m\) и \(q\) (\(1 \le n, m \le 1000; 1 \le q \le 5000\)) — размеры матрицы и количество изменений, соответственно.

Каждая из следующих \(n\) строк содержит по \(m\) целых чисел, где \(j\)-е число \(i\)-й строки — это \(a_{i, j}\) (\(1 \le a_{i, j} \le 10^9\)) — количество отрядов в клетке \((i, j)\).

В каждой из следующих \(q\) строк записаны три целых числа, в \(i\)-й строке записаны три целых числа \(x_i, y_i\) и \(z_i\) (\(1 \le x_i \le n; 1 \le y_i \le m; 1 \le z_i \le 10^9\)) — клетка, в которой изменяется количество отрядов, и новое количество отрядов, соответственно.

Выходные данные

Выведите \(q+1\) целое число \(r_0, r_1, r_2, \dots, r_n\), где \(r_0\) — это минимальное количество ходов, необходимые для сбора всей армии в ровно одной клетке, а \(r_i\) для каждого \(i\) от \(1\) до \(q\) — минимальное количество ходов, необходимые для сбора всей армии в ровно одной клетке, после \(i\) изменений.

H. Игра с отрезками

*особая задача игры Структуры данных *2700

Алиса и Боб играют в игру (да, опять).

У них есть две последовательности отрезков на числовой прямой: последовательность из \(n\) начальных отрезков: \([l_1, r_1]\), \([l_2, r_2]\), ..., \([l_n, r_n]\), и последовательность из \(m\) конечных отрезков: \([L_1, R_1]\), \([L_2, R_2]\), ..., \([L_m, R_m]\). В начале игры они выбирают один из начальных отрезков в качестве текущего отрезка.

Алиса и Боб ходят по очереди: Алиса делает первый ход, затем ходит Боб, после него Алиса и т. д. Во время своего хода игрок обязан уменьшить текущий отрезок либо увеличением его левой границы на \(1\), либо уменьшением его правой границы на \(1\). Таким образом, если текущий отрезок \([c_l, c_r]\), то он превратится либо в \([c_l + 1, c_r]\), либо в \([c_l, c_r - 1]\).

Если в начале игры либо после хода Боба текущий отрезок совпадает с одним из конечных отрезков — то Боб выигрывает. Если текущий отрезок стал вырожденным (\(c_l = c_r\)), и Боб еще не выиграл — то выигрывает Алиса. Если текущий отрезок совпадает с одним из конечных отрезков после хода Алисы — игра продолжается.

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

Для каждого начального отрезка вам нужно определить исход игры, если выбрать этот отрезок в качестве текущего отрезка в начале игры. Также, если выигрывает Боб, вам нужно определить, сколько ходов успеет сделать Алиса.

Входные данные

Первая строка содержит два числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество начальных отрезков и конченых отрезков, соответственно.

Затем следуют \(n\) строк, \(i\)-я содержит два числа \(l_i\) и \(r_i\) (\(1 \le l_i < r_i \le 10^6\)) — концы \(i\)-го начального отрезка.

Затем следуют \(m\) строк, \(i\)-я содержит два числа \(L_i\) и \(R_i\) (\(1 \le L_i < R_i \le 10^6\)) — концы \(i\)-го конечного отрезка.

Обратите внимание, что некоторые отрезки могут совпадать.

Выходные данные

Выведите \(n\) чисел, \(i\)-е соответствует результату игры, в которой начали игру с \(i\)-го начального отрезка:

  • если выигрывает Алиса — выведите \(-1\);
  • если выигрывает Боб — выведите, сколько ходов успеет сделать Алиса.

B. Феникс и красота

жадные алгоритмы Конструктив сортировки Структуры данных *1400

Феникс любит красивые массивы. Он считает массив красивым, если все его подмассивы длины \(k\) имеют равную сумму. Подмассив массива — это последовательность подряд идущих элементов массива.

У Феникса есть массив \(a\) длины \(n\). Он хочет вставить несколько (возможно, ноль) целых чисел в свой массив, чтобы он стал красивым. Вставляемые числа должны иметь значения от \(1\) по \(n\) включительно. Числа можно вставлять куда угодно (даже перед первым или после последнего элемента). Феникс не пытается минимизировать количество вставленных чисел.

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано целое число \(t\) (\(1 \le t \le 50\)) — количество наборов входных данных.

В первой строке каждого набора входных данных задано два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 100\)).

Во второй строке каждого набора задано \(n\) целых чисел через пробел (\(1 \le a_i \le n\)) — первоначальный массив Феникса. Массив уже может быть красивым, а может и не быть.

Выходные данные

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

В первой строке выведите длину красивого массива \(m\) (\(n \le m \le 10^4\)). Вам не нужно минимизировать \(m\).

Во второй строке выведите \(m\) целых чисел через пробел (\(1 \le b_i \le n\)) — красивый массив, который Феникс сможет получить вставляя несколько (возможно, ноль) целых чисел в свой массив \(a\). Вы можете выводить числа, которых не было в массиве \(a\) первоначально.

Если существует несколько решений, выведите любое. Гарантируется, что если мы можем сделать массив \(a\) красивым, то мы всегда сможем добиться этого при итоговой длине не более \(10^4\).

Примечание

В первом наборе входных данных, мы можем сделать массив \(a\) красивым, если вставим число \(1\) в позицию \(3\) (между двумя числами \(2\)). Теперь все подмассивы длины \(k=2\) будут иметь одинаковую сумму \(3\). Существует много других возможных решений, например:

  • \(2, 1, 2, 1, 2, 1\)
  • \(1, 2, 1, 2, 1, 2\)

Во втором наборе, массив уже красивый: все подмассивы длины \(k=3\) имеют одинаковую сумму \(5\).

В третьем наборе, можно показать, что невозможно вставить числа так, чтобы сделать массив \(a\) красивым.

В четвертом наборе, предложенный массив \(b\) является красивым — все его подмассивы длины \(k=4\) имеют равную сумму \(10\). Также существуют и другие решения.

F. Феникс и память

графы жадные алгоритмы поиск в глубину и подобное Структуры данных *2600

Феникс хотел сделать фото своих \(n\) друзей, пронумерованных \(1, 2, \dots, n\). Друзья стояли в ряд в некотором порядке. И тут вдруг пришли печенеги с половцами и всех переставили.

Теперь Фениксу нужно восстановить данный порядок, но он почти ничего не помнит! Все, что Феникс запомнил, — что \(i\)-й слева друг имеет номер от \(a_i\) по \(b_i\) включительно. Единственным ли является порядок друзей, подходящий под его воспоминания?

Входные данные

В первой строке задано целое число \(n\) (\(1 \le n \le 2\cdot10^5\)) — количество друзей.

В \(i\)-й из следующих \(n\) строк заданы два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i \le b_i \le n\)) — то, что запомнил Феникс про \(i\)-ю позицию слева.

Гарантируется, что информация, которую запомнил Феникс, не противоречива, и существует хотя бы один подходящий порядок.

Выходные данные

Если существует единственный подходящий порядок друзей, выведите YES, а далее \(n\) целых чисел, где \(i\)-е число означает номер \(i\)-го слева друга.

В противном случае, выведите NO. Далее, выведите любые два подходящих порядка на следующих двух строках. Если существует несколько ответов, выведите любой.

A. Орак и LCM

математика Структуры данных теория чисел *1600

Для мультимножества натуральных чисел \(s=\{s_1,s_2,\dots,s_k\}\), определим наименьшее общее кратное («LCM» по-английски) и наибольший общий делитель («GCD» по-английски) \(s\) следующим образом:

  • \(\gcd(s)\) это максимальное натуральное число \(x\), такое что все числа из \(s\) делятся на \(x\).
  • \(\textrm{lcm}(s)\) это минимальное натуральное число \(x\), которое делится на все числа из \(s\).

Например, \(\gcd(\{8,12\})=4,\gcd(\{12,18,6\})=6\) и \(\textrm{lcm}(\{4,6\})=12\). Обратите внимание, что для любого натурального числа \(x\), \(\gcd(\{x\})=\textrm{lcm}(\{x\})=x\).

У Орака есть последовательность \(a\) длины \(n\). Он придумал мультимножество \(t=\{\textrm{lcm}(\{a_i,a_j\})\ |\ i<j\}\) и попросил вас найти \(\gcd(t)\) для него. Иначе говоря, вам нужно найти НОД НОКов всех пар элементов в данной последовательности.

Входные данные

В первой строке записано одно целое число \(n\ (2\le n\le 100\,000)\).

Во второй строке записаны \(n\) целых чисел, \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 200\,000\)).

Выходные данные

Выведите одно целое число: \(\gcd(\{\textrm{lcm}(\{a_i,a_j\})\ |\ i<j\})\).

Примечание

В первом примере \(t=\{\textrm{lcm}(\{1,1\})\}=\{1\}\), и \(\gcd(t)=1\).

Во втором примере \(t=\{120,40,80,120,240,80\}\). Нетрудно видеть, что \(\gcd(t)=40\).

C. Лыжник

реализация Структуры данных *1400

Лыжник катается по снежному полю. Его передвижения можно описать строкой из символов 'S', 'N', 'W', 'E' (что соответствует перемещениям на \(1\) метр в направлении юга, севера, запада или востока соответственно).

Известно, что если он прокладывает лыжню (то есть катится по ранее не посещенному отрезку пути), то время такого передвижения равно \(5\) секунд, а если он катится по лыжне, то \(1\) секунду.

Найдите время лыжника в пути.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте. Далее следуют \(t\) наборов входных данных.

Каждый набор задан одной непустой строкой из символов 'S', 'N', 'W', 'E'. Длина строки не превосходит \(10^5\) символов.

Сумма длин \(t\) строк по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите искомое время прохождения пути в секундах.

D. Построение массива

Конструктив сортировки Структуры данных *1600

Вам задана массив \(a\) длины \(n\), состоящий из нулей. Вы выполняете \(n\) действий с этим массивом: в течение \(i\)-го действия происходит следующая последовательность операций:

  1. Выбирается максимальный по длине подмассив (последовательный подотрезок), состоящий только из нулей, среди всех таких отрезков выбирается самый левый;
  2. Пусть этот отрезок равен \([l; r]\). Если \(r-l+1\) нечетно (не делится на \(2\)), то присваивается \(a[\frac{l+r}{2}] := i\) (где \(i\) — номер текущего действия), иначе (если \(r-l+1\) четно) присваивается \(a[\frac{l+r-1}{2}] := i\).

Рассмотрим массив \(a\) длины \(5\) (изачально \(a=[0, 0, 0, 0, 0]\)). Тогда он меняется следующим образом:

  1. Сначала мы выбираем отрезок \([1; 5]\) и присваиваем \(a[3] := 1\), таким образом \(a\) становится равен \([0, 0, 1, 0, 0]\);
  2. затем мы выбираем отрезок \([1; 2]\) и присваиваем \(a[1] := 2\), таким образом \(a\) становится равен \([2, 0, 1, 0, 0]\);
  3. затем мы выбираем отрезок \([4; 5]\) и присваиваем \(a[4] := 3\), таким образом \(a\) становится равен \([2, 0, 1, 3, 0]\);
  4. затем мы выбираем отрезок \([2; 2]\) и присваиваем \(a[2] := 4\), таким образом \(a\) становится равен \([2, 4, 1, 3, 0]\);
  5. и наконец мы выбираем отрезок \([5; 5]\) и присваиваем \(a[5] := 5\), таким образом \(a\) становится равен \([2, 4, 1, 3, 5]\).

Ваша задача — найти массив \(a\) длины \(n\) после выполнения всех \(n\) действий. Заметьте, что ответ существует и единственен.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину \(a\).

Гарантируется, что сумма \(n\) по всем наборам тестовых данных не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

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

D. Мультимножество

Бинарный поиск Структуры данных *1900

Обратите внимание на нестандартное ограничение памяти.

Вам задано мультимножество из \(n\) целых чисел. Вы должны обрабатывать запросы двух типов:

  • добавить элемент \(k\) в мультимножество;
  • найти \(k\)-ю порядковую статистику в мультимножестве и удалить ее.

Напомним, что \(k\)-я порядковая статистика в мультимножестве — это элемент, который будет на позиции \(k\), если выписать все его элементы в порядке неубывания. Например, если в мультимножестве содержатся числа \(1\), \(4\), \(2\), \(1\), \(4\), \(5\), \(7\) и \(k = 3\), то необходимо найти \(3\)-й элемент в списке \([1, 1, 2, 4, 4, 5, 7]\), и он равен \(2\). Если в мультимножестве несколько копий удаляемого элемента, удаляется только одна из них.

После всех запросов выведите любое число, принадлежащее мультимножеству, или сообщите, что оно пустое.

Входные данные

В первой строке заданы два числа \(n\) и \(q\) (\(1 \le n, q \le 10^6\)) — количество элементов в мультимножестве и количество запросов, соответственно.

Во второй строке заданы \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_1 \le a_2 \le \dots \le a_n \le n\)) — элементы мультимножества.

В третьей строке заданы \(q\) целых чисел \(k_1\), \(k_2\), ..., \(k_q\), каждое из которых описывает очередной запрос следующим образом:

  • если \(1 \le k_i \le n\), то \(i\)-й запрос — «добавить \(k_i\) в мультимножество»;
  • если \(k_i < 0\), то \(i\)-й запрос — «удалить \(|k_i|\)-ю порядковую статистику». Гарантируется, что в таком случае \(|k_i|\) не превосходит размера множества.
Выходные данные

Если после всех запросов мультимножество оказалось пустым, выведите \(0\).

Иначе выведите любое число, принадлежащее мультимножеству.

Примечание

В первом примере последовательно удаляются все элементы мультимножества.

Во втором примере последовательно удалятся элементы \(5\), \(1\), \(4\), \(2\).

В третьем примере \(6\) — не единственный ответ.

E. Вы уволены?

жадные алгоритмы Конструктив реализация Структуры данных *2400

Левиан работает бухгалтером в большой компании. Он знает, сколько компания заработала в каждый из \(n\) подряд идущих месяцев — в \(i\)-й месяц у компании доход был равен \(a_i\) (положительный доход означает прибыль, отрицательный доход означает убыль, нулевой доход означает отсутствие изменений). Из-за всеобщей самоизоляции, первые \(\lceil \tfrac{n}{2} \rceil\) месяцев доход мог быть совершенно нестабилен, но потом всё стабилизировалось и последние \(\lfloor \tfrac{n}{2} \rfloor\) месяцев доход был одинаковый.

Левиан решил, что на совете директоров сообщит \(n-k+1\) число — суммарный доход компании за каждые \(k\) подряд идущих месяцев. Формально, для всех \(i\) от \(1\) до \(n-k+1\) он скажет число \(a_i + a_{i+1} + \ldots + a_{i + k - 1}\). Например, если \(a=[-1, 0, 1, 2, 2]\) и \(k=3\), то он сообщит числа \(0, 3, 5\).

К большому сожалению, если хоть один суммарный доход, сообщаемый Левианом, не является прибылью (то есть доход \(\le 0\)), то начальство разозлится и уволит не справившегося с работой бухгалтера.

Спасите карьеру Левиана: найдите такое число \(k\), что за любые \(k\) подряд идущих месяцев компания получила прибыль или скажите, что это невозможно.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 5\cdot 10^5\)) — количество месяцев, за которые Левиан должен отчитаться.

Вторая строка содержит \(\lceil{\frac{n}{2}}\rceil\) целых чисел \(a_1, a_2, \ldots, a_{\lceil{\frac{n}{2}}\rceil}\), где \(a_i\) (\(-10^9 \le a_i \le 10^9\)) — доход компании в \(i\)-м месяце.

Третья строка содержит одно целое число \(x\) (\(-10^9 \le x \le 10^9\))— доход в каждый месяц с \(\lceil{\frac{n}{2}}\rceil + 1\) до \(n\).

Выходные данные

В единственной строке выведите искомое число \(k\) или \(-1\), если его не существует. Если существует несколько возможных решений, выведите любое из них.

Примечание

В первом примере подходят \(k=2\) и \(k=3\): в первом случае Левиан сообщит числа \(1, 1\) а во втором — одно число \(3\).

Во втором примере ни одно \(k\) не подходит.

В третьем примере ответом является только \(k=4\): он сообщит числа \(1,2,3\).

D. Очередная очередная задача

дп реализация Структуры данных *2000

Алиса и Боб играют в очередную игру с карточками. На этот раз правила следующие. Перед ними в ряд лежат \(n\) карточек. У \(i\)-й карточки значение \(a_i\).

Сначала Алиса выбирает непустой последовательный отрезок карточек \([l; r]\) (\(l \le r\)). Затем Боб удаляет одну карточку \(j\) из этого отрезка \((l \le j \le r)\). Счет игры равен сумме значений оставшихся на отрезке карточек \((a_l + a_{l + 1} + \dots + a_{j - 1} + a_{j + 1} + \dots + a_{r - 1} + a_r)\). В частности, если Алиса выбрала отрезок с ровно одним элементом, то после того, как Боб удалит единственную карточку, счет будет равен \(0\).

Алиса хочет сделать счет как можно больше. Боб удаляет такую карточку, чтобы счет стал как можно меньше.

Какой отрезок должна выбрать Алиса, чтобы счет был максимально возможным? Выведите максимальный счет.

Входные данные

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

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-30 \le a_i \le 30\)) — значения на карточках.

Выходные данные

Выведите одно целое число — итоговый счет игры.

Примечание

В первом примере Алиса выбирает отрезок \([1;5]\) — весь ряд карточек. Боб удаляет карточку \(3\) со значением \(10\) из этого отрезка. Поэтому итоговый счет равен \(5 + (-2) + (-1) + 4 = 6\).

Во втором примере Алиса выбирает отрезок \([1;4]\), и так как Боб удаляет либо карточку \(1\), либо \(3\), со значением \(5\), то ответ становится \(5 + 2 + 3 = 10\).

В третьем примере Алиса может выбрать любой из отрезков длины \(1\): \([1;1]\), \([2;2]\) или \([3;3]\). Боб удаляет единственную карточку, поэтому счет равен \(0\). Если Алиса выберет любой другой отрезок, то ответ будет меньше \(0\).

F. Шоу взрывов на радиоуправлении

Бинарный поиск геометрия математика Перебор Структуры данных *2900

Знаете, в наше время довольно сложно организовать шоу с большим количеством участников и зрителей в одном месте. Тем не менее, вы не отказываетесь от своей мечты провести шоу со взрывами машин! Вы решили заменить настоящие машины радиоуправляемыми, назвать мероприятия «Шоу взрывов на радиоуправлении» и транслировать все онлайн.

Для подготовки вы нашли арену — бесконечную 2D-сетку. Вы также закупили \(n\) радиоуправляемых машинок и расставили их по арене. К сожалению, эти машинки могут ехать только вперед, без возможности поворотов налево, направо или разворотов. Более того, вы направили машинки туда, куда хотите, чтобы они поехали.

Формально, для каждой машинки \(i\) (\(1 \le i \le n\)) вы зафиксировали ее начальную позицию (\(x_i, y_i\)) и вектор направление (\(dx_i, dy_i\)). Более того, у каждой машинки есть константная скорость \(s_i\) единиц в секунду. То есть после запуска машинка \(i\) двигается из (\(x_i, y_i\)) в направлении (\(dx_i, dy_i\)) с константной скоростью \(s_i\).

Цель вашего шоу — столкнуть две машинки как можно скорее! Вы обратили внимание, что если запускать все машинки в самом начале шоу, то довольно часто столкновений не происходит вообще. Поэтому вы решили запустить \(i\)-ю машинку в некоторый момент \(t_i\). Вы еще не выбрали \(t_i\), это еще надо решить. Обратите внимание, что \(t_i\) не обязательно должно быть целым, и допустимо, чтобы \(t_i\) совпадало с \(t_j\) для любых \(i, j\).

Шоу начинается в момент времени \(0\). Шоу заканчивается, когда какие-нибудь две машинки \(i\) и \(j\) (\(i \ne j\)) сталкиваются (то есть оказываются в одной точке в одно и то же время). Длительность шоу равна времени между началом и концом.

Какое самое быстрое столкновение вы можете организовать, выбрав все \(t_i\)? Если возможно организовать столкновение, тогда выведите минимальную возможную длительность шоу. Иначе сообщите, что это невозможно.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 25000\)) — количество машинок.

В каждой из следующих \(n\) строк записаны по пять целых чисел \(x_i\), \(y_i\), \(dx_i\), \(dy_i\), \(s_i\) (\(-10^3 \le x_i, y_i \le 10^3\); \(1 \le |dx_i| \le 10^3\); \(1 \le |dy_i| \le 10^3\); \(1 \le s_i \le 10^3\)) — начальная позиция \(i\)-й машинки, ее вектор направления и ее скорость, соответственно.

Гарантируется, что все машинки начинают в различных позициях (то есть \((x_i, y_i) \neq (x_j, y_j)\) для \(i \neq j\)).

Выходные данные

Выведите наименьшую возможную длительность шоу, если возможно организовать столкновение, выбрав все \(t_i\). Иначе, выведите «No show :(».

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

Примечание

Картинка для первого примера:

Самое раннее возможное столкновение произойдет с машинками \(2\) и \(4\). Запустим машинку \(2\) в \(0\), машинку \(4\) примерно в \(0.096762\) и машинки \(1\) и \(3\) когда угодно. Тогда машинки \(2\) и \(4\) столкнутся примерно в \(0.585902\). Тогда вот как поле будет выглядеть в момент столкновения:

Вот картинка для второго примера:

F. Джонни и новая игрушка

математика реализация Структуры данных *3300

У Джонни новая игрушка. Как вы можете догадаться, она немного необычная. Игрушка является перестановкой \(P\) чисел от \(1\) до \(n\), записанных в строку друг за другом.

Для каждого \(i\) от \(1\) до \(n - 1\), между \(P_i\) и \(P_{i + 1}\) написан вес \(W_i\), и эти веса также образуют перестановку чисел от \(1\) до \(n - 1\). Дополнительно есть веса \(W_0 = W_n = 0\).

Инструкция гласит, что отрезок \([L, R]\) является хорошим, если \(W_{L - 1} < W_i\) и \(W_R < W_i\) для всех \(i\) из \(\{L, L + 1, \ldots, R - 1\}\). Для такого отрезка она также определяет \(W_M\) как минимум из множества \(\{W_L, W_{L + 1}, \ldots, W_{R - 1}\}\).

Теперь начинается веселье. За один ход, игрок может выбрать один из хороших подотрезков, разрезать на \([L, M]\) и \([M + 1, R]\) и поменять местами эти части. Более точно, до операции выбранный подотрезок игрушки выглядел следующим образом: \(\)W_{L - 1}, P_L, W_L, \ldots, W_{M - 1}, P_M, W_M, P_{M + 1}, W_{M + 1}, \ldots, W_{R - 1}, P_R, W_R\(\) А после, он стал выглядеть так: \(\)W_{L - 1}, P_{M + 1}, W_{M + 1}, \ldots, W_{R - 1}, P_R, W_M, P_L, W_L, \ldots, W_{M - 1}, P_M, W_R\(\)

Такая операция может быть выполнена несколько раз (возможно, ноль), и целью является получить минимальное возможное количество инверсий в \(P\).

Младшая сестра Джонни, Меган, считает, что правила слишком запутанные, поэтому она хочет проверить своего брата, выбирая некоторые пары индексов \(X\) и \(Y\), и меняя местами \(P_X\) и \(P_Y\) (\(X\) может быть равно \(Y\)). После каждого действия сестры, Джонни интересуется, какого минимального количества инверсий можно достичь, начиная с текущего \(P\) и делая корректные действия?

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

Входные данные

Первая строка содержит одно целое число \(n\) \((2 \leq n \leq 2 \cdot 10^5)\), обозначающее длину игрушки.

Вторая строка содержит \(n\) различных целых чисел \(P_1, P_2, \ldots, P_n\) \((1 \leq P_i \leq n)\), обозначающих исходную перестановку \(P\). Третья строка содержит \(n - 1\) различных целых чисел \(W_1, W_2, \ldots, W_{n - 1}\) \((1 \leq W_i \leq n - 1)\), обозначающих веса.

Четвертая строка содержит одно целое число \(q\) \((1 \leq q \leq 5 \cdot 10^4)\) — количество действий Меган. Следующие \(q\) строк содержат по два целых числа \(X\) и \(Y\) \((1 \leq X, Y \leq n)\) — индексы элементов \(P\), меняющихся местами. Запросы не независимы, после каждого из них перестановка меняется.

Выходные данные

Выведите \(q\) строк. Строка номер \(i\) должна содержать одно целое число — минимальное количество инверсий в перестановке, которое может быть получено, если начинать с \(P\) после первых \(i\) запросов и выполнять операции, описанные в инструкции.

Примечание

Рассмотрим первый пример. После первого запроса, \(P\) отсортирована, поэтому мы уже получили перестановку без инверсий.

После второго запроса, \(P\) равна [\(1\), \(3\), \(2\)], в ней есть одна инверсия, и можно доказать, что получить \(0\) инверсий невозможно.

В конце, \(P\) равна [\(2\), \(3\), \(1\)]. Мы можем выбрать всю перестановку в качестве хорошего подотрезка, после чего \(P\) станет равным [\(1\), \(2\), \(3\)], в котором \(0\) инверсий.

A. XXXXX

Перебор Структуры данных теория чисел *1200

Ехаб любит теорию чисел, но по какой-то причине он ненавидит число \(x\). Для данного массива \(a\) найдите длину самого длинного его подмассива, сумма элементов которого не делится на \(x\), или определите, что такого подмассива не существует.

Массив \(a\) является подмассивом массива \(b\), если \(a\) может быть получен из \(b\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Первая строка содержит целое число \(t\) \((1 \le t \le 5)\) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \le n \le 10^5\), \(1 \le x \le 10^4\)) — количество элементов в массиве \(a\), и число, которое Ехаб ненавидит.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1\), \(a_2\), \(\ldots\), \(a_{n}\) (\(0 \le a_i \le 10^4\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите длину самого длинного подмассива, сумма элементов которого не делится на \(x\). Если такого подмассива не существует, выведите \(-1\).

Примечание

В первом наборе входных данных подмассив \([2,3]\) имеет сумму элементов \(5\), которая не делится на \(3\).

Во втором наборе входных данных сумма всего элементов всего массива равна \(6\), и не делится на \(4\).

В третьем наборе входных данных все подмассивы имеют четную сумму, поэтому ответ равен \(-1\).

C. Соответствия поворотом

жадные алгоритмы Конструктив реализация Структуры данных *1400

После мистического исчезнования Ashish, каждый из его любимых учеников Ishika и Hriday, получил одну половину секретного сообщения. Эти сообщения могут быть описаны перестановками размера \(n\). Назовем их \(a\) и \(b\).

Напомним, что перестановка из \(n\) элементов это последовательность чисел \(a_1, a_2, \ldots, a_n\), в которой каждое число от \(1\) до \(n\) встречается ровно один раз.

Сообщение может быть расшифровано из конфигурации перестановок \(a\) и \(b\), в котором количество совпадающих пар элементов максимально. Пара элементов \(a_i\) и \(b_j\) называется совпадающей, если:

  • \(i = j\), таким образом, у них один и тот же индекс.
  • \(a_i = b_j\)

Его ученикам разрешается совершать следующую операцию произвольное число раз:

  • выбрать число \(k\) и циклически сдвинуть одну из перестановок влево или вправо \(k\) раз.

Циклический сдвиг перестановки \(c\) влево это операция, которая присваивает \(c_1:=c_2, c_2:=c_3, \ldots, c_n:=c_1\) одновременно. Аналогично, циклический сдвиг перестановки \(c\) вправо это операция, которая присваивает \(c_1:=c_n, c_2:=c_1, \ldots, c_n:=c_{n-1}\) одновременно.

Помогите Ishika и Hriday найти наибольшее возможное число совпадающих пар в данных перестановках после применения описанных операций несколько (возможно, ноль) раз.

Входные данные

В первой строке записано одно целое число \(n\) \((1 \le n \le 2 \cdot 10^5)\) — размеры массивов.

Во второй строке записаны \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) \((1 \le a_i \le n)\) — элементы первой перестановки.

В третьей строке записаны \(n\) целых чисел \(b_1\), \(b_2\), ..., \(b_n\) \((1 \le b_i \le n)\) — элементы второй перестановки.

Выходные данные

Выведите наибольшее возможное число совпадающих пар в данных перестановках после применения описанных операций несколько (возможно, ноль) раз.

Примечание

В первом примере можно сдвинуть \(b\) направо на \(k = 1\). Получившиеся перестановки будут \(\{1, 2, 3, 4, 5\}\) и \(\{1, 2, 3, 4, 5\}\).

Во втором примере не требуется совершать никаких операций. По всем возможным сдвигам \(a\) и \(b\), число совпадающих пар не будет превышать \(1\).

В третьем примере можно сдвинуть \(b\) влево на \(k = 1\). Получившиеся перестановки будут \(\{1, 3, 2, 4\}\) и \(\{2, 3, 1, 4\}\). Позиции \(2\) и \(4\) будут являться совпадающей парой. По всем возможным циклическим сдвигам \(a\) и \(b\), количество совпадающих пар не будет превышать \(2\).

G. Построй строку

дп Строки Структуры данных *2700

Определим функцию \(f(s)\), которая принимает строку \(s\), состоящую из строчных латинских букв и точек, и возвращает строку, состоящую из строчных латинских букв следующим образом:

  1. пусть \(r\) пустая строка;
  2. будем обрабатывать символы \(s\) слева направо. Для каждого символа \(c\) выполним следующее: если \(c\) является строчной латинской буквой, то добавим \(c\) в конец строки \(r\); в противном случае удалим последний символ из \(r\) (если \(r\) пустая — функция аварийно завершает работу);
  3. вернуть \(r\) как результат функции.

Вам заданы две строки \(s\) и \(t\). Вы должны удалить минимально возможное количество символов из \(s\), чтобы \(f(s) = t\) (и функция не завершалась аварийно). Обратите внимание, что вам не разрешается вставлять новые символы в \(s\) или менять порядок существующих.

Входные данные

Входные данные состоят из двух строк: первая содержит \(s\) — строку, состоящую из строчных латинских букв и точек, вторая содержит \(t\) — строку, состоящую из строчных латинских букв (\(1 \le |t| \le |s| \le 10000\)).

Дополнительное ограничение на входные данные: можно удалить некоторое количество символов из \(s\) так, чтобы \(f(s) = t\).

Выходные данные

Выведите одно целое число — минимально возможное количество символов, которое необходимо удалить из \(s\), чтобы \(f(s)\) не завершалась аварийно и вернула \(t\) в качестве результата выполнения.

F2. Летающая сортировка (сложная версия)

Бинарный поиск дп жадные алгоритмы сортировки Структуры данных *2400

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

Вам дан массив \(a\) из \(n\) целых чисел (в массиве могут быть одинаковые элементы). Вы можете производить над элементами массива следующие операции:

  1. выбрать любой индекс \(i\) (\(1 \le i \le n\)) и переместить элемент \(a[i]\) в начало массива;
  2. выбрать любой индекс \(i\) (\(1 \le i \le n\)) и переместить элемент \(a[i]\) в конец массива.

Например, если \(n = 5\), \(a = [4, 7, 2, 2, 9]\), то можно применить следующую последовательность операций:

  • После применения операции первого типа ко второму элементу массив \(a\) станет равным \([7, 4, 2, 2, 9]\);
  • После применения операции второго типа ко второму элементу массив \(a\) станет равным \([7, 2, 2, 9, 4]\).

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

Найдите минимальное суммарное количество операций первого и второго типа, которые сделают массив \(a\) отсортированным по неубыванию. Иными словами, сколько минимум операций надо применить, чтобы массив удовлетворял неравенствам \(a[1] \le a[2] \le \ldots \le a[n]\)?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных в тесте. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки, в которой записано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер массива \(a\).

Далее следуют \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — массив, который требуется отсортировать заданными операциями. (В массиве могут быть одинаковые элементы).

Сумма \(n\) по всем наборам тестовых данных в одном тесте не превосходит \(2 \cdot 10^5\).

Выходные данные

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

Примечание

В первом тестовом наборе нужно переместить две двойки в начало массива. Следовательно, искомая последовательность операций может иметь вид: \([4, 7, 2, 2, 9] \rightarrow [2, 4, 7, 2, 9] \rightarrow [2, 2, 4, 7, 9]\).

Во втором тестовом наборе нужно переместить единицу в начало массива, а восьмерку — в конец. Искомая последовательность операций имеет вид: \([3, 5, 8, 1, 7] \rightarrow [1, 3, 5, 8, 7] \rightarrow [1, 3, 5, 7, 8]\).

В третьем тестовом наборе массив уже отсортирован.

G. Двигаем доминошки

геометрия графы Деревья Структуры данных *3200

Билл любит играть с доминошками. Он взял доску размера \(n \times m\), разделённую на одинаковые квадратные клетки, и покрыл её доминошками. Каждая доминошка покрывает две клетки, соседние по горизонтали или вертикали, и каждая клетка покрыта ровно одной половиной доминошки (то есть, непокрытых клеток нет, и никакие две доминошки не покрывают одну клетку дважды).

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

После удаления доминошки и нескольких сдвигов (возможно, ни одного), Билл фотографирует получившуюся доску. Однако, Билл использует очень много фильтров, поэтому границы доминошек разглядеть нельзя, и можно увидеть лишь то, какие две клетки на доске свободны. Когда Билл выкладывает фотографию, он возвращает доску в исходное положение и начинает заново.

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

Входные данные

В первой строке записано два положительных целых числа \(n\) и \(m\) (\(nm \leq 2 \cdot 10^5\)) — высота и ширина доски соответственно.

Следующие \(n\) строк описывают покрытие доски доминошками, ряд за рядом сверху вниз. Каждая из этих строк содержит \(m\) символов, описывающие клетки в соответствующем ряду слева направо. Каждая символ равен U, D, L или R, если клетка покрыта верхней, нижней, левой или правой половиной доминошки соответственно.

Гарантируется, что данное покрытие корректно, то есть, у каждой половины доминошки есть вторая половина в нужной позиции. В частности, поскольку покрытие возможно, количество клеток на доске чётно.

Выходные данные

Выведите одно число — количество различных фотографий, которые сможет сделать Билл.

Примечание

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

Во втором примере после удаления самой левой доминошки можно сделать четыре фотографии, поскольку можно независимо двигать/не двигать оставшиеся две доминошки. Две другие фотографии можно сделать, если удалить одну из доминошек справа.

E. ВыживатеЛи

жадные алгоритмы поиск в глубину и подобное реализация сортировки Структуры данных *2400

Ли приобрел некоторой еды на обед, но приглашать друзей Ли на обед смертельно опасно. Ли напуган, он не хочет умирать, хотя бы пока не увидит Online IOI 2020...

Всего есть \(n\) различных видов еды и \(m\) лучших друзей Ли. У Ли есть \(w_i\) тарелок \(i\)-го вида еды, и у каждого друга Ли есть два любимых вида еды: любимые блюда \(i\)-го друга — это \(x_i\) и \(y_i\) (\(x_i \ne y_i\)).

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

Но проблема в следующем: если друг съест хотя бы одну тарелку еды (суммарно), то он станет абсолютно безвреден. Но если другу нечего есть (не осталось ни \(x_i\), ни \(y_i\)), то он съест самого Ли \(\times\_\times\).

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

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(2 \le n \le 10^5\); \(1 \le m \le 2 \cdot 10^5\)) — количество видов еды и количество друзей Ли.

Во второй строке заданы \(n\) целых чисел \(w_1, w_2, \ldots, w_n\) (\(0 \le w_i \le 10^6\)) — количество тарелок с едой каждого вида.

В \(i\)-й строке из следующих \(m\) строк заданы два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\); \(x_i \ne y_i\)) — любимые виды еды \(i\)-го друга.

Выходные данные

Если Ли может пережить обед, выведите ALIVE (регистр букв не важен), иначе выведите DEAD (регистр не важен).

Также, если он может пережить обед, выведите порядок, в котором Ли следует вызывать друзей. Если существует несколько возможных порядков, выведите любой из них.

Примечание

В первом примере, любой из следующих порядков друзей будет корректным: \([1, 3, 2]\), \([3, 1, 2]\), \([2, 3, 1]\), \([3, 2, 1]\).

Во втором примере, Ли следует вызвать второго друга первым (тогда он съест тарелку еды \(1\)), а потом и первого друга (этот друг съесть тарелку еды \(2\)). Если же Ли вызовет сначала первого друга, то он съесть по одной тарелке еды \(1\) и \(2\), а следовательно другому другу ничего не останется.

E. Последний шанс

реализация Строки Структуры данных *2000

Прочитав половину книги «Буря и затишье» на уроках информатики, Иннокентий был полон решимости дочитать книгу на математике. И все было хорошо, пока учительница математики Елена Олеговна не увидела, что Иннокентий вместо решения уравнений пятой степени занят литературой. Поскольку Иннокентий на прошлом уроке предложил алгоритм решения уравнений пятой степени в общем случае, у Елены Олеговны не оставалось другого выбора, как дать ему новое задание.

Учительница попросила записать подряд без пробелов все слова из книги «Буря и затишье» в одну длинную строку s. По ее мнению строка является хорошей, если количество гласных букв в строке не более чем вдвое больше количества согласных. Другими словами, строка, в которой v гласных и c согласных, является хорошей тогда и только тогда, когда v ≤ 2c.

Задача, которую должен решить Иннокентий, оказалась достаточно простой: необходимо найти количество наибольших по длине хороших подстрок строки s.

Входные данные

В единственной строке входных данных задана непустая строка s, состоящая из не более чем 2·105 строчных и заглавных латинских букв. Гласными будем считать буквы «a», «e», «i», «o», «u», а также их заглавные варианты.

Выходные данные

Выведите в одну строку через пробел два числа: максимальную длину хорошей подстроки, а также количество максимальных по длине хороших подстрок. Если не существует ни одной хорошей подстроки, выведите «No solution» без кавычек.

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

Примечание

В первом примере есть только одна наидлиннейшая хорошая подстрока: сама «Abo». Остальные хорошие подстроки имеют меньшую длину: «b», «Ab», «bo».

Во втором примере есть только одна наидлиннейшая хорошая подстрока: «EIS». Остальные хорошие подстроки: «S», «IS».

E. Сдвиги подпоследовательностей

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *2100

У Naman есть две бинарные строки \(s\) и \(t\) длины \(n\) (бинарной строкой называется строка, состоящая из символов «0» и «1»). Он хочет сделать из строки \(s\) строку \(t\) используя следующую операцию как можно меньшее количество раз.

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

Например, если \(s = 1\textbf{1}101\textbf{00}\), он может выбрать подпоследовательность, соответствущую позициям (нумерация с \(1\)) \(\{2, 6, 7 \}\) и сдвинуть символы на этих позициях один раз по часовой стрелке. В результате строка, которая получится, будет \(s = 1\textbf{0}101\textbf{10}\).

Строка \(a\) называется подпоследовательностью строки \(b\), если \(a\) может быть получена из \(b\) с помощью удаления некоторых символов без изменения порядка оставшихся символов.

Для того, чтобы сделать сдвиг последовательности \(c\) размера \(k\) по часовой стрелке один раз, нужно сделать следующие замены символов \(c_1:=c_k, c_2:=c_1, c_3:=c_2, \ldots, c_k:=c_{k-1}\) одновременно.

Определите минимальное число операций, которое необходимо сделать Naman, чтобы получить из строки \(s\) строку \(t\) или определите, что это сделать невозможно.

Входные данные

В первой строке находится единственное целое число \(n\) \((1 \le n \le 10^6)\) — длина строк.

Во второй строке находится бинарная строка \(s\) длины \(n\).

В третьей строке находится бинарная строка \(t\) длины \(n\).

Выходные данные

Если невозможно получить из строки \(s\) строку \(t\) после применения любого числа операций, выведите \(-1\).

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

Примечание

В первом тесте, Naman может выбрать подпоследовательность, соответствующую позициям \(\{2, 6\}\) и сдвинуть символы строки, на этих позициях один раз по часовой стрелке. В результате, он сможет получить из строки \(s\) строку \(t\) за одну операцию.

Во втором тесте, он может сделать операцию на подпоследовательности из всех индексов \(5\) раз подряд. Можно доказать, что это минимальное необходимое количество операций.

В последнем тесте, невозможно получить из строки \(s\) строку \(t\).

F. Яростный гром

разделяй и властвуй реализация Структуры данных *2800

Вы воин, который собирается победить бога Тора.

Тор бросил вам вызов, предложив вам решить следующую задачу:

В ряд находится \(n\) конвееров, пронумерованных целыми числами от \(1\) до \(n\) слева направо. Каждый конвеер показывает один из двух символов «<» или «>». Начальное состояние конвеера \(i\) задается \(i\)-м символом строки \(s\). Всего есть \(n+1\) ямка. Они пронумерованы целыми числами от \(0\) до \(n\). Ямка \(0\) находится слева от конвеера \(1\), для всех \(i \geq 1\) ямка \(i\) находится справа от конвеера \(i\).

Когда мячик попадает на конвеер с номером \(i\), он перемещается по следующим правилам:

Если на конвеере \(i\) символ «<», тогда:

  • Если \(i=1\), то мячик падает в ямку \(0\).
  • Если на конвеере \(i-1\) символ «<», то мячик перемещается на конвеер \(i-1\).
  • Если на конвеере \(i-1\) символ «>», то мячик падает в ямку \(i-1\).

Если на конвеере \(i\) символ «>», тогда:

  • Если \(i=n\), то мячик падает в ямку \(n\).
  • Если на конвеере \(i+1\) символ «>», то мячик перемещается на конвеер \(i+1\).
  • Если на конвеере \(i+1\) символ «<», то мячик падает в ямку \(i\).

Вы должны ответить на следующие \(q\) запросов, каждый из которых задается парой целых чисел \(l, r\) (\(1 \leq l \leq r \leq n\)):

  • Сначала, на всех конвеерах \(l,l+1,...,r\) символ «<» изменяется на «>» и наоборот. Эти изменения сохраняются в следующих запросах.
  • После этого, положите один мячик на каждый конвеер \(l,l+1,...,r\). Затем, каждый мячик упадет в какую-то ямку. Найдите максимальное количество мячиков, которое окажется в какой-то ямке. После ответа на запрос, мячики пропадают и не учитываются в следующих запросах.
Входные данные

В первой строке находится два целых числа \(n\), \(q\) (\(1 \le n \le 5 \times 10^5 , 1 \le q \le 10^5\)).

Во второй строке находится строка \(s\) длины \(n\). Она состоит их символов «<» и «>».

В следующих \(q\) строках содержится описание запросов, \(i\)-я из этих строк содержит два целых числа \(l\), \(r\) \((1 \le l \le r \le n)\), описывающих \(i\)-й запрос.

Выходные данные

Выведите \(q\) строк, в \(i\)-й строке выведите ответ на \(i\)-й запрос.

Примечание
  • В первом запросе, состояния конвееров меняются на «>><<<». После этого, мы кладем по одному мячику на конвееры \(\{2,3,4\}\). Все три мячика упадут в ямку \(2\). Поэтому ответ равен \(3\).
  • Во втором запросе, состояния конвееров меняются на «>>>>>». После этого, мы кладем по одному мячику на конвееры \(\{3,4,5\}\). Все три мячика упадут в ямку \(5\). Поэтому ответ равен \(3\).
  • В третьем запросе, состояния конвееров меняются на «<<<<<». После этого, мы кладем по одному мячику на конвееры \(\{1,2,3,4,5\}\). Все пять мячиков упадут в ямку \(0\). Поэтому ответ равен \(5\).
  • В четвертом запросе, состояния конвееров меняются на «>>><<». После этого, мы кладем по одному мячику на конвееры \(\{1,2,3\}\). Все три мячика упадут в ямку \(3\). Поэтому ответ равен \(3\).
  • В пятом запросе, состояния конвееров меняются на «><<><». После этого, мы кладем по одному мячику на конвееры \(\{2,3,4\}\). Тогда два мячика упало в ямку \(1\) и один мячик упал в ямку \(4\). Поэтому ответ равен \(2\).
  • В шестом запросе, состояния конвееров меняются на «<>><>». После этого, мы кладем по одному мячику на конвееры \(\{1,2,3,4,5\}\). Тогда три мячика упало в ямку \(3\), один мячик упал в ямку \(0\) и еще один мячик упал в ямку \(5\). Поэтому ответ равен \(3\).

F. Покрытие Интернетом

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *2400

Правительство Берляндии наконец-то решило улучшить покрытие сетью Интернет в своей стране. Берляндия имеет уникальную структуру: в самом центре находится столица, а \(n\) городов расположены вокруг нее по кругу. В столице нет проблем с Интернетом (поэтому правительство игнорирует ее), но в \(i\)-м городе необходимо провести соединение в \(a_i\) домов.

Правительство разработало план постройки \(n\) базовых станций между каждой парой соседних городов, которые будут обслуживать только эти города. Другими словами, \(i\)-я базовая станция будет обслуживать только \(i\)-й и \((i + 1)\)-й город (\(n\)-я станция будет обслуживать \(n\)-й и \(1\)-й город).

Все базовые станции имеют ограниченную мощность: к \(i\)-й станции может быть подключено не более \(b_i\) домов.

Сейчас же правительство просит вас проверить: могут ли спроектированные станции удовлетворить потребности всех городов или нет; то есть можно ли каждый дом подключить к базовой станции так, что к каждой станции \(i\) подключено не более \(b_i\) домов.

Входные данные

В первой строке задано единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора задано единственное целое число \(n\) (\(2 \le n \le 10^6\)) — количество городов и станций.

Во второй строке каждого набора заданы \(n\) целых чисел (\(1 \le a_i \le 10^9\)) — количество необходимых соединений для \(i\)-го города.

В третьей строке каждого набора заданы \(n\) целых чисел (\(1 \le b_i \le 10^9\)) — мощности планируемых базовых станций.

Гарантируется, что сумма \(n\) по наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных, выведите YES, если спроектированные станции смогут удовлетворить потребности всех городов, или NO в противном случае (регистр букв не важен).

Примечание

В первом наборе входных данных:

  • первая базовая станция может предоставить \(2\) соединения первому городу и \(1\) соединение второму городу;
  • вторая станция может предоставить \(2\) соединения второму городу и \(1\) соединение третьему городу;
  • третья станция может предоставить \(3\) соединения третьему городу.

Во втором наборе:

  • \(1\)-я станция может предоставить \(2\) соединения \(1\)-му городу;
  • \(2\)-я станция может предоставить \(3\) соединения \(2\)-му городу;
  • \(3\)-я станция может предоставить \(3\) соединения \(3\)-му городу и \(1\) соединение \(1\)-му городу.

В третьем примере, четвертому городу необходимо \(5\) соединений, но третья и четвертая станции могут предоставить только \(4\) соединения суммарно.

G. Пешки

жадные алгоритмы разделяй и властвуй Структуры данных *2600

У вас есть шахматная доска состоящая из \(n\) строк и \(n\) столбцов. Строки пронумерованы снизу вверх от \(1\) до \(n\). Столбцы пронумерованы слева направо от \(1\) до \(n\). Поле находящееся на пересечении \(x\)-го столбца и \(y\)-й строки обозначается как \((x, y)\). Кроме того, \(k\)-й столбец является специальным столбцом.

Изначально доска пуста. Есть \(m\) изменений; \(i\)-е изменение добавляет или удаляет одну пешку. Текущая доска называется хорошей если мы можем переместить все пешки на специальный столбец по следующим правилам:

  • Пешку на поле \((x, y)\) можно переместить на поля \((x, y + 1)\), \((x - 1, y + 1)\) или \((x + 1, y + 1)\);
  • Вы можете сделать сколько угодно таких ходов;
  • Пешки нельзя перемещать за пределы доски;
  • В каждом поле не может находится более одной пешки.

Текущая доска может и не быть хорошей. Чтобы исправить это, вы можете добавить дополнительные строки. Эти строки добавляются сверху, т. е. они будут иметь номера \(n+1, n+2, n+3, \dots\).

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

Входные данные

Первая строка содержит три числа \(n\), \(k\) and \(m\) (\(1 \le n, m \le 2 \cdot 10^5; 1 \le k \le n\)) — размер доски, индекс специального столбца и количество изменений соответственно.

Затем следует \(m\) строк. В \(i\)-й строке содержится два числа \(x\) и \(y\) (\(1 \le x, y \le n\)) — индексы столбца и строки соответственно. Если в поле \((x, y)\) нет пешки — то вы добавляете туда пешку, иначе — удаляете ее.

Выходные данные

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

E1. Чтение книг (простая версия)

жадные алгоритмы сортировки Структуры данных *1600

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

Летние каникулы начались, поэтому Алиса и Боб хотят играть и веселиться, но... Их мама не согласна с этим. Она говорит, что они должны прочитать какое-то количество книг перед всеми развлечениями. Алиса и Боб прочитают каждую книгу вместе, чтобы быстрее закончить это задание.

В семейной библиотеке есть \(n\) книг. \(i\)-я книга характеризуется тремя целыми числами: \(t_i\) — количество времени, которое Алиса и Боб должны потратить, чтобы прочитать ее, \(a_i\) (равное \(1\), если Алисе нравится \(i\)-я книга, и \(0\), если не нравится), и \(b_i\) (равное \(1\), если Бобу нравится \(i\)-я книга, и \(0\), если не нравится).

Поэтому им нужно выбрать какие-то книги из имеющихся \(n\) книг таким образом, что:

  • Алисе нравятся не менее \(k\) книг из выбранного множества и Бобу нравятся не менее \(k\) книг из выбранного множества;
  • общее время, затраченное на прочтение этих книг минимизировано (ведь они дети и хотят начать играть и веселиться как можно скорее).

Множество, которое они выбирают, одинаковое и для Алисы и для Боба (они читают одни и те же книги), и они читают все книги вместе, таким образом, суммарное время чтения равно сумме \(t_i\) по всем книгам, которые находятся в выбранном множестве.

Ваша задача — помочь им и найти любое подходящее множество книг или определить, что такое множество найти невозможно.

Входные данные

Первая строка теста содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)).

Следующие \(n\) строк содержат описания книг, по одному описанию в строке: \(i\)-я строка содержит три целых числа \(t_i\), \(a_i\) и \(b_i\) (\(1 \le t_i \le 10^4\), \(0 \le a_i, b_i \le 1\)), где:

  • \(t_i\) — количество времени, необходимое для прочтения \(i\)-й книги;
  • \(a_i\), равное \(1\), если Алисе нравится \(i\)-я книга, и \(0\) в обратном случае;
  • \(b_i\), равное \(1\), если Бобу нравится \(i\)-я книга, и \(0\) в обратном случае.
Выходные данные

Если подходящего решения не существует, выведите число -1. Иначе выведите целое число \(T\) — минимальное суммарное время, необходимое для прочтения подходящего множества книг.

E2. Чтение книг (сложная версия)

жадные алгоритмы реализация сортировки Структуры данных Тернарный поиск *2500

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

Летние каникулы начались, поэтому Алиса и Боб хотят играть и веселиться, но... Их мама не согласна с этим. Она говорит, что они должны прочитать ровно \(m\) книг перед всеми развлечениями. Алиса и Боб прочитают каждую книгу вместе, чтобы быстрее закончить это задание.

В семейной библиотеке есть \(n\) книг. \(i\)-я книга характеризуется тремя целыми числами: \(t_i\) — количество времени, которое Алиса и Боб должны потратить, чтобы прочитать ее, \(a_i\) (равное \(1\), если Алисе нравится \(i\)-я книга, и \(0\), если не нравится), и \(b_i\) (равное \(1\), если Бобу нравится \(i\)-я книга, и \(0\), если не нравится).

Поэтому им нужно выбрать ровно \(m\) книг из имеющихся \(n\) книг таким образом, что:

  • Алисе нравятся не менее \(k\) книг из выбранного множества и Бобу нравятся не менее \(k\) книг из выбранного множества;
  • общее время, затраченное на прочтение этих \(m\) книг минимизировано (ведь они дети и хотят начать играть и веселиться как можно скорее).

Множество, которое они выбирают, одинаковое и для Алисы и для Боба (они читают одни и те же книги), и они читают все книги вместе, таким образом, суммарное время чтения равно сумме \(t_i\) по всем книгам, которые находятся в выбранном множестве.

Ваша задача — помочь им и найти любое подходящее множество книг или определить, что такое множество найти невозможно.

Входные данные

Первая строка теста содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \le k \le m \le n \le 2 \cdot 10^5\)).

Следующие \(n\) строк содержат описания книг, по одному описанию в строке: \(i\)-я строка содержит три целых числа \(t_i\), \(a_i\) и \(b_i\) (\(1 \le t_i \le 10^4\), \(0 \le a_i, b_i \le 1\)), где:

  • \(t_i\) — количество времени, необходимое для прочтения \(i\)-й книги;
  • \(a_i\), равное \(1\), если Алисе нравится \(i\)-я книга, и \(0\) в обратном случае;
  • \(b_i\), равное \(1\), если Бобу нравится \(i\)-я книга, и \(0\) в обратном случае.
Выходные данные

Если подходящего решения не существует, выведите целое число -1.

Если решение существует, выведите \(T\) первой строкой — минимальное суммарное время, необходимое для прочтения подходящего множества книг. Второй строкой выведите \(m\) различных целых чисел от \(1\) до \(n\) в любом порядке — индексы книг, включенных в выбранное вами множество.

Если существует несколько подходящих ответов, вы можете вывести любой из них.

C. Уничтожение элементов

жадные алгоритмы Конструктив Структуры данных *1400

Вам дан массив \(a\) длины \(n\), который изначально является перестановкой чисел от \(1\) до \(n\). За одну операцию, вы можете выбрать индекс \(i\) (\(1 \leq i < n\)), такой что \(a_i < a_{i + 1}\), и удалить либо \(a_i\) или \(a_{i + 1}\) из массива (после удаления оставшиеся части воссоединяются).

Например, если у вас есть массив \([1, 3, 2]\), вы можете выбрать \(i = 1\) (так как \(a_1 = 1 < a_2 = 3\)), и либо удалить \(a_1\), что даст новый массив \([3, 2]\), или удалить \(a_2\), что даст новый массив \([1, 2]\).

Можно ли сделать длину этого массива равной \(1\) с помощью этих операций?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\))  — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 3 \cdot 10^5\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \leq a_i \leq n\), \(a_i\) попарно различны) — элементы массива.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке слово "YES", если возможно свести массив к одному элементу с помощью вышеупомянутой операции, или "NO", если это невозможно сделать.

Примечание

Для первых двух и четвертого наборов входных данных мы можем действовать следующим образом (выделенные жирным шрифтом элементы  — это пара, выбранная для этой операции):

\([\text{1}, \textbf{2}, \textbf{3}] \rightarrow [\textbf{1}, \textbf{2}] \rightarrow [\text{1}]\)

\([\text{3}, \textbf{1}, \textbf{2}, \text{4}] \rightarrow [\text{3}, \textbf{1}, \textbf{4}] \rightarrow [\textbf{3}, \textbf{4}] \rightarrow [\text{4}]\)

\([\textbf{2}, \textbf{4}, \text{6}, \text{1}, \text{3}, \text{5}] \rightarrow [\textbf{4}, \textbf{6}, \text{1}, \text{3}, \text{5}] \rightarrow [\text{4}, \text{1}, \textbf{3}, \textbf{5}] \rightarrow [\text{4}, \textbf{1}, \textbf{5}] \rightarrow [\textbf{4}, \textbf{5}] \rightarrow [\text{4}]\)

C. Выбор цветов для букета

Бинарный поиск дп жадные алгоритмы Перебор поиск в глубину и подобное сортировки Структуры данных *2000

Володя хочет красиво поздравить свою жену с годовщиной их свадьбы и собирается подарить ей букет из ровно \(n\) цветов.

Придя в цветочный магазин, Володя обнаружил, что букет можно составлять из цветов \(m\) различных видов, причём количество цветов каждого вида не ограничено. Володя знает, что от первого цветка \(i\)-го вида в букете его супруга становится счастливее на \(a_i\), а от каждого следующего цветка такого вида она становится счастливее на \(b_i\). То есть, если в букете \(x_i > 0\) цветов вида \(i\), то за цветы этого вида жена Володи становится счастливее на \(a_i + (x_i - 1) \cdot b_i\) (а в случае, если цветов типа \(i\) в букете не будет, счастье жены Володи из-за цветов этого типа не изменится).

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

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10\,000\)) — количество наборов входных данных. Затем следует описание \(t\) наборов входных данных, каждый из которых задан следующим образом.

В первой строке набора записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 10^9\), \(1 \le m \le 100\,000\)) — требуемое количество цветов в букете и количество доступных видов цветов.

Каждая из следующих \(m\) строк описывает вид цветов и содержит два целых числа \(a_i\) и \(b_i\) (\(0 \le a_i, b_i \le 10^9\)) — увеличение счастья от первого цветка \(i\)-го вида и увеличение счастья от каждого последующего цветка этого вида.

Наборы разделены одной пустой строкой.

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(100\,000\).

Выходные данные

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

Примечание

В первом примере если взять 1 цветок первого типа и 3 цветка второго типа, то итоговое увеличение счастья от букета будет равно \(5 + (1 + 2 \cdot 4) = 14\).

В втором примере если взять 2 цветка первого типа, 2 цветка второго типа и 1 цветок третьего типа, то итоговое увеличение счастья от букета будет равно \((5 + 1 \cdot 2) + (4 + 1 \cdot 2) + 3 = 16\).

D. Новые электрички

Бинарный поиск Перебор сортировки Структуры данных *2300

Каждый день на планете Кирнес курсирует множество поездов. День на этой планете состоит из \(h\) часов. Каждый час состоит из \(m\) минут, причём \(m\) обязательно чётное. Известно, что на данный момент \(n\) товарных поездов ежедневно отправляются с вокзала: \(i\)-й товарный поезд отправляется каждый день в \(h_i\) часов и \(m_i\) минут.

Правительство планеты решило запустить пассажирское сообщение. Было решено пустить ровно по две электрички каждый час. Это означает, что первая за день электричка отправится с вокзала в \(0\) часов и \(t\) минут, причем \(0 \le t < {m \over 2}\), вторая электричка отправится через \(m \over 2\) минут после этого и так далее.

Для безопасной посадки пассажиров электричка должна прибыть на вокзал за \(k\) минут до отправления. В то время, как пассажиры садятся в электричку, никакой товарный поезд не должен отправляться с вокзала, однако товарный поезд может отправиться в момент начала посадки на электричку и в момент её отправления. Обратите внимание, что если электричка отправляется в \(0\) часов \(t\) минут и \(t < k\), то платформа вокзала будет занята последние \(k - t\) минут предыдущего дня.

Схематичный пример корректного способа запустить электрички. Здесь \(h=2\) (следовательно, количество электричек равно \(2h=4\)), количество поездов \(n=6\). Электрички обозначены красным цветом (обратите внимание, что промежутки между ними одинаковы). Поезда обозначены синим цветом. Отрезки времени длины \(k\) до каждой электрички выделены красным. Обратите внимание, что внутри этих отрезков нет поездов.

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

Входные данные

Первая строка содержит четыре целых числа \(n\), \(h\), \(m\), \(k\) (\(1 \le n \le 100\,000\), \(1 \le h \le 10^9\), \(2 \le m \le 10^9\), \(1 \le k \le {m \over 2}\)) — число товарных поездов, количество часов и минут на планете Кирнес, а также время, которое электричка стоит у платформы. Гарантируется, что число минут \(m\) четное.

В следующих \(n\) строках вводится по два целых числа \(h_i\) и \(m_i\) (\(0 \le h_i < h\), \(0 \le m_i < m\)) — время отправления \(i\)-го поезда, часы и минуты соответственно. Гарантируется, что все товарные поезда отправляются в разное время.

Выходные данные

Выведите два числа: минимальное количество отменённых товарных поездов и \(t\) — время запуска первой за день электрички в минутах.

Во второй строке через пробел выведите номера отменяемых товарных поездов.

Примечание

В первом примере первую электричку надо отправить в 0:00. Тогда поезд в 16:00 отправится сразу после электрички, а электричку в 17:30 надо будет подать на платформу сразу после отправления товарного поезда в 17:15.

Во втором примере подать электричку на платформу надо за 16 минут до отправления. Сделать это без отмены какого-то товарного поезда не получится: если отправлять электричку в \(t \in [1, 15]\), то в 16:00 электричка уже должна быть на платформе, а с нее в это время отправляется первый товарный поезд. Если \(t = 0\) или \(t \in [16, 29]\), то второй товарный поезд в 17:15 не сможет уехать с платформы, потому что на ней уже будет стоять следующая электричка.

Если отменить второй поезд, то можно выбрать \(t = 0\), тогда поезда будут отправляться в 0 и 30 минут каждый час, а столкновения с первым товарным поездом не будет. Также можно отменить только первый поезд и выбрать, например, \(t = 13\).

F1. Шахматные баталии (простая версия)

Бинарный поиск Структуры данных *2700

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

Ильдар и Ваня устали постоянно играть в шахматы, поэтому они придумали новую шахматную игру.

Игра происходит на шахматном поле размером \(2n \times 2m\). Это поле имеет \(2n\) строк и \(2m\) столбцов. Клетки этого поля покрашены в черный и белый цвета шахматной раскраской. Более точно, клетка в \(i\)-й строке и \(j\)-м столбце имеет белый цвет, если \(i+j\) чётно, и чёрный цвет в противном случае.

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

Конечно, Ильдар планирует сделать игру интересной и предложить Ване несколько сложных комбинаций недоступных клеток. Для этого он попросил у вас помощи. Чтобы перед игрой понять, как лучше всего действовать, он хочет потренироваться. Для этого, он берёт пустое поле и хочет \(q\) раз сделать какую-то доступную клетку недоступной. После каждого изменения он бы хотел знать, каким будет ответ на задачу для Вани для текущего множества недоступных клеток.

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

Входные данные

В первой строке находится три целых числа \(n\), \(m\), \(q\) (\(1 \leq n, m, q \leq 200\,000\)) — количество пар строк шахматной доски, количество пар столбцов шахматной доски и количество запросов.

Следующие \(q\) строк описывают запросы Ильдара. Каждая из этих строк содержит два целых числа \(i\), \(j\) (\(1 \leq i \leq 2n\), \(1 \leq j \leq 2m\), \(i + j\) четно), задающие клетку \((i, j)\), которая становится недоступной. Гарантируется, что каждая клетка \((i, j)\) встречается среди запросов не более, чем один раз.

Выходные данные

Выведите \(q\) строк. В \(i\)-й из этих строк выведите ответ на задачу для доски, полученной после \(i\) первых запросов Ильдара.

Выведите «YES», если Ваня может так расставить шахматных королей на незанятые белые клетки поля, что никакие два короля не будут бить друг друга, и «NO», иначе.

Примечание

В первом примере, после второго запроса пешки будут стоять на клетках \((1, 1)\) и \((1, 5)\). Тогда Ваня может поставить три короля на клетки \((2, 2)\), \((2, 4)\) и \((2, 6)\).

После третьего запроса пешки будут стоять на клетках \((1, 1)\), \((1, 5)\) и \((2, 4)\). Тогда отстается всего три пустые клетки \((2, 2)\), \((1, 3)\) и \((2, 6)\). Ваня не может поставить трех королей на эти клетки, потому что короли в клетках \((2, 2)\) и \((1, 3)\) бьют друг друга, так как эти клетки соседние по углу.

F2. Шахматные баталии (сложная версия)

разделяй и властвуй Структуры данных *2800

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

Ильдар и Ваня устали постоянно играть в шахматы, поэтому они придумали новую шахматную игру.

Игра происходит на шахматном поле размером \(2n \times 2m\). Это поле имеет \(2n\) строк и \(2m\) столбцов. Клетки этого поля покрашены в черный и белый цвета шахматной раскраской. Более точно, клетка в \(i\)-й строке и \(j\)-м столбце имеет белый цвет, если \(i+j\) чётно, и чёрный цвет в противном случае.

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

Конечно, Ильдар планирует сделать игру интересной и предложить Ване несколько сложных комбинаций недоступных клеток. Для этого он попросил у вас помощи. Чтобы перед игрой понять, как лучше всего действовать, он хочет потренироваться. Для этого, он берёт пустое поле и хочет \(q\) раз либо сделать какую-то доступную клетку недоступной, либо сделать какую-то недоступную клетку доступной. После каждого изменения он бы хотел знать, каким будет ответ на задачу для Вани для текущего множества недоступных клеток.

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

Входные данные

В первой строке находится три целых числа \(n\), \(m\), \(q\) (\(1 \leq n, m, q \leq 200\,000\)) — количество пар строк шахматной доски, количество пар столбцов шахматной доски и количество запросов.

Следующие \(q\) строк описывают запросы Ильдара. Каждая из этих строк содержит два целых числа \(i\), \(j\) (\(1 \leq i \leq 2n\), \(1 \leq j \leq 2m\), \(i + j\) четно). Если клетка \((i, j)\) была недоступна, она становится доступной, в противном случае она становится недоступной.

Выходные данные

Выведите \(q\) строк. В \(i\)-й из этих строк выведите ответ на задачу для доски, полученной после \(i\) первых запросов Ильдара.

Выведите «YES», если Ваня может так расставить шахматных королей на незанятые белые клетки поля, что никакие два короля не будут бить друг друга, и «NO», иначе.

Примечание

В первом примере, после второго запроса пешки будут стоять на клетках \((1, 1)\) и \((1, 5)\). Тогда Ваня может поставить три короля на клетки \((2, 2)\), \((2, 4)\) и \((2, 6)\).

После третьего запроса пешки будут стоять на клетках \((1, 1)\), \((1, 5)\) и \((2, 4)\). Тогда отстается всего три пустые клетки \((2, 2)\), \((1, 3)\) и \((2, 6)\). Ваня не может поставить трех королей на эти клетки, потому что короли в клетках \((2, 2)\) и \((1, 3)\) бьют друг друга, так как эти клетки соседние по углу.

C. Грибные гномы - 2

Бинарный поиск сортировки Структуры данных Теория вероятностей *2200

Гуляя как-то раз по лесу, Наташа встретила маленького грибного гномика. Гномик рассказал ей следующую историю:

Как известно, сила грибных гномов заключена в волшебных грибах, которые растут в их родном лесу. В этом лесу растет n деревьев и m волшебных грибов: i-ое дерево растет в точке на прямой с координатой ai и имеет высоту hi, j-ый гриб растет в точке с координатой bj и имеет волшебную силу zj.

Но однажды заклятые враги грибных гномов — дикие грибожуи — наслали на их родной лес ужасный шторм, в результате которого некоторые деревья начали падать и давить волшебные грибы. Верховный оракул грибных гномов заранее посчитал для каждого дерева вероятность того, что дерево упадет влево, вправо или останется стоять. Если дерево с координатой x и высотой h падает влево, то все грибы, попадающие в полуинтервал [x - h, x), погибают; если дерево падает вправо, погибают грибы в полуинтервале (x, x + h]. Выживают лишь те грибы, на которые не упадет ни одного дерева.

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

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

Входные данные

В первой строке находится два целых числа n и m (1 ≤ n ≤ 105, 1 ≤ m ≤ 104) — количество деревьев и грибов соответственно.

В следующих n строках находится по четыре целых числа — ai, hi, li, ri (|ai| ≤ 109, 1 ≤ hi ≤ 109, 0 ≤ li, ri, li + ri ≤ 100)  — координата i-го дерева, его высота, вероятность (в процентах) его падения влево и вправо соответственно (с оставшейся вероятностью дерево остается стоять).

В следующих m строках находится по два целых числа — bj, zj (|bj| ≤ 109, 1 ≤ zj ≤ 103) — координата и волшебная сила j-ого гриба соответственно.

Произвольное число деревьев и грибов могут расти в одной точке.

Выходные данные

Выведите одно вещественное число — матожидание суммарной волшебной силы выживших грибов. Ответ принимается с относительной или абсолютной точностью 10 - 4.

Примечание

Считается, что гриб с координатой x попадает в полуинтервал [l, r) тогда и только тогда, когда l ≤ x < r. Аналогично, гриб с координатой x попадает в полуинтервал (l, r] тогда и только тогда, когда l < x ≤ r.

В первом тесте гриб выживает с вероятностью 50% в зависимости от того, куда упадет единственное дерево.

Во втором тесте гриб выживает только тогда, когда на него не упадет ни одно из двух деревьев, что происходит с вероятностью 50%  ×  50% = 25%.

Претест №12 — большой тест с 105 деревьями и одним грибом.

A. Три индекса

Перебор Структуры данных *900

Вам задана перестановка \(p_1, p_2, \dots, p_n\). Напомним, что последовательность из \(n\) целых чисел называется перестановкой, если она содержит все целые числа от \(1\) до \(n\) ровно один раз.

Вам необходимо найти три индекса \(i\), \(j\) и \(k\) такие, что:

  • \(1 \le i < j < k \le n\);
  • \(p_i < p_j\) и \(p_j > p_k\).

Или сообщить, что таких трех индексов нет.

Входные данные

Первая строка содержит одно целое число \(T\) (\(1 \le T \le 200\)) — количество наборов входных данных.

Следующие \(2T\) содержат описание наборов входных данных  — две строки на каждый набор. Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(3 \le n \le 1000\)) — длина перестановки \(p\).

Вторая строка содержит \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\); \(p_i \neq p_j\) если \(i \neq j\)) — перестановка \(p\).

Выходные данные

Для каждого набора входных данных:

  • если есть такие индексы \(i\), \(j\) и \(k\), выведите YES (без учета регистра) и сами индексы;
  • если таких трех индексов нет, выведите NO (без учета регистра).

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

E. Слияние башен

Деревья реализация снм Структуры данных *2300

У вас есть \(n\) дисков, радиус \(i\)-го диска равен \(i\). Изначально эти диски распределены по \(m\) башням из дисков: каждая башня содержит хотя бы один диск, и диски в каждой башне отсортированы от большего к меньшему снизу вверх.

Вы должны собрать все диски в одну башню. Чтобы сделать это, вы можете выбрать две различных башни \(i\) и \(j\) (каждая из которых содержит хотя бы один диск), взять несколько (возможно, все) верхних дисков с башни \(i\) и поместить их на вершину башни \(j\) в том же самом порядке — при условии, что верхний диск башни \(j\) больше каждого перемещаемого диска. Эту операцию можно применять любое количество раз.

Например, если у вас есть две башни, содержащие диски \([6, 4, 2, 1]\) и \([8, 7, 5, 3]\) (в порядке снизу вверх), существуют ровно две возможные операции:

  • переместить диск \(1\) с первой башни на вторую, после чего башни станут следующими: \([6, 4, 2]\) и \([8, 7, 5, 3, 1]\);
  • переместить диски \([2, 1]\) с первой башни на вторую, после чего башни станут следующими: \([6, 4]\) и \([8, 7, 5, 3, 2, 1]\).

Пусть сложность некоторого набора башен — это минимальное количество операций, необходимых для того, чтобы собрать все диски в одну башню. Например, сложность набора башен \([[3, 1], [2]]\) равна \(2\): вы можете переместить диск \(1\) на вторую башню, а потом переместить оба диска со второй башни на первую башню.

Вам заданы \(m - 1\) запросов. Каждый запрос обозначается двумя числами \(a_i\) и \(b_i\), обозначающими следующее: «слить башни \(a_i\) и \(b_i\) в одну» (то есть взять все диски из этих башен и составить из них одну башню, в которой диски отсортированы по убыванию размера снизу вверх). Новая башня (являющаяся результатом слияния) получает индекс \(a_i\).

Для каждого \(k \in [0, m - 1]\) посчитайте сложность набора башен после выполнения первых \(k\) запросов.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le m \le n \le 2 \cdot 10^5\)) — количество дисков и башен, соответственно.

Вторая строка содержит \(n\) целых чисел \(t_1\), \(t_2\), ..., \(t_n\) (\(1 \le t_i \le m\)), где \(t_i\) — индекс башни, к которой принадлежит диск \(i\). Каждое значение от \(1\) до \(m\) встречается в этой последовательности хотя бы один раз.

Затем следуют \(m - 1\) строк, обозначающих запросы. Каждый запрос задается двумя целыми числами \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le m\), \(a_i \ne b_i\)), обозначающими, что во время \(i\)-го запроса башни \(a_i\) и \(b_i\) сливаются в одну (\(a_i\) и \(b_i\) всегда выбраны таким образом, что башни с этими номерами существуют до \(i\)-го запроса).

Выходные данные

Выведите \(m\) целых чисел. \(k\)-е число (в \(0\)-индексации) должно быть равно сложности набора башен после первых \(k\) запросов.

Примечание

Башни в примере из условия:

  • до запросов: \([[5, 1], [2], [7, 4, 3], [6]]\);
  • после первого запроса: \([[2], [7, 5, 4, 3, 1], [6]]\);
  • после второго запроса: \([[7, 5, 4, 3, 2, 1], [6]]\);
  • после третьего запроса остается только одна башня: \([7, 6, 5, 4, 3, 2, 1]\).

F. Странное сложение

дп матрицы Структуры данных *2600

Пусть \(a\) и \(b\) будут некоторыми неотрицательными целыми числами. Определим странное сложение \(a\) и \(b\) следующим образом:

  1. запишем числа одно под другим и выровняем их по младшему разряду;
  2. сложим числа поразрядно и запишем полученные суммы одну за другой.

Будем считать, что у обоих чисел бесконечное число лидирующих нулей.

Например, взглянем на странное сложение чисел \(3248\) и \(908\):

Вам задана строка \(c\), состоящая из \(n\) цифр от \(0\) до \(9\). Также заданы \(m\) запросов обновления следующего вида:

  • \(x~d\) — заменить цифру на \(x\)-й позиции \(c\) на цифру \(d\).

Обратите внимание, что \(c\) может иметь лидирующие нули в любой момент времени.

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

Обратите внимание, что количество пар может быть довольно велико, поэтому требуется вывести его по модулю \(998244353\).

Входные данные

В первой строке записано два целых числа \(n\) и \(m\) (\(1 \le n, m \le 5 \cdot 10^5\)) — длина числа \(c\) и количество запросов обновления.

Во второй строке задана строка \(c\), состоящая из ровно \(n\) цифр от \(0\) до \(9\).

В каждой из следующих \(m\) строк записаны по два целых числа \(x\) и \(d\) (\(1 \le x \le n\), \(0 \le d \le 9\)) — описания запросов обновления.

Выходные данные

Выведите \(m\) целых чисел — \(i\)-е значение должно быть равно количеству пар чисел \((a, b)\) таких, что \(a\) и \(b\) оба являются неотрицательными целыми числами и результат странного сложения \(a\) и \(b\) равен \(c\) после применения \(i\) запросов обновления.

Обратите внимание, что количество пар может быть довольно велико, поэтому требуется вывести его по модулю \(998244353\).

Примечание

После первого запроса \(c\) равно \(14\). Пары, которые складываются в \(14\): \((0, 14)\), \((1, 13)\), \((2, 12)\), \((3, 11)\), \((4, 10)\), \((5, 9)\), \((6, 8)\), \((7, 7)\), \((8, 6)\), \((9, 5)\), \((10, 4)\), \((11, 3)\), \((12, 2)\), \((13, 1)\), \((14, 0)\).

После второго запроса \(c\) равно \(11\).

После третьего запроса \(c\) равно \(01\).

A1. Префиксные перевороты (простая версия)

Конструктив Строки Структуры данных *1300

Это простая версия задачи. Различия между версиями заключаются в ограничениях на \(n\) и необходимое количество операций. Вы можете делать взломы только если обе версии задачи сданы.

Есть две бинарные строки \(a\) и \(b\) длины \(n\) (бинарная строка это строка, состоящая из символов \(0\) и \(1\)). За одну операцию вы выбираете префикс строки \(a\), меняете все биты этого префикса на другие (\(0\) меняется на \(1\), \(1\) меняется на \(0\)) и переворачиваете этот префикс. За одну операцию вы выполняете оба этих действия.

Например, если \(a=001011\) и вы выбираете префикс длины \(3\), строка становится равной \(011011\). Затем, если вы вы выберете всю строку как префикс для операции, она станет равной \(001001\).

Ваша задача превратить строку \(a\) в строку \(b\) за не больше, чем \(3n\) операций. Можно доказать, что это всегда возможно.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1\le t\le 1000\))  — количество наборов входных данных. Следующие \(3t\) строк содержат описания наборов входных данных.

В первой строке каждого набора входных данных находится единственное целое число \(n\) (\(1\le n\le 1000\))  — длина бинарных строк.

Следующие две строки содержат две бинарные строки \(a\) и \(b\) длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите целое число \(k\) (\(0\le k\le 3n\)), затем \(k\) целых чисел \(p_1,\ldots,p_k\) (\(1\le p_i\le n\)). Здесь \(k\) равно количеству операций, которое вы использовали и \(p_i\) равно длине префикса в \(i\)-й операции.

Примечание

В первом наборе входных данных процесс превращения выглядит так: \(01\to 11\to 00\to 10\).

Во втором наборе входных данных процесс превращения выглядит так: \(01011\to 00101\to 11101\to 01000\to 10100\to 00100\to 11100\).

В третьем наборе входных данных данные строки уже совпадают. Другим решением будет, например, сделать операцию с префиксом длины \(2\), от чего строка \(a\) не поменяется.

A2. Префиксные перевороты (сложная версия)

Конструктив реализация Строки Структуры данных *1700

Это сложная версия задачи. Различия между версиями заключаются в ограничениях на \(n\) и необходимое количество операций. Вы можете делать взломы только если обе версии задачи сданы.

Есть две бинарные строки \(a\) и \(b\) длины \(n\) (бинарная строка это строка, состоящая из символов \(0\) и \(1\)). За одну операцию вы выбираете префикс строки \(a\), меняете все биты этого префикса на другие (\(0\) меняется на \(1\), \(1\) меняется на \(0\)) и переворачиваете этот префикс. За одну операцию вы выполняете оба этих действия.

Например, если \(a=001011\) и вы выбираете префикс длины \(3\), строка становится равной \(011011\). Затем, если вы вы выберете всю строку как префикс для операции, она станет равной \(001001\).

Ваша задача превратить строку \(a\) в строку \(b\) за не больше, чем \(2n\) операций. Можно доказать, что это всегда возможно.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1\le t\le 1000\))  — количество наборов входных данных. Следующие \(3t\) строк содержат описания наборов входных данных.

В первой строке каждого набора входных данных находится единственное целое число \(n\) (\(1\le n\le 10^5\))  — длина бинарных строк.

Следующие две строки содержат две бинарные строки \(a\) и \(b\) длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите целое число \(k\) (\(0\le k\le 2n\)), затем \(k\) целых чисел \(p_1,\ldots,p_k\) (\(1\le p_i\le n\)). Здесь \(k\) равно количеству операций, которое вы использовали и \(p_i\) равно длине префикса в \(i\)-й операции.

Примечание

В первом наборе входных данных процесс превращения выглядит так: \(01\to 11\to 00\to 10\).

Во втором наборе входных данных процесс превращения выглядит так: \(01011\to 00101\to 11101\to 01000\to 10100\to 00100\to 11100\).

В третьем наборе входных данных данные строки уже совпадают. Другим решением будет, например, сделать операцию с префиксом длины \(2\), от чего строка \(a\) не поменяется.

E. Странная операция

дп Комбинаторика Структуры данных *2800

Коала Коа имеет бинарную строку \(s\) длины \(n\). Коа может выполнить не более \(n-1\) (возможно, ноль) операций следующего вида:

За одну операцию Коа выбирает позиции \(i\) и \(i+1\) для некоторого \(i\) с \(1 \le i < |s|\) и делает \(s_i\) равным \(max(s_i, s_{i+1})\). Затем Коа удаляет позицию \(i+1\) из \(s\) (после удаления оставшиеся части склеиваются).

Обратите внимание, что после каждой операции длина \(s\) уменьшается на \(1\).

Сколько разных бинарных строк может получить Коа, выполнив не более \(n-1\) (возможно, ноль) операций по модулю \(10^9+7\) (\(1000000007\))?

Входные данные

Единственная строка ввода содержит бинарную строку \(s\) (\(1 \le |s| \le 10^6\)). Для всех \(i\) (\(1 \le i \le |s|\)) \(s_i = 0\) или \(s_i = 1\).

Выходные данные

В единственной строке выведите ответ на задачу по модулю \(10^9+7\) (\(1000000007\)).

Примечание

В первом примере Koa может получить следующие бинарные строки: \(0\), \(00\) и \(000\).

Во втором примере Коа может получить следующие бинарные строки: \(1\), \(01\), \(11\), \(011\), \(101\) и \(0101\). Например:

  • для получения \(01\) из \(0101\) Коа может действовать следующим образом: \(0101 \rightarrow 0(10)1 \rightarrow 011 \rightarrow 0(11) \rightarrow 01\).
  • для получения \(11\) от \(0101\) Коа может действовать следующим образом: \(0101 \rightarrow (01)01 \rightarrow 101 \rightarrow 1(01) \rightarrow 11\).

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

F. Удаление листьев

Деревья жадные алгоритмы реализация Структуры данных *2300

Вам дано дерево (связный граф без циклов), состоящее из \(n\) вершин. Дерево не является корневым — это просто неориентированный связный граф без циклов.

За один ход вы можете выбрать ровно \(k\) листьев (лист — это такая вершина, которая соединена только с одной другой вершиной), соединенных с одной и той же вершиной, и удалить их вместе с ребрами, инцидентными им. То есть вы выбираете такие листья \(u_1, u_2, \dots, u_k\), что существуют ребра \((u_1, v)\), \((u_2, v)\), \(\dots\), \((u_k, v)\), и удаляете эти листья вместе с этими ребрами.

Ваша задача — найти максимальное количество ходов, которое вы можете совершить, если вы будете удалять листья оптимально.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\); \(1 \le k < n\)) — количество вершин в дереве и количество листьев, которые вы удаляете за один ход, соответственно. Следующие \(n-1\) строк описывают ребра. \(i\)-е ребро представлено в виде пары целых чисел \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\)), где \(x_i\) и \(y_i\) — это вершины, которые соединяет \(i\)-е ребро. Гарантируется, что заданный набор ребер образует дерево.

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Выведите ответ на каждый набор тестовых данных — максимальное количество ходов, которое вы можете совершить, если вы будете удалять листья оптимально.

Примечание

Картинка, соответствующая первому набору тестовых данных примера:

Здесь вы можете удалить вершины \(2\), \(5\) и \(3\) в течение первого хода и вершины \(1\), \(7\) и \(4\) в течение второго хода.

Картинка, соответствующая второму набору тестовых данных примера:

Здесь вы можете удалить вершины \(7\), \(8\) и \(9\) в течение первого хода, затем вершины \(5\), \(6\) и \(10\) в течение второго хода, и вершины \(1\), \(3\) и \(4\) в течение третьего хода.

Картинка, соответствующая третьему набору тестовых данных примера:

Здесь вы можете удалить вершины \(5\) и \(7\) в течение первого хода, затем вершины \(2\) и \(4\) в течение второго хода, и вершины \(1\) и \(6\) в течение третьего хода.

B. Смесь

*особая задача геометрия математика сортировки Структуры данных *2900

Серж, шеф-повар знаменитого ресторана «Соль, Перец & Чеснок» пытается получить свою первую звезду Мишлен. Его уведомили, что сегодня вечером его ресторан посетит секретный эксперт.

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

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

К счастью, количество смеси, которой нужно добавить к блюду, настолько мало, что количества смеси в каждой бутылке всегда будет достаточно. Однако, числа, описывающие пропорции, могут быть весьма большими.

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

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

Например, допустим, что любимая смесь эксперта является \(1:1:1\) и на полке находятся три бутылки со смесями:

\(\) \begin{array}{cccc} \hline \text{Mixture} & \text{Соль} & \text{Перец } & \text{Чесночный порошок} \\ \hline 1 & 10 & 20 & 30 \\ 2 & 300 & 200 & 100 \\ 3 & 12 & 15 & 27 \\ \hline \end{array} \(\) Количество ингредиента в бутылке, кг

Чтобы получить нужную смесь, достаточно использовать одинаковое количество смесей из бутылок 1 и 2. Если бутылка 2 отсутствует, то больше нет возможности получить нужную смесь.

Напишите программу, которая поможет Сержу решить эту задачу!

Входные данные

Первая строка ввода содержит три неотрицательных целых числа \(S_f\), \(P_f\) и \(G_f\) (\(0 \leq S_f, P_f, G_f\); \(0 < S_f+P_f+G_f \leq 10^6\)), которые описывают количество соли, перца и чесночного порошка в любимой смеси эксперта. Для любого вещественного \(\alpha>0\), \((\alpha{S_f}, \alpha{P_f}, \alpha{G_f})\) тоже является любимой смесью эксперта.

Во второй строке дано целое положительное число \(N\) (количество изменений на полке, \(N \leq 100\,000\)). Изначально полка пуста.

Каждая из следующих \(N\) строк описывает одно изменение на полке:

  • Если добавляется новая бутылка, строка содержит заглавную букву \(A\), за которой следуют три неотрицательных целых числа \(S_i\), \(P_i\) и \(G_i\) (\(0 \leq S_i, P_i, G_i\); \(0 < S_i+P_i+G_i \leq 10^6\)) описывающих количество соли, перца и чесночного порошка в новой бутылке. Добавленные бутылки нумеруются последовательными целыми числами, начиная с \(1\), то есть, \(i\)-я бутылка соответствует \(i\)-й добавленной бутылке во вводе.
  • Если конкретная бутылка убирается с полки, строка содержит заглавную букву \(R\), за которой следует целое число, номер этой бутылки, \(r_i\). Все значения \(r_i\) среди убираний различны, и \(r_i\) никогда не превышает общее количество в данный момент добавленных бутылок.
Выходные данные

Выведите \(N\) строк. В \(j\)-й строке (\(1 \leq j \leq N\)) выведите число \(x_j\), наименьшее количество бутылок, которое нужно использовать для приготовления любимой смеси эксперта с нужной пропорцией соли, перца и чесночного порошка, при условии, что на полке доступны только бутылки после первых \(j\) изменений. Если же такую смесь нельзя приготовить, просто выведите \(0\).

Система оценки

Подзадачи:

  1. (13 баллов) \(N \leq 50\), \(0 < S_i+P_i+G_i \leq 10^2\)
  2. (17 баллов) \(N \leq 500\), \(0 < S_i+P_i+G_i \leq 10^3\)
  3. (30 баллов) \(N \leq 5000\), \(0 < S_i+P_i+G_i \leq 10^4\)
  4. (40 баллов) Без дополнительных ограничений.
Примечание

Обратите внимание, что в данном примере бутылки \(1\) и \(3\) содержат одинаковое количество соли, перца и чесночного порошка.

C. Джокер

*особая задача битмаски разделяй и властвуй снм Структуры данных *2800

Джокер вернулся в Готэм-Сити для осуществления очередного злодейского плана. В Готэм-Сити есть \(N\) перекрёстков (пронумерованных от \(1\) до \(N\)) и \(M\) дорог (пронумерованных от \(1\) до \(M\)). Каждая улица соединяет два различных перекрёстка, и любые два перекрёстка соединены не более одной улицей.

Для своего злодейского плана, Джокеру нужно использовать нечётное количество улиц, которые образуют цикл. Формально, для перекрёстка \(S\) и чётного натурального \(k\), должна существовать такая последовательность перекрёстков \(S, s_1, \ldots, s_k, S\), что есть улицы, соединяющие перекрёстки (a) \(S\) и \(s_1\), (b) \(s_k\) и \(S\), и (c) \(s_{i-1}\) и \(s_i\) для каждого \(i = 2, \ldots, k\).

Однако, полиция патрулирует улицы Готэм-Сити. Каждый день \(i\), она наблюдает за конкретным подмножеством улиц с последовательными номерами \(j\): \(l_i \leq j \leq r_i\). Эти улицы под наблюдением не могут быть использованы Джокером для своего плана в этот день. К несчастью для полиции, у Джокера есть шпионы среди Отделения Полиции Готэм-Сити; они доносят ему, в какие дни за какими улицами ведётся наблюдение. Теперь Джокер хочет узнать для некоторого количества дней, может ли он провернуть свой план в каждый из этих дней или нет. План может быть осуществлён, если есть цикл с нечётным количеством улиц, которые не находятся под наблюдением в данный день.

Входные данные

Первая строка ввода содержит три целых числа \(N\), \(M\) и \(Q\) (\(1 \leq N, M, Q \leq 200\,000\)): количество перекрёстков, улиц и интересующих дней, соответственно. Следующие \(M\) строк содержат описание улиц. \(j\)-я из этих строк (\(1 \le j \le M\)) содержит номера двух улиц \(u\) и \(v\) (\(u \neq v\)), что означает, что улица \(j\) соединяет эти два перекрёстка. Гарантируется, что любые два перекрёстка соединены не более одной улицей. Каждая из следующих \(Q\) строк содержит по двум целым числам \(l_i\) и \(r_i\), что означает, что в день \(i\) (\(1 \leq i \leq Q\)) под наблюдением полиции находятся все улицы \(j\) с номерами \(l_i \leq j \leq r_i\).

Выходные данные

Выведите \(Q\) строк. \(i\)-я строка (\(1 \leq i \leq Q\)) должна содержать «YES», если Джокер может осуществить план в день \(i\), и «NO» иначе.

Система оценки

Подзадачи:

  1. (6 баллов) \(1 \leq N, M, Q \leq 200\)
  2. (8 баллов) \(1 \leq N, M, Q \leq 2\,000\)
  3. (25 баллов) \(l_i = 1\) для \(i = 1, \ldots, Q\)
  4. (10 баллов) \(l_i \leq 200\) для \(i = 1, \ldots, Q\)
  5. (22 баллов) \(Q \leq 2\,000\)
  6. (29 баллов) Без дополнительных ограничений.
Примечание

Граф из данного примера:

D. Капитан Флинт и сокровище

графы Деревья жадные алгоритмы поиск в глубину и подобное реализация Структуры данных *2000

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

Заданы массивы \(a\) и \(b\) длины \(n\). Изначально, \(ans\) равен \(0\) и определена следующая операция:

  1. Выбрать позицию \(i\) (\(1 \le i \le n\));
  2. Добавить к \(ans\) значение \(a_i\);
  3. Если \(b_i \neq -1\), то добавить к \(a_{b_i}\) значение \(a_i\);

Какой максимальный \(ans\) можно получить, применив эту операцию к каждой позиции \(i\) (\(1 \le i \le n\)) ровно один раз?

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

Входные данные

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина массивов \(a\) и \(b\).

Во второй строке каждого набора задано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(−10^6 \le a_i \le 10^6\)).

В третьей строке каждого набора задано \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le n\) или \(b_i = -1\)).

Дополнительное ограничение: гарантируется, что для \(i\) (\(1 \le i \le n\)) последовательность \(b_i, b_{b_i}, b_{b_{b_i}}, \ldots\) не зациклится, то есть будет всегда оканчиваться на \(-1\).

Выходные данные

В первой строке выведите одно целое число, максимальный \(ans\), который можно получить.

Во второй строке опишите последовательность выполнения операций, чтобы получить этот максимальный ответ: \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)), где \(p_i\) обозначает позицию, операция над которой выполняется \(i\)-й по порядку. Если существует несколько таких последовательностей, выведите любою из них.

E. Дядя Богдан и Проекции

геометрия сортировки Структуры данных *2700

Возвращаясь на берег, дядя Богдан зачастую посещает компьютерный клуб «Скала», чтобы порешать там задачи в приятной компании. Однажды, Дядя Богдан встретился там с одним старым знакомым. Этот знакомый задал ему необычную задачу...

На плоскости с декартовой системой координат даны \(n\) непересекающихся горизонтальных отрезков с концами в целых точках. Все отрезки находятся строго над осью \(OX\). Вы можете выбрать произвольный вектор с координатами (\(a\), \(b\)), где \(b < 0\) и координаты — вещественные числа, и спроектировать все отрезки на ось \(OX\) вдоль этого вектора. При этом полученные проекции должны не пересекаться, но, возможно, могут касаться.

Вам нужно найти минимально возможную разницу между координатой \(x\) правого конца самой правой проекции и координатой \(x\) левого конца самой левой проекции.

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 2000\)) — количество отрезков.

В \(i\)-й из следующих \(n\) строк заданы три целых числа \(xl_i\), \(xr_i\) и \(y_i\) (\(-10^6 \le xl_i < xr_i \le 10^6\); \(1 \le y_i \le 10^6\)) — абсциссы концов отрезка и их ордината.

Гарантируется, что отрезки не пересекаются и не касаются.

Выходные данные

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

Ваш ответ будет считаться правильным, если его абсолютная или относительная погрешность не превосходит \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

Примечание

Если в первом примере спроектировать отрезки вдоль вектора \((1, -1)\), который изображен на рисунке, то мы получим ответ \(12-3=9\), и можно доказать, что меньше получить нельзя.

Во втором примере оптимально проектировать вдоль вектора \((1, -3)\). Ответ: \(8\frac{2}{3}-2\frac{1}{3}=6\frac{1}{3}\)

F. Двухцветные отрезки

дп Паросочетания сортировки Структуры данных *2600

Вам задано \(n\) отрезков \([l_1, r_1], [l_2, r_2], \dots, [l_n, r_n]\). Каждый отрезок одного из двух цветов: \(i\)-й отрезок покрашен в цвет \(t_i\).

Назовем пару отрезков \(i\) и \(j\) плохой, если выполняются два условия:

  • \(t_i \ne t_j\);
  • отрезки \([l_i, r_i]\) и \([l_j, r_j]\) пересекаются, касаются или вкладываются, т. е. существует целое число \(x\), такое, что \(x \in [l_i, r_i]\) и \(x \in [l_j, r_j]\).

Определите, какое максимальное количество отрезков из заданных можно выбрать так, чтобы среди выбранных не было ни одной плохой пары.

Входные данные

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

В последующих \(n\) строках задано по три целых числа \(l_i, r_i, t_i\) (\(1 \le l_i \le r_i \le 10^9; t_i \in \{1, 2\}\)) — описание \(i\)-го отрезка.

Выходные данные

Выведите максимальное количество отрезков, которые можно выбрать так, чтобы среди выбранных отрезков не было ни одной плохой пары.

F. Омкар и оползень

Бинарный поиск жадные алгоритмы Конструктив математика Структуры данных *2400

Омкар стоит у подножия горы Селеста. Вершина находится в \(n\) метрах от него, и он может видеть всю гору до вершины, поэтому для каждого \(1 \leq j \leq n\) он знает, что высота горы в точке в \(j\) метрах от него равна \(h_j\). Известно, что для всех \(j\) удовлетворяющих \(1 \leq j \leq n - 1\), \(h_j < h_{j + 1}\) (то есть высоты строго возрастают).

Внезапно происходит оползень! Пока происходит оползень, происходит следующее: каждую минуту, если \(h_j + 2 \leq h_{j + 1}\), то один квадратный метр грязи будет скользить с позиции \(j + 1\) в позицию \(j\), так что \(h_{j + 1}\) уменьшается на \(1\), а \(h_j\) увеличивается на \(1\). Эти изменения происходят одновременно, так, например, если \(h_j + 2 \leq h_{j + 1}\) и \(h_{j + 1} + 2 \leq h_{j + 2}\) для какого-то \(j\), то \(h_j\) будет увеличено на \(1\), \(h_{j + 2}\) будет уменьшено на \(1\), а \(h_{j + 1}\) будет увеличено и уменьшено на \(1\), что означает, что на самом деле \(h_{j + 1}\) в течение этой минуты не изменится.

Оползень заканчивается, когда не будет такого \(j\), что \(h_j + 2 \leq h_{j + 1}\). Помогите Омкару выяснить, каковы будут значения \(h_1, \dots, h_n\) после окончания оползня. Можно доказать, что при заданных ограничениях оползень всегда заканчивается через некоторое число минут.

Обратите внимание, что из-за большого количества входных данных, рекомендуется, чтобы ваш код использовал быстрый ввод.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^6\)).

Вторая строка содержит \(n\) целых чисел \(h_1, h_2, \dots, h_n\) удовлетворяющих \(0 \leq h_1 < h_2 < \dots < h_n \leq 10^{12}\) — высоты.

Выходные данные

Выведите \(n\) целых чисел, где \(j\)-е число  — это значение \(h_j\) после остановки оползня.

Примечание

Первоначально гора имеет высоты \(2, 6, 7, 8\).

В первую минуту у нас есть \(2 + 2 \leq 6\), таким образом \(2\) увеличивается до \(3\), а \(6\) уменьшается до \(5\), оставляя \(3, 5, 7, 8\).

Во вторую минуту у нас есть \(3 + 2 \leq 5\) и \(5 + 2 \leq 7\), таким образом \(3\) увеличивается до \(4\), \(5\) остается без изменений, а \(7\) уменьшается до \(6\), оставляя \(4, 5, 6, 8\).

На третьей минуте у нас есть \(6 + 2 \leq 8\), так что \(6\) увеличивается до \(7\), а \(8\) уменьшается до \(7\), оставляя \(4, 5, 7, 7\).

На четвертой минуте у нас есть \(5 + 2 \leq 7\), таким образом \(5\) увеличивается до \(6\), а \(7\) уменьшается до \(6\), оставляя \(4, 6, 6, 7\).

На пятой минуте у нас есть \(4 + 2 \leq 6\), поэтому \(4\) увеличивается до \(5\), а \(6\) уменьшается до \(5\), оставляя \(5, 5, 6, 7\).

На шестой минуте ничего больше не может измениться, поэтому оползень останавливается, и наш ответ  — \(5, 5, 6, 7\).

B. Эпплджек и хранилища

жадные алгоритмы Конструктив реализация Структуры данных *1400

Этот год в Эквестрии выдался урожайным, и Эпплджек захотела построить новые хранилища для яблок. По советам проектировщиков фермы она решила построить два хранилища ненулевой площади: одно в форме квадрата, другое в форме прямоугольника (который, возможно, тоже является квадратом).

Хранилища Эпплджек будет строить из досок, на каждую сторону хранилища она собирается потратить ровно одну доску. Доски она может заказать в одной фирме у своего приятеля. Изначально на складе фирмы есть \(n\) досок, длины которых Эпплджек известны. Работа фирмы не стоит на месте, она периодически получает заказы и сама заказывает новые доски. Приятель Эпплджек может предоставить ей информацию о всех операциях. Для удобства он будет сообщать информацию в следующем формате:

  • \(+\) \(x\) — на склад поступила доска с длиной \(x\)
  • \(-\) \(x\) — со склада отгрузили доску с длиной \(x\) (при этом гарантируется, что на складе были какие-то доски длины \(x\))

Эпплджек пока не определилась, когда она будет заказывать доски, поэтому она хочет после каждого события на складе знать, может ли она заказать доски, чтобы построить прямоугольное и квадратное хранилища. Эпплджек занята сбором яблок, поэтому у нее нет времени на подсчеты, и она попросила вас помочь ей!

Напоминаем, что у квадрата все четыре стороны равны, а у прямоугольника две пары равных сторон.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — изначальное количество досок на складе фирмы, вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^5\)) — длины досок.

Третья строка содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество событий в фирме. Каждая из следующих \(q\) строк содержит описание событий в данном формате: сначала идет тип события (символ \(+\) или \(-\)), а затем число \(x\) (\(1 \le x \le 10^5\)).

Выходные данные

После каждого события на фирме выведите «YES», если из досок на складе фирмы можно собрать два хранилища нужной формы, и «NO» иначе (без кавычек). Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

После второго события Эпплджек может построить прямоугольное хранилище из досок с длинами \(1\), \(2\), \(1\), \(2\) и квадратное хранилище из досок с длинами \(1\), \(1\), \(1\), \(1\).

После шестого события Эпплджек может построить прямоугольное хранилище из досок с длинами \(1\), \(1\), \(1\), \(1\) и квадратное хранилище из досок с длинами \(2\), \(2\), \(2\), \(2\).

D. Радужные прямоугольники

сортировки Структуры данных *3300

Shrimpy Duc это пухлый и жадный мальчик, который всегда голоден. После бесчисленных попыток найти еду, чтобы утолить его нескончаемый голод, Shrimpy Duc нашел конфеты M&M, лежащие на поле \(L \times L\). Есть \(n\) конфеток M&M на этом поле, \(i\)-я из них находится в точке \((x_i + 0.5, y_i + 0.5),\) и имеет цвет \(c_i\), один из возможных \(k\) цветов (размерами M&Ms можно пренебречь).

Shrimpy Duc хочет украсть прямоугольник M&Ms, а именно, он хочет выбрать прямоугольник с целочисленными координатами внутри поля, и украсть все M&Ms в нем. Ему необязательно красть все конфеты, однако, он хочет украсть хотя бы одну конфету каждого цвета.

Иначе говоря, он хочет посчитать количество таких прямоугольников, в которых левая нижняя вершина находится в \((X_1, Y_1)\), правая верхняя в \((X_2, Y_2)\), они являются точками с целочисленными координатами, удовлетворяющие условиям \(0 \le X_1 < X_2 \le L\) и \(0 \le Y_1 < Y_2 \le L\), что для каждого \(1 \le c \le k\) существует хотя бы одна M&M с цветом \(c\), которая лежит в этом прямоугольнике.

Сколько существует таких прямоугольников? Это число может быть большим, так что вам достаточно найти его по модулю \(10^9 + 7\).

Входные данные

В первой строке записаны три целых числа \(n, k, L\) \((1 \leq k \leq n \leq 2 \cdot 10^3, 1 \leq L \leq 10^9 )\) — количество M&Ms, количество цветов, и размер поля, соответственно.

Каждая из следующих \(n\) строк описывает M&Ms. В каждой строке записано три целых числа \(x_i, y_i, c_i\) \((0 \leq x_i, y_i < L, 1 \le c_i \le k)\) — координаты и цвет \(i\)-й M&M, соответственно.

Разные M&Ms имеют разные координаты (\(x_i \ne x_j\) или \(y_i \ne y_j\) для всех \(i \ne j\)), и для каждого \(1 \le c \le k\) есть хотя бы одна M&M с цветом \(c\).

Выходные данные

Выведите одно целое число — количество прямоугольников, удовлетворяющих условиям Shrimpy Duc, по модулю \(10^9 + 7\).

Примечание

Поле для первого примера:

C. Хорошие подотрезки

дп математика Структуры данных *1600

Вам задан массив \(a_1, a_2, \dots , a_n\), состоящий из чисел от \(0\) до \(9\). Подотрезок этого массива \(a_l, a_{l+1}, a_{l+2}, \dots , a_{r-1}, a_r\) хороший, если сумма чисел на этом подотрезке равна длине этого подотрезка (\(\sum\limits_{i=l}^{r} a_i = r - l + 1\)).

Например, если \(a = [1, 2, 0]\), то есть \(3\) хороших подотрезка: \(a_{1 \dots 1} = [1], a_{2 \dots 3} = [2, 0]\) и \(a_{1 \dots 3} = [1, 2, 0]\).

Посчитайте количество хороших подотрезков массива \(a\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) десятичных цифр, где \(i\)-я цифра равна значению \(a_i\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

На каждый набор входных данных выведите ответ — количество хороших подотрезков массива \(a\).

Примечание

Первый набор входных данных рассмотрен в условии.

Во втором наборе входных данных есть \(6\) хороших подотрезков: \(a_{1 \dots 1}\), \(a_{2 \dots 2}\), \(a_{1 \dots 2}\), \(a_{4 \dots 4}\), \(a_{5 \dots 5}\) и \(a_{4 \dots 5}\).

В третьем наборе входных данных есть только один хороший подотрезок: \(a_{2 \dots 6}\).

E. Два типа заклинаний

Бинарный поиск жадные алгоритмы математика реализация сортировки Структуры данных *2200

Поликарп играет в компьютерную игру (да, опять). В этой игре он сражается с монстрами при помощи заклинаний.

Есть два типа заклинаний: огненный шар силы \(x\) наносит \(x\) урона монстру, а молния силы \(y\) наносит \(y\) урона монстру и удваивает урон следующего заклинания. Каждое заклинание может быть использовано только один раз, но Поликарп может применять их в любом порядке.

Например, предположим, что Поликарп знает три заклинания: огненный шар силы \(5\), молнию силы \(1\) и молнию силы \(8\). Всего есть \(6\) способов выбрать порядок заклинаний:

  • первое, второе, третье. В таком случае вы нанесете \(5 + 1 + 2 \cdot 8 = 22\) урона;
  • первое, третье, второе. В таком случае вы нанесете \(5 + 8 + 2 \cdot 1 = 15\) урона;
  • второе, первое, третье. В таком случае вы нанесете \(1 + 2 \cdot 5 + 8 = 19\) урона;
  • второе, третье, первое. В таком случае вы нанесете \(1 + 2 \cdot 8 + 2 \cdot 5 = 27\) урона;
  • третье, первое, второе. В таком случае вы нанесете \(8 + 2 \cdot 5 + 1 = 19\) урона;
  • третье, второе, первое. В таком случае вы нанесете \(8 + 2 \cdot 1 + 2 \cdot 5 = 20\) урона.

Изначально Поликарп знает \(0\) заклинаний. Его набор заклинаний меняется \(n\) раз, каждый раз он либо учит новое заклинание, либо забывает старое. После каждого изменения выведите максимально количество урона, которое можно нанести при помощи имеющихся заклинаний.

Входные данные

Первая строка содержит целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество заклинаний в наборе.

Каждая из следующих \(n\) строк содержит два числа \(tp\) и \(d\) (\(0 \le tp_i \le 1\); \(-10^9 \le d \le 10^9\); \(d_i \neq 0\)) — описание изменений. Если \(tp_i\) равно \(0\), Поликарп учит (или забывает) огненный шар, иначе он учит (или забывает) молнию.

Если \(d_i > 0\), то Поликарп учит заклинание силы \(d_i\). Иначе, Поликарп забывает заклинание силы \(-d_i\), и гарантируется, что он знал это заклинание до этого.

Гарантируется, что после каждого изменения все силы заклинаний различны (Поликарп не может знать одновременно два заклинания одинаковой силы).

Выходные данные

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

F. Спорные раунды

Бинарный поиск дп жадные алгоритмы Структуры данных *2500

Алиса и Боб играют в игру. Игра состоит из нескольких сетов, и каждый сет состоит из нескольких раундов. Каждый раунд выиграл либо Боб, либо Алиса, и сет считается завершенным, когда один из игроков выиграл \(x\) раундов подряд. Например, если Боб выиграл пять раундов подряд и \(x = 2\), то завершилось два сета.

Вы знаете, что Алиса и Боб уже сыграли \(n\) раундов и вы знаете результаты нескольких раундов. Для каждого \(x\) от \(1\) до \(n\), посчитайте максимальное количество сетов, которое могло быть завершено, если сет считается завершенным, когда один из игроков выиграл \(x\) раундов подряд. Если последний сет не завершен — то учитывать его не нужно.

Входные данные

Первая строка содержит целое число \(n\) (\(1 \le n \le 10^6\)) — количество раундов.

Вторая строка содержит строку \(s\) длины \(n\) — описание раундов. Если \(i\)-й элемент строки равен 0, то Алиса выиграла \(i\)-й раунд; если равен 1 — то Боб выиграл \(i\)-й раунд, а если равен ? — то вы не знаете, кто выиграл \(i\)-й раунд.

Выходные данные

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

Примечание

Рассмотрим первый набор входных данных:

  • если \(x = 1\) и \(s = 110000\) или \(s = 111000\) то есть шесть завершенных сетов;
  • если \(x = 2\) и \(s = 110000\) то есть три завершенных сета;
  • если \(x = 3\) и \(s = 111000\) то есть два завершенных сета;
  • если \(x = 4\) и \(s = 110000\) то есть один завершенный сет;
  • если \(x = 5\) то завершенных сетов нет;
  • если \(x = 6\) то завершенных сетов нет.

D. Из бинарной строки в подпоследовательности

жадные алгоритмы Конструктив реализация Структуры данных *1500

Вам задана бинарная строка \(s\), состоящая из \(n\) нулей или единиц.

Ваша задача – разделить заданную строку на минимальное число подпоследовательностей таким образом, что каждый символ строки принадлежит ровно одной подпоследовательности и каждая подпоследовательность выглядит подобно «010101 ...» или «101010 ...» (т.е. подпоследовательность не должна содержать два соседних нуля или единицы).

Напомним, что подпоследовательность — это последовательность, которая может быть получена путем удаления из заданной последовательности с помощью удаления нуля или более элементов без изменения порядка остальных элементов. Например, подпоследовательностями «1011101» являются «0», «1», «11111», «0111», «101», «1001», но не «000», «101010» и «11100».

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину \(s\). Вторая строка набора тестовых данных содержит \(n\) символов '0' и '1' — строку \(s\).

Гарантируется, что сумма всех \(n\) не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него: первой строкой выведите одно целое число \(k\) (\(1 \le k \le n\)) — минимальное количество подпоследовательностей, на которые вы можете разделить строку \(s\). Второй строкой выведите \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le k\)), где \(a_i\) — номер подпоследовательности, к которой принадлежит \(i\)-й символ строки \(s\).

Если существует несколько ответов, вы можете вывести любой.

E1. Деление весов (простая версия)

Деревья жадные алгоритмы поиск в глубину и подобное Структуры данных *2000

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

Вам задано взвешенное корневое дерево, вершина \(1\) — корень этого дерева.

Дерево — это связный граф без циклов. У корневого дерева есть специальная вершина, называемая корнем. Предком вершины \(v\) называется последняя отличная от \(v\) вершина на пути от корня к вершине \(v\). Потомками вершины \(v\) называются все вершины, для которых \(v\) является предком. Вершина называется листом, если у нее нет потомков. Взвешенное дерево — это такое дерево, в котором у каждого ребра есть некоторый вес.

Вес пути — это сумма весов всех ребер на этом пути. Вес пути от вершины до самой себя равен \(0\).

Вы можете совершить последовательность из нуля или более ходов. В течение одного хода вы можете выбрать ребро и поделить его вес на \(2\) с округлением вниз. Более формально, в течение одного хода вы выбираете какое-то ребро \(i\) и делите его вес на \(2\) с округлением вниз (\(w_i := \left\lfloor\frac{w_i}{2}\right\rfloor\)).

Ваша задача — найти минимальное количество ходов, необходимых для того, чтобы сделать сумму весов путей от корня до каждого листа не превосходящей \(S\). Другими словами, если \(w(i, j)\) — это вес пути от вершины \(i\) до вершины \(j\), то вам необходимо сделать \(\sum\limits_{v \in leaves} w(root, v) \le S\), где \(leaves\) — это список всех листьев.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит два целых числа \(n\) и \(S\) (\(2 \le n \le 10^5; 1 \le S \le 10^{16}\)) — количество вершин в дереве и максимально возможная сумма весов, которую вы можете получить. Следующая \(n-1\) строка описывает ребра дерева. Ребро \(i\) описывается тремя целыми числами \(v_i\), \(u_i\) и \(w_i\) (\(1 \le v_i, u_i \le n; 1 \le w_i \le 10^6\)), где \(v_i\) и \(u_i\) — вершины, которые соединены ребром \(i\), а \(w_i\) — вес этого ребра.

Гарантируется, что сумма всех \(n\) не превосходит \(10^5\) (\(\sum n \le 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него: минимальное количество ходов, необходимое, чтобы сделать сумму весов путей от корня до каждого листа не превосходящей \(S\).

F. Очередное подмножество отрезков

графы дп сортировки Структуры данных *2300

Вам даны \(n\) отрезков на координатной оси \(OX\). \(i\)-й отрезок имеет границы \([l_i; r_i]\). Все точки \(x\), для которых выполняется условие \(l_i \le x \le r_i\), принадлежат \(i\)-му отрезку.

Ваша задача — выбрать такое максимальное по размеру (количеству отрезков) подмножество заданного множества отрезков, что каждая пара отрезков в этом подмножестве либо не пересекается либо же один из них лежит внутри другого.

Два отрезка \([l_i; r_i]\) и \([l_j; r_j]\) не пересекаются, если у них нет общих точек. Например, отрезки \([1; 2]\) и \([3; 4]\), \([1; 3]\) и \([5; 5]\) не пересекаются, а отрезки \([1; 2]\) и \([2; 3]\), \([1; 2]\) и \([2; 2]\) пересекаются.

Отрезок \([l_i; r_i]\) лежит внутри отрезка \([l_j; r_j]\), если \(l_j \le l_i\) и \(r_i \le r_j\). Например, отрезки \([2; 2]\), \([2, 3]\), \([3; 4]\) и \([2; 4]\) лежат внутри отрезка \([2; 4]\), а \([2; 5]\) и \([1; 4]\) — нет.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 3000\)) — количество отрезков. Следующие \(n\) строк описывают отрезки. \(i\)-й отрезок задан двумя целыми числами \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le 2 \cdot 10^5\)), где \(l_i\) — левая граница \(i\)-го отрезка, а \(r_i\) — правая граница \(i\)-го отрезка.

Дополнительное ограничение на входные данные: в заданном списке отрезков нет дубликатов.

Гарантируется, что сумма \(n\) не превосходит \(3000\) (\(\sum n \le 3000\)).

Выходные данные

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

C. Новогодние снеговики

Бинарный поиск жадные алгоритмы Структуры данных *1800

Пока хозяйственный Геральд накрывает стол и никогда не дающий скучать друзьям Александр отправляет открытки, Сергей лепит снеговиков. Каждый снеговик должен состоять из трех комов — большого, среднего и маленького. Сергею помогают его двойники: они уже слепили n снежных комов, которые представляют собой шары с радиусами r1, r2, ..., rn. Снеговика можно слепить из любых трех комов, радиусы которых попарно различны. Например, из комов с радиусами 1, 2 и 3 можно слепить снеговика, а 2, 2, 3 или 2, 2, 2 — нельзя. Помогите Сергею и его двойникам определить, какое наибольшее количество снеговиков они смогут слепить из своих комов.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 105) — количество комов. В следующей строке заданы n целых чисел — радиусы комов r1, r2, ..., rn (1 ≤ ri ≤ 109). Радиусы комов могут совпадать.

Выходные данные

В первой строке выведите одно целое число k — наибольшее количество снеговиков. Следующие k строк должны содержать описания снеговиков. Описание каждого снеговика должно состоять из трех чисел, разделенных пробелами — радиуса большого кома, радиуса среднего кома и радиуса маленького кома. Снеговиков разрешается выводить в любом порядке. Если решений несколько, выведите любое.

D. Зигзаги

Комбинаторика математика Перебор Структуры данных *1900

Вам задан массив \(a_1, a_2 \dots a_n\). Посчитайте количество таких четверок \((i, j, k, l)\), что:

  • \(1 \le i < j < k < l \le n\);
  • \(a_i = a_k\) и \(a_j = a_l\);
Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В первой строке каждого набора входных данных задано единственное целое число \(n\) (\(4 \le n \le 3000\)) — размер массива \(a\).

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — сам массив \(a\).

Гарантируется, что сумма \(n\) в одном тесте не превосходит \(3000\).

Выходные данные

Для каждого набора входных данных, выведите количество описанных четверок.

Примечание

В первом наборе входных данных, каждая четверка индексов \(i < j < k < l\) подходит, а потому ответ — это количество четверок.

Во втором наборе, есть только \(2\) подходящих четверки:

  • \((1, 2, 4, 6)\): \(a_1 = a_4\) и \(a_2 = a_6\);
  • \((1, 3, 4, 6)\): \(a_1 = a_4\) и \(a_3 = a_6\).

E. Очистите мультимножество

дп жадные алгоритмы разделяй и властвуй Структуры данных *2200

У вас есть мультимножество, содержащее несколько чисел. Изначально оно содержит \(a_1\) элементов равных \(1\), \(a_2\) элементов равных \(2\), ..., \(a_n\) элементов равных \(n\).

Вы можете применять два типа операций:

  • выбрать два числа \(l\) и \(r\) (\(l \le r\)), а затем удалить один элемент, равный \(l\), один элемент, равный \(l + 1\), ..., и один элемент, равный \(r\) из мультимножества. Эта операция может быть применена, только если каждый элемент от \(l\) до \(r\) встречается хотя бы раз в мультимножестве;
  • выбрать два числа \(i\) и \(x\) (\(x \ge 1\)), а затем удалить \(x\) элементов равных \(i\) из мультимножества. Эта операция может быть применена, только если в мультимножестве есть как минимум \(x\) элементов, равных \(i\).

За какое наименьшее количество операций можно удалить все элементы из мультимножества?

Входные данные

Первая строка содержит целое число \(n\) (\(1 \le n \le 5000\)).

Вторая строка содержит \(n\) чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(0 \le a_i \le 10^9\)).

Выходные данные

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

E. Разбиваем квадрат

геометрия реализация сортировки Структуры данных *2400

У вас есть квадрат размера \(10^6 \times 10^6\) на координатной плоскости с вершинами в точках \((0, 0)\), \((0, 10^6)\), \((10^6, 0)\) и \((10^6, 10^6)\).

Вы собираетесь нарисовать несколько отрезков на плоскости. Все отрезки либо горизонтальные, либо вертикальные и пересекаются хотя бы с одной стороной квадрата.

Сейчас вас интересует: на какое количество частей разобьется данный квадрат после того, как будут нарисованы все отрезки. Напишите программу, подсчитывающую количество частей.

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(0 \le n, m \le 10^5\)) — количество горизонтальных и вертикальных отрезков, соответственно.

В следующих \(n\) строках заданы описания горизонтальных отрезков. В \(i\)-й строке заданы три целых числа \(y_i\), \(lx_i\) и \(rx_i\) (\(0 < y_i < 10^6\); \(0 \le lx_i < rx_i \le 10^6\)), означающих отрезок, соединяющий \((lx_i, y_i)\) и \((rx_i, y_i)\).

В следующих \(m\) строках заданы описания вертикальных отрезков. В \(i\)-й строке заданы три целых числа \(x_i\), \(ly_i\) и \(ry_i\) (\(0 < x_i < 10^6\); \(0 \le ly_i < ry_i \le 10^6\)), означающих отрезок, соединяющий \((x_i, ly_i)\) и \((x_i, ry_i)\).

Гарантируется, что никакие два отрезка не лежат на одной прямой и каждый отрезок пересекается хотя бы с одной стороной квадрата.

Выходные данные

Выведите количество частей, на которые разбивается квадрат после того, как нарисованы все отрезки.

Примечание

Пример выглядит следующим образом:

F. Reverse и Swap

Бинарный поиск битмаски Структуры данных *2400

Вам задан массив \(a\) длины \(2^n\). Вам нужно обработать \(q\) запросов к нему. Каждый запрос одного из следующих \(4\) типов:

  1. \(Replace(x, k)\) — присвоить элементу \(a_x\) значение \(k\);
  2. \(Reverse(k)\) — развернуть каждый подмассив \([(i-1) \cdot 2^k+1, i \cdot 2^k]\) для всех \(i\) (\(i \ge 1\));
  3. \(Swap(k)\) — поменять местами подмассивы \([(2i-2) \cdot 2^k+1, (2i-1) \cdot 2^k]\) и \([(2i-1) \cdot 2^k+1, 2i \cdot 2^k]\) для всех \(i\) (\(i \ge 1\));
  4. \(Sum(l, r)\) — вывести сумму элементов подмассива \([l, r]\).

Напишите программу, которая может достаточно быстро обрабатывать заданные запросы.

Входные данные

В первой строке заданы два целых числа \(n\), \(q\) (\(0 \le n \le 18\); \(1 \le q \le 10^5\)) — длина массива \(a\) и количество запросов.

Во второй строке заданы \(2^n\) целых чисел \(a_1, a_2, \ldots, a_{2^n}\) (\(0 \le a_i \le 10^9\)).

В следующих \(q\) строках заданы запросы — по одному в строке. Каждый запрос одного из следующих \(4\) типов:

  • «\(1\) \(x\) \(k\)» (\(1 \le x \le 2^n\); \(0 \le k \le 10^9\)) — \(Replace(x, k)\);
  • «\(2\) \(k\)» (\(0 \le k \le n\)) — \(Reverse(k)\);
  • «\(3\) \(k\)» (\(0 \le k < n\)) — \(Swap(k)\);
  • «\(4\) \(l\) \(r\)» (\(1 \le l \le r \le 2^n\)) — \(Sum(l, r)\).

Гарантируется, что в каждом тесте есть как минимум один запрос \(Sum\).

Выходные данные

Выведите ответы для каждого запроса \(Sum\).

Примечание

В первом примере, первоначально, массив \(a\) равен \(\{7,4,9,9\}\).

После обработки первого запроса, массив \(a\) становится \(\{7,8,9,9\}\).

После обработки второго запроса, массив \(a_i\) становится \(\{9,9,7,8\}\).

Поэтому, ответ на третий запрос равен \(9+7+8=24\).

Во втором примере, первоначально, массив \(a\) равен \(\{7,0,8,8,7,1,5,2\}\). Далее происходит следующее:

  1. \(Sum(3, 7)\) \(\to\) \(8 + 8 + 7 + 1 + 5 = 29\);
  2. \(Reverse(1)\) \(\to\) \(\{0,7,8,8,1,7,2,5\}\);
  3. \(Swap(2)\) \(\to\) \(\{1,7,2,5,0,7,8,8\}\);
  4. \(Sum(1, 6)\) \(\to\) \(1 + 7 + 2 + 5 + 0 + 7 = 22\);
  5. \(Reverse(3)\) \(\to\) \(\{8,8,7,0,5,2,7,1\}\);
  6. \(Replace(5, 16)\) \(\to\) \(\{8,8,7,0,16,2,7,1\}\);
  7. \(Sum(8, 8)\) \(\to\) \(1\);
  8. \(Swap(0)\) \(\to\) \(\{8,8,0,7,2,16,1,7\}\).

A. Fancy Fence

*особая задача математика реализация снм сортировки Структуры данных *1800

Everybody knows that Balázs has the fanciest fence in the whole town. It's built up from \(N\) fancy sections. The sections are rectangles standing closely next to each other on the ground. The \(i\)th section has integer height \(h_i\) and integer width \(w_i\). We are looking for fancy rectangles on this fancy fence. A rectangle is fancy if:

  • its sides are either horizontal or vertical and have integer lengths
  • the distance between the rectangle and the ground is integer
  • the distance between the rectangle and the left side of the first section is integer
  • it's lying completely on sections
What is the number of fancy rectangles? This number can be very big, so we are interested in it modulo \(10^9+7\).
Input

The first line contains \(N\) (\(1\leq N \leq 10^{5}\)) – the number of sections. The second line contains \(N\) space-separated integers, the \(i\)th number is \(h_i\) (\(1 \leq h_i \leq 10^{9}\)). The third line contains \(N\) space-separated integers, the \(i\)th number is \(w_i\) (\(1 \leq w_i \leq 10^{9}\)).

Output

You should print a single integer, the number of fancy rectangles modulo \(10^9+7\). So the output range is \(0,1,2,\ldots, 10^9+6\).

Scoring
\( \begin{array}{|c|c|c|} \hline \text{Subtask} & \text{Points} & \text{Constraints} \\ \hline 1 & 0 & \text{sample}\\ \hline 2 & 12 & N \leq 50 \: \text{and} \: h_i \leq 50 \: \text{and} \: w_i = 1 \: \text{for all} \: i \\ \hline 3 & 13 & h_i = 1 \: \text{or} \: h_i = 2 \: \text{for all} \: i \\ \hline 4 & 15 & \text{all} \: h_i \: \text{are equal} \\ \hline 5 & 15 & h_i \leq h_{i+1} \: \text{for all} \: i \leq N-1 \\ \hline 6 & 18 & N \leq 1000\\ \hline 7 & 27 & \text{no additional constraints}\\ \hline \end{array} \)
Note

The fence looks like this:

There are 5 fancy rectangles of shape:

There are 3 fancy rectangles of shape:

There is 1 fancy rectangle of shape:

There are 2 fancy rectangles of shape:

There is 1 fancy rectangle of shape:

A. The Potion of Great Power

*особая задача 2-sat Бинарный поиск графы интерактив сортировки Структуры данных *2400

Once upon a time, in the Land of the Shamans, everyone lived on the Sky-High Beanstalk. Each shaman had a unique identifying number \(i\) between \(0\) and \(N-1\), and an altitude value \(H_i\), representing how high he lived above ground level. The distance between two altitudes is the absolute value of their difference.

All shamans lived together in peace, until one of them stole the formula of the world-famous Potion of Great Power. To cover his/her tracks, the Thief has put a Curse on the land: most inhabitants could no longer trust each other...

Despite the very difficult circumstances, the Order of Good Investigators have gained the following information about the Curse:

  • When the Curse first takes effect, everyone stops trusting each other.
  • The Curse is unstable: at the end of each day (exactly at midnight), one pair of shamans will start or stop trusting each other.
  • Unfortunately, each shaman will only ever trust at most \(D\) others at any given time.
They have also reconstructed a log of who trusted whom: for each night they know which pair of shamans started/stopped trusting each other.

They believe the Thief has whispered the formula to an Evil Shaman. To avoid detection, both of them visited the home of one of their (respective) trusted friends. During the visit, the Thief whispered the formula to the Evil Shaman through the window. (Note: this trusted friend did not have to be home at the time. In fact, it's even possible that they visited each other's houses – shamans are weird.)

Fortunately, whispers only travel short distances, so the Order knows the two trusted friends visited (by the Thief and the Evil Shaman) must live very close to each other.

They ask you to help with their investigation. They would like to test their suspicions: what if the Thief was \(x\), the Evil Shaman was \(y\), and the formula was whispered on day \(v\)? What is the smallest distance the whispered formula had to travel? That is, what is the minimum distance between the apartments of some shamans \(x'\) and \(y'\) (i.e. \(\min\left(\left|H_{x'} - H_{y'}\right|\right)\)), such that \(x'\) was a trusted friend of \(x\) and \(y'\) was a trusted friend of \(y\) on day \(v\)?

They will share all their information with you, then ask you a number of questions. You need to answer each question immediately, before receiving the next one.

Interaction

The interaction will begin with a line containing \(N\), \(D\), \(U\) and \(Q\) \((2 \leq N \leq 100000\), \(1 \leq D \leq 500\), \(0 \leq U \leq 200000\), \(1 \leq Q \leq 50000)\) – the number of shamans, the maximum number of trusted friends a shaman can have at any given point, the number of days, and the number of questions.

On the next line \(N\) space separated integers will follow, the \(i\)th \((1\leq i \leq N)\) of which being \(H_{i-1}\) \((0\leq H_{i-1} \leq 10^9)\), the altitude of shaman \(i-1\).

On the next \(U\) lines there will be two integers each, on the \(i\)th (\(1 \leq i \leq U\)) \(A_i\) and \(B_i\) \((0 \leq A_i, B_i < N\) and \(A_i \neq B_i)\), which represents a pair of shamans who started or stopped trusting each other at the end of day \(i-1\). That is, if \(A_i\) and \(B_i\) trusted each other on day \(i-1\), they did not trust each other on day \(i\), or vice versa. Read all of these integers.

The interactor now will ask you \(Q\) question, so the following interaction should happen \(Q\) times:

  1. Read \(3\) integers describing the current query: \(x,y\) and \(v\) (\(x \neq y\), \(0 \leq x,y < N\) and \(0 \leq v \leq U\)), where \(x\) is the suspected Thief, \(y\) is the suspected Evil Shaman, and \(v\) is the suspected day..
  2. Then print the answer to this query on a single line, i.e. you should print the minimum distance the whispered formula had to travel from some trusted friend \(x'\) of \(x\) to a trusted friend \(y'\) of \(y\).
    • In case someone trusted both \(x\) and \(y\) (i.e. \(x'=y'\)), you should print \(0\).
    • If \(x\) or \(y\) had no trusted friends, print \(10^9\).

After printing each line do not forget to output end of line and flush the output. Otherwise, you will get Idleness limit exceeded. To do this, use:

  • fflush(stdout) or cout.flush() in C++;
  • System.out.flush() in Java;
  • flush(output) in Pascal;
  • stdout.flush() in Python;
  • see documentation for other languages.
Scoring
\( \begin{array}{|c|c|c|} \hline \text{Subtask} & \text{Points} & \text{Constraints} \\ \hline 1 & 0 & \text{samples}\\ \hline 2 & 17 & Q,U \leq 1000 \\ \hline 3 & 14 & v=U \: \text{for all questions} \\ \hline 4 & 18 & H_i \in \left\{0,1\right\} \: \text{for all shamans} \: i \\ \hline 5 & 21 & U,N \leq 10000\\ \hline 6 & 30 & \text{no additional constraints}\\ \hline \end{array} \)
Note

Example queries:

Evolution of friendships:

B. Spring cleaning

*особая задача графы Деревья поиск в глубину и подобное Структуры данных *2300

Spring cleanings are probably the most boring parts of our lives, except this year, when Flóra and her mother found a dusty old tree graph under the carpet.

This tree has \(N\) nodes (numbered from \(1\) to \(N\)), connected by \(N-1\) edges. The edges gathered too much dust, so Flóra's mom decided to clean them.

Cleaning the edges of an arbitrary tree is done by repeating the following process: She chooses 2 different leaves (a node is a leaf if it is connected to exactly one other node by an edge), and cleans every edge lying on the shortest path between them. If this path has \(d\) edges, then the cost of cleaning this path is \(d\).

She doesn't want to harm the leaves of the tree, so she chooses every one of them at most once. A tree is cleaned when all of its edges are cleaned. The cost of this is the sum of costs for all cleaned paths.

Flóra thinks the tree they found is too small and simple, so she imagines \(Q\) variations of it. In the \(i\)-th variation, she adds a total of \(D_i\) extra leaves to the original tree: for each new leaf, she chooses a node from the original tree, and connects that node with the new leaf by an edge. Note that some nodes may stop being leaves during this step.

For all these \(Q\) variations, we are interested in the minimum cost that is required to clean the tree.

Input

The first line contains two space-separated integer, \(N\) and \(Q\) (\(3 \leq N \leq 10^{5}\), \(1 \leq Q \leq 10^{5}\)) – the number of nodes the tree has and the number of variations.

Each of the next \(N-1\) lines contains two space-separated integers \(u\) and \(v\) denoting that nodes \(u\) and \(v\) are connected by an edge (\(1 \leq u, v \leq N\)).

The next \(Q\) lines describe the variations. The first integer in the \(i\)th line is \(D_i\) (\(1 \leq D_i \leq 10^{5}\)). Then \(D_i\) space-separated integers follow: if the \(j\)th number is \(a_j\), it means that Flóra adds a new leaf to node \(a_j\) (\(1 \leq a_j \leq N\)). We may add more than one leaf to the same node. \(\sum_{1}^{Q} D_i \leq 10^{5}\) i.e. the sum of \(D_i\) in all varations is at most \(10^5\).

After each variation, Flóra restarts and adds extra leaves to the original tree.

Output

You should print \(Q\) lines. In the \(i\)-th line, print a single integer: the minimum cost required to clean the \(i\)-th variation of the tree. If the tree cannot be cleaned, print \(-1\).

Scoring
\( \begin{array}{|c|c|l|} \hline \text{Subtask} & \text{Points} & \text{Constraints} \\ \hline 1 & 0 & \text{samples}\\ \hline 2 & 9 & Q = 1, \text{there is an edge between node} \: 1 \: \text{and} \: i \: \text{for every} \: i \: (2 \leq i \leq N), \\ & & \text{Flóra can't add extra leaf to node} \: 1 \\ \hline 3 & 9 & Q = 1, \text{there is an edge between node} \: i \: \text{and} \: i+1 \: \text{for all} \: (1 \leq i < N), \\ & & \text{Flóra can't add extra leaf to node} \: 1 \: \text{nor node} \: N \\ \hline 4 & 16 & N \leq 20000, Q \leq 300\\ \hline 5 & 19 & \text{the original tree is a perfect binary tree rooted at node \)1\(} \\ & & \text{(i.e. each internal node has exactly \)2\( children, and every leaf} \\ & & \text{has the same distance from the root)}\\ \hline 6 & 17 & D_i = 1 \: \text{for all} \: i\\ \hline 7 & 30 & \text{no additional constraints}\\ \hline \end{array} \)
Note

The following picture shows the second variation. A possible solution is to clean the path between leaves \(1 - 6\), \(A - 7\) and \( B - 3\).

You can download the above example and an additional (bigger) sample input here: https://gofile.io/d/8QlbsS

C. Уничтожение фиксированных точек

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *2300

Дан массив \(a_1, \ldots, a_n\) из \(n\) положительных целых чисел. За одну операцию можно выбрать индекс \(i\), удовлетворяющий \(a_i = i\), и удалить \(a_i\) из массива (после удаления остальные части массива соединяются).

Вес \(a\) определяется как максимальное количество элементов, которые можно удалить.

Вы должны ответить на \(q\) независимых запросов \((x, y)\): после замены первых \(x\) элементов \(a\) и последних \(y\) элементов \(a\) на \(n+1\) (делая их удаление невозможным), чему будет равен вес \(a\)?

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 3 \cdot 10^5\))  — длину массива и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \leq a_i \leq n\)) — элементы массива.

\(i\)-я из следующих \(q\) строк содержит два целых числа \(x\) и \(y\) (\(x, y \ge 0\) и \(x+y < n\)).

Выходные данные

Выведите \(q\) строк, \(i\)-я строка должна содержать единственное целое число  — ответ на \(i\)-й запрос.

Примечание

Объяснение первого запроса:

После того, как первые \(x = 3\) и последние \(y = 1\) элементов стало невозможно удалить, \(a\) становится равным \([\times, \times, \times, 9, 5, 4, 6, 5, 7, 8, 3, 11, \times]\) (для наглядности мы представляем \(14\) как \(\times\)).

Вот стратегия, которая удаляет \(5\) элементов (удаленный элемент окрашен в красный цвет):

  • \([\times, \times, \times, 9, \color{red}{5}, 4, 6, 5, 7, 8, 3, 11, \times]\)
  • \([\times, \times, \times, 9, 4, 6, 5, 7, 8, 3, \color{red}{11}, \times]\)
  • \([\times, \times, \times, 9, 4, \color{red}{6}, 5, 7, 8, 3, \times]\)
  • \([\times, \times, \times, 9, 4, 5, 7, \color{red}{8}, 3, \times]\)
  • \([\times, \times, \times, 9, 4, 5, \color{red}{7}, 3, \times]\)
  • \([\times, \times, \times, 9, 4, 5, 3, \times]\) (конечное состояние)

Невозможно удалить более \(5\) элементов, поэтому вес составляет \(5\).

D. Три последовательности

жадные алгоритмы Конструктив математика Структуры данных *2200

Вам дана последовательность из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\).

Вы должны построить две последовательности целых чисел \(b\) и \(c\) длины \(n\), которые удовлетворяют условиям:

  • для всех \(i\) (\(1\leq i\leq n\)) \(b_i+c_i=a_i\);
  • \(b\) неубывающая, что означает, что для всех \(1<i\leq n\), выполнено \(b_i\geq b_{i-1}\);
  • \(c\) невозрастающая, что означает, что для всех \(1<i\leq n\), выполнено \(c_i\leq c_{i-1}\).

Вы хотите минимизировать \(\max(b_i,c_i)\). Другими словами, вы хотите минимизировать максимум чисел в последовательностях \(b\) и \(c\).

Также будет сделано \(q\) изменений, \(i\)-е изменение описывается тройкой чисел \(l,r,x\). Вы должны добавить \(x\) к \(a_l,a_{l+1}, \ldots, a_r\).

Вы должны найти минимальное значение \(\max(b_i,c_i)\) для изначальной последовательности и для последовательности после каждого изменения.

Входные данные

В первой строке находится единственное целое число \(n\) (\(1\leq n\leq 10^5\)).

Во второй строке находится \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\leq i\leq n\), \(-10^9\leq a_i\leq 10^9\)).

В третьей строке находится единственное целое число \(q\) (\(1\leq q\leq 10^5\)).

Каждая из следующих \(q\) строк содержит три целых числа \(l,r,x\) (\(1\leq l\leq r\leq n,-10^9\leq x\leq 10^9\)), описывающих очередное изменение.

Выходные данные

Выведите \(q+1\) строку.

В \(i\)-й (\(1 \leq i \leq q+1\)) строке выведите ответ на задачу для последовательности после \(i-1\) изменения.

Примечание

В первом тесте:

  • Изначальная последовательность \(a = (2, -1, 7, 3)\). Пара последовательностей \(b=(-3,-3,5,5),c=(5,2,2,-2)\) является возможным выбором.
  • После первого изменения \(a = (2, -4, 4, 0)\). Пара последовательностей \(b=(-3,-3,5,5),c=(5,-1,-1,-5)\) является возможным выбором.
  • После второго изменения \(a = (2, -4, 6, 2)\). Пара последовательностей \(b=(-4,-4,6,6),c=(6,0,0,-4)\) является возможным выбором.

D. Дискретные Центробежные Прыжки

графы дп Структуры данных *2200

В Нью-Йорке есть \(n\) красивых небоскребов, высота \(i\)-го равна \(h_i\). Cегодня какие-то негодяи подожгли первые \(n - 1\), и теперь единственное безопасное здание — небоскреб с индексом \(n\).

Назовем прыжок с небоскреба \(i\) на небоскреб \(j\) (\(i < j\)) дискретным, если все небоскребы между ними либо строго меньше по высоте, либо строго больше по высоте. Формально: прыжок дискретный, если \(i < j\) и выполнено одно из условий:

  • \(i + 1 = j\),
  • \(\max(h_{i + 1}, \ldots, h_{j - 1}) < \min(h_i, h_j)\),
  • \(\max(h_i, h_j) < \min(h_{i + 1}, \ldots, h_{j - 1})\).

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

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)) — число небоскребов.

Вторая строка содержит \(n\) целых чисел \(h_1, h_2, \ldots, h_n\) (\(1 \le h_i \le 10^9\)) — высоты небоскребов.

Выходные данные

Выведите одно число \(k\) — минимальное число дискретных прыжков. Можно показать, что ответ всегда существует.

Примечание

В первом тесте Вася может посещать небоскребы в такой последовательности: \(1 \rightarrow 2 \rightarrow 4 \rightarrow 5\).

Во втором и третьем тестах мы можем достичь последнего небоскреба за один прыжок.

Последовательность прыжков в четвертом тесте: \(1 \rightarrow 3 \rightarrow 5\).

D. Прожекторы

Бинарный поиск дп Перебор реализация сортировки Структуры данных *2000

Есть \(n\) грабителей в координатах \((a_1, b_1)\), \((a_2, b_2)\), ..., \((a_n, b_n)\) и \(m\) прожекторов в координатах \((c_1, d_1)\), \((c_2, d_2)\), ..., \((c_m, d_m)\).

За один ход вы можете подвинуть всех грабителей направо (увеличить \(a_i\) всех грабителей на единицу) или подвинуть всех грабителей вверх (увеличить \(b_i\) всех грабителей на единицу). Обратите внимание, что вы должны либо увеличить все \(a_i\), либо все \(b_i\), вы не можете увеличить \(a_i\) некоторых грабителей и \(b_i\) некоторых других грабителей за одну операцию.

Прожектор \(j\) освещает грабителя \(i\), если \(a_i \leq c_j\) и \(b_i \leq d_j\).

Конфигурация грабителей называется безопасной, если ни один прожектор не освещает ни одного грабителя (то есть нет такой пары \(i,j\), что прожектор \(j\) освещает грабителя \(i\)).

Какое минимальное количество ходов нужно сделать, чтобы грабители оказались в безопасной конфигурации?

Входные данные

В первой строке находится два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 2000\)): количество грабителей и количество прожекторов.

Каждая из следующих \(n\) строк содержит два целых числа \(a_i\), \(b_i\) (\(0 \leq a_i, b_i \leq 10^6\)), координаты грабителей.

Каждая из следующих \(m\) строк содержит два целых числа \(c_i\), \(d_i\) (\(0 \leq c_i, d_i \leq 10^6\)), координаты прожекторов.

Выходные данные

Выведите единственное целое число: минимальное количество ходов, необходимое, чтобы грабители оказались в безопасной конфигурации.

Примечание

В первом тесте вы можете подвинуть всех грабителей направо три раза. После этого будет один грабитель в координатах \((3, 0)\).

Конфигурация грабителей будет безопасной, потому что единственный прожектор не освещает грабителя, так как он в координатах \((2, 3)\), а \(3 > 2\).

Во втором тесте вы можете подвинуть всех грабителей направо два раза и вверх два раза. После этого грабители будут в координатах \((3, 8)\), \((8, 3)\).

Легко увидеть, что такая конфигурация безопасна.

Можно доказать, что невозможно получить безопасную конфигурацию, используя не больше, чем \(3\) хода.

E. Избегайте разноцветных циклов

графы Деревья жадные алгоритмы снм сортировки Структуры данных *2400

Вам дано \(m\) множеств \(A_1, A_2, \ldots, A_m\), состоящих из целых чисел; элементы этих множеств — целые числа от \(1\) до \(n\) включительно.

Есть два массива положительных целых чисел \(a_1, a_2, \ldots, a_m\) и \(b_1, b_2, \ldots, b_n\).

За одну операцию вы можете удалить элемент \(j\) из множества \(A_i\) и заплатить за это \(a_i + b_j\) монет.

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

После этого вы построите неориентированный граф, где каждое ребро будет иметь цвет. Граф будет иметь \(n\) вершин. Для каждого множества \(A_i\) вы добавите ребро \((x, y)\) цвета \(i\) для всех \(x, y \in A_i\) и \(x < y\). Некоторые пары вершин могут быть соединены больше чем одним ребром, но такие ребра будут иметь разные цвета.

Мы называем цикл \(i_1 \to e_1 \to i_2 \to e_2 \to \ldots \to i_k \to e_k \to i_1\) (\(e_j\) это какое-то ребро, соединяющее вершины \(i_j\) и \(i_{j+1}\) этого графа) разноцветным, если цвета всех ребер этого цикла различны.

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

Входные данные

В первой строке находится два целых числа \(m\) и \(n\) (\(1 \leq m, n \leq 10^5\)), количество множеств и количество вершин в графе.

Во второй строке находятся \(m\) целых чисел \(a_1, a_2, \ldots, a_m\) (\(1 \leq a_i \leq 10^9\)).

В третьей строке находятся \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq 10^9\)).

В каждой из следующих \(m\) строк находится описание множества. В \(i\)-й строке первое число \(s_i\) (\(1 \leq s_i \leq n\)) равно размеру \(A_i\). Затем следуют \(s_i\) целых чисел — элементы множества \(A_i\). Эти целые числа различны и находятся в пределах от \(1\) до \(n\) включительно.

Гарантируется, что сумма \(s_i\) для всех \(1 \leq i \leq m\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите единственное целое число — минимальное количество монет, которое нужно заплатить, чтобы получить граф без разноцветных циклов.

Примечание

В первом тесте можно сделать следующие операции.

  • Удалить элемент \(1\) из множества \(1\). Вы должны заплатить \(a_1 + b_1 = 5\) монет за эту операцию.
  • Удалить элемент \(1\) из множества \(2\). Вы должны заплатить \(a_2 + b_1 = 6\) монет за эту операцию.

Суммарно вы заплатите \(11\) монет. После этих операций первое и второй множества будут равны \(\{2\}\), а третье множество будет равно \(\{1, 2\}\). Поэтому построенный граф будет содержать одно ребро \((1, 2)\) цвета \(3\).

Во втором тесте можно сделать следующие операции.

  • Удалить элемент \(1\) из множества \(1\). Вы должны заплатить \(a_1 + b_1 = 11\) монет за эту операцию.
  • Удалить элемент \(4\) из множества \(2\). Вы должны заплатить \(a_2 + b_4 = 13\) монет за эту операцию.
  • Удалить элемент \(7\) из множества \(3\). Вы должны заплатить \(a_3 + b_7 = 13\) монет за эту операцию.
  • Удалить элемент \(4\) из множества \(4\). Вы должны заплатить \(a_4 + b_4 = 16\) монет за эту операцию.
  • Удалить элемент \(7\) из множества \(6\). Вы должны заплатить \(a_6 + b_7 = 13\) монет за эту операцию.

Суммарно вы заплатите \(66\) монет. После этих операций будут следующие множества:

  • \(\{2, 3\}\);
  • \(\{1\}\);
  • \(\{1, 3\}\);
  • \(\{3\}\);
  • \(\{3, 4, 5, 6, 7\}\);
  • \(\{5\}\);
  • \(\{8\}\).

Вы построите такой граф:

В нем нет разноцветных циклов.

H. Разноцветные тройки

Бинарный поиск жадные алгоритмы Потоки Структуры данных *3300

Вам дана последовательность \(a_1, a_2, \ldots, a_n\) неотрицательных целых чисел.

Вам нужно найти наибольшее число \(m\) троек \((i_1, j_1, k_1)\), \((i_2, j_2, k_2)\), ..., \((i_m, j_m, k_m)\) таких, что выполняются следующие условия:

  • \(1 \leq i_p < j_p < k_p \leq n\) для всех \(p\) среди \(1, 2, \ldots, m\);
  • \(a_{i_p} = a_{k_p} = 0\), \(a_{j_p} \neq 0\);
  • значения \(a_{j_1}, a_{j_2}, \ldots, a_{j_m}\) различны;
  • значения \(i_1, j_1, k_1, i_2, j_2, k_2, \ldots, i_m, j_m, k_m\) различны.
Входные данные

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 500\,000\)): количество наборов входных данных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(1 \leq n \leq 500\,000\)).

Во второй строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq n\)).

Сумма по всем \(n\) не превосходит \(500\,000\).

Выходные данные

Для каждого набора выходных данных выведите одно целое число \(m\): наибольшее количество троек, которое вы можете найти.

Примечание

В первых двух примерах не хватает элементов даже для одной тройки, так что ответ \(0\).

Во втором примере вы можете выбрать одну тройку \((1, 2, 3)\).

В четвертом примере можно выбрать две тройки \((1, 3, 5)\) и \((2, 4, 6)\).

В пятом примере можно выбрать одну тройку \((1, 2, 3)\). Мы не можем выбрать тройки \((1, 2, 3)\) и \((4, 5, 6)\) одновременно, так как \(a_2 = a_5\).

D. Сюрикены

жадные алгоритмы реализация Структуры данных *1700

Тентен продает оружие в магазине для ниндзя. Сегодня она хочет продать \(n\) сюрикенов стоимостью \(1\), \(2\), ..., \(n\) рё (местная валюта). В течение дня она будет выкладывать сюрикены на витрину, которая в начале дня пуста. Работа в магазине достаточно простая: в каждый момент времени либо Тентен выкладывает на витрину очередной сюрикен из еще не выложенных, либо к ней в магазин заходит ниндзя и покупает сюрикен с витрины. Поскольку ниндзя очень экономные, то в магазине они покупают самый дешевый из сюрикенов, которые сейчас лежат на витрине. В течение дня Тентен ведет список событий, и в ее списке есть два типа записей:

  • + означает, что она выкладывает на витрину очередной сюрикен;
  • - x означает, что у нее купили сюрикен стоимостью \(x\).

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

Входные данные

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

В следующих \(2n\) строках дана информация о произошедших событиях в формате, описанном выше. Гарантируется, что среди событий ровно \(n\) событий первого типа, а также, что во всех событиях второго типа присутствуют все числа от \(1\) до \(n\) по одному разу.

Выходные данные

Необходимо вывести «YES», если такой список мог получиться, и «NO» иначе.

Если список получиться мог, то в следующей строке необходимо вывести \(n\) различных чисел через пробел — стоимости сюрикенов в порядке, в котором Тентен должна выкладывать их на витрину. Если существует несколько решений, выведите любое из них.

Примечание

В первом примере Тентен сначала выложила на витрину сюрикены стоимостью \(4\) и \(2\). После этого к ней пришел покупатель и забрал самый дешевый сюрикен стоимостью \(2\). После этого к оставшемуся сюрикену стоимостью \(4\) она выложила сюрикен стоимостью \(3\). После этого к ней пришел покупатель и забрал сюрикен стоимостью \(3\). После этого она выложила сюрикен стоимостью \(1\). После этого к ней пришел покупатель и забрал сюрикен стоимостью \(1\). Потом к ней пришел еще один покупатель и забрал последний сюрикен стоимостью \(4\). Обратите внимание, что порядок \([2, 4, 3, 1]\) также является верным.

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

В третьем примере Тентен выложила на витрину все сюрикены, после этого к ней пришел покупатель и забрал сюрикен стоимостью \(2\). Такого быть не могло, потому что этот сюрикен не был самым дешевым из тех, что лежали на витрине (ведь там был еще сюрикен стоимостью \(1\)).

F. Дороги и рамен

Деревья Структуры данных *2800

В стране Огня есть \(n\) деревень и \(n-1\) двусторонняя дорога, причем из каждой деревни можно добраться в каждую по дорогам. В этой стране есть только два типа дорог: каменные и песчаные. Поскольку страна Огня очень прогрессивная и постоянно обновляется, то каждый день рано утром строители выбирают одну дорогу и меняют ее тип (с каменной на песчаную или наоборот). А еще в стране Огня все любят рамен, поэтому каждый день на каждой каменной дороге устанавливается одна палатка с раменом, а в конце дня палатку убирают.

В течение каждого из ближайших \(m\) дней, после того как очередную дорогу переделают, Наруто и Джирайя выбирают себе простой маршрут по стране Огня. Их маршрут может начинаться с любой деревни и заканчиваться тоже в любой (возможно, той же), но по каждой дороге они могут проходить не более одного раза. Поскольку Наруто и Джирайя очень любят рамен, то на каждой каменной дороге они обязательно покупают ровно одну тарелку рамена и кто-нибудь один из них ее ест. Поскольку у ниндзя все должно быть честно, то они выбирают только те пути, проходя по которым они могут съесть равное количество тарелок с раменом. Наруто и Джирайя любят много путешествовать, поэтому каждый день они выбирают самый длинный путь из подходящих. Для каждого дня необходимо определить максимальную длину пути (то есть количество дорог в нём), которым могут пойти Наруто и Джирайя.

Входные данные

В первой строке дано натуральное число \(n\) (\(2 \leq n \leq 500\,000\)) — число деревень в стране Огня.

Каждая из следующей \((n-1)\) строки содержит описание дороги: три натуральных числа \(u\), \(v\) и \(t\) (\(1 \leq u, v \leq n\), \(t \in \{0,1\}\)). Первые два числа определяют номера деревень, между которыми проложена дорога, а третье число определяет начальный тип дороги: \(0\) — песчаная, \(1\) — каменная. Дороги нумеруются числами от \(1\) до \((n-1)\) в порядке, заданном во входных данных.

В следующей строке задано натуральное число \(m\) (\(1 \leq m \leq 500\,000\)) — число дней, которые путешествуют Наруто и Джирайя.

Каждая из последующих \(m\) строк содержит одно число \(id\) (\(1 \leq id \leq n-1\)) — номер дороги, которую переделывают утром соответствующего дня.

Гарантируется, что между любыми двумя деревнями есть путь по дорогам.

Выходные данные

Необходимо вывести \(m\) строк, \(i\)-я из которых содержит максимальную длину подходящего пути в \(i\)-й день.

Примечание

После изменения дороги под номером \(3\) самый длинный путь состоит из дорог \(1\), \(2\) и \(4\).

После изменения дороги под номером \(4\) самый длинный путь может состоять из дорог \(1\) и \(2\).

После изменения дороги под номером \(1\) самый длинный путь может состоять из дорог \(1\), \(2\) и \(3\).

После изменения дороги под номером \(3\) самый длинный путь состоит из дорог \(1\), \(2\) и \(4\).

После изменения дороги под номером \(4\) самый длинный путь может состоять из дорог \(2\) и \(4\).

A. k-удивительные числа

Бинарный поиск реализация Структуры данных *1500

Вам дан массив \(a\) из \(n\) целых чисел, пронумерованных от \(1\) до \(n\).

Назовем \(k\)-удивительным числом массива минимальное число, которое встречается во всех подмассивах длины \(k\) (напомним, что подмассивом массива \(a\) длины \(k\) называются \(k\) подряд идущих элементов массива \(a\)). Если для некоторого \(k\) не существует ни одного числа, встречающегося во всех подмассивах длины \(k\), то \(k\)-удивительным числом считается \(-1\).

Для каждого \(k\) от \(1\) до \(n\) найдите \(k\)-удивительное число массива \(a\).

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — длина массива. Вторая строка набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам тестовых данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора тестовых данных выведите \(n\) целых чисел, где \(i\)-е число является \(i\)-удивительным числом массива.

C. XOR-инверсии

битмаски Деревья дп жадные алгоритмы математика разделяй и властвуй сортировки Строки Структуры данных *2000

Вам задан массив \(a\), состоящий из \(n\) неотрицательных целых чисел. Вы должны выбрать неотрицательное целое число \(x\) и сформировать массив \(b\) из \(n\) элементов по следующему правилу: для всех \(i\) от \(1\) до \(n\), \(b_i = a_i \oplus x\) (\(\oplus\) обозначает операцию побитового исключающего ИЛИ).

Назовем инверсией в массиве \(b\) такую пару целых чисел \(i\) и \(j\), что \(1 \le i < j \le n\) и \(b_i > b_j\).

Вы должны выбрать \(x\) таким образом, чтобы количество инверсий в массиве \(b\) было минимально возможным. Если таких \(x\) несколько — выведите минимальное из них.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество элементов в массиве \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(0 \le a_i \le 10^9\)), где \(a_i\)\(i\)-й элемент \(a\).

Выходные данные

Выведите два целых числа: минимально возможное количество инверсией в массиве \(b\), и минимальное значение \(x\), при котором достигается такое количество инверсий.

Примечание

В первом примере из условия оптимально оставить массив без изменений, выбрав \(x = 0\).

Во втором примере из условия при выборе \(x = 14\) получается следующий массив \(b\): \([4, 9, 7, 4, 9, 11, 11, 13, 11]\). В нем \(4\) инверсии:

  • \(i = 2\), \(j = 3\);
  • \(i = 2\), \(j = 4\);
  • \(i = 3\), \(j = 4\);
  • \(i = 8\), \(j = 9\).

В третьем примере из условия при выборе \(x = 8\) получается следующий массив \(b\): \([0, 2, 11]\). В нем нет ни одной инверсии.

D. Граф и запросы

графы Деревья реализация снм Структуры данных *2600

Вам дан неориентированный граф из \(n\) вершин и \(m\) ребер. Изначально в каждой вершине записано число: в вершине \(i\) записано число \(p_i\) (все \(p_i\) — различные числа от \(1\) до \(n\)).

Вы должны обработать \(q\) запросов двух типов:

  • \(1\) \(v\) — среди всех вершин, достижимых из вершины \(v\) по ребрам (включая саму вершину \(v\)), найти вершину \(u\) с максимальным записанным в ней числом \(p_u\), вывести \(p_u\) и заменить \(p_u\) на \(0\);
  • \(2\) \(i\) — удалить \(i\)-е ребро из графа.

Обратите внимание, что в запросе первого типа может возникнуть такая ситуация, что во всех вершинах, достижимых из \(v\), записано число \(0\) — в таком случае вершина \(u\) явно не определена, но так как от выбора конкретной вершины \(u\) ничего не зависит, в ответ на такой запрос можно выбрать любую вершину, достижимую из \(v\), и вывести число, записанное в ней (то есть \(0\)).

Входные данные

В первой строке заданы три целых числа \(n\), \(m\) и \(q\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le m \le 3 \cdot 10^5\); \(1 \le q \le 5 \cdot 10^5\)).

Во второй строке заданы \(n\) различных чисел \(p_1\), \(p_2\), ..., \(p_n\), где \(p_i\) — число, изначально записанное в вершине \(i\) (\(1 \le p_i \le n\)).

Далее следует \(m\) строк, \(i\)-я строка содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le n\), \(a_i \ne b_i\)) и обозначает, что \(i\)-е ребро соединяет вершины \(a_i\) и \(b_i\). Гарантируется, что граф не содержит кратных ребер.

Далее следуют \(q\) строк, задающих запросы. Каждая строка задается одним из следующих форматов:

  • \(1\) \(v\) — обозначает, что очередной запрос — первого типа с заданной вершиной \(v\) (\(1 \le v \le n\));
  • \(2\) \(i\) — обозначает, что очередной запрос — второго типа с заданным ребром \(i\) (\(1 \le i \le m\)). Гарантируется, что на момент каждого запроса второго типа соответствующее ребро еще не удалено из графа.
Выходные данные

На каждый запрос первого типа выведите одно целое число — значение \(p_u\), записанное в выбранной в запросе вершине \(u\).

E. Разложи

Бинарный поиск дп жадные алгоритмы Структуры данных *3200

В один день BThero решил поиграться с массивами и придумал следующую задачу:

Вам дан массив \(a\), состоящий из \(n\) положительных целых чисел. Массив нумеруется с \(1\) до \(n\). Вы выполняете следующую процедуру ровно один раз:

  • Вы создаете новый массив \(b\), состоящий из \(2n\) положительных целых чисел, где для каждого \(1 \le i \le n\) выполнено условие \(b_{2i-1}+b_{2i} = a_i\). Например, для \(a = [6, 8, 2]\) можно создать \(b = [2, 4, 4, 4, 1, 1]\).
  • Вы склеиваете подряд идущие одинаковые числа в \(b\). Например, \(b = [2, 4, 4, 4, 1, 1]\) станет \(b = [2, 4, 1]\).

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

Входные данные

В первой строке входного файла задано одно целое число \(T\) (\(1 \le T \le 5 \cdot 10^5\)) — кол-во наборов входных данных. Далее следуют \(T\) наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(2 \le a_i \le 10^9\)).

Гарантируется, что \(\sum{n}\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в новой строке одно положительное целое число — минимальное возможное значение \(|b|\).

D. Мусорная задача

реализация Структуры данных *2100

Вова решил прибраться в своей комнате. Комната может быть представлена как координатная ось \(OX\). Всего в комнате есть \(n\) кучек мусора, координата \(i\)-й кучки равна целому числу \(p_i\). Все кучки имеют различные координаты.

Давайте определим генеральную уборку как следующий процесс. Цель этого процесса —- собрать все кучки в не более чем двух различных \(x\) координатах. Чтобы достичь этой цели, Вова может совершить некоторое (возможно, нулевое) количество ходов. За один ход он может выбрать какой-либо \(x\) и переместить все кучки из \(x\) в \(x+1\) или \(x-1\) при помощи метлы. Заметьте, что он не может выбирать, сколько кучек он будет двигать.

Также существует два типа запросов:

  • \(0\) \(x\) — удалить кучку мусора из координаты \(x\). Гарантируется, что в координате \(x\) находится кучка в этот момент времени.
  • \(1\) \(x\) — добавить кучку мусора в координату \(x\). Гарантируется, что в координате \(x\) не находится кучки мусора в этот момент времени.

Заметьте, что в какой-либо момент времени в комнате может быть нулевое количество кучек мусора.

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

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

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 10^5\)) — количество кучек в комнате перед выполнением всех запросов и количество запросов, соответственно.

Вторая строка входных данных содержит \(n\) различных целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le 10^9\)), где \(p_i\) равно координате \(i\)-й кучки.

Следующие \(q\) строк описывают запросы. \(i\)-й запрос описывается двумя целыми числами \(t_i\) и \(x_i\) (\(0 \le t_i \le 1; 1 \le x_i \le 10^9\)), где \(t_i\) равно \(0\), если вам необходимо удалить кучку из координаты \(x_i\), и равно \(1\), если вам необходимо добавить кучку в координату\(x_i\). Гарантируется, что для \(t_i = 0\) такая кучка находится в текущем множестве кучек, а для \(t_i = 1\) такая кучка не находится в текущем множестве кучек.

Выходные данные

Выведите \(q+1\) целое число: минимальное количество ходов, которое нужно Вове, чтобы устроить генеральную уборку перед первым запросом и после каждого из \(q\) запросов.

Примечание

Рассмотрим первый пример.

Изначально множество кучек равно \([1, 2, 6, 8, 10]\). Ответ перед первым запросом равен \(5\), потому что вы можете сдвинуть все кучки из \(1\) в \(2\) за один ход, все кучки из \(10\) в \(8\) за \(2\) хода и все кучки из \(6\) в \(8\) за \(2\) хода.

После первого запроса множество превращается в \([1, 2, 4, 6, 8, 10]\). Тогда ответ равен \(7\), потому что вы можете сдвинуть все кучки из \(6\) в \(4\) за \(2\) хода, все кучки из \(4\) в \(2\) за \(2\) хода, все кучки из \(2\) в \(1\) за \(1\) ход и все кучки из \(10\) в \(8\) за \(2\) хода.

После второго запроса множество превращается в \([1, 2, 4, 6, 8, 9, 10]\), а ответ остается таким же самым (и предыдущая последовательность ходов может быть применена к текущему множеству кучек).

После третьего запроса множество превращается в \([1, 2, 4, 8, 9, 10]\), а ответ равен \(5\), потому что вы можете сдвинуть все кучки из \(1\) в \(2\) за \(1\) ход, все кучки из \(2\) в \(4\) за \(2\) хода, все кучки из \(10\) в \(9\) за \(1\) ход и все кучки из \(9\) в \(8\) за \(1\) ход.

После четвертого запроса множество превращается в \([1, 2, 4, 8, 9]\), а ответ остается почти таким же самым (предыдущая последовательность может быть применена полностью, исключая перемещение кучек из \(10\)).

После пятого запроса множество превращается в \([1, 2, 4, 8, 9, 100]\). Вы можете сдвинуть все кучки из \(1\) и дальше в \(9\), а \(100\) оставить на ее месте. Таким образом, ответ равен \(8\).

После шестого запроса множество превращается в \([1, 2, 4, 8, 9, 50, 100]\). Ответ равен \(49\) и может быть получен при помощи почти такой же последовательности ходов, как и после предыдущего запроса. Единственная разница заключается в том, что вы также должны двигать все кучки из \(50\) в \(9\).

F. Одинаковое произведение

математика Структуры данных теория чисел *3000

Вам задано четыре целых числа \(n\), \(m\), \(l\) и \(r\).

Назовем четверку чисел \((x_1, y_1, x_2, y_2)\) хорошей если:

  1. \(1 \le x_1 < x_2 \le n\);
  2. \(1 \le y_2 < y_1 \le m\);
  3. \(x_1 \cdot y_1 = x_2 \cdot y_2\);
  4. \(l \le x_1 \cdot y_1 \le r\).

Найдите любую хорошую четверку для каждого \(x_1\) от \(1\) по \(n\) включительно.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)).

Вторая строка содержит два целых числа \(l\) и \(r\) (\(1 \le l \le r \le nm\)).

Выходные данные

Для каждого \(x_1\) от \(1\) по \(n\):

  • если такой четверки целых чисел не существует, выведите \(-1\);
  • Иначе, выведите четыре целых числа \(x_1\), \(y_1\), \(x_2\) и \(y_2\). Если существует несколько возможных ответов, выведите любой из них.

G. Три вхождения

разделяй и властвуй Структуры данных хэши *2500

Дан массив \(a\), состоящий из \(n\) целых чисел. Назовем подмассивом \(a[l..r]\) массив \([a_l, a_{l + 1}, \dots, a_r]\) (\(1 \le l \le r \le n\)).

Назовем подмассив хорошим, если каждое число, которое принадлежит подмассиву, встречается в нем ровно три раза. Например, у массива \([1, 2, 2, 2, 1, 1, 2, 2, 2]\) три хороших подмассива:

  • \(a[1..6] = [1, 2, 2, 2, 1, 1]\);
  • \(a[2..4] = [2, 2, 2]\);
  • \(a[7..9] = [2, 2, 2]\).

Посчитайте количество хороших подмассивов массива \(a\).

Входные данные

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

Во второй строке заданы \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le n\)).

Выходные данные

Выведите одно целое число — количество хороших подмассивов массива \(a\).

F. Огненный ливень

Бинарный поиск графы поиск в глубину и подобное реализация снм Структуры данных *2800

На плоскости есть \(n\) отрядов, пронумерованных от \(1\) до \(n\), \(i\)-й отряд находится в точке с целочисленными координатами \((x_i, y_i)\). Все отряды находятся в различных точках.

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

Чтобы перейти от одного отряда к другому, Бримстоун выбирает одно из четырех направлений движения (вверх, вниз, вправо или влево) и двигается в этом направлении с постоянной скоростью — один единичный отрезок в секунду — до тех пор, пока не придёт к какому-либо отряду. Как только он приходит к какому-либо отряду, он может повторить этот процесс.

Каждые \(t\) секунд происходит огненный ливень, и в эти моменты Бримстоун должен находиться в одной точке с любым своим отрядом. Он может сколько угодно времени стоять на месте в одной точке с любым отрядом.

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

Помогите Бримстоуну, найдите минимальное целое положительное \(t\) такое, что обход можно произвести, добавив не более одного отряда. Если такого \(t\) не существует, вы должны сообщить об этом.

Входные данные

В первой строке находится единственное целое число \(n\) \((2 \le n \le 1000)\) — изначальное количество отрядов.

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

Гарантируется, что все точки различны.

Выходные данные

Выведите единственное целое число — минимальное время \(t\), такое что обход всех отрядов можно произвести, добавив не более одного нового отряда.

Если ни одного такого \(t\) не существует, выведите \(-1\).

Примечание

В первом примере из условия можно добавить отряд в точку \((0, 0)\), после чего все отряды можно будет обойти при \(t = 100\). Можно доказать, что при \(t < 100\), даже добавив не более одного нового отряда, не получится сделать обход, поэтому ответ \(100\).

Во втором тесте из условия нельзя посетить все отряды ни при каком \(t\), даже при добавлении не более одного нового отряда, поэтому ответ \(-1\).

В третьем тесте можно добавить отряд в точку \((1, 0)\), и тогда все отряды можно будет обойти при \(t = 2\). Можно доказать, что это минимальное такое \(t\).

В четвертом тесте не нужно добавлять новый отряд и можно обойти все отряды при \(t = 2\). Можно доказать, что это минимальное такое \(t\).

C2. Армия покемонов (сложная версия)

дп жадные алгоритмы разделяй и властвуй реализация Структуры данных *2100

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

Пикачу — милый и дружелюбный покемон, живущий в стае диких пикачу.

Однако недавно стало известно, что команда R хочет украсть всех этих покемонов! Тренер покемонов Андрей решил помочь Пикачу собрать армию для борьбы с командой R.

В первую очередь Андрей посчитал всех покемонов: их оказалось ровно \(n\) штук. Затем он установил силу каждого покемона и так получилось, что \(i\)-й покемон имеет силу, равную \(a_i\), и силы всех покемонов различны.

В качестве армии Андрей может выбрать любую непустую подпоследовательность покемонов. Иными словами, Андрей выбирает какой-то массив \(b\) из \(k\) индексов таких, что \(1 \le b_1 < b_2 < \dots < b_k \le n\), и его армия будет состоять из покемонов с силами \(a_{b_1}, a_{b_2}, \dots, a_{b_k}\).

Сила армии вычисляется как знакопеременная сумма элементов подпоследовательности, то есть \(a_{b_1} - a_{b_2} + a_{b_3} - a_{b_4} + \dots\).

Андрей экспериментирует с построением покемонов. Он \(q\) раз меняет двух покемонов местами, а именно, в \(i\)-й раз он менял местами покемонов с номерами \(l_i\) и \(r_i\).

Андрею надо знать: какую максимальную силу армии он мог получить при начальной расстановке покемонов, а также после каждого изменения строя?

Помогите Андрею и покемонам, иначе команде R удастся воплотить в жизнь свой коварный план!

Входные данные

Каждый тест содержит несколько наборов входных данных.

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

В первой строке каждого набора входных данных находятся два целых числа \(n\) и \(q\) (\(1 \le n \le 3 \cdot 10^5, 0 \le q \le 3 \cdot 10^5\)) — количество покемонов и количество обменов соответственно.

Во второй строке находятся \(n\) различных целых положительных чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — силы покемонов.

\(i\)-я из следующих \(q\) строк содержит два целых положительных числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — номера обмениваемых покемонов в \(i\)-й операции.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\), а также сумма \(q\) по всем тестовым случаям не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q+1\) число — максимально возможную силу армии до изменений и после каждого изменения.

Примечание

Рассмотрим третий набор входных данных:

Изначально мы можем выбрать армию следующим образом: [1 2 5 4 3 6 7], при этом ее итоговая сила будет \(5-3+7=9\).

После первого изменения выбор армии будет таким: [2 1 5 4 3 6 7], при этом ее итоговая сила будет \(2-1+5-3+7=10\).

Далее выбор армии будет таким: [2 1 5 4 3 7 6], при этом ее итоговая сила будет \(2-1+5-3+7=10\).

После третьего изменения армию можно выбрать так: [2 1 4 5 3 7 6], при этом ее итоговая сила будет \(2-1+5-3+7=10\).

Далее выбор армии будет таким: [1 2 4 5 3 7 6], при этом ее итоговая сила будет \(5-3+7=9\).

После всех запросов выбор армии будет таким: [1 4 2 5 3 7 6], при этом ее итоговая сила будет \(4-2+5-3+7=11\).

D. Спасти Нибель!

Комбинаторика сортировки Структуры данных *1800

Преодолев множество сложных испытаний, Ори и Сейн наконец-то зажгли Укрытый Светильник и нашли Печать Гумон, ключ к Руинам Форлорна! Когда же они наконец вставили Печать в дверь... ничего не произошло.

Ори очень этому удивился, но Сейн быстро все объяснил: хитрые Гумон решили наложить дополнительную защиту на дверь.

На двери расположено \(n\) светильников, наполненных светом Древа Духов. Сейн точно знает: \(i\)-й светильник горит в моменты времени с \(l_i\) по \(r_i\) включительно. Чтобы открыть дверь, необходимо выбрать такие \(k\) светильников, что они все горят одновременно в какой-то момент времени.

Пока Сейн решает, какие же \(k\) светильников выбрать, Ори стало интересно: а сколько всего существует способов выбрать \(k\) светильников так, чтобы дверь открылась? Может получиться и так, что Сейн что-то напутал, и таких \(k\) светильников просто не существует. Так как это число может быть очень большим, выводите его остаток от деления на \(998\,244\,353\).

Входные данные

В первой строке находится два целых числа \(n\) и \(k\) (\(1 \le n \le 3 \cdot 10^5\), \(1 \le k \le n\)) — общее количество светильников и количество светильников, которые должны гореть одновременно.

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

Выходные данные

Выведите одно целое число — ответ на задачу по модулю \(998\,244\,353\).

Примечание

В первом примере всего девять подходящих наборов из \(k\) ламп: \((1, 2, 3)\), \((1, 2, 4)\), \((1, 2, 5)\), \((1, 2, 6)\), \((1, 3, 6)\), \((1, 4, 6)\), \((2, 3, 6)\), \((2, 4, 6)\), \((2, 6, 7)\).

Во втором примере \(k=1\), поэтому подходит каждый светильник.

В третьем примере нет двух светильников, горящих одновременно, поэтому ответ 0.

В четвертом примере все светильники горят в момент времени \(3\), поэтому ответ 1.

В пятом примере всего семь наборов из \(k\) ламп: \((1, 2)\), \((1, 3)\), \((2, 3)\), \((2, 4)\), \((3, 4)\), \((3, 5)\), \((4, 5)\).

F. Скучные запросы

математика Структуры данных теория чисел *2700

У Юры есть очень самый обыкновенный и скучный массив \(a\) длины \(n\). Казалось бы, ничего скучнее быть не может, но Владик так не думает!

Чтобы сделать массив Юры более скучным, Владик решил сделать \(q\) скучных запросов. Каждый запрос состоит из двух целых чисел \(x\) и \(y\). Далее для вычисления границ \(l\) и \(r\) данного запроса используется формула: \(l = (last + x) \bmod n + 1\), \(r = (last + y) \bmod n + 1\), где \(last\) — это ответ на предыдущий запрос (изначально он равен нулю), а \(\bmod\) — это операция взятия остатка от деления. Если получилось, что \(l > r\), то их значения нужно поменять местами.

Когда Владик наконец посчитал границы \(l\) и \(r\) для текущего запроса, то он захотел узнать значение наименьшего общего кратного (НОК) на отрезке \([l; r]\) для исходного массива \(a\) по модулю \(10^9 + 7\). НОК некоторого набора элементов — это наименьшее натуральное число, которое делится на каждое из чисел данного набора. Посчитанный НОК будет являться ответом на текущий запрос.

Помогите Владику и выведите ответ на каждый запрос!

Входные данные

Первая строка ввода содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — количество элементов массива.

Следующая строка содержит \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 2 \cdot 10^5\)) — описание элементов массива.

Третья строка ввода содержит единственное целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов.

Следующие \(q\) строк содержат по два целых числа \(x\) и \(y\) (\(1 \le x, y \le n\)) — описание очередного запроса.

Выходные данные

Выведите \(q\) целых чисел — ответ на каждый запрос.

Примечание

Пояснение к примеру:

  • границы первого запроса \((0 + 1) \bmod 3 + 1 = 2\) и \((0 + 3) \bmod 3 + 1 = 1\). НОК на отрезке \([1, 2]\) равен \(6\);
  • границы второго запроса \((6 + 3) \bmod 3 + 1 = 1\) и \((6 + 3) \bmod 3 + 1 = 1\). НОК на отрезке \([1, 1]\) равен \(2\);
  • границы третьего запроса \((2 + 2) \bmod 3 + 1 = 2\) и \((2 + 3) \bmod 3 + 1 = 3\). НОК на отрезке \([2, 3]\) равен \(15\);
  • границы четвертого запроса \((15 + 2) \bmod 3 + 1 = 3\) и \((15 + 3) \bmod 3 + 1 = 1\). НОК на отрезке \([1, 3]\) равен \(30\).

G. Growing flowers

Структуры данных *3500

Sarah has always been a lover of nature, and a couple of years ago she saved up enough money to travel the world and explore all the things built by nature over its lifetime on earth. During this time she visited some truly special places which were left untouched for centuries, from watching icebergs in freezing weather to scuba-diving in oceans and admiring the sea life, residing unseen. These experiences were enhanced with breathtaking views built by mountains over time and left there for visitors to see for years on end. Over time, all these expeditions took a toll on Sarah and culminated in her decision to settle down in the suburbs and live a quiet life.

However, as Sarah's love for nature never faded, she started growing flowers in her garden in an attempt to stay connected with nature. At the beginning she planted only blue orchids, but over time she started using different flower types to add variety to her collection of flowers. This collection of flowers can be represented as an array of \(N\) flowers and the \(i\)-th of them has a type associated with it, denoted as \(A_i\). Each resident, passing by her collection and limited by the width of his view, can only see \(K\) contiguous flowers at each moment in time. To see the whole collection, the resident will look at the first \(K\) contiguous flowers \(A_1, A_2, ..., A_K\), then shift his view by one flower and look at the next section of K contiguous flowers \(A_2, A_3, ..., A_{K+1}\) and so on until they scan the whole collection, ending with section \(A_{N-K+1}, ..., A_{N-1}, A_N\).

Each resident determines the beautiness of a section of \(K\) flowers as the number of distinct flower types in that section. Furthermore, the beautiness of the whole collection is calculated by summing the beautiness values of each contiguous section. Formally, beautiness \(B_i\) of a section starting at the \(i\)-th position is calculated as \(B_i = distinct(A_i, A_{i+1}, ..., A_{i+K-1})\), and beautiness of the collection \(B\) is calculated as \(B=B_1 + B_2 + ... + B_{N-K+1}\).

In addition, as Sarah wants to keep her collection of flowers have a fresh feel, she can also pick two points \(L\) and \(R\), dispose flowers between those two points and plant new flowers, all of them being the same type.

You will be given \(Q\) queries and each of those queries will be of the following two types:

  1. You will be given three integers \(L, R, X\) describing that Sarah has planted flowers of type \(X\) between positions \(L\) and \(R\) inclusive. Formally collection is changed such that \(A[i]=X\) for all \(i\) in range \([L.. R]\).
  2. You will be given integer \(K\), width of the resident's view and you have to determine the beautiness value \(B\) resident has associated with the collection

For each query of second type print the result – beautiness \(B\) of the collection.

Input

First line contains two integers \(N\) and \(Q \;(1 \leq N, Q \leq 10^5)\,\) — number of flowers and the number of queries, respectively.

The second line contains \(N\) integers \(A_1, A_2, ..., A_N\;(1 \leq A_i \leq 10^9)\,\) — where \(A_i\) represents type of the \(i\)-th flower.

Each of the next \(Q\) lines describe queries and start with integer \(T\in\{1, 2\}\).

  • If \(T = 1\), there will be three more integers in the line \(L, R, X\;(1 \leq L, R \leq N;\; 1 \leq X \leq 10^9)\,\)\(L\) and \(R\) describing boundaries and \(X\) describing the flower type
  • If \(T = 2\), there will be one more integer in the line \(K\;(1 \leq K \leq N)\,\) — resident's width of view
Output

For each query of the second type print the beautiness \(B\) of the collection.

Note

Let's look at the example.

Initially the collection is \([1, 2, 3, 4, 5]\). In the first query \(K = 3\), we consider sections of three flowers with the first being \([1, 2, 3]\). Since beautiness of the section is the number of distinct flower types in that section, \(B_1 = 3\). Second section is \([2, 3, 4]\) and \(B_2 = 3\). Third section is \([3, 4, 5]\) and \(B_3 = 3\), since the flower types are all distinct. The beautiness value resident has associated with the collection is \(B = B_1 + B_2 + B_3 = 3 + 3 + 3 = 9\).

After the second query, the collection becomes \([5, 5, 3, 4, 5]\).

For the third query \(K = 4\), so we consider sections of four flowers with the first being \([5, 5, 3, 4]\). There are three distinct flower types \([5, 3, 4]\) in this section, so \(B_1 = 3\). Second section \([5, 3, 4, 5]\) also has \(3\) distinct flower types, so \(B_2 = 3\). The beautiness value resident has associated with the collection is \(B = B_1 + B_2 = 3 + 3 = 6\)

After the fourth query, the collection becomes \([5, 5, 5, 5, 5]\).

For the fifth query \(K = 2\) and in this case all the four sections are same with each of them being \([5, 5]\). Beautiness of \([5, 5]\) is \(1\) since there is only one distinct element in this section \([5]\). Beautiness of the whole collection is \(B = B_1 + B_2 + B_3 + B_4 = 1 + 1 + 1 + 1 = 4\)

H. Virus

графы разделяй и властвуй снм Структуры данных *2500

In Bubbleland a group of special programming forces gets a top secret job to calculate the number of potentially infected people by a new unknown virus. The state has a population of \(n\) people and every day there is new information about new contacts between people. The job of special programming forces is to calculate how many contacts in the last \(k\) days a given person had.

The new virus has an incubation period of \(k\) days, and after that time people consider as non-infectious. Because the new virus is an extremely dangerous, government mark as suspicious everybody who had direct or indirect contact in the last \(k\) days, independently of the order of contacts.

This virus is very strange, and people can't get durable immunity.

You need to help special programming forces to calculate the number of suspicious people for a given person (number of people who had contact with a given person).

There are 3 given inputs on beginning \(n\) where \(n\) is population, \(q\) number of queries, \(k\) virus incubation time in days. Each query is one of three types:

  1. (\(x\), \(y\)) person \(x\) and person \(y\) met that day (\(x \neq y\)).
  2. (\(z\)) return the number of people in contact with \(z\), counting himself.
  3. The end of the current day moves on to the next day.
Input

The first line of input contains three integers \(n\) (\(1 \le n\le 10^5\)) the number of people in the state, \(q\) (\(1 \le q\le 5×10^5\)) number of queries and \(k\) (\(1 \le k\le 10^5\)) virus incubation time in days.

Each of the next \(q\) lines starts with an integer \(t\) (\(1 \le t\le 3\)) the type of the query.

A pair of integers \(x\) and \(y\) (\(1 \le x, y \le n\)) follows in the query of the first type (\(x \neq y\)).

An integer \(i\) (\(1 \le i\le n\)) follows in the query of the second type.

Query of third type does not have the following number.

Output

For the queries of the second type print on a separate line the current number of people in contact with a given person.

Note

Pay attention if persons \(1\) and \(2\) had contact first day and next day persons \(1\) and \(3\) had contact, for \(k\)>\(1\) number of contacts of person \(3\) is \(3\)(persons:1,2,3).

G. Years

сортировки Структуры данных *1300

During one of the space missions, humans have found an evidence of previous life at one of the planets. They were lucky enough to find a book with birth and death years of each individual that had been living at this planet. What's interesting is that these years are in the range \((1, 10^9)\)! Therefore, the planet was named Longlifer.

In order to learn more about Longlifer's previous population, scientists need to determine the year with maximum number of individuals that were alive, as well as the number of alive individuals in that year. Your task is to help scientists solve this problem!

Input

The first line contains an integer \(n\) (\(1 \le n \le 10^5\)) — the number of people.

Each of the following \(n\) lines contain two integers \(b\) and \(d\) (\(1 \le b \lt d \le 10^9\)) representing birth and death year (respectively) of each individual.

Output

Print two integer numbers separated by blank character, \(y\)  — the year with a maximum number of people alive and \(k\)  — the number of people alive in year \(y\).

In the case of multiple possible solutions, print the solution with minimum year.

Note

You can assume that an individual living from \(b\) to \(d\) has been born at the beginning of \(b\) and died at the beginning of \(d\), and therefore living for \(d\) - \(b\) years.

I. Impressive Harvesting of The Orchard

Структуры данных *2800

Mr. Chanek has an orchard structured as a rooted ternary tree with \(N\) vertices numbered from \(1\) to \(N\). The root of the tree is vertex \(1\). \(P_i\) denotes the parent of vertex \(i\), for \((2 \le i \le N)\). Interestingly, the height of the tree is not greater than \(10\). Height of a tree is defined to be the largest distance from the root to a vertex in the tree.

There exist a bush on each vertex of the tree. Initially, all bushes have fruits. Fruits will not grow on bushes that currently already have fruits. The bush at vertex \(i\) will grow fruits after \(A_i\) days since its last harvest.

Mr. Chanek will visit his orchard for \(Q\) days. In day \(i\), he will harvest all bushes that have fruits on the subtree of vertex \(X_i\). For each day, determine the sum of distances from every harvested bush to \(X_i\), and the number of harvested bush that day. Harvesting a bush means collecting all fruits on the bush.

For example, if Mr. Chanek harvests all fruits on subtree of vertex \(X\), and harvested bushes \([Y_1, Y_2, \dots, Y_M]\), the sum of distances is \(\sum_{i = 1}^M \text{distance}(X, Y_i)\)

\(\text{distance}(U, V)\) in a tree is defined to be the number of edges on the simple path from \(U\) to \(V\).

Input

The first line contains two integers \(N\) and \(Q\) \((1 \le N,\ Q,\le 5 \cdot 10^4)\), which denotes the number of vertices and the number of days Mr. Chanek visits the orchard.

The second line contains \(N\) integers \(A_i\) \((1 \le A_i \le 5 \cdot 10^4)\), which denotes the fruits growth speed on the bush at vertex \(i\), for \((1 \le i \le N)\).

The third line contains \(N-1\) integers \(P_i\) \((1 \le P_i \le N, P_i \ne i)\), which denotes the parent of vertex \(i\) in the tree, for \((2 \le i \le N)\). It is guaranteed that each vertex can be the parent of at most \(3\) other vertices. It is also guaranteed that the height of the tree is not greater than \(10\).

The next \(Q\) lines contain a single integer \(X_i\) \((1 \le X_i \le N)\), which denotes the start of Mr. Chanek's visit on day \(i\), for \((1 \le i \le Q)\).

Output

Output \(Q\) lines, line \(i\) gives the sum of distances from the harvested bushes to \(X_i\), and the number of harvested bushes.

Note

For the first example:

  • On day 1, Mr. Chanek starts at vertex \(2\) and can harvest the bush at vertex 2.
  • On day 2, Mr. Chanek starts at vertex \(1\) and only harvest from bush \(1\) (bush 2's fruit still has not grown yet).
  • On day 3, Mr. Chanek starts at vertex \(1\) and harvests the fruits on bush \(1\) and \(2\). The sum of distances from every harvested bush to \(1\) is \(1\).

For the second example, Mr. Chanek always starts at vertex \(1\). The bushes which Mr. Chanek harvests on day one, two, and three are \([1, 2, 3, 4, 5], [2, 3], [1, 2, 3, 5]\), respectively.

D. Ненулевые отрезки

жадные алгоритмы Конструктив сортировки Структуры данных *1500

У Коли есть массив целых чисел \(a_1, a_2, \dots, a_n\). Числа в массиве могут быть и положительными, и отрицательными, но так как Коля не любит число \(0\), то таких чисел в его массиве нет.

Коле не нравится, что сумма элементов на некоторых подотрезках его массива может быть равна \(0\). Под подотрезком массива следует понимать некоторую непустую последовательность подряд идущих элементов массива.

Вы должны помочь Коле и сделать так, чтобы в его массиве не было подотрезков с суммой элементов равной \(0\). Для этого вы можете вставлять в его массив произвольные целые числа между любыми соседними элементами массива (числа могут быть любые: положительные, отрицательные, \(0\), любые по абсолютной величине, даже не представимые в стандартных типах данных во многих языках программирования).

Определите минимальное количество произвольных целых чисел, которые нужно добавить в массив Коли таким образом, чтобы после этого в массиве не было подотрезков с суммой элементов равной \(0\).

Входные данные

В первой строке следует целое число \(n\) (\(2 \le n \le 200\,000\)) — количество элементов в массиве Коли.

Во второй строке следует \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^{9} \le a_i \le 10^{9}, a_i \neq 0\)) — описание массива Коли.

Выходные данные

Выведите минимальное количество произвольных целых чисел, которые нужно добавить в массив Коли таким образом, чтобы после этого в массиве не было подотрезков с суммой элементов равной \(0\).

Примечание

В первом примере есть один подотрезок, сумма элементов которого равна \(0\). Он начинается со второго элемента и заканчивается в четвертом элементе. Достаточно добавить один элемент, чтобы в массиве не было подотрезков с суммой элементов равной нулю. Например, можно добавить число \(1\) между вторым и третьим элементами массива.

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

F. Скучная карточная игра

Деревья жадные алгоритмы Структуры данных *3200

Когда им скучно, Federico и Giada часто играют в следующую карточную игру с колодой, содержащей \(6n\) карт.

Каждая карта содержит одно число от \(1\) до \(6n\), и каждое число встречается ровно на одной карте. Первоначально колода отсортирована, поэтому первая карта содержит число \(1\), вторая карта содержит число \(2\), \(\dots\), а последняя  — число \(6n\).

Federico и Giada ходят по очереди, Federico начинает.

В свой ход игрок берет из колоды по \(3\) последовательные карты и кладет их в карман. Порядок оставшихся в колоде карт не меняется. Они играют до тех пор, пока колода не опустеет (после ровно \(2n\) ходов). В конце игры и Federico, и Giada имеют в карманах по \(3n\) карт.

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

Входные данные

Первая строка ввода содержит одно целое число \(n\) (\(1\le n \le 200\)).

Вторая строка входа содержит \(3n\) чисел \(x_1, x_2,\ldots, x_{3n}\) (\(1 \le x_1 < x_2 <\ldots < x_{3n} \le 6n\))  — карты в кармане Federico в конце игры.

Гарантируется, что для каждого теста есть хотя бы одна последовательность ходов, в результате которой получается такой набор карт в кармане Federico.

Выходные данные

Выведите \(2n\) строк, каждая из которых содержит \(3\) целых числа.

В \(i\)-й строке в порядке возрастания должны быть выведены целые \(a_i<b_i<c_i\), записанные на трех картах, взятых игроком во время \(i\)-го хода (таким образом, взяты Federico, если \(i\) нечетное, и Giada, если \(i\) четное).

Если существует несколько возможных последовательностей ходов, то можно вывести любую.

Примечание

Пояснение первого примера: Первоначально колода имеет \(12 = 2\cdot 6\) отсортированных карт, поэтому колода имеет \([1\ 2\ 3\ 4\ 5\ 6\ 7\ 8\ 9\ 10\ 11\ 12]\).

  • Во время хода \(1\) Federico берет три карты \([9\ 10\ 11]\). После его хода колода имеет вид \([1\ 2\ 3\ 4\ 5\ 6\ 7\ 8\ 12]\).
  • Во время хода \(2\) Giada берет три карты \([6\ 7\ 8]\). После ее хода колода имеет вид \([1\ 2\ 3\ 4\ 5\ 12]\).
  • Во время хода \(3\) Federico берет три карты \([2\ 3\ 4]\). После его хода колода имеет вид \([1\ 5\ 12]\).
  • Во время хода \(4\) Giada берет три карты \([1\ 5\ 12]\). После ее хода колода пуста.
В конце игры карты в кармане Federico  — \([2\ 3\ 4\ 9\ 10\ 11]\), а карты в кармане Giada  – \([1\ 5\ 6\ 7\ 8\ 12]\).

C. ABBB

жадные алгоритмы Перебор Строки Структуры данных *1100

Смотритель зоопарка играет в игру. В этой игре он должен использовать бомбы, чтобы взрывать строку, состоящую из символов «A» и «B». Он может использовать бомбы, чтобы взорвать подстроку, которая равна либо «AB», либо «BB». Когда он взрывает такую подстроку, она удаляется из строки, а оставшиеся части строки объединяются вместе в новую строку.

Например, смотритель зоопарка может сделать следующие две операции: AABABBA \(\to\) AABBA \(\to\) AAA.

Смотритель зоопарка интересуется, какую наименьшую длину строки он может получить после нескольких взрывов. Можете ли вы ему помочь найти эту наименьшую длину строки?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) \((1 \leq t \leq 20000)\)  — количество наборов входных данных. Описание наборов входных данных следует.

Каждая из следующих \(t\) строк содержит описание одного набора входных данных — непустую строку \(s\), которую смотритель зоопарка будет взрывать. Гарантируется, что все символы \(s\) это либо «A», либо «B».

Гарантируется, что сумма \(|s|\) (длин строки \(s\)) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных вы не можете сделать ни одну операцию, поэтому ответ \(3\).

Во втором наборе входных данных одна из оптимальных последовательностей операций BABA \(\to\) BA. Поэтому ответ \(2\).

В третьем наборе входных данных одна из оптимальных последовательностей операций AABBBABBBB \(\to\) AABBBABB \(\to\) AABBBB \(\to\) ABBB \(\to\) AB \(\to\) (пустая строка). Поэтому ответ \(0\).

E. Морковка для кроликов

Бинарный поиск жадные алгоритмы математика сортировки Структуры данных *2200

В зоопарке Сингапура есть несколько кроликов. Чтобы накормить их, смотритель зоопарка купил \(n\) морковок, имеющих длины \(a_1, a_2, a_3, \ldots, a_n\). Кролики очень быстро размножаются. У смотрителя зоопарка сейчас есть \(k\) кроликов и недостаточно морковок, чтобы прокормить их всех. Чтобы решить эту проблему, он решил разрезать морковки так, чтобы суммарно получилось \(k\) кусков. По некоторой причине длины всех получившихся морковок должны быть положительными целыми числами.

Кролику очень сложно кушать длинную морковку, поэтому время, которое требуется, чтобы съесть морковку длины \(x\), равно \(x^2\).

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

Входные данные

В первой строке находятся два целых числа \(n\) и \(k\) \((1 \leq n \leq k \leq 10^5)\): изначальное количество морковок и количество кроликов.

В следующей строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1 \leq a_i \leq 10^6)\): длины морковок.

Гарантируется, что сумма \(a_i\) не меньше \(k\).

Выходные данные

Выведите одно целое число: минимальное суммарное время, которое потребуется кроликам, чтобы съесть морковки при каком-то их разделении.

Примечание

Для первого теста оптимальные размеры морковок это \(\{1,1,1,2,2,2\}\). Время, которое потребуется, чтобы съесть эти морковки, равно \(1^2+1^2+1^2+2^2+2^2+2^2=15\).

Для второго теста оптимальные размеры морковок это \(\{4,5,5,5\}\). Время, которое потребуется, чтобы съесть эти морковки, равно \(4^2+5^2+5^2+5^2=91\).

F. Фруктовые последовательности

Бинарный поиск дп разделяй и властвуй Структуры данных *2400

Смотритель зоопарка покупает коробку фруктов чтобы накормить своего любимца кролика. Фрукты в коробке — это последовательность яблок и апельсинов, которая представляется бинарной строкой \(s_1s_2\ldots s_n\) длины \(n\). В ней \(1\) обозначает яблоко, а \(0\) обозначает апельсин.

Поскольку у кролика аллергия на апельсины, смотритель зоопарка хочет найти наидлиннейшую подряд идующую подпоследовательность яблок. Пусть \(f(l,r)\) — это наибольшая длина подряд идущей подпоследовательности яблок в подстроке \(s_{l}s_{l+1}\ldots s_{r}\).

Помогите смотрителю зоопарка найти \(\sum_{l=1}^{n} \sum_{r=l}^{n} f(l,r)\). Другими словами, найдите сумму \(f\) по всем подстрокам.

Входные данные

В первой строке находится единственное целое число \(n\) \((1 \leq n \leq 5 \cdot 10^5)\).

В следующей строке находится бинарная строка \(s\) длины \(n\) \((s_i \in \{0,1\})\).

Выходные данные

Выведите единственное целое число: \(\sum_{l=1}^{n} \sum_{r=l}^{n} f(l,r)\).

Примечание

В первом тесте всего есть десять подстрок. Список этих подстрок (мы обозначаем \([l,r]\) как подстроку \(s_l s_{l+1} \ldots s_r\)):

  • \([1,1]\): 0
  • \([1,2]\): 01
  • \([1,3]\): 011
  • \([1,4]\): 0110
  • \([2,2]\): 1
  • \([2,3]\): 11
  • \([2,4]\): 110
  • \([3,3]\): 1
  • \([3,4]\): 10
  • \([4,4]\): 0

Длины наибольших подряд идущих подпоследовательностей из единиц в этих подстроках \(0,1,2,2,1,2,2,1,1,0\) соответственно. Поэтому ответ \(0+1+2+2+1+2+2+1+1+0 = 12\).

C. Числа на доске

жадные алгоритмы Конструктив математика реализация Структуры данных *1000

На доске записаны целые числа \(1, 2, 3, \dots n\) (то есть все целые числа от \(1\) до \(n\) по одному разу). Вы можете за одну операцию стереть с доски два любых числа \(a\) и \(b\) и вместо них записать новое число, равное \(\frac{a + b}{2}\) округленному вверх.

Вы должны выполнить ровно \(n - 1\) описанную операцию, при этом число, которое будет записано на доске в ходе последней операции, должно быть минимально возможным.

Например, если \(n = 4\), то следующая последовательность действий является оптимальной:

  1. выбрать \(a = 4\) и \(b = 2\), тогда вы запишете \(3\), и на доске останутся числа \([1, 3, 3]\);
  2. выбрать \(a = 3\) и \(b = 3\), тогда вы запишете \(3\), и на доске останутся числа \([1, 3]\);
  3. выбрать \(a = 1\) и \(b = 3\), тогда вы запишете \(2\), и на доске останется \([2]\).

Легко показать, что после \(n - 1\) операции на доске будет записано всего одно число, его и нужно минимизировать.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора задано целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество целых чисел, изначально записанных на доске.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

В первую строку каждого набора входных данных выведите минимальное число, которое может остаться на доске после \(n - 1\) операции. В каждой из следующих \(n - 1\) строк выведите по два целых числа — числа \(a\) и \(b\), которые должны быть стерты с доски во время очередной операции.

D. Удаление строки

Бинарный поиск жадные алгоритмы Структуры данных *1700

Вам дана строка \(s\), состоящая из \(n\) символов. Каждый символ — либо 0, либо 1.

Вы можете проводить операции со строкой. Каждая операция состоит из двух шагов:

  1. выбрать целое число \(i\) от \(1\) до длины строки \(s\), после чего удалить символ \(s_i\) (длина строки уменьшается на \(1\), номера символов правее удаленного тоже уменьшаются на \(1\));
  2. если строка \(s\) не является пустой, удалить максимальный по длине префикс, состоящий из одинаковых символов (номера остальных символов и длина строки уменьшаются на длину удаленного префикса).

Обратите внимание, что в каждой операции оба шага обязательны, и их порядок нельзя менять.

Например, если у вас есть строка \(s =\) 111010, первая операция может быть одной из следующих:

  1. выбрать \(i = 1\): тогда мы получим 111010 \(\rightarrow\) 11010 \(\rightarrow\) 010;
  2. выбрать \(i = 2\): тогда мы получим 111010 \(\rightarrow\) 11010 \(\rightarrow\) 010;
  3. выбрать \(i = 3\): тогда мы получим 111010 \(\rightarrow\) 11010 \(\rightarrow\) 010;
  4. выбрать \(i = 4\): тогда мы получим 111010 \(\rightarrow\) 11110 \(\rightarrow\) 0;
  5. выбрать \(i = 5\): тогда мы получим 111010 \(\rightarrow\) 11100 \(\rightarrow\) 00;
  6. выбрать \(i = 6\): тогда мы получим 111010 \(\rightarrow\) 11101 \(\rightarrow\) 01.

Вы заканчиваете проводить операции, когда строка \(s\) становится пустой. Какое максимальное количество операций вы можете провести?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина строки \(s\).

Во второй строке задана \(s\) — строка из \(n\) символов. Каждый символ — либо 0, либо 1.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите одно целое число — максимальное количество операций, которые вы можете провести.

Примечание

В первом наборе входных данных, мы можем, например, выбрать \(i = 2\) и получить строку 010 после первой операции. После этого, выбрать \(i = 3\) и получить строку 1. Наконец, мы можем выбрать только \(i = 1\) и получить пустую строку.

E. Переворот строки

жадные алгоритмы Строки Структуры данных *1900

Вам задана строка \(s\). Вам необходимо перевернуть эту строку. То есть последняя буква строки должна стать первой, предпоследняя буква строки должна стать второй, и так далее. Например, перевернутая строка «abddea» равна «aeddba». Для достижения цели (то есть для переворота заданной строки) вы можете менять местами соседние элементы строки.

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

Входные данные

В первой строке следует целое число \(n\) (\(2 \le n \le 200\,000\)) — длина строки \(s\).

Во второй строке следует строка \(s\) длины \(n\), состоящая из строчных букв латинского алфавита.

Выходные данные

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

Примечание

В первом примере нужно сначала поменять местами третью и четвертую буквы, тогда строка станет равна «aazaa». Затем нужно поменять вторую и третью буквы, тогда строка станет равна «azaaa». Таким образом, за два обмена соседних букв мы сможем перевернуть заданную строку.

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

E. Сложные вычисления

Бинарный поиск Структуры данных *2400

В этой задаче MEX некоторого массива — это минимальное натуральное число, которое не содержится в этом массиве.

Это определение слышал каждый, и Лёша — не исключение. Но Лёша очень любит MEX, поэтому постоянно придумывает с ним новую задачу. Сегодняшний день не стал исключением, и Лёша придумал следующую задачу.

Дан массив \(a\) длины \(n\). Лёша рассматривает все непустые подмассивы исходного массива и вычисляет MEX для каждого из них. Далее Лёша вычисляет MEX получившихся чисел.

Массив \(b\) является подмассивом \(a\), если \(b\) может быть получен из \(a\) удалением нескольких (возможно, ни одного или всех) элементов с начала и/или нескольких (возможно, ни одного или всех) элементов с конца. В частности, массив является своим подмассивом.

Лёша понял, что придумал очень интересную задачу, которую, к сожалению, он не умеет решать. Помогите ему и посчитайте MEX MEXов всех подмассивов!

Входные данные

Первая строка ввода содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — длину массива.

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы массива.

Выходные данные

Выведите единственное целое число — MEX MEXов всех подмассивов.

E. Сделай возрастающим

Бинарный поиск дп Конструктив реализация Структуры данных *2200

Задан массив из \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) и набор \(b\) из \(k\) различных целых чисел от \(1\) до \(n\).

За одну операцию вы можете выбрать два целых числа \(i\) и \(x\) (\(1 \le i \le n\), \(x\) может быть любым целым числом) и присвоить \(a_i := x\). Эта операция может быть выполнена только в том случае, если \(i\) не принадлежит множеству \(b\).

Найдите минимальное количество операций, которые необходимо выполнить, чтобы массив \(a\) строго возрастал (то есть \(a_1 < a_2 < a_3 < \dots < a_n\)), или сообщите, что это невозможно.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 5 \cdot 10^5\), \(0 \le k \le n\)) — размер массива \(a\) и множества \(b\) соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le 10^9\)).

Затем, если \(k \ne 0\), следует третья строка, содержащая \(k\) целых чисел \(b_1\), \(b_2\), ..., \(b_k\) (\(1 \le b_1 < b_2 < \dots < b_k \le n\)). Если \(k = 0\), то эта строка отсутствует.

Выходные данные

Если невозможно сделать массив \(a\) строго возрастающим с помощью заданных операций, выведите \(-1\).

В противном случае выведите одно целое число — минимальное количество операций, которые необходимо выполнить.

G. СУБД смерти

Деревья Строки строковые суфф. структуры Структуры данных *2600

Для простоты скажем, что «Тетрадь смерти» — это блокнот, который убивает того, чье имя в него вписывается.

С помощью него легко убивать, но довольно сложно поддерживать актуальную информацию о тех людях, кого вы еще не убили, но планируете. Поэтому вы решили создать «Систему управления базой данных смерти» — компьютерную программу, которая предоставляет удобный доступ к базе данных возможных жертв. Позвольте мне описать ее особенности.

Определим объект жертвы: у жертвы есть имя (необязательно уникальное), которое состоит только из строчных латинских букв, и целое значение подозрительности.

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

Затем пользователь делает запросы двух типов:

  • \(1~i~x\) — выставить значение подозрительности \(i\)-й жертвы равным \(x\);
  • \(2~q\) — по заданной строке \(q\) найти максимальное значение подозрительности жертвы, чье имя входит в \(q\) как подстрока (символы на подряд идущих позициях).

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

Ну и чего вы ждете? Напишите эту программу!

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n, m \le 3 \cdot 10^5\)) — количество жертв и количество запросов, соответственно.

В каждой из следующих \(n\) строк записано по одному слову \(s_i\) — имя \(i\)-й жертвы. Каждое имя состоит только из строчных латинских букв.

В каждой из следующих \(m\) строк записан запрос одного из двух типов:

  • \(1~i~x\) (\(1 \le i \le n\), \(0 \le x \le 10^9\)) — выставить значение подозрительности \(i\)-й жертвы равным \(x\);
  • \(2~q\) — по заданной строке \(q\), состоящей только из строчных латинских букв, найти максимальное значение подозрительности жертвы, чье имя входит в \(q\) как подстрока (символы на подряд идущих позициях).

Есть хотя бы один запрос второго типа. Суммарная длина строк \(s_i\) не превосходит \(3 \cdot 10^5\). Суммарная длина строк \(q\) не превосходит \(3 \cdot 10^5\).

Выходные данные

На каждый запрос второго типа выведите одно целое число. Если нет такой жертвы, чье имя является подстрокой \(q\), то выведите \(-1\). Иначе выведите максимальное значение подозрительности жертвы, чье имя входит в \(q\) как подстрока.

B. Валерий против всех

жадные алгоритмы Конструктив сортировки Структуры данных *1000

Вам дан массив \(b\) длиной \(n\). Определим другой массив \(a\), также длиной \(n\), в котором \(a_i = 2^{b_i}\) (\(1 \leq i \leq n\)).

Валерий утверждает, что любые два непересекающихся подмассива \(a\) имеют разную сумму элементов. Вы хотите определить, ошибается ли он. Более формально, необходимо определить, существуют ли четыре целых числа \(l_1,r_1,l_2,r_2\), которые удовлетворяют следующим условиям:

  • \(1 \leq l_1 \leq r_1 \lt l_2 \leq r_2 \leq n\);
  • \(a_{l_1}+a_{l_1+1}+\ldots+a_{r_1-1}+a_{r_1} = a_{l_2}+a_{l_2+1}+\ldots+a_{r_2-1}+a_{r_2}\).

Если такие четыре целых числа существуют, вы докажете, что Валерий ошибается. Существуют ли они?

Массив \(c\) является подмассивом массива \(d\), если \(c\) может быть получен из \(d\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит одно целое \(n\) (\(2 \le n \le 1000\)).

Вторая строка набора входных данных содержит \(n\) целых чисел \(b_1,b_2,\ldots,b_n\) (\(0 \le b_i \le 10^9\)).

Выходные данные

Для каждого набора входных данных, если в \(a\) есть два непересекающихся подмассива, которые имеют одинаковую сумму, выведите YES в отдельной строке. В противном случае выведите NO в отдельной строке.

Также обратите внимание, что каждая буква может быть в любом регистре.

Примечание

В первом случае \(a = [16,8,1,2,4,1]\). Значения \(l_1 = 1\), \(r_1 = 1\), \(l_2 = 2\) и \(r_2 = 6\) подходят, потому что \(16 = (8+1+2+4+1)\).

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

B. Задача о подмножестве графа

графы Конструктив Структуры данных *2600

Вам дан неориентированный граф с \(n\) вершинами и \(m\) ребрами. Также вам дано целое число \(k\).

Найдите либо клику размера \(k\), либо непустое подмножество вершин такое, что каждая вершина этого подмножества имеет хотя бы \(k\) соседей в этом подмножестве. Если ни одной такой клики или такого подмножества не существует, сообщите об этом.

Подмножество вершин называется кликой размера \(k\), если его размер равен \(k\) и существуют ребра между всеми парами вершин этого подмножества. Вершина называется соседом другой вершины, если существует ребро между ними.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. В следующей строке находится описание наборов входных данных.

В первой строке описания каждого набора входных данных находится три целых числа \(n\), \(m\), \(k\) (\(1 \leq n, m, k \leq 10^5\), \(k \leq n\)).

Каждая из следующих \(m\) строк содержит два целых числа \(u, v\) \((1 \leq u, v \leq n, u \neq v)\), обозначающих ребро между вершинами \(u\) и \(v\).

Гарантируется, что в графе нет петель и кратных ребер. Гарантируется, что сумма \(n\) по всем наборам входных данных и сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных:

Если вы нашли подмножество вершин, в котором каждая вершина имеет хотя бы \(k\) соседей из этого подмножества, в первой строке выведите \(1\) и размер этого подмножества. Во второй строке выведите все вершины этого подмножества в любом порядке.

Если вы нашли клику размера \(k\), выведите в первой строке \(2\) и во второй строке все вершины клики в любом порядке.

Если не существует ни одной необходимой клики или подмножества выведите \(-1\).

Если существует несколько возможных ответов выведите любой.

Примечание

В первом наборе входных данных: подмножество \(\{1, 2, 3, 4\}\) является кликой размера \(4\).

Во втором наборе входных данных: степень каждой вершины изначального графа хотя бы \(3\). Поэтому множество всех вершин является правильным ответом.

В третьем наборе входных данных: не существует клик размера \(4\) и необходимых подмножеств, поэтому ответ \(-1\).

C. Жадный шоппинг

Бинарный поиск жадные алгоритмы разделяй и властвуй реализация Структуры данных *2600

Вам дан массив \(a_1, a_2, \ldots, a_n\) из целых чисел. Этот массив невозрастающий.

Рассмотрим \(n\) магазинов, расположенных в ряд. Магазины пронумерованы целыми числами от \(1\) до \(n\) слева направо. Цена еды в \(i\)-м магазине равна \(a_i\) монет.

Вы должны обработать \(q\) запросов двух видов:

  • 1 x y: для всех магазинов \(1 \leq i \leq x\) присвоить \(a_{i} = max(a_{i}, y)\).
  • 2 x y: рассмотрим голодного мужчину с \(y\) монетами. Он посещает все магазины с \(x\)-го магазина по \(n\)-й, и если он может купить еду в текущем магазине, он покупает одну порцию этой еды. Найдите, какое количество порций еды он купит. Мужчина может покупать еду в магазине \(i\), если у него есть хотя бы \(a_i\) монет. После покупки количество его монет уменьшается на \(a_i\).
Входные данные

В первой строке находится два целых числа \(n\), \(q\) (\(1 \leq n, q \leq 2 \cdot 10^5\)).

Во второй строке находится \(n\) целых чисел \(a_{1},a_{2}, \ldots, a_{n}\) \((1 \leq a_{i} \leq 10^9)\) — цены в магазинах. Гарантируется, что \(a_1 \geq a_2 \geq \ldots \geq a_n\).

Каждая из следующих \(q\) строк содержит три целых числа \(t\), \(x\), \(y\) (\(1 \leq t \leq 2\), \(1\leq x \leq n\), \(1 \leq y \leq 10^9\)), описывающие очередной запрос.

Гарантируется, что существует хотя бы один запрос типа \(2\).

Выходные данные

Для каждого запроса типа \(2\) выведите ответ в новой строке.

Примечание

В первом запросе голодный мужчина купит еду во всех магазинах с \(3\)-го по \(10\)-й.

Во втором запросе голодный мужчина купит еду в магазинах \(4\), \(9\) и \(10\).

После третьего запроса массив \(a_1, a_2, \ldots, a_n\) цен не поменяется и останется \(\{10, 10, 10, 6, 6, 5, 5, 5, 3, 1\}\).

В четвертом запросе голодный мужчина купит еду в магазинах \(2\), \(3\), \(4\), \(5\), \(9\) и \(10\).

После пятого запроса массив \(a\) цен станет \(\{10, 10, 10, 7, 6, 5, 5, 5, 3, 1\}\).

В шестом запросе голодный мужчина купит еду в магазинах \(2\) и \(4\).

E. Поступи нечестно и выиграй

битмаски Деревья игры Структуры данных *3500

Рассмотрим таблицу \((10^9+1) \times (10^9+1)\). Строки пронумерованы целыми числами от \(0\) до \(10^9\), и столбцы пронумерованы целыми числами от \(0\) до \(10^9\). Обозначим за \((x, y)\) клетку, расположенную в строке \(x\) в столбце \(y\).

Давайте назовем клетку \((x, y)\) хорошей, если \(x \& y = 0\), где \(\&\) — это операция побитового И.

Давайте построим граф, вершинами которого будут все хорошие клетки и проведем ребра между всеми парами соседних по стороне хороших клеток. Можно доказать, что этот граф является деревом — связным графом без циклов. Давайте подвесим это дерево за вершину \((0, 0)\), таким образом мы получим корневое дерево с корнем \((0, 0)\).

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

Изначально все клетки белые. Вам дано \(m\) пар клеток. Для каждой пары клеток все клетки на простом пути между клетками в паре красятся в черный цвет. Обратите внимание, что эти цвета не инвертируются, а мы красим клетки в черный цвет.

Sohrab и Mashtali собираются сыграть в эту игру. Sohrab будет первым игроком, а Mashtali вторым.

Mashtali хочет победить и решил поступить нечестно. Он может сделать следующую операцию несколько раз перед тем как игра начнется: выбрать клетку и инвертировать цвета всех вершин на пути между ней и корнем дерева.

Mammad, который наблюдает за ними, задался вопросом: «какое минимальное количество операций должен сделать Mashtali, чтобы иметь выигрышную стратегию?».

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

Входные данные

В первой строке находится единственное целое число \(m\) (\(1 \leq m \leq 10^5\)).

Каждая из следующих \(m\) строк содержит четыре целых числа \(x_{1}\), \(y_{1}\), \(x_{2}\), \(y_{2}\) (\(0 \leq x_i, y_i \leq 10^9\), \(x_i \& y_i = 0\)). Вы должны покрасить все вершины на пути между \((x_1, y_1)\) и \((x_2, y_2)\) в черный цвет.

Выходные данные

Выведите единственное целое число — минимальное количество нечестных операций, которое второй игрок может сделать чтобы победить.

Примечание

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

Во втором тесте вы можете сделать нечестные операции в клетками \((0, 2), (0, 0), (3, 4)\).

В третьем тесте второй игрок уже имеет выигрышную стратегию и ему не нужно делать никаких нечестных операций.

D. Ракетные шахты

графы кратчайшие пути поиск в глубину и подобное Структуры данных *1900

Страна Берляндия состоит из n городов, пронумерованных целыми числами от 1 до n. Некоторые города соединены двунаправленными дорогами, каждая из которых имеет некоторую длину. Из каждого города существует путь в любой другой город по дорогам. Согласно Самым Секретным Документам, Берляндию охраняют Самые Секретные Ракеты. Точное местонахождение Самых Секретных Ракетных Шахт неизвестно, но Вася сумел достать информацию, в которой сказано, что все Шахты расположены точно на расстоянии l от столицы, которая находится в городе номер s.

В документах дано формальное определение: в некотором месте, являющемся городом или точкой на дороге, находится Самая Секретная Ракетная Шахта тогда и только тогда, когда кратчайшее расстояние от этого места до столицы по дорогам страны в точности равно l.

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

Входные данные

В первой строке находятся три целых числа n, m и s (2 ≤ n ≤ 105, , 1 ≤ s ≤ n) — количество городов, дорог в стране и номер столицы соответственно. Далее в m строках даны описания дорог, каждая из которых описывается тремя целыми числами vi, ui, wi (1 ≤ vi, ui ≤ n, vi ≠ ui, 1 ≤ wi ≤ 1000), где vi, ui — номера городов, которые соединяет эта дорога, а wi — ее длина. Последняя строка входных данных содержит целое число l (0 ≤ l ≤ 109) — расстояние от столицы до ракетных шахт. Гарантируется, что:

  • между любыми двумя городами существует не более одной дороги;
  • каждая дорога соединяет два различных города;
  • из каждого города существует хотя бы один путь в любой другой город по дорогам.
Выходные данные

Выведите единственное число — сколько Самых Секретных Ракетных Шахт находится в Берляндии.

Примечание

В первом примере шахты расположены в городах 3 и 4, а также на дороге (1, 3) на расстоянии 2 от города 1 (соответственно, на расстоянии 1 от города 3).

Во втором примере одна из шахт расположена точно на середине дороги (1, 2), а еще две — на дороге (4, 5) на удалении 3 от города 4 в сторону города 5 и на удалении 3 от города 5 в сторону города 4.

E. Соревнование

жадные алгоритмы Структуры данных *2200

Побочной диагональю квадратной матрицы называется диагональ, проходящая из правого верхнего угла матрицы в левый нижний угол. Назовем лесенкой порядка n квадратную матрицу n × n без клеток выше побочной диагонали (ниже на рисунке изображена лесенка пятого порядка).

В клетках лесенки порядка n стоят m спортсменов.

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

После стартового свистка соревнование начинается, и все спортсмены начинают двигаться по выбранным путям. Когда спортсмен достигает клетки побочной диагонали, он останавливается и больше не двигается. Соревнование заканчивается, когда все спортсмены доходят до побочной диагонали. Соревнование считается успешным, если в процессе соревнования никакие два спортсмена не оказались одновременно в одной клетке (в том числе в одной клетке побочной диагонали не может остановиться более одного спортсмена). Если один спортсмен в данный момент времени уходит из клетки, а другой приходит в нее, то считается, что они не оказались в одной клетке одновременно. Заметим, что другие крайние случаи (например, если спортсмены идут навстречу друг другу) исключаются, так как выбранные пути кратчайшие.

Даны позиции m спортсменов на лесенке. Требуется выбрать из них наибольшее количество спортсменов (все невыбранные спортсмены удаляются из клеток лесенки до начала движения), так чтобы для них соревнование могло бы быть успешным (то есть существовал такой выбор кратчайших путей для спортсменов, при котором в процессе соревнования никакие два спортсмена не оказались бы одновременно в одной клетке).

Входные данные

В первой строке заданы два целых числа n и m (1 ≤ n, m ≤ 105). Далее в m строках заданы координаты спортсменов на лесенке парами чисел ri, ci (1 ≤ ri, ci ≤ n, n - ci < ri), где ri — номер строки лесенки, ci — номер столбца лесенки (для понимания того как нумеруются строки и столбцы смотрите поясняющие рисунки). Никакие два спортсмена не стоят в одной клетке лесенки.

Выходные данные

В первую строку выведите количество выбранных спортсменов. Во вторую строку выведите номера выбранных спортсменов в любом порядке, разделяя числа пробелами. Если ответов несколько разрешается вывести любой. Спортсмены нумеруются начиная с единицы в том порядке, в котором они заданы во входных данных.

Примечание

Пояснение к первому примеру.

На рисунке изображена лесенка порядка три. Стрелочками показано какие кратчайшие пути выбирают спортсмены.

C. Тимбилдинг

графы поиск в глубину и подобное снм Структуры данных *2500

Начался новый учебный год, и в университет Берляндии пришли \(n\) новых студентов, которых разбили на \(k\) групп, причем некоторые группы могли оказаться пустыми. Среди студентов есть \(m\) пар знакомых, причём знакомые студенты могут быть как из одной, так и из разных групп.

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

Алиcу интересует: сколько существует способов выбрать две различные группы студентов так, чтобы получилось сыграть в игру по всем правилам. При этом в игре должны участвовать все студенты обеих групп.

Обратите внимание, что команды, на которые Алиca разделит студентов, не обязаны совпадать с группами, в которых учатся участники. Более того, команды могут быть разного размера (или даже пустыми).

Входные данные

В первой строке заданы три целых числа \(n\), \(m\) и \(k\) (\(1 \le n \le 500\,000\); \(0 \le m \le 500\,000\); \(2 \le k \le 500\,000\)) — количество студентов, количество пар знакомых студентов и количество групп, соответственно.

Во второй строке заданы \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le k\)), где \(c_i\) равняется номеру группы, в которой учится \(i\)-й студент.

Далее следуют \(m\) строк. В \(i\)-й строке заданы два числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le n\)), означающие, что \(a_i\)-й и \(b_i\)-й студент знают друг друга. Гарантируется, что \(a_i \neq b_i\), и что если пара студентов знает друг друга, то она встречается ровно один раз.

Выходные данные

Выведите одно число — количество способов выбрать две различные группы так, чтобы получилось сыграть в игру по всем правилам.

Примечание

Граф знакомств для первого тестового примера выглядит следующим образом (рядом с каждым студентом подписан номер его группы):

В данном случае нам подходят способы:

  • Выбрать первую и вторую группу — например, можно отнести студентов номер \(1\) и \(4\) к первой команде, а студентов номер \(2\) и \(3\) ко второй.
  • Выбрать вторую и третью группу — можно отнести студентов номер \(3\) и \(6\) к первой команде, а студентов номер \(4\) и \(5\) ко второй.
  • Выбрать первую и третью группы мы не можем, потому что не существует разбиения на команды, удовлетворяющего правилам игры.

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

C. Ксор дерево

Бинарный поиск битмаски Деревья дп разделяй и властвуй Структуры данных *2100

Для заданной последовательности попарно различных неотрицательных целых чисел \((b_1, b_2, \dots, b_k)\) мы определяем, является ли она хорошей следующим образом:

  • Рассмотрим граф на \(k\) вершинах, на которых написаны числа от \(b_1\) до \(b_k\).
  • Для каждого \(i\) от \(1\) до \(k\) мы находим такое \(j\) (\(1 \le j \le k\), \(j\neq i\)), для которого значение \((b_i \oplus b_j)\) минимально среди всех таких \(j\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ. После этого мы проводим неориентированное ребро между вершинами с числами \(b_i\) и \(b_j\).
  • Последовательность называется хорошей, если и только если получившийся граф является деревом (то есть он связан и не имеет простых циклов).

Возможно, что для некоторых чисел \(b_i\) и \(b_j\) вы попробуете добавить ребро между ними дважды. Тем не менее вы добавите это ребро только один раз.

Ниже приведен пример (рисунок, соответствующий первому примеру).

Последовательность \((0, 1, 5, 2, 6)\) не хорошая, так как мы не можем достичь \(1\) из \(5\).

Однако, последовательность \((0, 1, 5, 2)\) является хорошей.

Вам дана последовательность \((a_1, a_2, \dots, a_n)\) из попарно различных неотрицательных целых чисел. Вы хотите удалить из нее некоторые элементы (возможно, ни одного), чтобы сделать оставшуюся последовательность хорошей. Какое минимально возможное количество удалений необходимо для достижения этой цели?

Можно показать, что для любой последовательности можно удалить некоторое количество элементов, оставив как минимум \(2\), так, что оставшаяся последовательность будет хорошей.

Входные данные

Первая строка содержит единственное целое число \(n\) (\(2 \le n \le 200,000\)) — длину последовательности.

Во второй строке находится \(n\) попарно различных неотрицательных целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — элементы последовательности.

Выходные данные

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

Примечание

Обратите внимание, что числа, которые вы удаляете, не влияют на процедуру проверки, является ли хорошей оставшаяся последовательность.

Возможно, что для некоторых чисел \(b_i\) и \(b_j\) вы попробуете добавить ребро между ними дважды. Тем не менее вы добавите это ребро только один раз.

D1. Задача о частотах (простая версия)

жадные алгоритмы Структуры данных *2600

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

Вам дан массив \([a_1, a_2, \dots, a_n]\).

Ваша цель — найти длину самого длинного подмассива этого массива такого, в котором наиболее часто встречающееся значение не единственно. Другими словами, вы ищете подмассив такой, что если в этом подмассиве наиболее часто встречающееся значение встречается \(f\) раз, то как минимум \(2\) разных значения должны встречаться в нем ровно \(f\) раз.

Массив \(c\) является подмассивом массива \(d\), если \(c\) может быть получен из \(d\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Первая строка содержит единственное целое число \(n\) (\(1 \le n \le 200\,000\)) — длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le min(n, 100)\)) — элементы массива.

Выходные данные

Необходимо вывести ровно одно целое число — длину самого длинного подмассива массива, наиболее частое значение которого не является единственным. Если такого подмассива нет, выведите \(0\).

Примечание

В первом примере подмассив \([1, 1, 2, 2, 3, 3]\) хороший, но \([1, 1, 2, 2, 3, 3, 3]\) нет: во втором число \(3\) встречается \(3\) раза, и ни один другой элемент не встречается \(3\) раза.

D2. Задача о частотах (сложная версия)

жадные алгоритмы Структуры данных *3000

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

Вам дан массив \([a_1, a_2, \dots, a_n]\).

Ваша цель — найти длину самого длинного подмассива этого массива такого, в котором наиболее часто встречающееся значение не единственно. Другими словами, вы ищете подмассив такой, что если в этом подмассиве наиболее часто встречающееся значение встречается \(f\) раз, то как минимум \(2\) разные значения должны встречаться в нем ровно \(f\) раз.

Массив \(c\) является подмассивом массива \(d\), если \(c\) может быть получен из \(d\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Первая строка содержит единственное целое число \(n\) (\(1 \le n \le 200\,000\)) — длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы массива.

Выходные данные

Необходимо вывести ровно одно целое число — длину самого длинного подмассива массива, наиболее частое значение которого не является единственным. Если такого подмассива нет, выведите \(0\).

Примечание

В первом примере подмассив \([1, 1, 2, 2, 3, 3]\) хороший, но \([1, 1, 2, 2, 3, 3, 3]\) нет: во втором число \(3\) встречается \(3\) раза, и ни один другой элемент не встречается \(3\) раза.

F. Расстояние до прямой

Бинарный поиск геометрия Структуры данных *3200

Вам даны целое число \(k\) и \(n\) попарно различных точек с целочисленными координатами на евклидовой плоскости, \(i\)-я точка имеет координаты \((x_i, y_i)\).

Рассмотрим список всех \(\frac{n(n - 1)}{2}\) пар точек \(((x_i, y_i), (x_j, y_j))\) (\(1 \le i < j \le n\)). Для каждой такой пары выпишем расстояние от прямой, проходящей через эти две точки, до начала координат \((0, 0)\).

Ваша задача — вычислить \(k\)-е наименьшее число среди всех этих расстояний.

Входные данные

Первая строка содержит два целых числа \(n\), \(k\) (\(2 \le n \le 10^5\), \(1 \le k \le \frac{n(n - 1)}{2}\)).

В \(i\)-й из следующих строк \(n\) находятся два целых числа \(x_i\) и \(y_i\) (\(-10^4 \le x_i, y_i \le 10^4\)) — координаты \(i\)-й точки. Гарантируется, что все заданные точки попарно различны.

Выходные данные

Вы должны вывести одно число — \(k\)-е наименьшее расстояние до начала координат. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

Примечание

Есть \(6\) пар точек:

  • Прямая \(1-2\) : расстояние \(0\) от начала координат
  • Прямая \(1-3\) : расстояние \(\frac{\sqrt{2}}{2} \approx 0.707106781\) от начала координат
  • Прямая \(1-4\) : расстояние \(2\) от начала координат
  • Прямая \(2-3\) : расстояние \(1\) от начала координат
  • Прямая \(2-4\) : расстояние \(2\) от начала координат
  • Прямая \(3-4\) : расстояние \(\frac{2}{\sqrt{29}} \approx 0.371390676\) от начала координат
Третье по возрастанию расстояние среди них составляет примерно \(0.707106781\).

D. Счастливая пара

Комбинаторика реализация Структуры данных *2900

Петя любит счастливые числа. Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

У Пети есть массив a из n целых чисел. Числа в массиве нумеруются начиная с 1. К сожалению, в последнее время Петя плохо писал контесты, поэтому родители не разрешают ему играть с массивами, в которых много счастливых чисел. Гарантируется, что в массиве a не более 1000 элементов являются счастливыми.

Пете нужно найти количество пар непересекающихся отрезков [l1;r1] и [l2;r2] (1 ≤ l1 ≤ r1 < l2 ≤ r2 ≤ n, все четыре числа — целые) таких, что нет такого счастливого числа, которое встречается одновременно и в подмассиве a[l1..r1], и в подмассиве a[l2..r2]. Помогите Пете посчитать количество таких пар.

Входные данные

В первой строке задано целое число n (2 ≤ n ≤ 105) — размер массива a. Во второй строке задано через пробел n целых чисел ai (1 ≤ ai ≤ 109) — массив a. Гарантируется, что в массиве a не более 1000 элементов являются счастливыми.

Выходные данные

В единственной строке выведите одно число — ответ на задачу.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

Подмассив a[l..r] — массив из элементов al, al + 1, ..., ar.

В первом примере есть 9 возможных пар, которые удовлетворяют условие: [1, 1] и [2, 2], [1, 1] и [2, 3], [1, 1] и [2, 4], [1, 1] и [3, 3], [1, 1] и [3, 4], [1, 1] и [4, 4], [1, 2] и [3, 3], [2, 2] и [3, 3], [3, 3] и [4, 4].

Во втором примере есть только одна возможная пара отрезков — [1;1] и [2;2] и она удовлетворяет условие.

E. Счастливые запросы

Структуры данных *2400

Петя любит счастливые числа. Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

Петя принес домой строку s длины n состоящую только из счастливых цифр. Цифры нумеруются слева направо, начиная с 1. Теперь Пете нужно выполнить m запросов следующего вида:

  • switch l r — «переключить» (заменить на противоположенные) цифры во всех позициях с индексами от l до r включительно: каждая цифра 4 меняется на 7, а каждая цифра 7 — на 4 (1 ≤ l ≤ r ≤ n);
  • count — найти и вывести на экран длину наидлиннейшей неубывающей подпоследовательности строки s.

Подпоследовательность строки s — это строка, которая получается из s путем удаления нуля или более ее элементов. Строка называется неубывающей, если каждая следующая цифра не меньше предыдущей.

Помогите Пете обработать запросы.

Входные данные

В первой строке задано два целых числа n и m (1 ≤ n ≤ 106, 1 ≤ m ≤ 3·105) — длина строки s и количество запросов соответственно. Во второй строке задано n счастливых цифр без пробелов — исходная строка Пети. В следующих m строках заданы запросы в формате, описанном в условии.

Выходные данные

Для каждого запроса count выведите в отдельной строке ответ.

Примечание

В первом примере строка s после выполнения очередных операций выглядит следующим образом (жирным выделена искомая максимальная подпоследовательность):

  1. 47
  2. 74
  3. 74
Во втором примере:
  1. 747
  2. 447
  3. 447
  4. 774
  5. 774

D. Сжатие рейтинга

Бинарный поиск жадные алгоритмы реализация Структуры данных *1800

На платформе CodeCook для соревнований по спортивному программированию у каждого человека есть график его рейтинга, описываемый массивом целых чисел \(a\) длины \(n\). Вы обновляете инфраструктуру, поэтому вы создали программу, сжимающую эти графики.

Программа работает следующим образом. Задается целое число \(k\). Программа берет минимум на каждом последовательном подмассиве длины \(k\) в массиве \(a\).

Более формально, для массива \(a\) длины \(n\) и целого числа \(k\), определим \(k\)-сжатие массива \(a\) как массив \(b\) длины \(n-k+1\), такой что \(\)b_j =\min_{j\le i\le j+k-1}a_i\(\)

Например, \(3\)-сжатие массива \([1, 3, 4, 5, 2]\) это \([\min\{1, 3, 4\}, \min\{3, 4, 5\}, \min\{4, 5, 2\}]=[1, 3, 2].\)

Перестановка длины \(m\) это массив, состоящий из \(m\) различных целых чисел от \(1\) до \(m\) в некотором порядке. Например, \([2,3,1,5,4]\) это перестановка, но \([1,2,2]\) это не перестановка (\(2\) встречается дважды в массиве) и \([1,3,4]\) это тоже не перестановка (\(m=3\), но в массиве есть число \(4\)).

\(k\)-сжатие массива рейтинга сделает пользователей CodeCook счастливыми, если оно будет перестановкой. Вам дан массив \(a\), определите для всех \(1\leq k\leq n\) будут ли счастливы пользователи CodeCook после \(k\)-сжатия этого массива или нет.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1\leq t\leq 10^4\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(1\leq n\leq 3\cdot 10^5\)) — длина массива.

Во второй строке описания каждого набора входных данных находится \(n\) целых чисел \(a_1,\ldots,a_n\) (\(1\leq a_i\leq n\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите бинарную строку длины \(n\).

\(k\)-й символ строки должен быть \(1\), если пользователи CodeCook будут счастливы после \(k\)-сжатия массива \(a\) и \(0\), иначе.

Примечание

В первом наборе входных данных \(a=[1, 5, 3, 4, 2]\).

  • \(1\)-сжатие массива \(a\) будет \([1, 5, 3, 4, 2]\) и это перестановка.
  • \(2\)-сжатие массива \(a\) будет \([1, 3, 3, 2]\) и это не перестановка, потому что \(3\) встречается дважды.
  • \(3\)-сжатие массива \(a\) будет \([1, 3, 2]\) и это перестановка.
  • \(4\)-сжатие массива \(a\) будет \([1, 2]\) и это перестановка.
  • \(5\)-сжатие массива \(a\) будет \([1]\) и это перестановка.

G. Игра на дереве

Деревья жадные алгоритмы поиск в глубину и подобное Структуры данных *2700

Алиса и Боб играют в игру. У них есть дерево, состоящее из \(n\) вершин. Изначально у Боба есть \(k\) фишек, \(i\)-я фишка расположена в вершине \(a_i\) (все эти вершины уникальны). Перед началом игры Алиса поместит фишку в одну из вершин дерева.

Игра состоит из ходов. На каждом ходу происходят следующие события (последовательно, точно в следующем порядке):

  1. Алиса либо перемещает свою фишку в соседнюю вершину, либо не перемещает ее;
  2. для каждой фишки Боба он либо перемещает ее в соседнюю вершину, либо не перемещает. Обратите внимание, что этот выбор делается независимо для каждой фишки.

Игра заканчивается, когда фишка Алисы находится в одной вершине с одной (или несколькими) фишками Боба. Обратите внимание, что фишки Боба могут находиться в одной и той же вершине, даже если они находились в разных вершинах в начале игры.

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

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

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

Затем следует \(n - 1\) строка, каждая строка содержит два целых числа \(u_i\), \(v_i\) (\(1 \le u_i, v_i \le n\); \(u_i \ne v_i\)) — ребра дерева. Гарантируется, что эти ребра образуют дерево.

Следующая строка содержит одно целое число \(k\) (\(1 \le k \le n - 1\)) — количество фишек Боба.

Последняя строка содержит \(k\) целых чисел \(a_1\), \(a_2\), ..., \(a_k\) (\(1 \le a_i \le n\); \(a_i \ne a_j\), если \(i \ne j\)) — вершины, в которых изначально размещены фишки Боба.

Выходные данные

Выведите \(n\) целых чисел. \(i\)-е из них должно быть равно числу ходов, которое продлится игра, если Алиса изначально поместит свою фишку в вершину \(i\). Если одна из фишек Боба уже помещена в вершину \(i\), то ответ для вершины \(i\) равен \(0\).

F. Разделение массива

Бинарный поиск жадные алгоритмы Структуры данных *2100

Вам задан массив \(a\), состоящий из \(n\) целых чисел.

Пусть \(min(l, r)\) равно минимальному значению среди \(a_l, a_{l + 1}, \ldots, a_r\), а \(max(l, r)\) равно максимальному значению среди \(a_l, a_{l + 1}, \ldots, a_r\).

Ваша задача — выбрать три таких положительных (больших \(0\)) целых числа \(x\), \(y\) и \(z\), что:

  • \(x + y + z = n\);
  • \(max(1, x) = min(x + 1, x + y) = max(x + y + 1, n)\).

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

Среди всех возможных троек (разделений) можно выбрать любое.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — длину \(a\).

Вторая строка набора тестовых данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) равно \(i\)-му элементу \(a\).

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Выведите ответ на каждый набор тестовых данных: NO в единственной строке, если не существует такого разбиения \(a\), которе удовлетворяет ограничениям из условия задачи. Иначе выведите YES в первой строке и три целых числа \(x\), \(y\) и \(z\) (\(x + y + z = n\)) во второй строке.

Если существует несколько возможных ответов, вы можете вывести любой.

G. Запрещенное значение

дп Структуры данных *2900

Поликарп редактирует очень сложную программу. Сначала определяется переменная \(x\), ей присваивается значение \(0\). Затем следуют инструкции двух типов:

  1. set \(y\) \(v\) — присвоить переменной \(x\) значение \(y\) или потратить \(v\) бурлей, чтобы удалить эту инструкцию (и, соответственно, не изменять \(x\));
  2. блок if \(y\) \(\dots\) end — выполнить инструкции внутри блока if, если значение \(x\) равно \(y\), и пропустить блок иначе.

Внутри блоков if могут содержаться set инструкции и другие блоки if.

Однако, когда значение \(x\) становится равно \(s\), компьютер ломается и тут же возгорается. Поликарп не хочет этого допустить, и в то же время потратить как можно меньше бурлей.

Какую минимальную сумму бурлей можно потратить на удаление set инструкций, чтобы никогда не присвоить \(x\) значение \(s\)?

Входные данные

В первой строке записано два целы числа \(n\) и \(s\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le s \le 2 \cdot 10^5\)) — количество строк в программе и запрещенное значение \(x\).

Следующие \(n\) строк задают программу. Каждая строка одного из трех типов:

  1. set \(y\) \(v\) \((0 \le y \le 2 \cdot 10^5, 1 \le v \le 10^9)\);
  2. if \(y\) \((0 \le y \le 2 \cdot 10^5)\);
  3. end.

Каждая if инструкция имеет парную end инструкцию. Каждая end инструкция имеет парную if инструкцию.

Выходные данные

Выведите одно целое число — минимальную сумму бурлей, которую Поликарп может потратить на удаление set инструкций, чтобы никогда не присвоить \(x\) значение \(s\).

D. Флипы и развороты

графы жадные алгоритмы Структуры данных *3100

Вам дана строка \(s\) из символов 0 и 1. Вы можете делать преобразование следующего вида:

  • выбрать непустую сплошную подстроку \(s\), содержащую одинаковое количество символов 0 и 1;
  • заменить все символы 0 в подстроке на 1, и наоборот;
  • развернуть подстроку.

Например, рассмотрим \(s\) = 00111011, и следующее преобразование:

  • Выберем в качестве подстроки первые шесть символов: 00111011. Эту подстроку можно выбрать, поскольку в ней количество 0 и 1 совпадает. Выбирать подстроки 0, 110, или всю строку целиком нельзя.
  • Заменим все символы в подстроке на противоположные: 11000111.
  • Развернём подстроку: 10001111.

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

Входные данные

В первой строке записано одно целое число \(T\) (\(1 \leq T \leq 5 \cdot 10^5\)) — количество тестовых примеров. Каждая из следующих \(T\) строк содержит одну непустую последовательность символов — строку \(s\) в соответствующем примере.

Все строки состоят из символов 0 и 1, и их суммарная длина не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого примера на отдельной строке выведите лексикографически минимальную строку, которую можно получить из \(s\) после нуля или более преобразований.

Примечание

В первом примере достаточно применить одно преобразование ко всей строке целиком.

Во втором примере необходимо два преобразования: 0111001, 0110110.

В третьем примере строка в результате любого преобразования не меняется.

E. Ним с секретами

игры Структуры данных *3100

После успеха вашей первой мобильной игры «Ним» вы решили выпустить сиквел под названием «Ним 2». Новая игра будет развивать успех проверенной формулы Нима, и добавит столь ожидаемую пользователями вторую кучку!

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

Чтобы упростить тестирование игры, вы добавили секреты, известные только разработчику. Есть \(n\) секретных позиций \((x_1, y_1), \ldots, (x_n, y_n)\), которые влияют на игру следующим образом. Пусть перед ходом одного из игроков первая и вторая кучка содержат \(x\) и \(y\) камней соответственно. Если пара чисел \((x, y)\) совпадает с одной из пар \((x_i, y_i)\), то игрок, который должен ходить следующим, немедленно проигрывает, в противном случае этот игрок ходит как обычно. Обратите внимание, что в описании выше кучки и все пары упорядочены, то есть, \(x\) обязательно означают размер первой кучки, а \(y\) обязательно означают размер второй кучки.

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

Входные данные

В первой строке записано два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 10^5\)) — количество секретных позиций и количество исходных позиций для оценки соответственно.

Следующие \(n\) строк описывают секретные позиции. В \(i\)-й из этих строк записано два целых числа \(x_i, y_i\) (\(0 \leq x_i, y_i \leq 10^9\)). Гарантируется, что все секретные позиции различны.

Следующие \(m\) строк описывают исходные позиции. В \(i\)-й из этих строк записано два целых числа \(a_i, b_i\) (\(0 \leq a_i, b_i \leq 10^9\)) — количество камней в первой и второй кучке соответственно. Гарантируется, что все исходные позиции различны. Однако, некоторые исходные позиции могут совпадать с секретными позициями.

Выходные данные

Для каждой исходной позиции на отдельной строке выведите «WIN», если игрок, совершающий первый ход, заведомо может победить. В противном случае выведите «LOSE».

F. Сумма диаметров

Деревья Структуры данных *3500

Вам дано дерево с \(n\) вершинами, пронумерованными \(1, \ldots, n\). Дерево — это связный простой граф без циклов.

Пусть \(\mathrm{dist}(u, v)\) означает количество рёбер на единственном простом пути между вершинами \(u\) и \(v\).

Пусть \(\mathrm{diam}(l, r) = \max \mathrm{dist}(u, v)\) по всем парам \(u, v\), таким что \(l \leq u, v \leq r\).

Вычислите \(\sum_{1 \leq l \leq r \leq n} \mathrm{diam}(l, r)\).

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количесто вершин в дереве.

Следующие \(n - 1\) строк описывают рёбра дерева. Каждая из этих строк содержит два целых числа \(u, v\) (\(1 \leq u, v \leq n\)) — номера концов очередного ребра. Гарантируется, что данный список рёбер действительно задаёт дерево.

Выходные данные

Выведите одно целое число — \(\sum_{1 \leq l \leq r \leq n} \mathrm{diam}(l, r)\).

D. Разделяй и суммируй

Бинарный поиск Перебор разделяй и властвуй реализация сортировки Структуры данных *1600

Майк получил в подарок на день рождения массив \(a\) длины \(n\) и решил протестировать, насколько он красивый.

Массив пройдет \(i\)-й тест на красоту, если существует способ из изначального массива путем некоторого (возможно, нулевого) количества операций разреза получить массив с суммой элементов, равной \(s_i\).

Операция разреза массива происходит следующим образом:

  • Вычисляется \(mid = \lfloor\frac{max(array) + min(array)}{2}\rfloor\), где \(max\) и \(min\) — это функции нахождения максимального и минимального элемента массива. Иными словами, \(mid\) равно сумме максимального и минимального элементов \(array\), деленной на \(2\) с округлением вниз.
  • Далее массив разделяется на две части \(\mathit{left}\) и \(right\). В \(\mathit{left}\) попадают все элементы массива, которые имеют значение меньшее либо равное \(mid\), а в массив \(right\) попадают все элементы, которые больше \(mid\). Элементы в \(\mathit{left}\) и \(right\) сохраняют свой относительный порядок, который был в \(array\).
  • Третьим шагом выбирается, какой из массивов \(\mathit{left}\) или \(right\) мы хотим оставить. Выбранный массив заменит собой текущий, а другой навсегда удалится.

Вам требуется помочь Майку определить результаты \(q\) тестов на красоту.

Заметьте, что вы тестируете красоту массива \(a\), поэтому вы начинаете каждый тест на красоту с изначальным (заданным) массивом \(a\). Таким образом, первый разрез (если он необходим) всегда совершается над массивом \(a\).

Входные данные

Каждый тест содержит один или несколько наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 100\)).

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) \((1 \le n, q \le 10^5)\) — длину массива \(a\) и количество тестов на красоту соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, ..., a_n\) \((1 \le a_i \le 10^6)\) — описание массива \(a\).

Следующие \(q\) строк каждого набора входных данных содержат по одному целому числу \(s_i\) \((1 \le s_i \le 10^9)\) — сумму элементов, которую хочет добиться Майк в \(i\)-м тесте на красоту.

Гарантируется, что сумма \(n\) и сумма \(q\) не превосходят \(10^5\) (\(\sum n, \sum q \le 10^5\)).

Выходные данные

Для каждого набора входных данных выведите \(q\) строк, каждая из которых должна содержать «Yes», если соответствующий тест на красоту пройден, и «No» в противном случае.

Примечание

Объяснение первого набора входных данных:

  1. Получить массив с суммой \(s_1 = 1\) мы можем следующим способом:

    1.1 \(a = [1, 2, 3, 4, 5]\), \(mid = \frac{1+5}{2} = 3\), \(\mathit{left} = [1, 2, 3]\), \(right = [4, 5]\). Мы выбираем оставить массив \(\mathit{left}\).

    1.2 \(a = [1, 2, 3]\), \(mid = \frac{1+3}{2} = 2\), \(\mathit{left} = [1, 2]\), \(right = [3]\). Мы выбираем оставить массив \(\mathit{left}\).

    1.3 \(a = [1, 2]\), \(mid = \frac{1+2}{2} = 1\), \(\mathit{left} = [1]\), \(right = [2]\). Мы выбираем оставить массив \(\mathit{left}\) с суммой, равной \(1\).

  2. Массив с суммой \(s_2 = 8\) можно показать, что получить невозможно.
  3. Получить массив с суммой \(s_3 = 9\) мы можем следующим способом:

    3.1 \(a = [1, 2, 3, 4, 5]\), \(mid = \frac{1+5}{2} = 3\), \(\mathit{left} = [1, 2, 3]\), \(right = [4, 5]\). Мы выбираем оставить массив \(right\) с суммой, равной \(9\).

  4. Массив с суммой \(s_4 = 12\) можно показать, что получить невозможно.
  5. Получить массив с суммой \(s_5 = 6\) мы можем следующим способом:

    5.1 \(a = [1, 2, 3, 4, 5]\), \(mid = \frac{1+5}{2} = 3\), \(\mathit{left} = [1, 2, 3]\), \(right = [4, 5]\). Мы выбираем оставить массив \(\mathit{left}\) с суммой, равной \(6\).

Объяснение второго набора входных данных:

  1. Массив с суммой \(s_1 = 1\) можно показать, что получить невозможно.
  2. Получить массив с суммой \(s_2 = 2\) мы можем следующим способом:

    2.1 \(a = [3, 1, 3, 1, 3]\), \(mid = \frac{1+3}{2} = 2\), \(\mathit{left} = [1, 1]\), \(right = [3, 3, 3]\). Мы выбираем оставить массив \(\mathit{left}\) с суммой \(2\).

  3. Массив с суммой \(s_3 = 3\) можно показать, что получить невозможно.
  4. Получить массив с суммой \(s_4 = 9\) мы можем следующим способом:

    4.1 \(a = [3, 1, 3, 1, 3]\), \(mid = \frac{1+3}{2} = 2\), \(\mathit{left} = [1, 1]\), \(right = [3, 3, 3]\). Мы выбираем оставить массив \(right\) с суммой \(9\).

  5. Мы можем получить \(s_5 = 11\) без операций разреза, потому что изначальная сумма уже была равна \(11\).

F. Клад из отрезков

Бинарный поиск жадные алгоритмы Структуры данных *1800

Поликарп нашёл на улице \(n\) отрезков. Отрезок с номером \(i\) характеризуется двумя целыми числами \(l_i\) и \(r_i\) — координаты начала и конца отрезка, соответственно. Поликарп понял, что ему нужны не все отрезки, поэтому он хочет удалить некоторые из них.

Поликарп считает, что набор из \(k\) отрезков хороший, если существует отрезок \([l_i, r_i]\) (\(1 \leq i \leq k\)) из набора, такой что он пересекает каждый отрезок из набора (пересечение должно быть точкой или отрезком). Например, набор из \(3\) отрезков \([[1, 4], [2, 3], [3, 6]]\) является хорошим, так как отрезок \([2, 3]\) пересекает каждый отрезок из набора. Набор из \(4\) отрезков \([[1, 2], [2, 3], [3, 5], [4, 5]]\) хорошим не является.

Поликарпу интересно, какое минимальное количество отрезков ему надо удалить, чтобы набор из оставшихся отрезков стал хорошим?

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^5\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных даннных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество отрезков в наборе. Далее следуют \(n\) строк с описанием отрезков.

Каждый отрезок описывается двумя целыми числами \(l\) и \(r\) (\(1 \leq l \leq r \leq 10^9\)) — координаты начала и конца отрезка, соответственно.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество отрезков, которые необходимо удалить, чтобы набор оставшихся отрезков стал хорошим.

F. Моё прекрасное безумие

Деревья Структуры данных *3500

Вам дано дерево. Будем рассматривать простые пути в этом дереве. Обозначим путь между вершинами \(a\) и \(b\) как \((a, b)\). \(d\)-окрестностью пути назовём множество вершин дерева, находящихся на расстоянии \(\leq d\) от хотя бы одной вершины пути (например, \(0\)-окрестность пути — это сам путь). Пусть \(P\) — мультимножество путей этого дерева, изначально пустое. Нужно обрабатывать следующие запросы:

  • \(1\) \(u\) \(v\) — добавить путь \((u, v)\) в \(P\) (\(1 \leq u, v \leq n\)).
  • \(2\) \(u\) \(v\) — удалить путь \((u, v)\) из \(P\) (\(1 \leq u, v \leq n\)). Заметьте, что \((u, v)\) и \((v, u)\) — один и тот же путь. Например, если \(P = \{(1, 2), (1, 2)\}\), то после запроса \(2\) \(2\) \(1\), \(P = \{(1, 2)\}\).
  • \(3\) \(d\) — если пересечение всех \(d\)-окрестностей путей, находящихся в \(P\), непусто, выведите «Yes», иначе выведите «No» (\(0 \leq d \leq n - 1\)).
Входные данные

В первой строке даны два целых числа \(n\) и \(q\) — число вершин в дереве и число запросов, которые нужно обработать, соответственно (\(1 \leq n \leq 2 \cdot 10^5\), \(2 \leq q \leq 2 \cdot 10^5\)).

В следующих \(n - 1\) строках дано описание рёбер дерева. Каждая строка содержит два целых числа \(x_i\) и \(y_i\) — номера вершин, соединенных \(i\)-м ребром (\(1 \le x_i, y_i \le n\)).

Следующие \(q\) строк содержат запросы в формате, описанном в условии.

Гарантируется, что:

  • при запросе \(2\) \(u\) \(v\), путь \((u, v)\) (или \((v, u)\)) содержится в \(P\),
  • при запросе \(3\) \(d\), \(P \neq \varnothing\),
  • есть хотя бы один запрос третьего типа.
Выходные данные

Выведите ответ на каждый запрос третьего типа в отдельной строке.

D. Тринадцатый подвиг Геракла

Деревья жадные алгоритмы сортировки Структуры данных *1500

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

В этой задаче вам дано дерево с \(n\) вершинами, каждая из которых имеет вес. Дерево — это связный граф с \(n - 1\) ребром.

Определим \(k\)-раскраску дерева как назначение одного из \(k\) цветов каждому из его ребер. Обратите внимание, что вы не обязаны использовать все \(k\) цветов.

Подграф цвета \(x\) состоит из тех ребер исходного графа, которым был назначен цвет \(x\), и только тех вершин, которые смежны с хотя бы одним из таких ребер. Поэтому в таком подграфе нет вершин степени \(0\).

Весом компоненты связности назовем сумму весов её вершин. Весом подграфа назовем максимальный из весов компонент связности этого подграфа. Вес пустого подграфа будем считать равным \(0\).

Определим вес \(k\)-раскраски как сумму весов подграфов всех \(k\) цветов. Дано дерево, для каждого \(k\) от \(1\) до \(n - 1\) вычислите максимальный возможный вес \(k\)-раскраски.

Входные данные

Во входных данных находятся несколько (не меньше одного) наборов входных данных. В первой строке дано одно целое число \(t\) (\(1 \leq t \leq 10^5\)), обозначающее количество наборов входных данных. Затем даны \(t\) наборов входных данных.

В первой строке каждого набора входных данных дано одно целое число \(n\) (\(2 \leq n \leq 10^5\)). Во второй строке дано \(n\) целых чисел \(w_1, w_2, \dots, w_n\) (\(0 \leq w_i \leq 10^9\)), \(w_i\) равно весу \(i\)-й вершины. В следующих \(n - 1\) строках, дано по два целых числа \(u\), \(v\) (\(1 \leq u,v \leq n\)), обозначающих ребро между вершинами \(u\) и \(v\). Гарантируется, что эти ребра описывают дерево.

Сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(n - 1\) целое число, где \(i\)-е число должно равняться максимальному весу \(i\)-раскраски дерева.

Примечание

Оптимальные \(k\)-раскраски дерева из первого набора входных данных следующие:

В \(1\)-раскраске все ребра имеют одинаковый цвет. Подграф цвета \(1\) содержит все ребра и вершины исходного графа. Поэтому его вес равен \(3 + 5 + 4 + 6 = 18\).

В оптимальной \(2\)-раскраске ребрам \((2, 1)\) и \((3,1)\) назначен цвет \(1\). Ребру \((4, 3)\) — цвет \(2\). Подграф цвета \(1\) состоит из одной компоненты связности (вершины \(1, 2, 3\)) и его вес равен \(3 + 5 + 4 = 12\). Подграф цвета \(2\) состоит из двух вершин и одного ребра. Его вес равен \(4 + 6 = 10\).

В оптимальной \(3\)-раскраске всем ребрам назначены разные цвета. Поэтому подграф каждого цвета содержит одно ребро. Их веса следующие: \(3 + 4 = 7\), \(4 + 6 = 10\), \(3 + 5 = 8\).

I. Загадка сфинкса

Бинарный поиск интерактив Структуры данных Структуры данных *3400

Кто ходит утром на четырех ногах, днем — на двух, а вечером — на трех?

Это интерактивная задача. В этой задаче нет взломов.

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

Поэтому у вас нет выбора и вам нужно решить загадку. У сфинкса есть массив \(a_1, a_2, \ldots, a_n\) из неотрицательных целых чисел, строго меньших \(2^b\). Он просит вас найти максимум среди элементов массива. Конечно, сам массив сфинкс вам не даст, но предоставит значения \(n\) и \(b\). Так как загадку вслепую решить нельзя, вы можете задавать сфинксу вопросы определенного вида. По данной паре целых чисел \(i, y\), сфинкс ответит вам, правда ли, что \(a_i\) больше, чем \(y\). Так как сфинксы не очень терпеливы, вы можете спросить не более \(3 \cdot (n + b) \) таких вопросов.

Сфинксы честные, но в то же время хитрые. Массив может изменяться в промежутках между вашими запросами, но только так, что все предыдущие ответы сфинкса останутся правильными.

Входные данные

Первая строка содержит два целых числа \(n\) и \(b\) (\(1 \leq n, b \leq 200\)). Оставшаяся часть входных данных будет дана в процессе взаимодействия.

Протокол взаимодействия

В каждом запросе ваша программа должна вывести одну строку с числом \(i\) (\(0 \leq i \leq n\)) и бинарной строкой длины ровно \(b\), которая равна бинарному представлению числа \(y\) (от старших разрядов к младшим).

Если \(i > 0\), то этой строчкой вы обозначаете запрос: Правда ли, что \(a_i\) больше, чем \(y\)?. Таких запросов может быть не более, чем \(3 \cdot (n+b)\); после каждого такого запроса считайте «yes» (да) или «no» (нет) на отдельной строке — ответ за запрос.

Если же \(i = 0\), то это — последний запрос: \(y\) должен быть равен максимальному значению среди элементов массива, а ваша программа должна немедленно завершиться. Обратите внимание, что этот запрос не учитывается в ограничении на число вопросов.

Обратите внимание, интерактор адаптивный.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

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

Примечание

Во всех примерах массив зафиксирован изначально.

В первом примере массив равен \(2, 1, 4, 0, 6\).

Во втором примере массив равен \(0, 0, 0, 0\).

В третьем примере массив равен \(0\).

Обратите внимание, что если бы интерактор был адаптивный, то полученной в первом и третьем примере информации было бы недостаточно, чтобы вычислить правильный ответ.

I. Загадка сфинкса

Бинарный поиск интерактив Структуры данных Структуры данных *3400

Кто ходит утром на четырех ногах, днем — на двух, а вечером — на трех?

Это интерактивная задача. В этой задаче нет взломов.

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

Поэтому у вас нет выбора и вам нужно решить загадку. У сфинкса есть массив \(a_1, a_2, \ldots, a_n\) из неотрицательных целых чисел, строго меньших \(2^b\). Он просит вас найти максимум среди элементов массива. Конечно, сам массив сфинкс вам не даст, но предоставит значения \(n\) и \(b\). Так как загадку вслепую решить нельзя, вы можете задавать сфинксу вопросы определенного вида. По данной паре целых чисел \(i, y\), сфинкс ответит вам, правда ли, что \(a_i\) больше, чем \(y\). Так как сфинксы не очень терпеливы, вы можете спросить не более \(3 \cdot (n + b) \) таких вопросов.

Сфинксы честные, но в то же время хитрые. Массив может изменяться в промежутках между вашими запросами, но только так, что все предыдущие ответы сфинкса останутся правильными.

Входные данные

Первая строка содержит два целых числа \(n\) и \(b\) (\(1 \leq n, b \leq 200\)). Оставшаяся часть входных данных будет дана в процессе взаимодействия.

Протокол взаимодействия

В каждом запросе ваша программа должна вывести одну строку с числом \(i\) (\(0 \leq i \leq n\)) и бинарной строкой длины ровно \(b\), которая равна бинарному представлению числа \(y\) (от старших разрядов к младшим).

Если \(i > 0\), то этой строчкой вы обозначаете запрос: Правда ли, что \(a_i\) больше, чем \(y\)?. Таких запросов может быть не более, чем \(3 \cdot (n+b)\); после каждого такого запроса считайте «yes» (да) или «no» (нет) на отдельной строке — ответ за запрос.

Если же \(i = 0\), то это — последний запрос: \(y\) должен быть равен максимальному значению среди элементов массива, а ваша программа должна немедленно завершиться. Обратите внимание, что этот запрос не учитывается в ограничении на число вопросов.

Обратите внимание, интерактор адаптивный.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

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

Примечание

Во всех примерах массив зафиксирован изначально.

В первом примере массив равен \(2, 1, 4, 0, 6\).

Во втором примере массив равен \(0, 0, 0, 0\).

В третьем примере массив равен \(0\).

Обратите внимание, что если бы интерактор был адаптивный, то полученной в первом и третьем примере информации было бы недостаточно, чтобы вычислить правильный ответ.

E. Различающие корни

Деревья дп поиск в глубину и подобное Структуры данных *2500

Дано дерево из \(n\) вершин. На каждой вершине записано число; на вершине \(i\) записано число \(a_i\).

Предположим, мы подвесили дерево за вершину \(v\) (сделали эту вершину корнем). Назовем \(v\) различающим корнем, если выполняется следующее условие: в каждом пути из \(v\) до некоторого листа дерева все значения, записанные на вершинах, различны. Значения, встречающихся на различных путях, могут совпадать, но значения на каждом пути, рассматриваемом в отдельности, должны быть различны.

Посчитайте количество различающих корней заданного дерева.

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 2\cdot10^5\)) — количество вершин в дереве.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Далее следуют \(n-1\) строк, в каждой из которых заданы два целых числа \(u\) и \(v\) (\(1 \le u\), \(v \le n\)), обозначающих ребро, соединяющее вершины \(u\) и \(v\).

Гарантируется, что данные ребра задают дерево.

Выходные данные

Выведите одно целое число — количество различающих корней в дереве.

Примечание

В первом примере из условия вершины \(1\), \(2\) и \(5\)различающие корни.

A. LaIS

дп жадные алгоритмы Структуры данных *2200

Let's call a sequence \(b_1, b_2, b_3 \dots, b_{k - 1}, b_k\) almost increasing if \(\)\min(b_1, b_2) \le \min(b_2, b_3) \le \dots \le \min(b_{k - 1}, b_k).\(\) In particular, any sequence with no more than two elements is almost increasing.

You are given a sequence of integers \(a_1, a_2, \dots, a_n\). Calculate the length of its longest almost increasing subsequence.

You'll be given \(t\) test cases. Solve each test case independently.

Reminder: a subsequence is a sequence that can be derived from another sequence by deleting some elements without changing the order of the remaining elements.

Input

The first line contains a single integer \(t\) (\(1 \le t \le 1000\)) — the number of independent test cases.

The first line of each test case contains a single integer \(n\) (\(2 \le n \le 5 \cdot 10^5\)) — the length of the sequence \(a\).

The second line of each test case contains \(n\) integers \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — the sequence itself.

It's guaranteed that the total sum of \(n\) over all test cases doesn't exceed \(5 \cdot 10^5\).

Output

For each test case, print one integer — the length of the longest almost increasing subsequence.

Note

In the first test case, one of the optimal answers is subsequence \(1, 2, 7, 2, 2, 3\).

In the second and third test cases, the whole sequence \(a\) is already almost increasing.

B. Bakery

снм Структуры данных *2900

Monocarp would like to open a bakery in his local area. But, at first, he should figure out whether he can compete with other shops.

Monocarp plans that the bakery will work for \(n\) days. On the \(i\)-th day, \(a_i\) loaves of bread will be baked in the morning before the opening. At the end of the \(n\)-th day, Monocarp will sell all the remaining bread that wasn't sold earlier with a huge discount.

Because of how bread is stored, the bakery seller sells the bread in the following order: firstly, he sells the loaves that were baked that morning; secondly, he sells the loaves that were baked the day before and weren't sold yet; then the loaves that were baked two days before and weren't sold yet, and so on. That's why some customers may buy a rather stale bread and will definitely spread negative rumors.

Let's define loaf spoilage as the difference between the day it was baked and the day it was sold. Then the unattractiveness of the bakery will be equal to the maximum spoilage among all loaves of bread baked at the bakery.

Suppose Monocarp's local area has consumer demand equal to \(k\), it means that each day \(k\) customers will come to the bakery and each of them will ask for one loaf of bread (the loaves are sold according to the aforementioned order). If there is no bread left, then the person just doesn't buy anything. During the last day sale, all the remaining loaves will be sold (and they will still count in the calculation of the unattractiveness).

Monocarp analyzed his competitors' data and came up with \(m\) possible consumer demand values \(k_1, k_2, \dots, k_m\), and now he'd like to calculate the unattractiveness of the bakery for each value of demand. Can you help him?

Input

The first line contains two integers \(n\) and \(m\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le m \le 2 \cdot 10^5\)) — the number of days the bakery is open and the number of possible values of consumer demand.

The second line contains \(n\) integers \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — the number of bread loaves that will be baked each day.

The third line contains \(m\) integers \(k_1, k_2, \dots, k_m\) (\(1 \le k_1 < k_2 < \dots < k_m \le 10^9\)) — the possible consumer demand values in the ascending order.

Output

Print \(m\) integers: for each consumer demand, print the unattractiveness of the bakery.

Note

In the first example, let's describe what happens for couple consumer demands:

If consumer demand is equal to \(1\):

  • at day \(1\): \(5\) loaves are baked and only \(1\) is sold with spoilage equal to \(1 - 1 = 0\);
  • at day \(2\): \(4\) loaves are left and \(2\) more are baked. Only \(1\) loaf was sold and it was the loaf baked today with spoilage \(2 - 2 = 0\);
  • at day \(3\): \(4\) loaves from the first day and \(1\) loaf from the second day left. One more loaf was baked and was sold this day with spoilage \(3 - 3 = 0\);
  • at day \(4\): \(4\) loaves from the first day and \(1\) loaf from the second day left. \(3\) more loaves were baked and one of them was sold this day with spoilage \(4 - 4 = 0\);
  • at day \(5\): \(4\) loaves from the first day, \(1\) loaf from the second day and \(2\) loaves from the fourth day left. \(7\) more loaves were baked and, since it's the last day, all \(14\) loaves were sold. \(4\) loaves from the first day have the maximum spoilage equal to \(5 - 1 = 4\).
In total, the unattractiveness of the bakery will be equal to \(4\).

If consumer demand is equal to \(10\) then all baked bread will be sold in the day it was baked and will have spoilage equal to \(0\).

C. Berpizza

реализация Структуры данных *1400

Monocarp and Polycarp are working as waiters in Berpizza, a pizzeria located near the center of Bertown. Since they are waiters, their job is to serve the customers, but they choose whom they serve first differently.

At the start of the working day, there are no customers at the Berpizza. They come there one by one. When a customer comes into the pizzeria, she sits and waits for Monocarp or Polycarp to serve her. Monocarp has been working in Berpizza for just two weeks, so whenever he serves a customer, he simply chooses the one who came to Berpizza first, and serves that customer.

On the other hand, Polycarp is an experienced waiter at Berpizza, and he knows which customers are going to spend a lot of money at the pizzeria (and which aren't) as soon as he sees them. For each customer, Polycarp estimates the amount of money this customer can spend, and when he serves a customer, he chooses the one that is expected to leave the most money at Berpizza (in case there are several such customers, he chooses the one who came first among them).

Obviously, no customer can be served twice, so Monocarp and Polycarp choose which customer to serve only among those who haven't been served yet.

When the number of customers gets really high, it becomes difficult for both Monocarp and Polycarp to choose the customer they are going to serve. Your task is to write a program that makes these choices for them. Formally, your program should be able to process three types of queries:

  • \(1\) \(m\) — a customer comes to Berpizza, and Polycarp estimates the amount of money that they will spend as \(m\);
  • \(2\) — Monocarp serves a customer which came to the pizzeria first;
  • \(3\) — Polycarp serves a customer which is expected to spend the largest amount of money at the pizzeria (if there are several such customers, the one that came to the pizzeria first is chosen).

For each query of types \(2\) and \(3\), report the number of the customer who was served (the customers are numbered in the order they come to the pizzeria, starting from \(1\)).

Input

The first line contains one integer \(q\) (\(2 \le q \le 5 \cdot 10^5\)) — the number of queries.

Then \(q\) lines follow, each describing a query in one of the following formats:

  • \(1\) \(m\) (\(1 \le m \le 5 \cdot 10^5\)) — a customer comes to Berpizza, and Polycarp estimates the amount of money that they will spend as \(m\);
  • \(2\) — Monocarp serves a customer which came to the pizzeria first;
  • \(3\) — Polycarp serves a customer which is expected to spend the largest amount of money at the pizzeria (if there are multiple such customers, the one that came to the pizzeria first is chosen).

Queries of type \(2\) and \(3\) are asked only when there exists at least one customer that hasn't been served yet. There is at least one query of type \(2\) or \(3\) in the input.

Output

For each query of type \(2\) or \(3\), print one integer — the number of the customer that has been served in that event. The customers are numbered in the order in which they come to the pizzeria, starting from \(1\).

M. Similar Sets

графы реализация Структуры данных *2300

You are given \(n\) sets of integers. The \(i\)-th set contains \(k_i\) integers.

Two sets are called similar if they share at least two common elements, i. e. there exist two integers \(x\) and \(y\) such that \(x \ne y\), and they both belong to each of the two sets.

Your task is to find two similar sets among the given ones, or report that there is no such pair of sets.

Input

The first line contains a single integer \(t\) (\(1 \le t \le 50000\)) — the number of test cases. Then \(t\) test cases follow.

The first line of each test case contains a single integer \(n\) (\(2 \le n \le 10^5\)) the number of given sets. The following \(n\) lines describe the sets. The \(i\)-th line starts with an integer \(k_i\) (\(2 \le k_i \le 10^5\)) — the number of integers in the \(i\)-th set. Then \(k_i\) integers \(a_{i,1}\), \(a_{i,2}\), ..., \(a_{i,k_i}\) (\(1 \le a_{i,j} \le 10^9\)) follow — the elements of the \(i\)-th set. It is guaranteed that all elements in each set are different.

The total number of elements in all sets in all test cases is not greater than \(2\cdot 10^5\).

Output

For each test case, print the answer on a single line.

If there is no pair of similar sets, print -1.

Otherwise, print two different integers — the indices of the similar sets. The sets are numbered from \(1\) to \(n\) in the order they are given in the input. If there are multiple answers, print any of them.

F. Розетки

Бинарный поиск жадные алгоритмы Структуры данных *2600

// Мы решили не давать легенду про розетки, но вы все еще можете придумать ее сами :^)

Определим цепь:

  • цепь длины \(1\) — это одна вершина;
  • цепь длины \(x\) — это цепь длины \(x-1\) с одной вершиной, присоединенной к ее концу одним ребром.

Даны \(n\) цепей длин \(l_1, l_2, \dots, l_n\). Вы хотите построить дерево, используя некоторые из них.

  • Каждая вершина дерево либо белая, либо черная.
  • Изначально дерево содержит только одну вершину, которая является корневой и белой.
  • Изначально все цепи содержат только белые вершины.
  • Вы можете взять одну из цепей и соединить любую ее вершину с любой белой вершиной дерева ребром. Цепь становится частью дерева. Оба конца ребра становятся черными.
  • Каждая цепь может быть использована не более одного раза.
  • Некоторые цепи можно оставить неиспользованными.

Расстояние между двумя вершинами в дереве равно количеству ребер на кратчайшем пути между ними.

Если в полученном дереве есть хотя бы \(k\) белых вершин, то его значение равно расстоянию от корня до \(k\)-й ближайшей белой вершины.

Какое минимальное значение может иметь полученное дерево? Если не существует способа построить дерева с хотя бы \(k\) белыми вершинами, то выведите -1.

Входные данные

В первой строке записаны два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(2 \le k \le 10^9\)) — количество цепей и минимальное количество белых вершин, которые должно иметь дерево.

Во второй строке записаны \(n\) целых чисел \(l_1, l_2, \dots, l_n\) (\(3 \le l_i \le 2 \cdot 10^5\)) — длины цепей.

Выходные данные

Выведите одно целое число. Если не существует способа построить дерева с хотя бы \(k\) белыми вершинами, то выведите -1. В противном случае выведите минимальное значение, которое может иметь дерево.

Примечание

Разрешается использовать не все цепи, поэтому оптимальное использовать только цепь длины \(4\) во втором примере.

E. Странная перестановка

Бинарный поиск графы дп Комбинаторика реализация Структуры данных *3200

У Игоря была перестановка \(p_1, p_2, \ldots, p_n\). К сожалению, перестановка выглядела достаточно скучно, так что он решил выбрать несколько непересекающихся подотрезков перестановки и развернуть каждый из них. Стоимость разворота одного отрезка \([l, r]\) (то есть элементов на позициях с \(l\) по \(r\) включительно) равна \(r - l\), а общая стоимость одной операции равна сумме стоимостей разворота для соответствующих отрезков. Игорю на Новый Год подарили целое число \(c\), поэтому его интересуют лишь те операции, стоимость которых не превосходит \(c\).

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

Теперь Денис решил задать Игорю несколько вопросов про его список. Каждый вопрос выглядит следующим образом: чему равно \(i\)-е число в \(j\)-й перестановке в списке Игоря? Разумеется, Игорю слишком скучно заниматься ответами на эти вопросы, так что он обратился к вам за помощью.

Входные данные

В первой строке дано целое число \(t\) (\(1 \leq t \leq 30\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(c\), \(q\) (\(1 \leq n \leq 3 \cdot 10^4\), \(1 \leq c \leq 4\), \(1 \leq q \leq 3 \cdot 10^5\)) — размер перестановки, максимальная стоимость операции и число вопросов.

В следующей строке содержатся \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \leq p_i \leq n\), \(p_i \neq p_j\) если \(i \neq j\)) — элементы исходной перестановки.

В каждой из следующих \(q\) содержатся описания вопросов, каждое описание состоит из двух целых чисел \(i\) и \(j\) (\(1 \leq i \leq n\), \(1 \leq j \leq 10^{18}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\), и что сумма \(q\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого вопроса в отдельной строке выведите ответ на этот вопрос или \(-1\), если Игорь ошибся и \(j\)-й перестановки не существует на листочке Игоря.

Примечание

В первом примере Игорь выписал на листочек следующие перестановки: \([1, 2, 3]\), \([1, 3, 2]\), \([2, 1, 3]\).

Обратите внимание, что для получения перестановки \([3, 2, 1]\) Игорю пришлось бы развернуть весь массив, а стоимость такой операции равна \(2\), что больше указанного значения \(c=1\). Другие две перестановки не могут быть получены из исходной путем применением операции из условия задачи.

E. Правильная расстановка

Бинарный поиск дп сортировки Структуры данных *1700

Поликарп пригласил \(n\) друзей на встречу Нового года. Во время торжества он решил сделать общую фотографию всех своих друзей. Каждый друг может стоять или лечь на бок.

Каждый друг характеризуется двумя значениями \(h_i\) (его рост) и \(w_i\) (его ширина). На фото \(i\)-й друг будет занимать прямоугольник \(h_i \times w_i\) (если он стоит) или \(w_i \times h_i\) (если он лежит).

Друга с номером \(j\) можно разместить перед \(i\)-м другом на фотографии, если его прямоугольник ниже и уже, чем прямоугольник \(i\)-го друга. Формально должно быть выполнено хотя бы одно из следующих условий:

  • \(h_j < h_i\) и \(w_j < w_i\) (оба друга стоят или оба лежат);
  • \(w_j < h_i\) и \(h_j < w_i\) (один из друзей стоит, а другой лежит).

Например, если \(n = 3\), \(h=[3,5,3]\) и \(w=[4,4,3]\), то:

  • первого друга можно поставить перед вторым: \(w_1 < h_2\) и \(h_1 < w_2\) (один из них стоит, а другой лежит);
  • третьего друга можно поставить перед вторым: \(h_3 < h_2\) и \(w_3 < w_2\) (оба друга стоят или оба лежат).

В других случаях человек на переднем плане будет перекрывать человека на заднем плане.

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

Обратите внимание, что вам не нужно находить расположение всех людей для общей фотографии. Вам нужно, чтобы каждый друг \(i\) нашел любого другого друга \(j\), который может оказаться перед ним. Думайте об этом, как о решении \(n\) независимых подзадач.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора находится одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество друзей.

Далее следуют \(n\) строк, каждая из которых содержит описание соответствующего друга. Каждый друг описывается двумя целыми числами \(h_i\) и \(w_i\) (\(1 \leq h_i, w_i \leq 10^9\)) — рост и ширина \(i\)-го друга, соответственно.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(n\) целых чисел, где \(i\)-е число является номером друга, которого можно поставить перед \(i\)-м. Если такого друга не существует, то выведите -1.

Если существует несколько ответов, выведите любой.

Примечание

Первый набор входных данных разобран в условии.

Во третьем наборе входных данных следующие варианты ответы тоже являются верными:

  • \([-1, -1, 1, 2]\);
  • \([-1, -1, 1, 1]\);
  • \([-1, -1, 2, 1]\).

D. Программа

дп реализация Строки Структуры данных *1700

Задана программа, состоящая из \(n\) инструкций. Изначально единственная переменная \(x\) присваивается \(0\). После этого следуют инструкции двух типов:

  • увеличить \(x\) на \(1\);
  • уменьшить \(x\) на \(1\).

Даны \(m\) запросов следующего типа:

  • запрос \(l\) \(r\) — сколько различных значений принимает переменная \(x\), если все инструкции между \(l\)-й и \(r\)-й включительно пропускаются, а остальные исполняются без изменения порядка?
Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Затем следует описание \(t\) наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество инструкций в программе и количество запросов.

Во второй строке каждого набора входных данных записана программа — последовательность из \(n\) символов: каждый символ равен либо '+', либо '-' — инструкция увеличения и уменьшения, соответственно.

В каждой из следующих \(m\) строк записаны по два целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)) — описание запроса.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите \(m\) целых чисел — для каждого запроса \(l\), \(r\) выведите количество различных значений, которые принимает переменная \(x\), если все инструкции между \(l\)-й и \(r\)-й включительно пропускаются, а остальные исполняются без изменения порядка.

Примечание

Инструкции, которые остаются в каждом запросе первого набора входных данных:

  1. пустая программа — \(x\) был равен только \(0\);
  2. «-» — \(x\) принимал значения \(0\) и \(-1\);
  3. «---+» — \(x\) принимал значения \(0\), \(-1\), \(-2\), \(-3\), \(-2\) — среди них \(4\) различных значения;
  4. «+--+--+» — различные значения — это \(1\), \(0\), \(-1\), \(-2\).

C. Уничтожение массива

жадные алгоритмы Конструктив Перебор реализация сортировки Структуры данных *1700

Вы нашли бесполезный массив целых чисел \(a\) длины \(2n\). Так как он оказался Вам не нужен, Вы решили выкинуть все элементы \(a\).

Это было бы просто, но оказалось, что выкидывать числа надо, соблюдая следующие правила:

  1. Сначала Вы выбираете натуральное число \(x\).
  2. Затем Вы \(n\) раз повторите следующую операцию:
    • выбрать два числа с суммой \(x\)
    • выкинуть их из \(a\) и заменить \(x\) на максимальное из этих двух чисел.

Например, если изначально \(a = [3, 5, 1, 2]\), то Вы можете выбрать \(x = 6\) и выкинуть второе и третье число в \(a\), сумма которых равна \(5 + 1 = 6\). После этого \(x\) станет равно \(5\), а в массиве останутся числа \(3\) и \(2\), которые Вы можете выкинуть на следующей операции.

Обратите внимание, что Вы выбираете \(x\) только в начале и не можете изменить его между операциями.

Напишите программу, чтобы определить, как выбросить все элементы \(a\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют описания самих наборов.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \leq n \leq 1000\)).

Во второй строке каждого набора задано \(2n\) натуральных чисел \(a_1, a_2, \dots, a_{2n}\) (\(1 \leq a_i \leq 10^6\)) — изначальный массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных в первой строке выведите YES если возможно выкинуть все элементы массива. Иначе выведите NO.

Если Вы вывели YES в следующей строке выведите значение \(x\), которое Вы выбираете в начале. В следующих \(n\) строках выведите по два числа — числа, которые Вы выбираете на очередной операции.

Примечание

Первый набор входных данных был описан в условии.

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

D. Уборка

дп жадные алгоритмы математика Структуры данных *2200

Во время уборки побережья Алиса нашла \(n\) кучек камней. В \(i\)-й кучке было \(a_i\) камней.

Кучки \(i\) и \(i + 1\) являются соседними для всех \(1 \leq i \leq n - 1\). Если кучка \(i\) стала пустой, кучки \(i - 1\) и \(i + 1\) не становятся соседними.

Алиса не хочет сама убирать эти кучки, поэтому она поручила задачу Вам. Она разрешила убирать камни только выполняя следующую операцию:

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

Так как это не всегда возможно, Алиса разрешила Вам применить следующую суперспособность:

  • До начала уборки выбрать две соседние кучки и поменять их местами.

Определите, возможно ли убрать все камни, использовав суперспособность не более одного раза.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют описания самих наборов.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — количество кучек камней.

Во второй строке каждого набора задано \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^9\)) — количество камней в кучках.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите YES или NO — возможно ли убрать все камни, использовав суперспособность не более одного раза.

Примечание

В первом наборе входных данных, можно убрать все камни, не применяя суперспособность: \([1, 2, 1] \rightarrow [1, 1, 0] \rightarrow [0, 0, 0]\).

Во втором наборе можно применить суперспособность ко второй и третьей кучкам, получив первый тестовый случай.

В третьем наборе можно применить суперспособность ко четвёртой и пятой кучкам, получив \(a = [2, 2, 2, 3, 1]\).

В четвёртом наборе можно применить суперспособность к первой и второй кучкам, получив \(a = [1900, 2100, 1600, 3000, 1600]\)

E. Сопоставление шаблонов

битмаски графы поиск в глубину и подобное сортировки Строки Структуры данных хэши *2300

Вам даны \(n\) шаблонов \(p_1, p_2, \dots, p_n\) и \(m\) строк \(s_1, s_2, \dots, s_m\). Каждый шаблон \(p_i\) состоит из \(k\) символов, каждый из которых — это либо строчная латинская буква или символ подчеркивания. Все шаблоны попарно различны. Каждая строка \(s_j\) состоит из \(k\) строчных латинских букв.

Строка \(a\) подходит под шаблон \(b\), если для каждого \(i\) от \(1\) до \(k\) либо \(b_i\) — это подчеркивание, либо \(b_i=a_i\).

Вам требуется переупорядочить шаблоны таким образом, что первый шаблон, под который подходит \(j\)-я строка, — это \(p[mt_j]\). Разрешается не изменять порядок шаблонов.

Можно ли осуществить такое переупорядочивание? Если можно, то выведите любой корректный порядок.

Входные данные

В первой строке записаны три целых числа \(n\), \(m\) and \(k\) (\(1 \le n, m \le 10^5\), \(1 \le k \le 4\)) — количество шаблонов, количество строк и длина каждого шаблона и строки.

В каждой из следующих \(n\) строк записан шаблон — \(k\) символов, каждый из которых — это либо строчная латинская буква или символ подчеркивания. Все шаблоны попарно различны.

В каждой из следующих \(m\) строк записана строка — \(k\) строчных латинских букв, и целое число \(mt\) (\(1 \le mt \le n\)) — номер первого шаблона, под который должна подходить соответствующая строка.

Выходные данные

Выведите «NO», если невозможно переупорядочить шаблоны так, чтобы первый шаблон, под который подходит \(j\)-я строка, был \(p[mt_j]\).

В противном случае выведите «YES» в первой строке. Во второй строке выведите \(n\) различных целых чисел от \(1\) до \(n\) — порядок шаблонов. Если существует несколько ответов, выведите любой из них.

Примечание

Порядок шаблонов в первом примере после переупорядочивания:

  • aaaa
  • __b_
  • ab__
  • _bcd
  • _b_d

Тогда первая строка подходит под шаблоны ab__, _bcd, _b_d в таком порядке, первый из них равен ab__, который действительно \(p[4]\). Вторая строка подходит под шаблоны __b_ и ab__, первый из них __b_, который равен \(p[2]\). Последняя строка подходит под шаблоны _bcd и _b_d, первый из них _bcd, который равен \(p[5]\).

Ответ на этот тест не единственный, другие корректные порядки существуют.

Во втором примере cba не подходит под шаблон __c, а значит, корректного порядка не существует.

В третьем примере в порядке (a_, _b) получается, что первый шаблон под который подходят обе строки — это \(1\), а в порядке (_b, a_) получается, что первый шаблон под который подходят обе строки — это \(2\). Значит, не существует такого порядка, что ответ равен \(1\) и \(2\).

F. Фонари

Бинарный поиск дп Структуры данных *3000

На прямой расположено \(n\) фонарей. Фонарь с номером \(i\) находится в позиции \(i\) и имеет мощность \(p_i\).

Каждый фонарь может быть направлен так, чтобы осветить либо несколько фонарей слева, либо несколько фонарей справа. Если \(i\)-й фонарь повернут влево, то он освещает все такие фонари \(j\), что \(j \in [i - p_i, i - 1]\). Аналогично, если он повернут вправо, то он освещает все такие фонари \(j\), что \(j \in [i + 1, i + p_i]\).

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

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10000\)) — количество наборов входных данных.

Каждый набор состоит из двух строк. Первая строка содержит одно целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)) — количество фонарей.

Вторая строка содержит \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(0 \le p_i \le n\)) — мощность \(i\)-го фонаря.

Сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ следующим образом:

Если можно направить все фонари так, чтобы каждый фонарь был освещен, выведите YES в первой строке и строку из \(n\) символов L и/или R (\(i\)-й символ равен L, если \(i\)-й фонарь повернут влево, в противном случае этот символ - R) во второй строке. Если ответов несколько, вы можете вывести любой из них.

Если ответа нет, просто выведите NO для этого набора входных данных.

G. Минимальная разница

сортировки Структуры данных хэши *3100

Задан целочисленный массив \(a\) размера \(n\).

Вам предстоит выполнить \(m\) запросов. Каждый запрос имеет один из двух типов:

  • «\(1\) \(l\) \(r\) \(k\)» — вычислите минимальное значение \(dif\) такое, что существуют \(k\) различных целых чисел \(x_1, x_2, \dots, x_k\) таких, что \(cnt_i > 0\) (для каждого \(i \in [1, k]\)) и \(|cnt_i - cnt_j| \le dif\) (для каждого \(i \in [1, k], j \in [1, k]\)), где \(cnt_i\) — это число вхождений \(x_i\) в подмассив \(a[l..r]\). Если невозможно выбрать \(k\) целых чисел, сообщите об этом;
  • «\(2\) \(p\) \(x\)» — присвоить \(a_{p} := x\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^5\)) — размер массива \(a\) и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^5\)).

Следующие \(m\) строк содержат запросы (по одному на строку). Каждый запрос имеет один из двух типов:

  • «\(1\) \(l\) \(r\) \(k\)» (\(1 \le l \le r \le n; 1 \le k \le 10^5\))
  • «\(2\) \(p\) \(x\)» (\(1 \le p \le n; 1 \le x \le 10^5\)).

Гарантируется, что есть хотя бы один запрос первого типа.

Выходные данные

Для каждого запроса первого типа выведите минимальное значение \(dif\), удовлетворяющее всем необходимым условиям, или \(-1\), если невозможно выбрать \(k\) различных целых чисел.

B. Nezzar и бинарная строка

жадные алгоритмы Структуры данных *1900

У Nezzar есть бинарная строка \(s\) длины \(n\), которой он хочет поделиться со своим лучшим другом, Nanako. Он будет в течение \(q\) дней проверять эту бинарную строку. В то же время Nezzar хочет изменить свою строку \(s\) так, чтобы она через \(q\) дней стала равна более красивой строке \(f\).

Известно, что Nanako очень любит однообразие. В \(i\)-й день Nanako будет проверять отрезок строки \(s\) с позиции \(l_i\) по позицию \(r_i\) включительно. Если на этом отрезке есть символы и «0», и «1», Nanako очень расстроится и выкинет строку.

После каждой проверки, в \(i\)-ю ночь Nezzar может тайно поменять строго меньше, чем половину символов на отрезке с \(l_i\) по \(r_i\) включительно (потому что иначе изменение будет слишком очевидным).

Сейчас Nezzar интересуется, можно ли избежать того, что Nanako расстроится, и вместе с этим получить строку \(f\) в конце этих \(q\) дней и ночей.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находятся два целых числа \(n,q\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le q \le 2 \cdot 10^5\)).

Во второй строке описания каждого набора входных данных находится бинарная строка \(s\) длины \(n\).

В третьей строке описания каждого набора входных данных находится бинарная строка \(f\) длины \(n\).

Затем следуют \(q\) строк, в \(i\)-й из них находятся два целых числа \(l_i,r_i\) (\(1 \le l_i \le r_i \le n\))  — границы отрезка, который Nanako будет проверять в \(i\)-й день.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), и сумма \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в собственной строке выведите «YES», если можно избежать того, что Nanako расстроится, и получить строку \(f\) в конце \(q\) дней и ночей. Иначе выведите «NO».

Вы можете вывести каждый символ в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных \(\underline{00000} \rightarrow \underline{000}11 \rightarrow 00111\) — одна из возможных последовательностей изменений строки.

Во втором наборе входных данных можно показать, что невозможно получить строку \(f\) в конце.

E. Nezzar и турнир

жадные алгоритмы Структуры данных *3300

В знаменитом турнире Oh-Suit-United две команды играют друг против друга, борясь за главный приз.

Первая команда состоит из \(n\) игроков, а вторая команда состоит из \(m\) игроков. Каждый игрок имеет потенциал: потенциал \(i\)-го игрока первой команды равен \(a_i\), потенциал \(i\)-го игрока второй команды равен \(b_i\).

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

Очки всем игрокам будут назначаться в порядке, в котором они будут выступать. Пусть потенциал текущего игрока равен \(x\), а потенциал предыдущего игрока равен \(y\) (пусть \(y\) равно \(x\) для первого игрока). Тогда к значению на устройстве подсчета очков добавляется \(x-y\), и это значение становится равным \(0\), если оно стало отрицательным. Текущий игрок набирает столько очков, какое число отображается на устройстве подсчета. Количество очков всей команды равно сумме очков всех ее членов.

Как большой фанат первой команды, Nezzar очень хочет большей победы первой команды. Ему интересно, чему может быть равна максимальная разница между очками первой и второй команды.

Формально, пусть количество очков первой команды это \(score_f\), а количество очков второй команды это \(score_s\). Nezzar хочет найти максимальное значение \(score_f - score_s\) по всем возможным порядкам игроков на сцене.

Ситуация часто меняется и произойдет \(q\) событий. Есть три типа событий:

  • \(1\) \(pos\) \(x\) — изменить \(a_{pos}\) на \(x\);
  • \(2\) \(pos\) \(x\) — изменить \(b_{pos}\) на \(x\);
  • \(3\) \(x\) — предположим, произойдет турнир с условием \(k = x\). Nezzar хочет узнать максимальное возможное значение \(score_f - score_s\).

Можете ли вы помочь Nezzar ответить на запросы третьего типа?

Входные данные

В первой строке находится три целых числа \(n\), \(m\) и \(q\) (\(1 \le n,m \le 2 \cdot 10^5, 1 \le q \le 5 \cdot 10^5\)).

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^6\)).

В третьей строке находится \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(0 \le b_i \le 10^6\)).

Следующие \(q\) строк содержат описания событий, заданных в условии:

  • \(1\) \(pos\) \(x\) (\(1 \le pos \le n\), \(0 \le x \le 10^6\));
  • \(2\) \(pos\) \(x\) (\(1 \le pos \le m\), \(0 \le x \le 10^6\));
  • \(3\) \(x\) (\(0 \le x \le 10^6\)).
Выходные данные

Для каждого запроса третьего типа выведите ответ на этот запрос.

Примечание

В первом запросе первого примера турнир будет проводиться с \(k = 5\). Будет оптимально расположить игроков в следующем порядке (здесь будут записаны их потенциалы):

\(\underline{7}\), \(3\), \(5\), \(4\), \(6\), \(\underline{1}\), \(\underline{2}\) (подчеркнутые числа это потенциалы игроков из первой команды).

Личные очки игроков, пронумерованных в порядке, в котором они выступают:

  • \(\max(5 + (7 - 7), 0) = 5\) для \(\underline{1}\)-го игрока;
  • \(\max(5 + (3 - 7), 0) = 1\) для \(2\)-го игрока;
  • \(\max(1 + (5 - 3), 0) = 3\) для \(3\)-го игрока;
  • \(\max(3 + (4 - 5), 0) = 2\) для \(4\)-го игрока;
  • \(\max(2 + (6 - 4), 0) = 4\) для \(5\)-го игрока;
  • \(\max(4 + (1 - 6), 0) = 0\) для \(\underline{6}\)-го игрока;
  • \(\max(0 + (2 - 1), 0) = 1\) для \(\underline{7}\)-го игрока.

Поэтому \(score_f = 5 + 0 + 1 = 6\) и \(score_s = 1 + 3 + 2 + 4 = 10\). Разница между количествами очков команд равна \(6 - 10 = -4\). Можно доказать, что это максимально возможная разница между количествами очков команд.

B1. Покраска массива I

дп жадные алгоритмы Конструктив реализация Структуры данных *1900

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

Гомеру очень нравятся массивы. Сегодня он красит массив \(a_1, a_2, \dots, a_n\) двумя видами цветов, белым и черным. Покраска массива \(a_1, a_2, \dots, a_n\) описывается массивом \(b_1, b_2, \dots, b_n\), где \(b_i\) обозначает цвет \(a_i\) (\(0\) для белого и \(1\) для черного).

Согласно покраске \(b_1, b_2, \dots, b_n\) массив \(a\) разделяется на два новых массива \(a^{(0)}\) и \(a^{(1)}\), где \(a^{(0)}\) — это подпоследовательность всех белых элементов в \(a\), а \(a^{(1)}\) — это подпоследовательность всех черных элементов в \(a\). Например, если \(a = [1,2,3,4,5,6]\) и \(b = [0,1,0,1,0,0]\), то \(a^{(0)} = [1,3,5,6]\) и \(a^{(1)} = [2,4]\).

Количество отрезков в массиве \(c_1, c_2, \dots, c_k\), обозначаемое \(\mathit{seg}(c)\), — это количество элементов, которое останется, если объединить все соседние элементы с одинаковым значением в \(c\). Например, количество отрезков в \([1,1,2,2,3,3,3,2]\) равно \(4\), так как массив станет равным \([1,2,3,2]\) после объединения соседних элементов с одинаковым значением. В частности, количество отрезков в пустом массиве равно \(0\).

Гомер хочет найти покраску \(b\), согласно которой суммарное количество отрезков в \(a^{(0)}\) и \(a^{(1)}\), т. е. \(\mathit{seg}(a^{(0)})+\mathit{seg}(a^{(1)})\), максимально. Найдите, чему равно это значение.

Входные данные

Первая строка содержит целое число \(n\) (\(1 \leq n \leq 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq n\)).

Выходные данные

Выведите единственное число — максимально возможное суммарное количество отрезков.

Примечание

В первом примере можно выбрать \(a^{(0)} = [1,2,3,3]\), \(a^{(1)} = [1,2,3]\) и \(\mathit{seg}(a^{(0)}) = \mathit{seg}(a^{(1)}) = 3\). Таким образом, ответ \(3+3 = 6\).

Во втором примере можно выбрать \(a^{(0)} = [1,2,3,4,5,6,7]\) и \(a^{(1)}\) пустое. Мы видим, что \(\mathit{seg}(a^{(0)}) = 7\) и \(\mathit{seg}(a^{(1)}) = 0\). Таким образом, ответ \(7+0 = 7\).

B2. Покраска массива II

дп жадные алгоритмы Конструктив реализация Структуры данных *2100

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

Гомеру очень нравятся массивы. Сегодня он красит массив \(a_1, a_2, \dots, a_n\) двумя видами цветов, белым и черным. Покраска массива \(a_1, a_2, \dots, a_n\) описывается массивом \(b_1, b_2, \dots, b_n\), где \(b_i\) обозначает цвет \(a_i\) (\(0\) для белого и \(1\) для черного).

Согласно покраске \(b_1, b_2, \dots, b_n\) массив \(a\) разделяется на два новых массива \(a^{(0)}\) и \(a^{(1)}\), где \(a^{(0)}\) — это подпоследовательность всех белых элементов в \(a\), а \(a^{(1)}\) — это подпоследовательность всех черных элементов в \(a\). Например, если \(a = [1,2,3,4,5,6]\) и \(b = [0,1,0,1,0,0]\), то \(a^{(0)} = [1,3,5,6]\) и \(a^{(1)} = [2,4]\).

Количество отрезков в массиве \(c_1, c_2, \dots, c_k\), обозначаемое \(\mathit{seg}(c)\),  — это количество элементов, которое останется, если объединить все соседние элементы с одинаковым значением в \(c\). Например, количество отрезков в \([1,1,2,2,3,3,3,2]\) равно \(4\), так как массив станет равным \([1,2,3,2]\) после объединения соседних элементов с одинаковым значением. В частности, количество отрезков в пустом массиве равно \(0\).

Гомер хочет найти покраску \(b\), согласно которой суммарное количество отрезков в \(a^{(0)}\) и \(a^{(1)}\), т. е. \(\mathit{seg}(a^{(0)})+\mathit{seg}(a^{(1)})\), минимально. Найдите, чему равно это значение.

Входные данные

Первая строка содержит целое число \(n\) (\(1 \leq n \leq 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq n\)).

Выходные данные

Выведите единственное число — минимально возможное суммарное количество отрезков.

Примечание

В первом примере можно выбрать \(a^{(0)} = [1,1,2,2]\), \(a^{(1)} = [2,3]\) и \(\mathit{seg}(a^{(0)}) = \mathit{seg}(a^{(1)}) = 2\). Таким образом, ответ \(2+2 = 4\).

Во втором примере можно выбрать \(a^{(0)} = [1,1,1,1]\), \(a^{(1)} = [2,2,2]\) и \(\mathit{seg}(a^{(0)}) = \mathit{seg}(a^{(1)}) = 1\). Таким образом, ответ \(1+1 = 2\).

D. Странный источник минералов

Бинарный поиск битмаски Деревья Перебор Структуры данных Теория вероятностей *2900

В стране Гомера есть \(n\) городов с номерами от \(1\) до \(n\), которые образуют дерево. Иначе говоря, между этими \(n\) городами есть \((n-1)\) неориентированных дорог, и с каждого города можно попасть в любой другой по этим дорогам.

Страна Гомера — индустриальная страна, и каждый из \(n\) городов в ней содержит некоторый минеральный ресурс. Минеральный ресурс города \(i\) обозначен как \(a_i\).

Гомеру даны планы страны на \(q\) следующих лет. План \(i\)-го года описывается четырьмя параметрами \(u_i, v_i, l_i\) и \(r_i\), и он должен найти любой такой минеральный ресурс \(c_i\) такой, что выполняются два условия:

  • минеральный ресурс \(c_i\) встречается нечетное количество раз между городами \(u_i\) и \(v_i\);
  • \(l_i \leq c_i \leq r_i\).

Так как вы лучший друг Гомера, он просит вас о помощи. Для каждого плана найдите любой такой минерал \(c_i\) или скажите, что его нет.

Входные данные

Первая строка содержит два целых числа \(n\) (\(1 \leq n \leq 3 \cdot 10^5\)) и \(q\) (\(1 \leq q \leq 3 \cdot 10^5\)) — количество городов и количество планов соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq n\)).

\(i\)-я строка из следующих \((n-1)\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(1 \leq x_i, y_i \leq n\)) с \(x_i \neq y_i\), обозначающие дорогу между городами \(x_i\) и \(y_i\). Гарантируется, что данные дороги образуют дерево.

\(i\)-я строка из следующих \(q\) строк содержит четыре целых числа \(u_i\), \(v_i\), \(l_i\), \(r_i\) (\(1 \leq u_i \leq n\), \(1 \leq v_i \leq n\), \(1 \leq l_i \leq r_i \leq n\)), указывающие на план города в \(i\)-й год.

Выходные данные

Выведите \(q\) строк, \(i\)-я из которых содержит целое число \(c_i\), такое, что

  • \(c_i = {-1}\), если нет такого минерального ресурса, который соответствовал бы требуемому условию; или
  • \(c_i\) — это номер выбранного минерального ресурса в \(i\)-м году. Выбранный минеральный ресурс \(c_i\) должен удовлетворять условиям \(i\)-го года, описанным выше в условии задачи. Если есть несколько подходящих \(c_i\), вы можете вывести любой из них.
Примечание

В первых трех запросах четыре города находятся между городом \(3\) и городом \(5\), а именно: город \(1\), город \(2\), город \(3\) и город \(5\). В них представлены минеральные ресурсы \(1\) (появляется в городах \(3\) и \(5\)), \(2\) (появляется в городе \(2\)) и \(3\) (появляется в городе \(1\)). Следует отметить, что

  • Первый запрос заключается только в том, чтобы проверить, появляется ли минеральный источник \(1\) нечетное количество раз между городом \(3\) и городом \(5\). Ответ — нет, потому что минеральный источник \(1\) появляется дважды (четное число раз) между городом \(3\) и городом \(5\).
  • Второй и третий запросы одинаковы, но они могут выбирать разные минеральные ресурсы. Вы можете выбрать любой из \(2\) и \(3\).

E. Сортируем книги

дп жадные алгоритмы Структуры данных *2500

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

У вас есть \(n\) книг, стоящих в ряд на полке, обложка \(i\)-й книги имеет цвет \(a_i\).

Вы хотите переставить книги так, чтобы сделать полку красивой. Полка считается красивой, если все книги одного цвета стоят подряд.

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

Какое наименьшее количество операций вам понадобится, чтобы сделать полку красивой?

Входные данные

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

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — цвета книг.

Выходные данные

Выведите наименьшее количество операций, чтобы сделать полку красивой.

Примечание

В первом примере у нас есть полка с книгами \([1, 2, 2, 1, 3]\) и мы можем, например:

  1. взять книгу на позиции \(4\) и переместить ее в правый конец: мы получим \([1, 2, 2, 3, 1]\);
  2. взять книгу на позиции \(1\) и переместить ее в правый конец: мы получим \([2, 2, 3, 1, 1]\).

Во втором примере, мы можем переместить первую книгу в конец полки и получить \([2,2,1,1,1]\).

D. Плейлист

кратчайшие пути реализация снм Структуры данных *1900

У Аркадия есть плейлист, в котором изначально \(n\) песен, пронумерованных от \(1\) до \(n\) в том порядке, в котором они находятся в плейлисте. Аркадий начинает слушать песни из плейлиста друг за другом, начиная с песни \(1\). Плейлист зациклен, то есть после того, как он прослушает последнюю песню, он опять начнет слушать с начала плейлиста.

У каждой песни есть жанр, определяемый натуральным числом \(a_i\). Пусть Аркадий только что прослушал песню с жанром \(y\), а до нее — песню с жанром \(x\). Если \(\operatorname{gcd}(x, y) = 1\), он думает, что песни не сочетаются, и удаляет последнюю прослушанную песню (с жанром \(y\)) из плейлиста. После этого он продолжает слушать песни как обычно, пропуская уже удаленные, при этом он забывает, что слушал какие-то песни до удаления. Иными словами, он не может удалить песню сразу после того, как удалил предыдущую. Здесь \(\operatorname{gcd}(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Например, если жанры песен в начальном плейлисте равны \([5, 9, 2, 10, 15]\), то прослушивание происходит следующим образом: [5, 9, 2, 10, 15] \(\to\) [5, 9, 2, 10, 15] \(\to\) [5, 2, 10, 15] (т. к. \(\operatorname{gcd}(5, 9) = 1\)) \(\to\) [5, 2, 10, 15] \(\to\) [5, 2, 10, 15] \(\to\) [5, 2, 10, 15] \(\to\) [5, 2, 10, 15] \(\to\) [5, 2, 10, 15] \(\to\) [5, 10, 15] (т. к. \(\operatorname{gcd}(5, 2) = 1\)) \(\to\) [5, 10, 15] \(\to\) [5, 10, 15] \(\to\) ... Жирным выделены последние две прослушанные песни. Обратите внимание, после удаления некоторой песни Аркадий забывает, что слушал ее и предыдущую.

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

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^5\)) — количество песен.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — жанры песен.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку. Сначала выведите одно целое число \(k\) — количество песен, которые будут удалены. Затем выведите \(k\) различных целых чисел — номера удаленных песен в порядке удаления.

Примечание

Первый набор входных данных объяснен в условии.

Во втором наборе плейлист изменяется следующим образом: [1, 2, 4, 2, 4, 2] \(\to\) [1, 2, 4, 2, 4, 2] \(\to\) [1, 4, 2, 4, 2] (т. к. \(\operatorname{gcd}(1, 2) = 1\)) \(\to\) [1, 4, 2, 4, 2] \(\to\) [1, 4, 2, 4, 2] \(\to\) [1, 4, 2, 4, 2] \(\to\) [1, 4, 2, 4, 2] \(\to\) [1, 4, 2, 4, 2] \(\to\) [4, 2, 4, 2] (т. к. \(\operatorname{gcd}(2, 1) = 1\)) \(\to\) [4, 2, 4, 2] \(\to\) ...

Во третьем наборе плейлист изменяется следующим образом: [1, 2] \(\to\) [1, 2] \(\to\) [1] (т. к. \(\operatorname{gcd}(1, 2) = 1\)) \(\to\) [1] \(\to\) [1] (Аркадий послушал одну и ту же песню подряд дважды) \(\to\) [] (т. к. \(\operatorname{gcd}(1, 1) = 1\)).

Четвертый набор входных данных совпадает с предыдущим после удаления второй песни.

В пятом примере Аркадий слушает одну и ту же песню снова и снова, но т. к. \(\operatorname{gcd}(2, 2) \ne 1\), он не удаляет ее.

E. Панорама города

дп разделяй и властвуй Структуры данных *2100

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

В городе \(n\) зданий, расположенных в линию слева направо, \(i\)-е из них имеет положительную высоту \(h_i\). Высоты всех \(n\) зданий в городе различны. Кроме того, у каждого здания есть параметр красоты \(b_i\). Красота зданий может быть положительна или отрицательна (или равна нулю), потому что некоторые здания портят вид.

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

Красота одной фотографии равняется красоте \(b_i\) самого низкого здания на фотографии. Общая красота набора фотографий равна сумме красот всех фотографий в наборе. Помогите Алисе определить максимально возможную красоту корректного набора фотографий.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество зданий.

Вторая строка содержит \(n\) различных целых чисел \(h_1, h_2, \ldots, h_n\) (\(1 \le h_i \le n\)), где \(i\)-е число равно высоте \(i\)-го здания.

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(-10^9 \le b_i \le 10^9\)), где \(i\)-е число равно красоте \(i\)-го здания.

Выходные данные

Выведите одно число — максимальную красоту, которую может иметь корректный набор фотографий.

Примечание

В первом примере максимальная красота достигается, если Алиса сделает пять фотографий, каждая из которых содержит одно здание.

Во втором примере Алиса может достичь максимальной красоты набора, равной \(10\), если сделает четыре фотографии: три содержат одно здание каждая (здания \(1\), \(2\) и \(5\)), их красоты равны \(-3\), \(4\) и \(7\) соответственно, и еще одна фотография содержит здания \(3\) и \(4\), ее красота равна \(2\).

В третьем примере Алиса может просто сделать одно фото всего города.

В четвертом примере Алиса может сделать следующие фотографии для достижения максимальной красоты набора: отдельно фотографии зданий \(1\), \(2\), \(8\), \(9\) и \(10\), а также одно фото зданий \(3\), \(4\), \(5\), \(6\) и \(7\) вместе.

H. Экзамен

Деревья строковые суфф. структуры Структуры данных *3400

В этом году в Конохе вновь проводится экзамен на звание Чунина, и в нем участвуют \(n\) ниндзя с именами \(s_1\), \(s_2\), ..., \(s_n\). Все имена участников различны. Один из этапов экзамена — сражения между участниками. В этом году руководство Конохи решило, что определять, кто с кем сражается, будут по-новому. Ниндзя \(i\) сражается с ниндзя \(j\), если выполнены три правила:

  • \(i \neq j\);
  • \(s_{j}\) — подстрока \(s_{i}\);
  • не существует \(k\), отличного от \(i\) и \(j\) такого, что \(s_{j}\) — подстрока \(s_{k}\), а \(s_{k}\) — подстрока \(s_{i}\).

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

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

Входные данные

Первая строка содержит натуральное число \(n\) (\(1 \leq n \leq 10^{6}\)) — число участников экзамена.

Следующие \(n\) строк содержат имена участников. Все имена непустые, различны и состоят из строчных латинских букв. Суммарная длина всех имен не превосходит \(10^6\).

Выходные данные

Необходимо вывести единственное число — количество сражений на экзамене в этом году.

Примечание

В первом примере hidan сражается с dan, а hanabi сражается с nabi, который также сражается с bi. Ниндзя с именами hanabi и bi не сражаются, поскольку есть ниндзя с именем nabi, из-за которого для этой пары не выполняется третье условие.

Во втором примере сражения происходят между abacaba и acaba, abacaba и abaca, acaba и aca, abaca и aca.

F. Копия или префиксная сумма

дп Комбинаторика сортировки Структуры данных *2400

Вам дан массив целых чисел \(b_1, b_2, \ldots, b_n\).

Массив \(a_1, a_2, \ldots, a_n\) целых чисел смешанный, если для всех \(i\) (\(1 \leq i \leq n\)) хотя бы одно из этих двух условий выполнено:

  • \(b_i = a_i\), или
  • \(b_i = \sum_{j=1}^{i} a_j\).

Найдите количество смешанных массивов \(a_1, a_2, \ldots, a_n\). Поскольку ответ может быть очень большим, найдите его по модулю \(10^9 + 7\).

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Во второй строке описания каждого набора входных данных находятся \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(-10^9 \le b_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число: количество смешанных массивов \(a_1, a_2, \ldots, a_n\) по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных смешанные массивы — это \([1, -2, 1]\), \([1, -2, 2]\), \([1, -1, 1]\).

Во втором наборе входных данных смешанные массивы — это \([1, 1, 1, 1]\), \([1, 1, 1, 4]\), \([1, 1, 3, -1]\), \([1, 1, 3, 4]\), \([1, 2, 0, 1]\), \([1, 2, 0, 4]\), \([1, 2, 3, -2]\), \([1, 2, 3, 4]\).

В четвертом наборе входных данных единственный смешанный массив — это \([0, 0, 0, 1]\).

D. Максимальная медиана

Бинарный поиск дп Структуры данных *2100

У вас есть массив \(a\) длины \(n\). Найдите такой подмассив \(a[l..r]\) длиной хотя бы \(k\), что у него максимально возможная медиана.

Медианой в массиве длины \(n\) называется элемент, стоящий на позиции \(\lfloor \frac{n + 1}{2} \rfloor\) после сортировки всех элементов в неубывающем порядке. Например: \(median([1, 2, 3, 4]) = 2\), \(median([3, 2, 1]) = 2\), \(median([2, 1, 2, 1]) = 1\).

Подмассив \(a[l..r]\) — это последовательная часть массива \(a\), то есть массив \(a_l,a_{l+1},\ldots,a_r\) для каких-то \(1 \leq l \leq r \leq n\), он имеет длину \(r - l + 1\).

Входные данные

В первой строке находятся два целых числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 2 \cdot 10^5\)).

Во второй строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)).

Выходные данные

Выведите одно целое число \(m\) — максимальную медиану, которую можно получить.

Примечание

В первом примере все возможные массивы: \([1..3]\), \([1..4]\), \([1..5]\), \([2..4]\), \([2..5]\) и \([3..5]\), и во всех них медиана равна \(2\), соответственно, максимальная медиана также равна \(2\).

Во втором примере \(median([3..4]) = 3\).

F. Пары путей

Деревья дп Комбинаторика поиск в глубину и подобное Структуры данных *2600

У вас есть дерево из \(n\) вершин, а также \(m\) простых вершинных путей. Ваша задача — найти, сколько пар этих путей пересекаются по ровно одной вершине. Более формально, вам нужно найти число пар \((i, j)\) \((1 \leq i < j \leq m)\) таких, что \(path_i\) и \(path_j\) имеют ровно одну общую вершину.

Входные данные

В первой строке находится единственное целое число \(n\) \((1 \leq n \leq 3 \cdot 10^5)\).

Следующие \(n - 1\) строк описывают дерево. На каждой строке находится два целых числа \(u\) и \(v\) \((1 \leq u, v \leq n)\) описывающие ребро между вершинами \(u\) и \(v\).

В следующей строке находится единственное целое число \(m\) \((1 \leq m \leq 3 \cdot 10^5)\).

Следующие \(m\) строк описывают пути. Каждая строка описывает путь своими крайними точками \(u\) и \(v\) \((1 \leq u, v \leq n)\). Путь задается всеми вершинами на кратчайшем пути из \(u\) в \(v\) (включая \(u\) и \(v\)).

Выходные данные

Выведите единственное целое число — количество пар путей, которые пересекаются по ровно одной вершине.

Примечание

Дерево и пути в первом примере выглядят так. Пары \((1,4)\) и \((3,4)\) пересекаются по ровно одной вершине.

Во втором примере все пути состоят из единственной одинаковой вершины, так что все пары \((1, 2)\), \((1, 3)\) и \((2, 3)\) пересекаются по одной вершине.

Третий пример, такой же как первый, но с двумя дополнительными путями. Пары \((1,4)\), \((1,5)\), \((2,5)\), \((3,4)\), \((3,5)\), \((3,6)\) и \((5,6)\) пересекаются по ровно одной вершине.

E. Дешевый обед

графы жадные алгоритмы Перебор реализация сортировки Структуры данных *2000

Иван хочет полноценно пообедать. Для этого он хочет заказать первое, второе, напиток и десерт.

Всего на выбор у Ивана есть \(n_1\) разных первых блюд (\(i\)-е первое стоит \(a_i\) монет), \(n_2\) разных вторых блюд (\(i\)-е второе стоит \(b_i\) монет), \(n_3\) разных напитков (\(i\)-й напиток стоит \(c_i\) монет) и \(n_4\) разных десертов (\(i\)-й десерт стоит \(d_i\) монет).

Некоторые блюда не сочетаются между собой. Всего есть \(m_1\) пар из первого и второго, которые не сочетаются, \(m_2\) несочетающихся пар из второго и напитка и \(m_3\) несочетающихся пар из напитка и десерта.

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

Входные данные

В первой строке заданы четыре целых числа \(n_1\), \(n_2\), \(n_3\) и \(n_4\) (\(1 \le n_i \le 150000\)) — количество видов первого, второго, напитков и десертов соответственно.

Далее следуют четыре строки. В первой строке заданы \(n_1\) целых чисел \(a_1, a_2, \dots, a_{n_1}\) (\(1 \le a_i \le 10^8\)), где \(a_i\) — это цена \(i\)-го вида первого блюда. Следующие три строки описывают цены вторых блюд, напитков и десертов в том же формате (\(1 \le b_i, c_i, d_i \le 10^8\)).

В следующей строке задан одно целое число \(m_1\) (\(0 \le m_1 \le 200000\)) — количество несочетающихся пар из первого и второго блюд. В каждой из следующих \(m_1\) строк заданы два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i \le n_1\); \(1 \le y_i \le n_2\)) означающие, что первое блюдо номер \(x_i\) не сочетается со вторым блюдом номер \(y_i\). Все пары различные.

Блок несочетающихся пар из второго блюда и напитка задан в аналогичном формате. В таком же формате заданы и несочетающиеся пары из напитка и десерта (\(0 \le m_2, m_3 \le 200000\)).

Выходные данные

Если невозможно выбрать первое, второе, напиток и десерт, сочетающиеся друг с другом, выведите \(-1\). В противном случае выведите одно число — наименьшую суммарную стоимость обеда.

Примечание

Оптимальный вариант в первом примере — это выбрать первое блюдо номер \(2\), второе номер \(1\), напиток номер \(2\) и десерт номер \(1\).

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

E. Палиндромные пары

*особая задача дп Структуры данных *2200

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

Палиндромная последовательность — это последовательность, которая равна перевернутой себе.

Задана последовательность из \(n\) целых чисел \(a_1, a_2, \dots, a_n\). Любое целое значение встречается в \(a\) не более двух раз.

Какова длина самой длинной палиндромной подпоследовательности последовательности \(a\)?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Затем следуют описания \(t\) наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 250\,000\)) — количество элементов последовательности.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)).

Любое целое значение встречается в \(a\) не более двух раз. Сумма \(n\) по всем наборам входных данных не превосходит \(250\,000\).

Выходные данные

На каждый набор входных данных выведите одно целое число — длину самой длинной палиндромной подпоследовательности последовательности \(a\).

Примечание

Вот самые длинные палиндромные подпоследовательности для наборов входных данных из примера:

  • 2 1 3 1 5 2
  • 1 3 3 4 4 1 или 1 3 3 4 4 1
  • 1
  • 1 1
  • 4 4 2 5 7 2 3 или 4 4 2 5 7 2 3

F. Dogecoin

*особая задача *особая задача Бинарный поиск Структуры данных *2300

В последнее время криптовалюты становятся все более популярными. Аня решила, что самое время начать майнинг криптовалюты Dogecoin. Компьютер у Ани не очень мощный, поэтому Аня добывает ровно \(1\) Dogecoin в день. В интернете есть прогнозы стоимости \(1\) Dogecoin на ближайшие \(n\) дней. Каждый день Аня может продать любое количество Dogecoin, которое у нее сейчас есть. Обратите внимание, что если Аня добыла dogecoin в \(i\)-й день, то она может продать его в тот же день.

Аня еще не решила, когда начинать майнинг. Она подготовила \(q\) возможных планов и для каждого из них хочет знать максимальную прибыль, которую она может получить. Каждый из планов описывается двумя числами \(l\) и \(r\) — первый и последний дни майнинга. Обратите внимание, что после \(r\)-го дня у Ани не должно остаться ни одного Dogecoin.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le 10^6\)), где \(c_i\) — стоимость Dogecoin в \(i\)-й день.

Третья строка содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество планов Ани.

Следующие \(q\) строк содержат по два целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)) — первый и последний дни майнинга.

Выходные данные

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

G. Раскраска чисел

*особая задача жадные алгоритмы Структуры данных теория чисел *2500

Задано \(n\) целых чисел, каждое целое число от \(1\) до \(n\), все числа попарно различны. Вы должны покрасить их в красный и синий цвета (каждое целое число должно иметь ровно один цвет).

Стоимость покраски — это количество пар \((x, y)\) таких, что \(y \bmod x = 0\), \(y\) красный и \(x\) синий.

Для каждого \(k \in [1, n]\) вычислите максимальную стоимость покраски, если ровно \(k\) целых чисел красные.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 10^5\)).

Выходные данные

Для каждого \(k \in [1,n]\) выведите одно целое число — максимальная стоимость покраски, если ровно \(k\) целых чисел красные.

H. Построй из суффиксов

*особая задача Комбинаторика Структуры данных *2800

Задано целое число \(n\) и последовательность \(a\) из \(n-1\) целых чисел: каждый элемент равен либо \(0\), либо \(1\).

Требуется построить такую строку длины \(n\), что:

  • каждая буква — одна из «abcd»;
  • если \(a_i=1\), то \(i\)-й суффикс строки лексикографически меньше \((i+1)\)-го суффикса;
  • если \(a_i=0\), то \(i\)-й суффикс строки лексикографически больше \((i+1)\)-го суффикса.

Будут заданы \(q\) запросов вида:

  • \(i\) (\(1 \le i \le n - 1\)) — сменить значение \(a_i\) на противоположное (если \(a_i=0\), то установить \(a_i\) в \(1\), и наоборот).

После каждого запроса выведите количество различных строк, удовлетворяющих данным ограничениям, по модулю \(998\,244\,353\).

Входные данные

В первой строке записаны два целых числа \(n\) и \(q\) (\(2 \le n \le 10^5\); \(1 \le q \le 10^5\)) — длина строки и количество запросов.

Во второй строке записаны \(n-1\) целых чисел \(a_1, a_2, \dots, a_{n-1}\) (\(a_i \in \{0, 1\}\)) — ограничения на суффиксы строки.

В каждой из следующих \(q\) строк задан запрос: одно целое число \(i\) (\(1 \le i \le n - 1\)) — сменить значение \(a_i\) на противоположное (если \(a_i=0\), то установить \(a_i\) в \(1\), и наоборот).

Выходные данные

После каждого запроса выведите количество различных строк, удовлетворяющих данным ограничениям, по модулю \(998\,244\,353\).

Примечание

\(i\)-й суффикс строки — это последовательная подстрока, которая начинается в \(i\)-й позиции и заканчивается в последней позиции.

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).

Две строки \(a\) и \(b\) длины \(n\) различаются, если существует такая позиция \(i\), что \(a_i \neq b_i\)

J. Цветочный магазин

*особая задача бпф математика Структуры данных *3100

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

Есть \(n\) различных типов цветов, которые она может заказать, и каждый цветок типа \(i\) стоит \(w_i\). Последние праздники прошли с большим успехом, она продала все цветы, которые у нее были, так что сейчас все ее запасы пусты.

С этого момента она начинает рутинные операции по заказу и продаже цветов, одновременно пытаясь проанализировать, что у нее есть под рукой. Все это можно представить в виде \(m\) запросов трех типов:

  • «\(1\) \(i\) \(c\)» — она купила \(c\) цветов типа \(i\);
  • «\(2\) \(i\) \(c\)» — она продала \(c\) цветов типа \(i\);
  • «\(3\) \(l\) \(r\) \(k\)» — сколько вариантов букетов она может составить, используя только цветы типов \(l, l + 1, \dots, r\) со стоимостью не более \(k\). Для простоты можно представить, что букет — это мультисет цветов, а два букета различны, если они различны как мультисеты. Стоимость букета — это сумма всех цветов, которые в нем есть.

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

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 1000\); \(1 \le m \le 1000\)) — количество типов цветов и количество запросов.

Вторая строка содержит \(n\) целых чисел \(w_1, w_2, \dots, w_n\) (\(1 \le w_i \le 1000\)) — стоимость одного цветка каждого типа.

Следующие \(m\) строк содержат запросы — по одному на строке. Каждый запрос имеет один из трех типов:

  • \(1\) \(i\) \(c\) (\(1 \le i \le n\); \(1 \le c \le 5000\));
  • \(2\) \(i\) \(c\) (\(1 \le i \le n\); \(1 \le c \le 5000\)). Гарантируется, что в этот момент есть по крайней мере \(c\) цветов типа \(i\);
  • \(3\) \(l\) \(r\) \(k\) (\(1 \le l \le r \le n\); \(1 \le k \le 5000\))

Гарантируется, что общая стоимость всех цветов в магазине после каждого запроса не превышает \(5000\).

Выходные данные

Для каждого запроса третьего типа выведите, сколько вариантов букетов можно составить, используя только цветы типов \(l, l + 1, \dots, r\) со стоимостью не более \(k\). Поскольку ответ может быть слишком большим, выведите его по модулю \(998\,244\,353\).

E. Случайная победа

Бинарный поиск жадные алгоритмы Структуры данных *1400

В Берляндии проводится чемпионат, в котором участвует \(n\) игроков. У игрока с номером \(i\) есть \(a_i\) (\(a_i \ge 1\)) фишек.

Чемпионат состоит из \(n-1\) игры, которые проводятся по следующим правилам:

  • в каждой игре выбирается два случайных игрока с ненулевым количеством фишек;
  • победителем игры считается игрок, у которого больше фишек (при равенстве победитель выбирается случайно);
  • победивший игрок забирает себе все фишки проигравшего.

Последний игрок с ненулевым количеством фишек считается победителем чемпионата.

Все случайные решения, которые принимаются во время чемпионата, принимаются равновероятно и независимо.

Например если \(n=4\), \(a = [1, 2, 4, 3]\), то один из вариантов развития игры следующий (могли быть и другие варианты):

  • во время первой игры были выбраны первый и четвертый игроки. Количество фишек у четвертого игрока больше, поэтому он забирает фишки первого игрока. Теперь \(a = [0, 2, 4, 4]\);
  • во время второй игры были выбраны четвертый и третий игроки. Количество фишек у них однаково, но случайным образом третий игрок стал победителем. Теперь \(a = [0, 2, 8, 0]\);
  • во время третьей игры были выбраны второй и третий игроки. Количество фишек у третьего игрока больше, поэтому он забирает фишки второго игрока. Теперь \(a = [0, 0, 10, 0]\);
  • третий игрок объявляется победителем чемпионата.

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

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных состоит из одного целого положительного числа \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количества игроков в чемпионате.

Во второй строке каждого набора входных данных находятся \(n\) целых положительных чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — количества фишек у игроков.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

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

F. Уравняй массив

Бинарный поиск жадные алгоритмы математика сортировки Структуры данных *1500

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

Например, если \(n=6\) и \(a = [1, 3, 2, 1, 4, 2]\), то возможны следующие варианты сделать массив \(a\) красивым:

  • Поликарп удаляет элементы на позициях \(2\) и \(5\), массив \(a\) становится равным \([1, 2, 1, 2]\);
  • Поликарп удаляет элементы на позициях \(1\) и \(6\), массив \(a\) становится равным \([3, 2, 1, 4]\);
  • Поликарп удаляет элементы на позициях \(1, 2\) и \(6\), массив \(a\) становится равным \([2, 1, 4]\);

Помогите Поликарпу определить: какое минимальное количество элементов необходимо удалить из массива \(a\), чтобы сделать его красивым.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных состоит из одного целого числа \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длины массива \(a\).

Во второй строке каждого набора входных данных находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество элементов, которые необходимо удалить, что сделать массив \(a\) красивым.

G. Старый дисковод

Бинарный поиск математика Структуры данных *1900

Поликарп разбирал свой чердак и нашел на нем старый дисковод. В дисковод был вставлен круглый диск, на котором было написано \(n\) целых чисел.

Поликарп выписал числа с диска в массив \(a\). Оказалось, что дисковод работает по следующему алгоритму:

  • дисковод принимает на вход одно положительное число \(x\) и ставит указатель на первый элемент массива \(a\);
  • после этого дисковод начинает крутить диск, каждую секунду перемещая указатель на следующий элемент, вычисляя сумму всех элементов, побывавших под указателем. Так как диск круглый, то в массиве \(a\) после последнего элемента вновь следует первый;
  • как только сумма станет не меньше \(x\), дисковод завершит работу.

Поликарп хочет подробнее изучить работу дисковода, но у него совсем нет свободного времени. Поэтому он задал вам \(m\) вопросов. Для ответа на \(i\)-й из них вам нужно найти сколько секунд будет работать дисковод, если дать ему на вход число \(x_i\). Обратите внимание, что в некоторых случаях дисковод может работать бесконечно долго.

Например, если \(n=3, m=3\), \(a=[1, -3, 4]\) и \(x=[1, 5, 2]\), то ответы на вопросы следующие:

  • ответ на первый запрос равен \(0\), так как дисковод изначально указывает на первый элемент, и изначальная сумма равна \(1\).
  • ответ на второй запрос равен \(6\), дисковод прокрутит диск полностью два раза, и сумма станет равной \(1+(-3)+4+1+(-3)+4+1=5\).
  • ответ на третий запрос равен \(2\), сумма \(1+(-3)+4=2\).
Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных состоит из двух целых положительных чисел \(n\), \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество чисел на диске и количество заданных вопросов.

Во второй строке каждого набора входных данных находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)).

В третьей строке каждого набора входных данных находятся \(m\) целых положительных чисел \(x_1, x_2, \ldots, x_m\) (\(1 \le x \le 10^9\)).

Гарантируется, что суммы \(n\) и \(m\) по всем наборам входных данных не превышают \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных на отдельной строке выведите \(m\) чисел, где \(i\)-е число равно:

  • \(-1\), если дисковод будет работать бесконечно долго;
  • количество секунд, в течение которых будет работать дисковод, в противном случае.

C. Pekora и батуты

дп жадные алгоритмы Перебор реализация Структуры данных *1700

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

Pekora может прыгать по батутам в несколько проходов. Она начинает проход, прыгая на любой батут по своему выбору.

Если сейчас Pekora прыгает на батут \(i\), то батут подбросит ее в позицию \(i + S_i\), а \(S_i\) станет равно \(\max(S_i-1,1)\). Иначе говоря, \(S_i\) уменьшится на \(1\), кроме случая \(S_i=1\), когда \(S_i\) останется равно \(1\).

Если в позиции \(i + S_i\) нет батута, то этот проход завершен. В противном случае Pekora продолжит проход прыжком с батута в позиции \(i + S_i\) по принципу, описанному выше.

Pekora не может перестать прыгать во время прохода, пока не приземлится на позицию больше \(n\) (в которой нет батута). Бедная Pekora!

Pekora — непослушный кролик, и хочет разрушить парк батутов, уменьшив все \(S_i\) до \(1\). Какое минимальное количество проходов ей нужно, чтобы уменьшить все \(S_i\) до \(1\)?

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 5000\)) — количество батутов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(S_1, S_2, \dots, S_n\) (\(1 \le S_i \le 10^9\)), где \(S_i\) — это сила \(i\)-го батута.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество проходов, за которое Pekora может уменьшить все \(S_i\) до \(1\).

Примечание

Для первого набора входных данных, ниже приведена оптимальная последовательность проходов, которые Pekora может использовать. (Жирным выделены позиции батутов, куда прыгает Pekora в очередной проход).

  • \([1,4,\textbf{2},2,\textbf{2},2,\textbf{2}]\)
  • \([1,\textbf{4},1,2,1,\textbf{2},1]\)
  • \([1,\textbf{3},1,2,\textbf{1},\textbf{1},\textbf{1}]\)
  • \([1,\textbf{2},1,\textbf{2},1,\textbf{1},\textbf{1}]\)

Для второго набора входных данных оптимальная последовательность проходов приведена ниже.

  • \([\textbf{2},3]\)
  • \([1,\textbf{3}]\)
  • \([1,\textbf{2}]\)

Для третьего набора входных данных, все \(S_i\) уже равны \(1\).

H. Yuezheng Ling и динамическое дерево

Деревья Структуры данных *3400

Yuezheng Ling дает Luo Tianyi дерево, которое имеет \(n\) вершин, с корнем \(1\).

Luo Tianyi скажет вам, что непосредственным родителем вершины \(i\) является \(a_i\) (\(1 \leq a_i<i\) для \(2 \le i \le n\)), и попросит вас выполнить \(q\) запросов \(2\) типов:

  1. Она даст вам три целых числа \(l\), \(r\) и \(x\) (\(2 \le l \le r \le n\), \(1 \le x \le 10^5\)). Вы должны заменить \(a_i\) на \(\max(a_i-x,1)\) для всех \(i\) с \(l \leq i \leq r\).
  2. Она даст вам два целых числа \(u\), \(v\) (\(1 \le u, v \le n\)). Вы должны найти LCA вершин \(u\) и \(v\) (их наименьший общий предок).
Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2\leq n,q \leq 10^5\)) — количество вершин и количество запросов соответственно.

Вторая строка содержит \(n-1\) целых чисел \(a_2, a_3,\dots, a_n\) (\(1 \le a_i < i\)), где \(a_i\) является родителем узла \(i\).

Следующие \(q\) строк содержат запросы. Для каждого запроса первым целым числом cтроки является \(t\) (\(t = 1\) или \(2\)) — тип запроса.

Если \(t = 1\), то это запрос первого типа. Затем последуют три целых числа: \(l\), \(r\), \(x\) (\(2 \le l \le r \le n\), \(1 \le x \le 10^5\)), что означает, что нужно заменить \(a_i\) на \(\max(a_i-x,1)\) для всех \(i\) с \(l \leq i \leq r\). .

Если \(t = 2\), то это запрос второго типа. Затем последуют два целых числа: \(u\) и \(v\) (\(1 \le u, v \le n\)), и вы должны найти LCA \(u\) и \(v\).

Гарантируется, что есть хотя бы один запрос второго типа.

Выходные данные

На каждый запрос второго типа выведите ответ в новой строке.

Примечание

Дерево в примере показано ниже.

После запроса первого типа дерево становится таким, как показано ниже.

I. Правитель зоопарка

Перебор Структуры данных *3500

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

Изначально животное \(0\) — это король, в то время как все остальные выстраиваются в очередь, с животным \(1\) в начале очереди и животным \(n-1\) в конце. Животное в начале очереди бросает королю вызов на поединок, и животное с большей силой выигрывает поединок. Победитель становится королем, а проигравший станет в конец очереди.

Животное, которое выигрывает \(3\) поединка подряд будет короновано правителем всего зоопарка. Сила каждого животного зависит от того, сколько последовательных поединков оно выиграло. Животное \(i\) имеет силу \(A_i\) с \(0\) выигрышами подряд, \(B_i\) с \(1\) выигрышем подряд и \(C_i\) с \(2\) выигрышами подряд. Изначально у каждого животного \(0\) выигрышей подряд.

Для всех животных, \(A_i > B_i\) и \(C_i > B_i\). Также все значения \(A_i\), \(B_i\), \(C_i\) попарно различны (все \(3n\) значений попарно различны).

Другими словами, животное, не являющееся королем, имеет силу \(A_i\). Король обычно имеет силу \(B_i\) или \(C_i\). Исключение составляет первый ход, первый король (животное \(0\)) имеет силу \(A_i\).

Кто станет новым правителем, и после скольких поединков? Или животные будут сражаться вечно, и никто не станет правителем?

Входные данные

Первая строка содержит одно целое число \(n\) (\(4 \leq n \leq 6000\)) — количество животных.

\(i\)-я из следующих \(n\) строк содержит \(3\) целых числа, \(A_i\), \(B_i\) и \(C_i\) (\(0 \leq A_i, B_i, C_i \leq 10^9\)).

Гарантируется, что \(A_i > B_i\) и \(C_i > B_i\), и что все значения \(A_i\), \(B_i\) и \(C_i\) попарно различны.

Выходные данные

Выведите два целых числа в одной строке. Первое — это номер животного, ставшего правителем, а второе — количество прошедших поединков, пока какое-либо животное не станет правителем.

Если животные будут драться бесконечно долго, выведите -1 -1.

Примечание

Ниже описана последовательность событий для второго примера. Обратите внимание, что в бою \(1\) король (животное \(0\)) имеет силу \(A_0\). Турнир заканчивается на поединке \(7\), как животное \(1\) выигрывает поединок \(5\), \(6\) и \(7\).

B. Колода карт

жадные алгоритмы математика Структуры данных *1100

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

У каждой карты есть целое значение от \(1\) по \(n\) равное \(p_i\). Все \(p_i\) попарно различны. Карты в колоде пронумерованы снизу вверх, таким образом \(p_1\) лежит внизу колоды, а \(p_n\) — на самом верху.

Вы перекладываете колоду шаг за шагом. На каждом шаге вы выбираете некоторое целое \(k > 0\), берете \(k\) верхних карт из вашей колоды и кладете их, не меняя порядка, на верх новой колоды. Вы применяете данную операцию, пока ваша первоначальная колода не опустеет. (Для лучшего понимания изучите примечания к тестовым примерам.)

Назовем упорядоченностью колоды сумму \(\sum\limits_{i = 1}^{n}{n^{n - i} \cdot p_i}\).

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

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество карт в колоде.

Во второй строке заданы \(n\) целых чисел \(p_1, p_2,\dots, p_n\) (\(1 \le p_i \le n\); \(p_i \neq p_j\) если \(i \neq j\)) — значения карт в колоде в порядке снизу вверх.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

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

Если существует несколько ответов, выведите любой из них.

Примечание

В первом наборе входных данных одна из оптимальных стратегий — следующая:

  1. возьмем \(1\) карту сверху \(p\) и перенесем ее в \(p'\): \(p\) станет \([1, 2, 3]\), \(p'\) станет \([4]\);
  2. возьмем \(1\) карту сверху \(p\): \(p\) станет \([1, 2]\), \(p'\) станет \([4, 3]\);
  3. возьмем \(1\) карту сверху \(p\): \(p\) станет \([1]\), \(p'\) станет \([4, 3, 2]\);
  4. возьмем \(1\) карту сверху \(p\): \(p\) опустеет, а \(p'\) станет \([4, 3, 2, 1]\).
В результате упорядоченность \(p'\) равна \(4^3 \cdot 4 + 4^2 \cdot 3 + 4^1 \cdot 2 + 4^0 \cdot 1\) \(=\) \(256 + 48 + 8 + 1 = 313\).

Во втором наборе одна из оптимальных стратегий такая:

  1. возьмем \(4\) карты сверху \(p\) и переместим их в \(p'\): \(p\) станет \([1]\), \(p'\) станет \([5, 2, 4, 3]\);
  2. возьмем \(1\) карту сверху \(p\) и перенесем ее в \(p'\): \(p\) опустеет, а \(p'\) станет \([5, 2, 4, 3, 1]\);
В результате упорядоченность \(p'\) равна \(5^4 \cdot 5 + 5^3 \cdot 2 + 5^2 \cdot 4 + 5^1 \cdot 3 + 5^0 \cdot 1\) \(=\) \(3125 + 250 + 100 + 15 + 1 = 3491\).

Во третьем наборе одна из оптимальных стратегий такая:

  1. возьмем \(2\) карты сверху \(p\) и переместим их в \(p'\): \(p\) станет \([4, 2, 5, 3]\), \(p'\) станет \([6, 1]\);
  2. возьмем \(2\) карты сверху \(p\) и переместим их в \(p'\): \(p\) станет \([4, 2]\), \(p'\) станет \([6, 1, 5, 3]\);
  3. возьмем \(2\) карты сверху \(p\) и переместим их в \(p'\): \(p\) опустеет, а \(p'\) станет \([6, 1, 5, 3, 4, 2]\).
В результате упорядоченность \(p'\) равна \(6^5 \cdot 6 + 6^4 \cdot 1 + 6^3 \cdot 5 + 6^2 \cdot 3 + 6^1 \cdot 4 + 6^0 \cdot 2\) \(=\) \(46656 + 1296 + 1080 + 108 + 24 + 2 = 49166\).

C. Максимальная ширина

Бинарный поиск дп жадные алгоритмы Структуры данных *1500

У вашего одноклассника, которого вы не очень любите за его занудство, но уважаете за его ум, были обнаружены две строки: строка \(s\) длины \(n\) и строка \(t\) длины \(m\).

Последовательность индексов \(p_1, p_2, \ldots, p_m\), где \(1 \leq p_1 < p_2 < \ldots < p_m \leq n\), называется хорошей, если \(s_{p_i} = t_i\) для всех \(i\) от \(1\) до \(m\). Шириной последовательности называется величина \(\max\limits_{1 \le i < m} \left(p_{i + 1} - p_i\right)\).

Помогите однокласснику найти хорошую последовательность индексов с максимальной шириной. Одноклассник обещал вам, что строки \(s\) и \(t\) таковы, что хотя бы одна хорошая последовательность точно существует.

Входные данные

Первая строка входных данных содержит два числа \(n\) и \(m\) (\(2 \leq m \leq n \leq 2 \cdot 10^5\)) — длины строк \(s\) и \(t\) соответственно.

Во второй строке входных данных задана строка \(s\), состоящая из \(n\) строчных букв латинского алфавита.

В третьей строке задана строка \(t\), состоящая из \(m\) строчных букв латинского алфавита.

Гарантируется, что существует хотя бы одна хорошая последовательность индексов.

Выходные данные

Выведите одно число — максимальную ширину хорошей последовательности.

Примечание

В первом примере существует две хороших последовательности с шириной \(3\): это \(\{1, 2, 5\}\) и \(\{1, 4, 5\}\).

Во втором примере хорошая последовательность максимальной ширины — это \(\{1, 5\}\).

В третьем примере есть лишь одна хорошая последовательность — это \(\{1, 2, 3, 4, 5\}\).

В четвёртом примере есть лишь одна хорошая последовательность — это \(\{1, 2\}\).

D. НОД массива

математика Перебор реализация сортировки Структуры данных теория чисел хэши *2100

Дан массив \(a\) длины \(n\). Требуется обработать \(q\) запросов следующего вида: даны два целых числа \(i\) и \(x\), необходимо умножить элемент \(a_i\) на \(x\).

После обработки каждого запроса нужно вывести наибольший общий делитель (НОД) всех чисел массива \(a\).

Так как ответ может быть слишком большим, вам требуется вывести его по модулю \(10^9+7\).

Входные данные

Первая строка входных данных содержит два целых числа — \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)).

Вторая строка содержит \(n\) натуральных чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)) — элементы массива \(a\) до изменений.

Следующие \(q\) строк содержат запросы в следующем формате: в каждой строке содержатся два целых числа \(i\) и \(x\) (\(1 \le i \le n\), \(1 \le x \le 2 \cdot 10^5\)).

Выходные данные

Выведите \(q\) строк: после выполнения каждого запроса выведите НОД всех чисел массива по модулю \(10^9+7\) в отдельной строке.

Примечание

После первого запроса массив станет \([12, 6, 8, 12]\), \(\operatorname{gcd}(12, 6, 8, 12) = 2\).

После второго запроса — \([12, 18, 8, 12]\), \(\operatorname{gcd}(12, 18, 8, 12) = 2\).

После третьего запроса — \([12, 18, 24, 12]\), \(\operatorname{gcd}(12, 18, 24, 12) = 6\).

Здесь функция \(\operatorname{gcd}\) обозначает наибольший общий делитель.

D. Dogeforces

Деревья жадные алгоритмы Конструктив поиск в глубину и подобное разделяй и властвуй снм сортировки Структуры данных *2300

В компании Dogeforces работают \(k\) сотрудников. У каждого сотрудника, кроме сотрудников нижнего звена, есть не менее \(2\) подчиненных. У сотрудников нижнего звена нет подчиненных. У каждого сотрудника (кроме руководителя компании) есть ровно один непосредственный начальник. Руководитель компании является непосредственным или косвенным начальником всех сотрудников. Известно, что в Dogeforces любой начальник получает зарплату строго больше, чем все его подчиненные.

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

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 500\)) — количество сотрудников нижнего звена.

Далее следует \(n\) строк, где \(i\)-я строка содержит \(n\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i,n}\) (\(1 \le a_{i,j} \le 5000\)) — зарплата общего начальника сотрудников с номерами \(i\) и \(j\). Гарантируется, что \(a_{i,j} = a_{j,i}\). Обратите внимание, что \(a_{i,i}\) равно зарплате \(i\)-го сотрудника.

Выходные данные

В первую строку выведите одно целое число \(k\) — количество сотрудников в компании.

Во второй строке выведите \(k\) целых чисел \(c_1, c_2, \dots, c_k\), где \(c_i\) — зарплата сотрудника с номером \(i\).

В третьей строке выведите одно целое число \(r\) — номер сотрудника, который является руководителем компании.

В последующих \(k-1\) строках выведите по два целых числа \(v\) и \(u\) (\(1 \le v, u \le k\)) — номер сотрудника и его непосредственного начальника.

Обратите внимание, что сотрудники нижнего звена имею номера с \(1\) по \(n\), а для остальных сотрудников вам предстоит назначить номера от \(n+1\) до \(k\). Если корректных структур компании несколько, вы можете вывести любую из них.

Примечание

Одна из возможных структур в первом примере:

E. A-Z граф

графы Конструктив Структуры данных хэши *2400

У вас есть ориентированный граф, состоящий из \(n\) вершин. Каждое ориентированное ребро (дуга) помечено одной буквой. Первоначально, граф пустой.

Вам нужно обработать \(m\) запросов на нем. Каждый запрос одного из трех типов:

  • «\(+\) \(u\) \(v\) \(c\)» — добавить дугу из \(u\) в \(v\) с меткой \(c\). Гарантируется, что в данный момент в графе нет дуги \((u, v)\);
  • «\(-\) \(u\) \(v\)» — удалить дугу из \(u\) в \(v\). Гарантируется, что в данный момент в графе есть дуга \((u, v)\);
  • «\(?\) \(k\)» — найти последовательность из \(k\) вершин \(v_1, v_2, \dots, v_k\) такую, что существуют и маршрут \(v_1 \to v_2 \to \dots \to v_k\), и маршрут \(v_k \to v_{k - 1} \to \dots \to v_1\), и если вы выпишите буквы вдоль обоих маршрутов, вы получите одинаковые строки. Вы можете посещать одни и те же вершины любое количество раз.
Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\); \(1 \le m \le 2 \cdot 10^5\)) — количество вершин в графе и количество запросов.

В следующих \(m\) строках заданы сами запросы — по одному в строке. Каждый запрос одного из трех типов:

  • «\(+\) \(u\) \(v\) \(c\)» (\(1 \le u, v \le n\); \(u \neq v\); \(c\) — строчная буква латинского алфавита);
  • «\(-\) \(u\) \(v\)» (\(1 \le u, v \le n\); \(u \neq v\));
  • «\(?\) \(k\)» (\(2 \le k \le 10^5\)).

Гарантируется, что вы не добавляете кратные ребра и удаляете только существующие ребра. Также в тесте есть хотя бы один запрос третьего типа.

Выходные данные

Для каждого запроса третьего типа, выведите YES, если существует последовательность \(v_1, v_2, \dots, v_k\), описанная выше, иначе выведите NO.

Примечание

В первом запросе третьего типа \(k = 3\), и мы можем, например, выбрать последовательность \([1, 2, 3]\), так как \(1 \xrightarrow{\text{a}} 2 \xrightarrow{\text{b}} 3\) и \(3 \xrightarrow{\text{a}} 2 \xrightarrow{\text{b}} 1\).

Во втором запросе третьего типа \(k = 2\), и мы не можем выбрать такую последовательность \(p_1, p_2\), что дуги \((p_1, p_2)\) и \((p_2, p_1)\) имеют одинаковые метки.

В третьем запросе третьего типа, мы можем, например, выбрать последовательность \([1, 2, 3, 2, 1]\), где \(1 \xrightarrow{\text{a}} 2 \xrightarrow{\text{b}} 3 \xrightarrow{\text{d}} 2 \xrightarrow{\text{c}} 1\).

E. Циншань и Даниэль

жадные алгоритмы Перебор реализация Структуры данных *3200

Циншань и Даниэль собираются сыграть в карточную игру. Но играть в нее только вдвоем будет очень скучно. Поэтому они решили сделать \(n\) роботов, чтобы они сыграли в игру автоматически. Роботы, сделанные Циншань, относятся к команде \(1\), а роботы, сделанные Даниэлем, относятся к команде \(2\). Робот \(i\) находится в команде \(t_i\). Перед началом игры роботу \(i\) выдается \(a_i\) карт.

Правила карточной игры просты:

  • Роботы выстраиваются по кругу в порядке номеров и будут в некотором порядке выбрасывать по одной карте. Сначала робот \(1\) выбрасывает одну из своих карт из игры. После этого роботы будут действовать по следующим правилам:
  • Если последнюю карту выбросил робот \(i\), то следующим карту выбрасывает ближайший робот, чья команда противоположна команде \(i\)-го робота. Другими словами, робот \(j\) должен выбросить одну свою карту сразу после робота \(i\), если и только если среди всех возможных \(j\) таких, что \(t_i\ne t_j\), расстояние \(dist(i,j)\) (определение будет дано ниже) минимально.
  • Робот, у которого больше не осталось карт, должен завершить игру немедленно. Этот робот не будет рассматриваться в следующих шагах.
  • Когда нет подходящего робота, который должен выбросить следующую карту, игра заканчивается.

Мы определяем расстояние от робота \(x\) до робота \(y\) как \(dist(x,y)=(y-x+n)\bmod n\). Это соответствует ориентированному расстоянию по кругу.

Например, если \(n=5\), то расстояние от \(1\) до \(3\) это \(dist(1,3)=(3-1+5)\bmod 5=2\), а расстояние от \(3\) до \(1\) это \(dist(3,1)=(1-3+5)\bmod 5 =3\).

Циншань заметила, что наблюдение за игрой роботов занимает очень большое время. Она хочет узнать результаты как можно быстрее. Вы, как фанат Циншань, должны помочь ей посчитать массив \([ans_1,ans_2,\ldots,ans_n]\): \(ans_i\) равно количеству карт, которое выбросит \(i\)-й робот в течение всей игры. Нужно спешить!

Чтобы избежать большого размера входных данных, команды и количества карт каждого робота должны быть сгенерированы в вашей программе с использованием некоторых вспомогательных массивов.

Входные данные

В первой строке находится единственное целое число \(n\) (\(1 \le n \le 5\cdot 10^6\)) — количество роботов, играющих в игру.

Во второй строке находится единственное целое число \(m\) (\(1 \le m \le \min(n,200\,000)\)).

Каждая из следующих \(m\) строк содержит четыре целых числа \(p_i\), \(k_i\), \(b_i\), \(w_i\) (\(1 \le p_i \le n\), \(1 \le k_i \le 10^9+7\), \(0 \le b_i ,w_i< k_i\)). Гарантируется, что \(p_m=n\) и \(p_{j-1}<p_{j}\) (\(2 \le j \le m\)).

Массивы \(a_j\) и \(t_j\) должны быть сгенерированы следующим псевдокодом:


seed = 0
base = 0

function rnd():
ret = seed
seed = (seed * base + 233) mod 1000000007
return ret

p[0] = 0
for i = 1 to m:
seed = b[i]
base = w[i]
for j = p[i - 1] + 1 to p[i]:
t[j] = (rnd() mod 2) + 1
a[j] = (rnd() mod k[i]) + 1
Выходные данные

Выведите единственное целое число \(\left( \prod_{i=1}^{n} ((ans_i \oplus i^2)+1)\right) \bmod 10^9+7\), где \(\oplus\) обозначает операцию исключающего ИЛИ.

Примечание

В первом тесте \(a=[5,5,1]\) и \(t=[1,2,2]\).

Робот \(1\) выбрасывает первую карту.

Затем робот \(2\) выбрасывает карту. Это делает не робот \(3\), потому что \(dist(1,2)<dist(1,3)\).

Затем робот \(1\) выбрасывает карту. Это делает не робот \(3\), потому что \(t_2=t_3\).

Если мы выпишем индексы роботов, которые будут выбрасывать карты по очереди, то мы получим последовательность \([1,2,1,2,1,2,1,2]\). Поэтому роботы \(1\), \(2\) и \(3\) уберут \(5\), \(5\) и \(0\) карт, соответственно. Ответ будет равен \((((5 \oplus 1^2)+1)\times((5 \oplus 2^2)+1)\times((0 \oplus 3^2)+1)) \bmod 10^9+7=(5\times 2 \times 10)\bmod 10^9+7=100\).

F. Квадраты

графы Деревья дп Конструктив Структуры данных *3300

\(n\) квадратов нарисованы на полу слева направо. На \(i\)-м квадрате записаны три целых числа \(p_i,a_i,b_i\). Последовательность \(p_1,p_2,\dots,p_n\) образует перестановку.

Во время каждого раунда вы будете стартовать с самого левого квадрата \(1\) и прыгать вправо. Если вы сейчас на \(i\)-м квадрате, вы можете сделать одну из следующих двух операций:

  1. Перепрыгнуть на \(i+1\)-й квадрат и заплатить за это \(a_i\). Если \(i=n\), тогда вы можете закончить раунд, заплатив \(a_i\).
  2. Перепрыгнуть на \(j\)-й квадрат и заплатить за это \(b_i\), где \(j\) — это самый левый квадрат, который удовлетворяет условиям \(j > i, p_j > p_i\). Если таких \(j\) не существует, вы можете закончить раунд, заплатив \(b_i\).

В игре будет \(q\) раундов. Чтобы сделать ее сложнее, вы должны поддерживать множество квадратов \(S\) (изначально пустое). Вы обязаны оказаться на этих квадратах во время раунда (вы можете также побывать и в других квадратах). Множество квадратов \(S\) для \(i\)-го раунда получается добавлением или удалением одного квадрата из множества квадратов для \((i-1)\)-го раунда.

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

Входные данные

В первой строке находятся два целых числа \(n\), \(q\) (\(1\le n,q\le 2 \cdot 10^5\)) — количество квадратов и количество раундов.

Во второй строке находятся \(n\) различных целых чисел \(p_1,p_2,\dots,p_n\) (\(1\le p_i\le n\)). Гарантируется, что последовательность \(p_1,p_2,\dots,p_n\) образует перестановку.

В третьей строке находятся \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(-10^9\le a_i\le 10^9\)).

В четвертой строке находятся \(n\) целых чисел \(b_1,b_2,\dots,b_n\) (\(-10^9\le b_i\le 10^9\)).

Затем следуют \(q\) строк, \(i\)-я из них содержит единственное целое число \(x_i\) (\(1\le x_i\le n\)). Если \(x_i\) было в множестве \(S\) для \((i-1)\)-го раунда, то вы должны удалить его, иначе вы должны добавить его.

Выходные данные

Выведите \(q\) строк, каждая из них должна содержать единственное целое число — минимальную цену, которую вы должны заплатить, чтобы закончить соответствующий раунд.

Примечание

Давайте обозначим символом \(T\) конец раунда. Тогда мы можем нарисовать два графа, соответствующих первому и второму примерам.

В первом раунде первого примера множество квадратов, через которое вы должны пройти, это \(\{1\}\). Путь, который вы можете использовать, это \(1\to 3\to T\). Его стоимость равна \(6\).

Во втором раунде первого примера множество квадратов, через которое вы должны пройти, это \(\{1,2\}\). Путь, который вы можете использовать, это \(1\to 2\to 3\to T\). Его стоимость равна \(8\).

A. Мексимизация

жадные алгоритмы Перебор сортировки Структуры данных *800

Дано число \(n\) и массив \(a_1, a_2, \ldots, a_n\). Необходимо переставить числа в массиве \(a\) так, чтобы сумма \(\textbf{MEX}\) на всех префиксах массива (\(i\)-й префикс  — это \(a_1, a_2, \ldots, a_i\)) была максимальна.

Формально, вам нужно найти массив \(b_1, b_2, \ldots, b_n\), такой что наборы чисел массивов \(a\) и \(b\) совпадают (то есть массив \(b\) получается некоторой перестановкой чисел в массиве \(a\)) и \(\sum\limits_{i=1}^{n} \textbf{MEX}(b_1, b_2, \ldots, b_i)\) максимальна.

Напомним, что \(\textbf{MEX}\) множества целых неотрицательных чисел  — такое минимальное целое неотрицательное число, которое не входит в это множество.

Например, \(\textbf{MEX}(\{1, 2, 3\}) = 0\), \(\textbf{MEX}(\{0, 1, 2, 4, 5\}) = 3\).

Входные данные

В первой строке находится единственное целое число \(t\) \((1 \le t \le 100)\)  — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) \((1 \le n \le 100)\).

Во второй строке описания каждого набора входных данных находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((0 \le a_i \le 100)\).

Выходные данные

Для каждого набора входных данных выведите массив \(b_1, b_2, \ldots, b_n\), являющийся оптимальной перестановкой чисел \(a_1, a_2, \ldots, a_n\), то есть сумма \(\textbf{MEX}\) на всех его префиксах максимальна.

Если существует несколько оптимальных ответов, вы можете найти любой.

Примечание

В первом наборе входных данных в ответе \(\textbf{MEX}\) на префиксах будет таким:

  1. \(\textbf{MEX}(\{0\}) = 1\)
  2. \(\textbf{MEX}(\{0, 1\}) = 2\)
  3. \(\textbf{MEX}(\{0, 1, 2\}) = 3\)
  4. \(\textbf{MEX}(\{0, 1, 2, 3\}) = 4\)
  5. \(\textbf{MEX}(\{0, 1, 2, 3, 4\}) = 5\)
  6. \(\textbf{MEX}(\{0, 1, 2, 3, 4, 7\}) = 5\)
  7. \(\textbf{MEX}(\{0, 1, 2, 3, 4, 7, 3\}) = 5\)
Сумма \(\textbf{MEX} = 1 + 2 + 3 + 4 + 5 + 5 + 5 = 25\). Можно показать, что это максимальная возможная сумма \(\textbf{MEX}\) на префиксах.

E1. Бесквадратное разбиение (простая версия)

дп жадные алгоритмы математика Структуры данных теория чисел *1700

Это простая версия задачи. Единственное отличие  — в этой версии задачи \(k = 0\).

Дан массив \(a_1, a_2, \ldots, a_n\) из \(n\) положительных целых чисел. Необходимо разбить его на наименьшее количество непрерывных отрезков так, чтобы ни на каком отрезке не было двух чисел (на разных позициях), произведение которых является полным квадратом.

При этом до разбиения разрешается сделать не более \(k\) раз следующую операцию: выбрать любое число в массиве и заменить его значение на произвольное целое положительное число. Но в этой версии задачи \(k = 0\), поэтому это не важно.

Какое наименьшее количество непрерывных отрезков нужно использовать, если сделать изменения оптимально?

Входные данные

В первой строке находится единственное целое число \(t\) \((1 \le t \le 1000)\)  — количество наборов входных данных.

Первая строка описания каждого набора входных данных содержит два целых числа \(n\), \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(k = 0\)).

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^7\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число  — ответ на задачу.

Примечание

В первом наборе входных можно сделать такое разбиение:

  • \([18, 6]\)
  • \([2, 4]\)
  • \([1]\)

E2. Бесквадратное разбиение (сложная версия)

дп жадные алгоритмы математика Структуры данных теория чисел *2500

Это сложная версия задачи. Единственное отличие  — в этой версии задачи \(0 \leq k \leq 20\).

Дан массив \(a_1, a_2, \ldots, a_n\) из \(n\) положительных целых чисел. Необходимо разбить его на наименьшее количество непрерывных отрезков так, чтобы ни на каком отрезке не было двух чисел (на разных позициях), произведение которых является полным квадратом.

При этом до разбиения разрешается сделать не более \(k\) раз следующую операцию: выбрать любое число в массиве и заменить его значение на произвольное целое положительное число.

Какое наименьшее количество непрерывных отрезков нужно использовать, если сделать изменения оптимально?

Входные данные

В первой строке находится единственное целое число \(t\) \((1 \le t \le 1000)\)  — количество наборов входных данных.

Первая строка описания каждого набора входных данных содержит два целых числа \(n\), \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \leq k \leq 20\)).

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^7\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число  — ответ на задачу.

Примечание

В первом наборе входных данных можно сначала изменить массив следующим образом: \([\underline{3}, 6, 2, 4, \underline{5}]\) (изменённые числа подчёркнуты). После этого его не нужно разделять, поэтому ответ \(1\).

Во втором наборе входных данных можно сначала изменить массив следующим образом: \([6, 2, \underline{3}, 8, 9, \underline{5}, 3, 6, \underline{10}, \underline{11}, 7]\). После этого такое разбиение будет оптимальным:

  • \([6, 2, 3]\)
  • \([8, 9, 5, 3, 6, 10, 11, 7]\)

B. Коробка

Бинарный поиск битмаски жадные алгоритмы Структуры данных *1300

У вас есть \(n\) прямоугольников, каждый имеет высоту \(1\). Ширина каждого прямоугольника — степень числа \(2\) (т. е. ее можно представить как \(2^x\) для некоторого неотрицательного целого \(x\)).

У вас также есть двумерная коробка ширины \(W\). Обратите внимание, что \(W\) может быть степенью числа \(2\), а может и не быть. Точно известно, что \(W\) не меньше ширины наибольшего прямоугольника.

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

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

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

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^3\)) — количество наборов входных данных. Каждый набор входных данных состоит из двух строк.

Для каждого набора:

  • первая строка содержит два целых числа \(n\) (\(1 \le n \le 10^5\)) и \(W\) (\(1 \le W \le 10^9\));
  • вторая строка содержит \(n\) целых чисел \(w_1, w_2, \dots, w_n\) (\(1 \le w_i \le 10^6\)), где \(w_i\) — ширина \(i\)-го прямоугольника. Каждое число \(w_i\) является степенью числа \(2\);
  • дополнительное ограничение: \(\max\limits_{i=1}^{n} w_i \le W\).

Сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Выведите \(t\) целых чисел. \(i\)-е число должно быть равно ответу на \(i\)-й набор входных — минимальной высоте коробки.

Примечание

Первый набор входных данных в примере разобран на следующей картинке:

На этой картинке число внутри каждого прямоугольника — это его ширина. Ширина коробки равна \(16\) (см. обозначения в нижней части картинки). Минимальная высота коробки равна \(2\) (см. обозначения в левой части картинки).

Во втором наборе входных данных можно расположить на каждом уровне по одному прямоугольнику ширины 8 и ширины 2, так потребуется всего три уровня (и высота коробки будет равна 3).

C. Отражения от плоскостей

дп Перебор Структуры данных *1600

Гауранг вырос в таинственной вселенной. Перед ним стоят \(n\) 2D плоскостей одна за другой. Он пускает частицу с периодом распада \(k\) в направлении плоскостей.

Частица может пройти через плоскость напрямую, однако, каждая плоскость создает идентичную копию этой частицы, направленную в противоположном направлении с периодом распада равным \(k-1\). Если период распада частицы равен \(1\), то она НЕ создаст копию.

Например, если есть две плоскости, и выпущена частица с периодом распада \(3\) (направлена вправо), то происходит следующий процесс: (здесь \(D(x)\) означает одну частицу с периодом распада \(x\))

  1. первая плоскость создает \(D(2)\) влево и пропускает \(D(3)\) дальше вправо;
  2. вторая плоскость создает \(D(2)\) влево и пропускает \(D(3)\) дальше вправо;
  3. первая плоскость пропускает \(D(2)\) дальше влево и создает \(D(1)\) вправо;
  4. вторая плоскость пропускает \(D(1)\) дальше вправо (\(D(1)\) не может создавать копии).

В конце мультимножество \(S\) всех частиц — это \(\{D(3), D(2), D(2), D(1)\}\). (Смотрите примеры для визуального отображения этого теста.)

Гауранг не справляется со сложностью этого процесса, когда количество плоскостей слишком велико. Помогите Гаурангу узнать размер мультимножества \(S\) по заданным \(n\) и \(k\).

Так как размер мультимножества может быть очень большим, выведите его по модулю \(10^9+7\).

Обратите внимание, что частицы могут перемещаться между плоскостями, не сталкиваясь друг с другом.

Входные данные

В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Затем следуют \(t\) строк, в каждой записаны два целых числа \(n\) и \(k\) (\(1 \le n, k \le 1000\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(1000\). Сумма \(k\) по всем наборам входных данных не превосходит \(1000\). Все наборы входных данных в одном тесте различны.

Выходные данные

Выведите \(t\) целых чисел. \(i\)-е число должно являться ответом на \(i\)-й набор входных данных.

Примечание

Здесь следует объяснение первого примера, состоящего из четырех наборов входных данных.

Набор входных данных 1: (\(n = 2\), \(k = 3\)) уже объяснен в условии задачи.

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

Набор входных данных 2: (\(n = 2\), \(k = 2\)) выглядит так:

  1. первая плоскость создает \(D(1)\) влево и пропускает \(D(2)\) дальше вправо;
  2. вторая плоскость создает \(D(1)\) влево и пропускает \(D(2)\) дальше вправо;
  3. первая плоскость пропускает \(D(1)\) дальше влево (\(D(1)\) не может создавать копии).

Итоговый размер мультимножества \(\{D(1), D(1), D(2)\}\) равен трем.

Набор входных данных 3: (\(n = 3\), \(k = 1\)) — здесь есть три плоскости, но период распада всего один. Поэтому новые копии не создаются, когда одна частица пролетает через плоскости. Поэтому ответ один.

Набор входных данных 4: (\(n = 1\), \(k = 3\)) — здесь только одна плоскость. Частица создает новую копию влево. Мультимножество \(\{D(2), D(3)\}\) имеет размер два.

F. Рождественская игра

битмаски Деревья дп игры математика поиск в глубину и подобное Структуры данных *2500

Алиса и Боб собираются отмечать Рождество, играя в игру с деревом подарков. Дерево состоит из \(n\) вершин (пронумерованных от \(1\) до \(n\), вершина \(r\) является корнем). На \(i\)-й вершине висят \(a_i\) подарков.

Перед началом игры выбирается некоторое целое число \(k\). Затем игра проходит следующим образом:

  • Алиса начинает игру, затем ходы совершаются обоими игроками по очереди;
  • на каждом ходу текущий игрок выбирает некоторую вершину (например, \(i\)), которая находится на глубине хотя бы \(k\). Затем игрок снимает некоторое положительное целое число подарков, которые висят на этой вершине, — назовем его \(m\) \((1 \le m \le a_i)\);
  • затем игрок вешает эти \(m\) подарков на \(k\)-го предка (назовем его \(j\)) \(i\)-й вершины (\(k\)-м предком вершины \(i\) назовем такую вершину \(j\), что \(i\) — потомок \(j\), а глубина \(j\) ровно на \(k\) меньше глубины \(i\)). Теперь количество подарков на \(i\)-й вершине \((a_i)\) уменьшилось на \(m\), а \(a_j\), соответственно, увеличилось на \(m\);
  • Алиса и Боб играют оптимально. Тот, кто не может совершить ход, проигрывает.

Для каждого возможного корня дерева сообщите, кто выиграет игру — Алиса или Боб.

Глубина вершины \(i\) в дереве с корнем \(r\) определяется, как количество ребер на простом пути из вершины \(r\) до вершины \(i\). Глубина корня \(r\) равна нулю.

Входные данные

В первой строке записаны два целых числа \(n\) и \(k\) \((3 \le n \le 10^5, 1 \le k \le 20)\).

В каждой из следующих \(n-1\) строк записаны два целых числа \(x\) и \(y\) \((1 \le x, y \le n, x \neq y)\), описывающие неориентированное ребро между двумя вершинами \(x\) и \(y\). Эти ребра образуют дерево из \(n\) вершин.

В следующей строке записаны \(n\) целых чисел, задающих массив \(a\) \((0 \le a_i \le 10^9)\).

Выходные данные

Выведите \(n\) целых чисел, где \(i\)-е число равно \(1\), если Алиса выиграет игру, если дерево подвешено за вершину \(i\), и \(0\) в противном случае.

Примечание

Посчитаем ответ для примера с корнем в 1 и в 2.

Корень 1

Алиса всегда выигрывает в данном случае. Возможная игра между Алисой и Бобом выглядит так:

  • Алиса перемещает один подарок из вершины 4 в вершину 3.
  • Боб перемещает четыре подарка из вершины 5 в вершину 2.
  • Алиса перемещает четыре подарка из вершины 2 в вершину 1.
  • Боб перемещает три подарка из вершины 2 в вершину 1.
  • Алиса перемещает три подарка из вершины 3 в вершину 1.
  • Боб перемещает три подарка из вершины 4 в вершину 3.
  • Алиса перемещает три подарка из вершины 3 в вершину 1.

Боб не может сделать ход, а потому проигрывает.

Корень 2

Боб всегда выигрывает в данном случае. Пример игры:

  • Алиса перемещает четыре подарка из вершины 4 в вершину 3.
  • Боб перемещает четыре подарка из вершины 5 в вершину 2.
  • Алиса перемещает шесть подарков из вершины 3 в вершину 1.
  • Боб перемещает шесть подарков из вершины 1 в вершину 2.

Алиса не может сделать ход, а потому проигрывает.

C. Минимальный путь на поле

жадные алгоритмы математика Перебор Структуры данных *1500

Предположим, вы стоите на плоскости \(XY\) в точке \((0, 0)\) и хотите попасть в точку \((n, n)\).

Вы можете двигать только в двух направлениях:

  • вправо, т. е. горизонтально и в направлении увеличения \(x\) коодинаты,
  • или вверх, т. е. вертикально и в направлении увеличения \(y\) координаты.

Другими словами, ваш путь имеет следующую структуру:

  • первоначально, вы выбираете: пойти вправо или вверх;
  • далее вы проходите некоторое положительное целое расстояние в выбранном направлении (расстояния можно выбирать независимо);
  • далее вы меняете направление движения (от «вправо» к «вверх», либо от «вверх» к «вправо») и повторяете процесс.

Вам не нравится менять свое направление слишком много раз, а потому вы сделаете не более \(n - 1\) изменений направления.

В результате ваш путь будет представлять ломаную от \((0, 0)\) к \((n, n)\), состоящую из не более чем \(n\) отрезков, каждый из которых имеет положительную целую длину, а также вертикальные и горизонтальные отрезки идут по очереди.

Не все пути равны. У вас есть \(n\) целых чисел \(c_1, c_2, \dots, c_n\), где \(c_i\) — это цена \(i\)-го отрезка.

Используя эти цены, можно определить цену пути как сумму длин отрезков этого пути умноженных на их стоимости, т. е. если путь состоит из \(k\) отрезков (\(k \le n\)), то цена пути равна \(\sum\limits_{i=1}^{k}{c_i \cdot length_i}\) (отрезки нумеруются от \(1\) по \(k\) в порядке их обхода).

Определите путь минимальной стоимости и выведите его цену.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \le n \le 10^5\)).

Во второй строке каждого набора заданы \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le 10^9\)) — цены каждого отрезка.

Гарантируется, что сумма \(n\) не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных вы должны вывести минимальную цену пути из \((0, 0)\) в \((n, n)\), состоящего из не более \(n\) чередующихся отрезков.

Примечание

В первом примере из условия, чтобы достигнуть \((2, 2)\), нужно сделать хотя бы один поворот, и путь может состоять из \(2\) отрезков: горизонтального длины \(2\) и вертикального длины \(2\). Стоимость равна \(2 \cdot c_1 + 2 \cdot c_2 = 26 + 176 = 202\).

Во втором примере можно построить путь из \(3\) отрезков: длины \(1\), длины \(3\) и длины \(2\). Стоимость равна \(1 \cdot 2 + 3 \cdot 3 + 2 \cdot 1 = 13\).

В третьем примере можно построить путь из \(4\) отрезков: длины \(1\), длины \(1\), длины \(4\) и длины \(4\). Стоимость равна \(1 \cdot 4 + 1 \cdot 3 + 4 \cdot 2 + 4 \cdot 1 = 19\).

G. Раскраска графа

графы интерактив Структуры данных *3100

Вам дан двудольный граф, состоящий из \(n_1\) вершин в первой доле и \(n_2\) вершин во второй доле и \(m\) ребер, пронумерованных от \(1\) до \(m\). Вы должны раскрасить каждые ребро в один из двух цветов, красный и синий. Необходимо минимизировать следующее значение: \(\sum \limits_{v \in V} |r(v) - b(v)|\), где \(V\) — множество вершин графа, \(r(v)\) — число красных ребер, инцидентных \(v\), и \(b(v)\) — число синих ребер, инцидентных \(v\).

Звучит классически и просто, не так ли? Ну, вы должны обработать \(q\) запросов следующего формата:

  • \(1\) \(v_1\) \(v_2\) — добавить новое ребро, соединяющее вершину \(v_1\) первой доли с вершиной \(v_2\) второй доли. Это ребро получает новый индекс следующим образом: первое добавленное ребро получает индекс \(m + 1\), второе — \(m + 2\) и так далее. После добавления ребра вы должны вывести хэш текущей оптимальной раскраски (если существует несколько оптимальных раскрасок, выведите хэш любой из них). На самом деле этот хэш не будет проверен, вы можете вывести любое число в качестве ответа на этот запрос, но вас могут попросить предоставить раскраску с этим хэшем;
  • \(2\) — выведите оптимальную раскраску графа с тем же хэшем, который вы вывели при обработке предыдущего запроса. Запрос этого типа будет задан только после запроса типа \(1\), и будет не более \(10\) запросов этого типа. Если существует несколько оптимальных раскрасок, соответствующих этому хэшу, выведите любую из них.

Обратите внимание, что если ребро было красным или синим в какой-то раскраске, оно может изменить свой цвет в следующих раскрасках.

Хэш раскраски вычисляется следующим образом: пусть \(R\) — множество индексов красных ребер, тогда хэш равен \((\sum \limits_{i \in R} 2^i) \bmod 998244353\).

Обратите внимание, что вы должны решить эту задачу в режиме online. Это означает, что вы не можете считать все входные данные сразу. Вы можете считать каждый запрос только после вывода ответа на последний запрос. Используйте функции fflush в C++ и BufferedWriter.flush в Java после каждого вывода в вашей программе.

Входные данные

В первой строке записаны три целых числа \(n_1\), \(n_2\) и \(m\) (\(1 \le n_1, n_2, m \le 2 \cdot 10^5\)).

Затем следуют \(m\) строк, в \(i\)-й строке записаны два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i \le n_1\); \(1 \le y_i \le n_2\)), означающие, что \(i\)-е ребро соединяет вершину \(x_i\) из первой доли и вершину \(y_i\) из второй доли.

В следующей строке записано одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов, которые требуется обработать.

В следующих \(q\) строках содержатся запросы в формате, описанном в условии.

Дополнительные ограничения на входные данные:

  • в любой момент времени в графе нет кратных ребер;
  • все запросы типа \(2\) задаются только если предыдущий запрос был типа \(1\);
  • всего не более \(10\) запросов типа \(2\).
Выходные данные

Чтобы ответить на запрос типа \(1\) выведите одно целое число — хэш оптимальной раскраски.

Чтобы ответить на запрос типа \(2\) выведите одну строку. Она должна начинаться с целого числа \(k\) — количество красных ребер. Затем должны идти \(k\) различных целых чисел — номера красных ребер в вашей раскраске в любом порядке. Каждый номер должен соответствовать существующему ребру, а хэш раскраски, которую вы вывели, должен быть равен хэшу, который вы вывели в ответ на прошлый запрос.

Если существует несколько ответов на запрос, то выведите любой из них.

D. Карта

реализация сортировки Структуры данных *2500

Задана карта местности, представляющая собой прямоугольную матрицу n × m, в каждой клетке которой записана средняя высота соответствующего участка местности. Прорабу Пете нужно расположить на карте несколько городов, каждый из которых на карте займет прямоугольник размера a × b клеток. Но прежде чем построить город в определенном месте, Пете необходимо убрать лишнюю землю с участка, на котором будет строиться город. Для этого он выбирает клетку наименьшей высоты на этом участке и делает высоту всех клеток на участке равной высоте этой клетки. Будем считать, что для того, чтобы опустить уровень земли с h2 до h1 (h1 ≤ h2), необходимо вывезти h2 - h1 единиц земли.

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

Входные данные

В первой строке перечислено через пробел четыре целых числа — размеры карты n, m и размеры города a, b (1 ≤ a ≤ n ≤ 1000, 1 ≤ b ≤ m ≤ 1000). Далее идут n строк по m неотрицательных целых чисел в каждой, задающие матрицу высот. Все числа не превышают 109. Числа в строках разделяются пробелами.

Выходные данные

В первой строке выведите k — число построенных городов. В следующих k строках выведите по 3 числа, разделенных пробелами, — номер строки и номер столбца левого верхнего угла очередного участка, а также объем земли, который требуется с него вывезти. Участки выводите в порядке их построения.

C. Хитрый жук

математика Структуры данных Теория вероятностей *2200

Наверное, нет уже смысла напоминать, что этой зимой в городе XXXводске совсем не жарко. В связи с этим резко возросла популярность общественного транспорта. На маршруте 62-го автобуса в точности n остановок (причем остановка номер 1 — первая на пути, а номер n — последняя). Остановки расположены на одной прямой и имеют координаты 0 = x1 < x2 < ... < xn.

Каждый день 62-ым автобусом пользуются ровно m человек. Для каждого человека известен номер остановки, на которой он садится, и номер остановки, на которой он выходит. Билет от остановки a до остановки b (a < b) стоит xb - xa рублей. Однако кондуктор может не продать пассажиру билет от остановки c до остановки d (c < d), или вовсе не продавать билет. Более формально: Кондуктор выбирает не более одного отрезка с C по D (C <= D) на который он НЕ ПРОДАЕТ БИЛЕТ. То есть пассажир имеет билет на отрезках [A, C] и [D, B]. Сэкономленные деньги кондуктор и пассажир делят поровну. Заработку кондуктора мешают постоянные проверки, случающиеся во время перегонов между двумя последовательными остановками. За каждого пассажира, не имевшего билет на проезд этого перегона, проверка берет с кондуктора штраф c рублей.

Вам известны координаты всех остановок xi; номера остановок, на которых заходит и выходит i-ый пассажир, ai и bi (ai < bi); штраф c; а также pi — вероятность того, что на перегоне между i-ой и i + 1-ой остановкой произойдет проверка. Кондуктор попросил вас помочь ему составить план продажи билетов, максимизирующий математическое ожидание его прибыли.

Входные данные

Первая строка содержит три целых числа n, m и c (2 ≤ n ≤ 1.5·105, 1 ≤ m ≤ 3·105, 1 ≤ c ≤ 104).

Следующая строка содержит n целых чисел xi (0 ≤ xi ≤ 109, x1 = 0, xi < xi + 1) — координаты остановок вдоль маршрута автобуса.

Третья строка содержит n - 1 целое число pi (0 ≤ pi ≤ 100) – вероятность в процентах появления кондуктора на перегоне между остановкой i и остановкой i + 1.

Далее следуют m строк, описывающие пассажиров автобуса, каждая строка содержит ровно два целых числа ai и bi (1 ≤ ai < bi ≤ n) — номера остановок, на которых заходит и выходит i-ый пассажир.

Выходные данные

Выведите одно вещественное число — максимальное математическое ожидание прибыли кондуктора. Ответ будет считать верным, если его относительная или абсолютная погрешность не превосходит 10 - 6.

Примечание

Комментарий к первому примеру:

Первому и третьему пассажиру продаем билет с остановки 1 до остановки 2. Второму пассажиру билет не продаем. На перегоне 1-2 проверка появляется всегда, но у обоих пассажиров будет билет на него. На перегоне 2-3 проверка не появляется никогда, поэтому второго пассажира никто не поймает. Итого наша прибыль (0 + 90 / 2 + 90 / 2) = 90.

E. Замерзаем красиво

Бинарный поиск Деревья разделяй и властвуй Структуры данных *3000

Этой зимой в городе... ну вы поняли :-) Дорожную систему города XXXводска можно представить как n перекрестков, соединенных n - 1 двунаправленными дорогами так, что между любыми двумя перекрестками есть путь. Организаторы некоего мероприятия хотят выбрать место, где будут жить участники (перекресток v), и место, где будут проходить соревнования (перекресток u). При этом, с одной стороны, они хотят, чтобы участники гуляли по городу и смотрели окрестности (поэтому расстояние между v и u должно быть не меньше l), но не хотят, чтобы участники замерзли (поэтому расстояние между v и u должно быть не больше r). Помимо этого для каждой улицы известна ее красота — некоторое целое число от 0 до 109. Ваша задача — выбрать путь, удовлетворяющий ограничениям по длине, и обладающей наибольшей средней красотой. Средней красотой пути будем называть медиану последовательности красот всех дорог на пути.

Более формально: пусть есть путь длины k. Пусть ai — неубывающая последовательность, содержащая в точности k элементов, в которой каждое число встречается ровно столько раз, сколько дорог с такой красотой встречается на этом пути. Медианой пути назовем число ak / 2⌋, предполагая что используется индексация от нуля. x — число х, округленное вниз до ближайшего целого.

Например, если a = {0, 5, 12}, то медиана равна 5, а если a = {0, 5, 7, 12}, то медианой окажется число 7.

Гарантируется, что найдется хотя бы один путь с подходящим количеством дорог.

Входные данные

Первая строка содержит три целых числа n, l, r (1 ≤ l ≤ r < n ≤ 105).

Следующие n - 1 строк содержат описание дорог XXXводска, по три целых числа в строке ai, bi, ci (1 ≤ ai, bi ≤ n, 0 ≤ ci ≤ 109, ai ≠ bi) — перекрестки ai и bi соединены улицей с красотой ci.

Выходные данные

Выведите два числа — номера перекрестков, в которых необходимо поселить участников и проводить соревнования, соответственно. Если оптимальных ответов несколько, выведите любой.

Примечание

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

Во втором примере город выглядит следующим образом: 1 - 2 - 3 - 4 - 5 - 6. Последние две дороги более ценные, и нужно выбрать любой путь, который содержит обе и имеет подходящую длину. Это либо путь между 2 и 6, либо путь между 3 и 6.

D. Плитка для ванной

сортировки Структуры данных *2900

У Кости очень много дел: ремонт в самом разгаре! Надо клеить обои, собирать мебель и постоянно вывозить мусор.

Сегодня Костя хочет купить плитку для ванной. Он пришел в магазин и оказался перед большим квадратным стендом с плиткой. Стенд представляет из себя квадрат из \(n \times n\) клеток, каждая клетка которого — маленький кусочек плитки цвета \(c_{i,\,j}\). Магазин продает кусочки плитки пакетами, а именно, купить можно только подквадрат исходного квадрата.

Подквадратом называется любой квадратный фрагмент стенда, то есть любое множество \(S(i_0, j_0, k) = \{c_{i,\,j}\ |\ i_0 \le i < i_0 + k, j_0 \le j < j_0 + k\}\) при \(1 \le i_0, j_0 \le n - k + 1\).

Костя еще не знает, сколько кусочков плитки он хочет купить, и, соответственно, рассматривает подквадраты всех возможных размеров. При этом он точно не хочет слишком разноцветную плитку в ванной, что позволяет ему сузить выбор. Помогите Косте для каждого \(k \le n\) определить количество различных подквадратов размера \(k \times k\), в которых не более \(q\) различных цветов плитки. Подквадраты считаются различными, если их расположение на стенде не совпадает.

Входные данные

В первой строке находятся два целых положительных числа \(n\), \(q\) (\(1 \le n \le 1500\), \(1 \le q \le 10\)) — размер стенда с плитками и ограничение на количество различных цветов в пакете.

В следующих \(n\) строках находятся по \(n\) целых положительных чисел \(c_{i,\,j}\) (\(1 \le c_{i,\,j} \le n^2\)): \(j\)-е число в \(i\)-й строке соответствует цвету плитки в клетке \((i,\,j)\).

Выходные данные

Для каждого \(k\) от \(1\) до \(n\) выведите в отдельной строке по одному целому числу — количество подквадратов размера \(k \times k\), в которых не более \(q\) различных цветов.

Примечание

В первом примере все цвета квадратиков плитки различные. Поскольку Костя не хочет, чтобы в купленном квадрате было больше \(4\) цветов, он может купить себе любой подквадрат размера \(1 \times 1\) или \(2 \times 2\), но при этом не сможет купить квадрат размера \(3 \times 3\).

Во втором примере есть повторяющиеся цвета. А именно, за счет ограничения \(q = 8\) Костя может купить любой подквадрат \(1 \times 1\) и \(2 \times 2\), а также любой подквадрат \(3 \times 3\), ведь в каждом таком подквадрате всего \(7\) цветов. Весь стенд размера \(4 \times 4\) Костя купить не сможет, потому что там будет \(9\) цветов.

E. Фокус с подмножествами

Бинарный поиск Структуры данных *3300

Ваня придумал интересный фокус с множеством целых чисел.

Пусть у фокусника есть множество положительных целых чисел \(S\). Он называет некоторое положительное целое число \(x\). Зритель должен выбрать, не показывая фокуснику, некоторое подмножество \(S\) (возможно пустое). После этого зритель называет фокуснику размер выбранного подмножества. Фокус заключается в том, что после этого фокусник отгадывает: верно ли, что сумма элементов выбранного подмножества не превосходит \(x\). Для пустого подмножества сумма предполагается равной \(0\).

Ване очень понравился этот фокус, поэтому он начал готовиться к тому, чтобы показать его публике. Для этого он приготовил некоторое множество различных положительных целых чисел \(S\). Конечно, Ваня хочет, чтобы фокус обязательно получился. Он называет положительное целое число \(x\) неудачным, если не может быть точно уверен, что фокус пройдет удачно для любого подмножества, которое выберет зритель.

Чтобы оценить, насколько хорошее множество \(S\) он выбрал, он хочет посчитать количество неудачных положительных целых чисел для него.

Также Ваня планирует протестировать различные множества \(S\). Поэтому он просит вас написать программу, которая найдет количество неудачных положительных целых чисел для изначального множества \(S\) и для множества \(S\) после каждого изменения. Ваня сделает \(q\) изменений своего множества, каждое изменение будет одного из двух видов:

  • Добавить новое число \(a\) в множество \(S\).
  • Удалить некоторое число \(a\) из множества \(S\).
Входные данные

В первой строке находятся два целых числа \(n\), \(q\) (\(1 \leq n, q \leq 200\,000\)) — размер изначального множества \(S\) и количество изменений.

В следующей строке находятся \(n\) различных целых чисел \(s_1, s_2, \ldots, s_n\) (\(1 \leq s_i \leq 10^{13}\)) — элементы изначального множества \(S\).

В каждой из следующих \(q\) строк находятся два целых числа \(t_i\), \(a_i\) (\(1 \leq t_i \leq 2\), \(1 \leq a_i \leq 10^{13}\)), описывающих очередное изменение.

  • Если \(t_i = 1\), то это операция добавления нового числа \(a_i\) в множество \(S\). Гарантируется, что этого числа не было в множестве \(S\) до выполнения операции.
  • Если \(t_i = 2\), то это операция удаления числа \(a_i\) из множества \(S\). Гарантируется, что это число было в множестве \(S\) до выполнения операции.
Выходные данные

Выведите \(q + 1\) строку.

В первой строке выведите количество неудачных положительных целых чисел для изначального множества \(S\). В следующих \(q\) строках выведите количество неудачных положительных чисел для множества \(S\) после каждого изменения.

Примечание

В первом тесте изначальное \(S = \{1, 2, 3\}\). Для этого множества фокус может не получиться при \(x \in \{1, 2, 3, 4\}\). Например, если \(x = 4\), то зритель может загадать подмножество \(\{1, 2\}\), сумма элементов которого равна \(3 \leq x\), а может загадать подмножество \(\{2, 3\}\), сумма элементов которого равна \(5 > x\). Однако в обоих случаях зритель назовет фокуснику размер подмножества \(2\), поэтому он не сможет точно сделать правильный ответ. При этом поскольку подмножество размера \(3\) единственно, а сумма в любом подмножестве меньшего размера не превосходит \(5\), все \(x \ge 5\) не являются неудачными.

C. Задача коммивояжёра

Бинарный поиск дп жадные алгоритмы кратчайшие пути сортировки Структуры данных *2200

Есть \(n\) городов, пронумерованных от \(1\) до \(n\), красота города \(i\) равна \(a_i\).

Коммивояжёр хочет начать с города \(1\), посетить каждый город ровно один раз и вернуться в город \(1\).

Для всех \(i\ne j\), перелет из города \(i\) в город \(j\) стоит \(\max(c_i,a_j-a_i)\) долларов, где \(c_i\) — это нижний порог цены, наложенный на перелет городом \(i\). Обратите внимание, что здесь не берется абсолютное значение. Найдите минимальную общую стоимость поездки для коммивояжёра.

Входные данные

В первой строке содержится одно целое \(n\) (\(2\le n\le 10^5\)) — количество городов.

В \(i\)-й из следующих \(n\) строк содержится по два целых числа \(a_i\), \(c_i\) (\(0\le a_i,c_i\le 10^9\)) — красота и нижний порог цены города \(i\).

Выходные данные

Выведите единственное целое число — минимальную суммарную стоимость.

Примечание

В первом примере мы можем путешествовать в порядке \(1\to 3\to 2\to 1\).

  • Рейс \(1\to 3\) стоит \(\max(c_1,a_3-a_1)=\max(9,4-1)=9\).
  • Рейс \(3\to 2\) стоит \(\max(c_3, a_2-a_3)=\max(1,2-4)=1\).
  • Рейс \(2\to 1\) стоит \(\max(c_2,a_1-a_2)=\max(1,1-2)=1\).

Общая стоимость составляет \(11\), и мы не можем обойтись меньшим числом долларов.

D. Переверните карты

2-sat жадные алгоритмы Конструктив сортировки Структуры данных *2600

Есть колода из \(n\) карт. На карте \(i\) на лицевой стороне написано число \(a_i\), а на оборотной — \(b_i\). Каждое целое число от \(1\) до \(2n\) встречается на картах ровно один раз.

Колода называется отсортированной, если лицевые значения находятся в порядке возрастания, а оборотные — в порядке убывания. То есть, если \(a_i< a_{i+1}\) и \(b_i> b_{i+1}\) для всех \(1\le i<n\).

Перевернуть карту \(i\) означает поменять местами значения \(a_i\) и \(b_i\). Вы должны перевернуть некоторое подмножество карт (возможно, ни одной), а затем разместить эти карты в каком-то порядке. Какое минимальное количество карт вы должны перевернуть, чтобы отсортировать колоду?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1\le n\le 2\cdot 10^5\)) — количество карт.

Следующие \(n\) строк описывают карты. \(i\)-я из этих строк содержит два целых числа \(a_i, b_i\) (\(1\le a_i, b_i\le 2n\)). Каждое целое число от \(1\) до \(2n\) встречается ровно один раз.

Выходные данные

Если отсортировать колоду невозможно, выведите «-1». В противном случае выведите минимальное количество карт, которые необходимо перевернуть, чтобы отсортировать колоду.

Примечание

В первом примере мы переворачиваем карты \((1, 9)\) и \((2, 7)\). Затем карты располагают в порядке \((3,10), (5,8), (6,4), (7,2), (9,1)\). Колода отсортирована потому, что \(3<5<6<7<9\) и \(10>8>4>2>1\).

Во втором примере отсортировать колоду невозможно.

F. Сбалансируйте карты

геометрия графы Конструктив разделяй и властвуй реализация Структуры данных *3500

Сбалансированная скобочная последовательность определяется как целая последовательность целых чисел, которая может быть построена по следующим правилам:

  • Пустая последовательность сбалансирована.
  • Если \([a_1,\ldots,a_n]\) и \([b_1,\ldots, b_m]\) сбалансированы, то их конкатенация \([a_1,\ldots,a_n,b_1,\ldots,b_m]\) сбалансирована.
  • Если \(x\) — целое положительное число и \([a_1,\ldots,a_n]\) сбалансирована, то \([x,a_1,\ldots,a_n,-x]\) сбалансирована.

Положительные числа можно представить себе в виде открывающихся скобок, а отрицательные — в виде закрывающих скобок, где соответствующие скобки должны иметь одинаковый тип (абсолютное значение). Например, \([1, 2, -2, -1]\) и \([1, 3, -3, 2, -2, -1]\) сбалансированы, но \([1, 2, -1, -2]\) и \([-1, 1]\) не сбалансированы.

Есть \(2n\) карт. Каждая карта имеет число на лицевой стороне и число на оборотной. Каждое целое число \(1,-1,2,-2,\ldots,n,-n\) встречается на лицевой стороне ровно одной карты и на оборотной стороне ровной одной карты (необязательно той же карты).

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

Входные данные

В первой строке содержится одно целое число \(n\) (\(1\le n\le 2\cdot 10^5\)) — количество типов скобок и половина количества карт.

Следующие \(2n\) строк описывают карты. В \(i\)-й из этих строк содержатся два целых числа \(a_i\), \(b_i\) (\(-n\le a_i,b_i\le n\), \(a_i\ne 0\), \(b_i\ne 0\)) — числа на лицевой и оборотной стороне \(i\)-й карты соответственно. Каждое целое число \(1,-1,2,-2,\ldots,n,-n\) встречается ровно один раз как \(a_i\) и ровно один раз как \(b_i\).

Выходные данные

В первой строке выведите «YES», если можно упорядочить карты, чтобы выполнялось условие. В противном случае выведите «NO». Вы можете выводить каждый символ в любом регистре.

Если это возможно, в следующих \(2n\) строках выведите карты в таком порядке, чтобы и лицевая и оборотная части были сбалансированы. Если есть несколько решений, то можно вывести любое.

Примечание

В первом примере лицевые числа образуют сбалансированную последовательность \([1,4,-4,-1,5,3,2,-2,-3,-5]\), а оборотные числа создают сбалансированную последовательность \([3,-3,4,-4,1,-1,2,5,-5,-2]\).

Во втором примере карты даются в таком порядке, что лицевые числа сбалансированы, а оборотные образуют несбалансированную последовательность \([1,2,-1,-2]\). Если бы мы поменяли местами вторую и третью карты, то сбалансировали бы оборотные числа и разбалансировали бы лицевые. Но нет такого порядка, который бы балансировал и то, и другое.

D. Эпическая трансформация

жадные алгоритмы Конструктив Структуры данных *1400

Вам задан массив \(a\) длины \(n\), состоящий из целых чисел. Вы можете применять следующую операцию, состоящую из нескольких шагов, над массивом \(a\) ноль или более раз:

  • вы выбираете два различных числа в массиве \(a_i\) и \(a_j\);
  • вы удаляете \(i\)-й и \(j\)-й элементы из массива.

Например, если \(n=6\) и \(a=[1, 6, 1, 1, 4, 4]\), то вы можете произвести следующую последовательность операций:

  • выбираем \(i=1, j=5\). Массив \(a\) становится равным \([6, 1, 1, 4]\);
  • выбираем \(i=1, j=2\). Массив \(a\) становится равным \([1, 4]\).

Каким может быть минимальный размер массива после применения к нему некоторой последовательности операций?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

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

G. Максимизируй оставшуюся строку

дп жадные алгоритмы Перебор Строки Структуры данных *2000

Вам задана строка \(s\), состоящая из строчных букв латинского алфавита. Пока в строке \(s\) есть хотя бы один символ, повторяющийся хотя бы дважды, вы выполняете следующую операцию:

  • вы выбираете индекс \(i\) (\(1 \le i \le |s|\)), такой что символ на позиции \(i\) встречается хотя бы два раза в строке \(s\), и удаляете символ на позиции \(i\), то есть заменяете \(s\) на \(s_1 s_2 \ldots s_{i-1} s_{i+1} s_{i+2} \ldots s_n\).

Например, если \(s=\)«codeforces», то вы можете применить следующую последовательность операций:

  • \(i=6 \Rightarrow s=\)«codefrces»;
  • \(i=1 \Rightarrow s=\)«odefrces»;
  • \(i=7 \Rightarrow s=\)«odefrcs»;

По заданной строке \(s\) найдите лексикографически максимальную строку, которая может быть получена после применения некоторой последовательности операций, оставляющей в строке только уникальные символы.

Строка \(a\) длины \(n\) лексикографически меньше строки \(b\) длины \(m\), если:

  • существует индекс \(i\) (\(1 \le i \le \min(n, m)\)), такой что первые \(i-1\) символов у строк \(a\) и \(b\) совпадают, а \(i\)-й символ строки \(a\) меньше, чем \(i\)-й символ строки \(b\);
  • или первые \(\min(n, m)\) символов у строк \(a\) и \(b\) совпадают и \(n < m\).

Например строка \(a=\)«aezakmi» лексикографически меньше строки \(b=\)«aezus».

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следую \(t\) наборов входных данных.

Каждый набор входных данных характеризуется строкой \(s\), состоящей из строчных букв латинского алфавита (\(1 \le |s| \le 2 \cdot 10^5\)).

Гарантируется, что сумма длин строк во всех наборах входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

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

C. Завершите MST

битмаски графы Деревья жадные алгоритмы Перебор поиск в глубину и подобное снм Структуры данных *2500

Как преподаватель, Riko Hakozaki часто помогает ученикам в решении задач по различным предметам. Сегодня ее попросили помочь с задачей по программированию, которая заключается в следующем.

Вам выдается неориентированный полный граф с \(n\) вершинами, где для некоторых ребер заданы положительные веса, а для остальных нет. Вам нужно назначить всем еще не назначенным рёбрам неотрицательные веса так, чтобы у получившегося графа XOR (побитовое исключающее ИЛИ) всех весов был равен \(0\).

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

Напомним, что неориентированный полный граф с \(n\) вершинами содержит все рёбра \((u, v)\) с \(1 \le u < v \le n\); такой граф имеет \(\frac{n(n-1)}{2}\) рёбер.

Она не знает, как решить эту задачу, поэтому просит вас решить ее за нее.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(0 \le m \le \min(2 \cdot 10^5, \frac{n(n-1)}{2} - 1)\))  — количество вершин и количество предварительно назначенных рёбер. Гарантируется, что есть по крайней мере одно неназначенное ребро.

\(i\)-я из следующих строк \(m\) содержит три целых числа \(u_i\), \(v_i\) и \(w_i\) (\(1 \le u_i, v_i \le n\), \(u \ne v\), \(1 \le w_i < 2^{30}\)), обознаающие ребро от \(u_i\) до \(v_i\), которому был назначен вес \(w_i\). Ни одно ребро не появляется во вводе более одного раза.

Выходные данные

Выведите в одной строке одно целое число  — минимальное уродство среди всех возможных назначений весов с XOR суммой равной \(0\).

Примечание

На изображении ниже показан первый пример. Черные веса назначены предварительно, красные веса назначены нами, а минимальное остовное дерево состоит из синих ребер.

E. Дерево-календарь

Деревья Конструктив Перебор поиск в глубину и подобное сортировки Структуры данных *3100

Yuu Koito и Touko Nanami — молодожёны! В день свадьбы Yuu подарила Touko ориентированное дерево с \(n\) вершинами и корнем в \(1\), а также маркировку \(a\), которая является некоторым DFS обходом дерева. Каждое ребро в этом дереве направлено в сторону от корня.

Следующий алгоритм после вызова dfs(1) возвращает \(a\) — DFS-обход дерева, корнем которого является \(1\):


номер := 0
a := массив длины n

функция dfs(u):
номер := номер + 1
a[u] := номер
для всех v, для которых есть ориентированное ребро (u -> v):
dfs(v)

Обратите внимание, что для дерева может существовать несколько различных DFS-обходов

Touko настолько понравился подарок, что она решила поиграть с ним! Каждый день, начиная с дня после свадьбы, Touko выполняет следующую процедуру один раз:

  • Среди всех ориентированных рёбер \(u \rightarrow v\) таких, что \(a_u < a_v\), выберите рёбро \(u' \rightarrow v'\) с лексикографически минимальной парой \((a_{u'}, a_{v'})\).
  • Обменяйте местами \(a_{u'}\) и \(a_{v'}\).

Прошли дни со свадьбы, а Touko как-то забыла, когда была свадьба, и какой была оригинальная маркировка \(a\)! Опасаясь, что Yuu может разозлиться, Touko решила попросить вас определить эту информацию, используя текущую маркировку.

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

Входные данные

В первой строке входных данных содержится целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)) — количество вершин в дереве.

Во второй строке содержатся \(n\) целые числа \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le n\), все \(a_i\) различны) — текущая маркировка дерева.

Каждая из следующих \(n - 1\) строк содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u, v \le n\), \(u \neq v\)), описывающие ориентированное ребро от \(u_i\) до \(v_i\). Ребра образуют корневое ориентированное дерево с корнем в \(1\).

Выходные данные

Если текущую маркировку невозможно получить ни из какого DFS-обхода, выведите NO.

В противном случае в первой строке выведите YES. Во второй строке выведите единственное целое число, обозначающее количество дней со дня свадьбы. В третьей строке выведите \(n\) чисел через пробел, обозначающих оригинальную маркировку дерева.

Если есть несколько правильных решений, вы можете вывести любое. Это означает, что вы можете вывести любую пару (DFS-обход, количество дней), для которой мы получим текущую конфигурацию, начав из DFS-обхода, который вы предоставили, ровно через предоставленное вами количество дней.

Примечание

Следующая анимация демонстрирует первый пример. Белая метка внутри вершины обозначает номер вершины \(i\), а оранжевая метка — значение \(a_i\).

F. Оптимальное кодирование

Перебор Структуры данных *3500

Любимая последовательность чисел Touko — это перестановка \(a_1, a_2, \dots, a_n\) чисел \(1, 2, \dots, n\), и она хочет коллекцию перестановок, похожих на ее любимую перестановку.

У нее есть коллекция \(q\) отрезков вида \([l_i, r_i]\) с \(1 \le l_i \le r_i \le n\). Для создания перестановок, похожих на ее любимую перестановку, она придумала следующее определение:

  • Перестановка \(b_1, b_2, \dots, b_n\) позволяет интервалу \([l', r']\) удерживать свою форму, если для любой пары целых \((x, y)\) таких, что \(l' \le x < y \le r'\), неравенство \(b_x < b_y\) выполняется тогда и только тогда, когда \(a_x < a_y\).
  • Перестановка \(b_1, b_2, \dots, b_n\) называется \(k\)-похожей, если \(b\) позволяет всем интервалам \([l_i, r_i]\) для \(1 \le i \le k\) сохранять свою форму.

Yuu хочет найти все \(k\)-похожие перестановки для Touko, но это оказалось очень сложной задачей. Вместо этого Yuu будет кодировать набор всех \(k\)-похожих перестановок ориентированными ациклическими графами (DAG). Yuu также придумала для себя следующие определения:

  • Перестановка \(b_1, b_2, \dots, b_n\) удовлетворяет DAG \(G'\), если для всех ребер \(u \to v\) в \(G'\) выполняется \(b_u < b_v\).
  • \(k\)-кодирование — это DAG \(G_k\) на наборе вершин \(1, 2, \dots, n\) такой, что перестановка \(b_1, b_2, \dots, b_n\) удовлетворяет \(G_k\), если и только если \(b\) является \(k\)-похожей.

Поскольку Yuu сегодня свободна, она хочет выяснить минимальное количество ребер среди всех \(k\)-кодирований для каждого \(k\) от \(1\) до \(q\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n \le 25\,000\), \(1 \le q \le 100\,000\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\), которые образуют перестановку \(1, 2, \dots, n\).

В \(i\)-й из следующих строк \(q\) содержатся два целых числа \(l_i\) и \(r_i\). (\(1 \le l_i \le r_i \le n\)).

Выходные данные

Выведите \(q\) строк. \(k\)-я из них должна содержать единственное целое число  — минимальное количество рёбер среди всех \(k\)-кодирований.

Примечание

Для первого примера:

  • Все \(1\)-похожие перестановки должны позволять интервалу \([1, 3]\) удерживать свою форму. Поэтому набор всех \(1\)-похожих перестановок составляет \(\{[3, 4, 2, 1], [3, 4, 1, 2], [2, 4, 1, 3], [2, 3, 1, 4]\}\). Оптимальным кодированием этих перестановок является
  • Все \(2\)-похожие перестановки должны позволять интервалам \([1, 3]\) и \([2, 4]\) удерживать свою форму. Поэтому набор всех \(2\)-похожих перестановок составляет \(\{[3, 4, 1, 2], [2, 4, 1, 3]\}\). Оптимальным кодированием этих перестановок является
  • Все \(3\)-похожие перестановки должны позволять интервалы \([1, 3]\), \([2, 4]\) и \([1, 4]\) удерживать свои формы. Поэтому набор всех \(3\)-похожих перестановок включает только \([2, 4, 1, 3]\). Оптимальным кодированием этой перестановки является

C. Очередная задача про колоду карт

Деревья Перебор реализация Структуры данных *1100

У вас есть колода из \(n\) карт, пронумерованных сверху вниз, т. е. у верхней карты индекс \(1\), а у нижней — \(n\). У каждой карты есть цвет: цвет \(i\)-й карты равен \(a_i\).

Вам нужно обработать \(q\) запросов: \(j\)-й запрос описывается одним целым числом \(t_j\). Для каждого запроса вам нужно:

  • найти самую верхнюю карту в колоде с цветом \(t_j\), т. е. карту с минимальным индексом;
  • вывести индекс найденной карты;
  • вытащить данную карту и положить ее сверху колоды.
Входные данные

В первой строке заданы два целых числа \(n\) и \(q\) (\(2 \le n \le 3 \cdot 10^5\); \(1 \le q \le 3 \cdot 10^5\)) — количество карт в колоде и количество запросов.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 50\)) — цвета карт.

В третьей строке заданы \(q\) целых чисел \(t_1, t_2, \dots, t_q\) (\(1 \le t_j \le 50\)) — цвета в запросах. Гарантируется, что в запросах используются только цвета, представленные в колоде.

Выходные данные

Выведите \(q\) целых чисел — ответы на все запросы.

Примечание

Описание примера:

  1. текущая колода \([2, 1, 1, 4, \underline{3}, 3, 1]\) и верхняя карта цвета \(t_1 = 3\) на позиции \(5\);
  2. текущая колода \([3, \underline{2}, 1, 1, 4, 3, 1]\) и верхняя карта цвета \(t_2 = 2\) на позиции \(2\);
  3. текущая колода \([2, 3, \underline{1}, 1, 4, 3, 1]\) и верхняя карта цвета \(t_3 = 1\) на позиции \(3\);
  4. текущая колода \([\underline{1}, 2, 3, 1, 4, 3, 1]\) и верхняя карта цвета \(t_4 = 1\) на позиции \(1\);
  5. текущая колода \([1, 2, 3, 1, \underline{4}, 3, 1]\) и верхняя карта цвета \(t_5 = 4\) на позиции \(5\).

F. Чайнворд

дп матрицы Перебор Строки строковые суфф. структуры Структуры данных *2700

Чайнворд — это особый тип кроссворда. Как и в большинстве кроссвордов, в нем есть клетки, в которые надо вписать буквы, и некоторые подсказки, которые указывают на то, какие буквы должны быть.

В чайнворде клетки для букв расположены в одну строку. В этой задаче мы будем рассматривать чайнворды длины \(m\).

Подсказка к чайнворду — это последовательность отрезков такая, что отрезки не пересекаются между собой и покрывают все \(m\) клеток. Каждый отрезок содержит описание слова в соответствующих клетках.

Особенность в том, что подсказки на самом деле две: одна последовательность находится в строке над клетками для букв, а другая — под ней. Когда эти последовательности разные, они помогают разрешить неоднозначность в ответах.

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

Экземпляр чайнворда — это следующая тройка:

  • строка из \(m\) строчных латинских букв;
  • первая подсказка: последовательность отрезков такая, что буквы, соответствующие каждому отрезку, составляют некоторое слово из словаря;
  • вторая подсказка: еще одна последовательность отрезков такая, что буквы, соответствующие каждому отрезку, составляют некоторое слово из словаря.

Обратите внимание, что последовательности отрезков не обязаны различаться.

Два экземпляра чайнвордов считаются различными, если различаются их строки, первые подсказки или вторые подсказки.

Посчитайте количество различных экземпляров чайнвордов. Так как их число может быть достаточно велико, выведите его остаток от деления на \(998\,244\,353\).

Входные данные

В первой строке записаны два целых числа \(n\) and \(m\) (\(1 \le n \le 8\), \(1 \le m \le 10^9\)) — количество слов в словаре и количество клеток с буквами.

В каждой из следующих \(n\) строк записано одно слово — непустая строка из не более \(5\) строчных латинских букв. Все слова попарно различные.

Выходные данные

Выведите одно целое число — количество различных экземпляров чайнвордов длины \(m\) для данного словаря по модулю \(998\,244\,353\).

Примечание

Здесь приведены все примеры различных чайнвордов для первого примера:

Красные полоски над буквами означают отрезки первой подсказки, синие полоски под буквами означают отрезки второй подсказки.

Во втором примере возможные строки: «abab», «abcd», «cdab» и «cdcd». Все подсказки — это отрезки, которые покрывают первые две буквы и последние две буквы.

G. Фишки на доске

битмаски дп игры Перебор Структуры данных *2700

У Алисы и Боба есть доска из \(n\) строк и \(m\) столбцов. В каждой строке есть ровно одна фишка.

Алиса и Боб играют в следующую игру. Они выбирают два целых числа \(l\) и \(r\), такие, что \(1 \le l \le r \le m\), и разрезают доску таким образом, что только столбцы с \(l\) по \(r\) (включительно) принадлежат доски. То есть все столбцы левее столбца \(l\) и все столбцы правее столбца \(r\) больше не являются частью доски.

После разрезания доски они начинают свою игру на оставшейся части доски (от столбца \(l\) до столбца \(r\)). Они ходят по очереди, и первый игрок, который не может сделать ход, проигрывает. Первый ход делает Алиса, второй — Боб, третий — снова Алиса, и так далее. Во время своего хода игрок должен выбрать одну из фишек и сдвинуть ее на любое количество столбцов влево (то есть, если фишка была в столбце \(i\), ее можно переместить в любой столбец \(j < i\), а фишки в самом левом столбце двигать нельзя). Фишки не должны покидать выбранную часть доски.

У Алисы и Боба есть \(q\) пар чисел \(L_i\) и \(R_i\). Для каждой такой пары они хотят определить, кто выиграет, если \(l = L_i\) и \(r = R_i\). Обратите внимание, что эти игры рассматриваются независимо (они не влияют на положение на доске в последующих играх), и оба игрока играют оптимально.

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество строк и столбцов, соответственно.

Во второй строке заданы \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le m\)), где \(c_i\) — номер столбца, в котором расположена фишка в \(i\)-м ряду (то есть, такое число обозначает фишку в клетке на пересечении \(i\)-й строки и \(c_i\)-го столбца).

В третьей строке задано одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)).

Затем следуют \(q\) строк, в \(i\)-й строке заданы два целых числа \(L_i\) и \(R_i\) (\(1 \le L_i \le R_i \le m\)).

Выходные данные

Выведите строку из \(q\) символов. \(i\)-й символ должен быть A, если Алиса выигрывает при \(l = L_i\) и \(r = R_i\), или B, если выигрывает Боб.

D. Испорченный массив

жадные алгоритмы Конструктив Структуры данных *1200

Вам дано число \(n\) и массив \(b_1, b_2, \ldots, b_{n+2}\), полученный согласно следующему алгоритму:

  • был загадан некоторый массив \(a_1, a_2, \ldots, a_n\);
  • массив \(a\) записали в массив \(b\), т.е. \(b_i = a_i\) (\(1 \le i \le n\));
  • \((n+1)\)-м элементом массива \(b\) записали сумму чисел в массиве \(a\), т.е. \(b_{n+1} = a_1+a_2+\ldots+a_n\);
  • \((n+2)\)-м элементом массива \(b\) записали некоторое число \(x\) (\(1 \le x \le 10^9\)), т.е. \(b_{n+2} = x\);
  • массив \(b\) был перемешан.

Например, массив \(b=[2, 3, 7, 12 ,2]\) мог быть получен следующими способами:

  • \(a=[2, 2, 3]\) и \(x=12\);
  • \(a=[3, 2, 7]\) и \(x=2\).

Для заданного массива \(b\) найдите любой массив \(a\), который мог быть загадан изначально.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Вторая строка каждого набора содержит \(n+2\) целых числа \(b_1, b_2, \ldots, b_{n+2}\) (\(1 \le b_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите:

  • «-1», если массив \(b\) не мог быть получен ни по какому массиву \(a\);
  • \(n\) целых чисел \(a_1, a_2, \ldots, a_n\), иначе.

Если существует несколько массивов \(a\), то можете выводить любой.

F. Задача об обмене

Конструктив Перебор сортировки Структуры данных *2500

Вам даны два массива \(a\) и \(b\), оба из \(n\) элементов. Вы можете поменять местами два элемента в \(b\) не более одного раза (или ничего не делать). Вам нужно минимизировать величину \(\)\sum_{i}|a_{i}-b_{i}|.\(\)

Найдите минимально возможное значение этой суммы.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le {10^9}\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le {10^9}\)).

Выходные данные

Выведите минимально возможное значение суммы \(\sum_{i}|a_{i}-b_{i}|\).

Примечание

В первом примере можно поменять местами первый и пятый элементы массива \(b\), и он станет равным \([ 5, 2, 3, 4, 1 ]\).

В таком случае значение суммы будет равно \(|5-5| + |4-2| + |3-3| + |2-4| + |1-1| = 4\), что является минимумом.

Во втором примере можно поменять местами первый и второй элементы. Ответ равен \(2\).

D. Вырежи и склей

Бинарный поиск жадные алгоритмы реализация сортировки Структуры данных *2000

У маленького Эхаба есть набор для аппликации, содержащий массив \(a\) длины \(n\). Он планирует взять ножницы и сделать следующее:

  • выбрать отрезок \((l, r)\), и вырезать каждый элемент \(a_l\), \(a_{l + 1}\), ..., \(a_r\) на этом отрезке;
  • склеить некоторые из элементов вместе в том же порядке, в котором они шли в массиве;
  • в итоге, получится несколько кусочков, каждый кусочек содержит некоторые элементы, и каждый элемент принадлежит какому-то кусочку.

Более формально, он разделит последовательность \(a_l\), \(a_{l + 1}\), ..., \(a_r\) на подпоследовательности. Он считает, что разделение красивое, если для каждого кусочка (подпоследовательности) верно, что если его длина равна \(x\), то никакое значение не встречается строго больше \(\lceil \frac{x}{2} \rceil\) раз в этом кусочке.

Эхаб еще не определился с отрезком, поэтому он интересуется для \(q\) отрезков \((l, r)\), чему равно минимальное количество кусочков, на которые нужно разделить \(a_l\), \(a_{l + 1}\), ..., \(a_r\), чтобы разделение было красивым.

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

Входные данные

В первой строке даны два целых числа \(n\) и \(q\) (\(1 \le n,q \le 3 \cdot 10^5\)) — длина массива \(a\) и количество запросов.

Во второй строке даны \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_{n}\) (\(1 \le a_i \le n\)) — элементы массива \(a\).

Каждая из следующих \(q\) строк содержит два целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)) — отрезок этого запроса.

Выходные данные

Для каждого запроса выведите минимальное количество подпоследовательностей, на которые нужно разбить отрезок, чтобы разбиение было красивым. Можно доказать, что такое разбиение всегда существует.

Примечание

В первом запросе можно взять весь массив в одну подпоследовательность, так как его длина равна \(6\), и ни одно значение не встречается в нем больше \(3\) раз.

Во втором запросе элементы отрезка равны \([3,2,3,3]\). Вы не можете взять их всех в одну подпоследовательность, потому что ее длина будет равна \(4\), и \(3\) встречается в ней больше \(2\) раз. Однако, вы можете разделить отрезок на две подпоследовательности: \([3]\) и \([2,3,3]\).

C. Феникс и башни

жадные алгоритмы Конструктив Структуры данных *1400

У Феникса есть \(n\) блоков высотой \(h_1, h_2, \dots, h_n\), где все \(h_i\) не превосходят некоторого значения \(x\). Он планирует расставить все \(n\) блоков в виде \(m\) башен. Высота башни — это просто сумма высот блоков, из которой она состоит. Для того чтобы башни выглядели красиво, высота никаких двух башен не должна отличаться более, чем на \(x\).

Помогите Фениксу построить \(m\) башен красиво. В каждой башне должно быть хотя бы по одному блоку и все блоки должны быть использованы.

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора заданы три целых числа \(n\), \(m\) и \(x\) (\(1 \le m \le n \le 10^5\); \(1 \le x \le 10^4\)) — количество блоков, количество выстраиваемых башен и максимально разрешенная разность высот между любой парой башен, соответственно.

Во второй строке каждого набора заданы \(n\) целых чисел через пробел (\(1 \le h_i \le x\)) — высоты блоков.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, если Феникс не сможет построить \(m\) башен красиво, выведите NO. В противном случае выведите YES и \(n\) целых чисел \(y_1, y_2, \dots, y_n\), где \(y_i\) (\(1 \le y_i \le m\)) — это номер башни, в которую попадет \(i\)-й блок.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе, первая башня будет высоты \(1+2+3=6\), а вторая — высоты \(1+2=3\). Их разность \(6-3=3\) и не превосходит \(x=3\), поэтому башни красивые.

Во втором наборе, первая башня будет высоты \(1\), вторая — \(1+2=3\) и третья — \(3\). Максимальная разность между любой парой башен равна \(3-1=2\), что не превосходит \(x=3\), поэтому башни красивые.

H. Феникс и биты

битмаски Перебор сортировки Структуры данных *3500

Феникс любит играть с битами — особенно используя битовые операции AND, OR и XOR. У него есть \(n\) целых чисел \(a_1, a_2, \dots, a_n\) и \(q\) запросов, каждый одного из следующих типов:

  1. заменить все числа \(a_i\), для которых \(l \le a_i \le r\), на \(a_i\) AND \(x\);
  2. заменить все числа \(a_i\), для которых \(l \le a_i \le r\), на \(a_i\) OR \(x\);
  3. заменить все числа \(a_i\), для которых \(l \le a_i \le r\), на \(a_i\) XOR \(x\);
  4. вывести количество различных чисел \(a_i\), для которых \(l \le a_i \le r\).

В каждом запросе Феникса \(l\), \(r\) и \(x\) заданы. Заметим, что он рассматривает значения чисел, а не их индексы.

Входные данные

В первой строке заданы два целых числа \(n\) и \(q\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le q \le 10^5\)) — количество чисел и количество запросов, соответственно.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i < 2^{20}\)) — числа, которые есть у Феникса в начале.

В следующих \(q\) строках заданы запросы. Для каждого запроса, первое число в строке \(t\) (\(1 \le t \le 4\)) — это тип запроса.

Если \(t \in \{1, 2, 3\}\), то далее следуют три целых числа \(l_i\), \(r_i\) и \(x_i\) (\(0 \le l_i, r_i, x_i < 2^{20}\); \(l_i \le r_i\)).

В противном случае (если \(t=4\)), далее следуют два целых числа \(l_i\) и \(r_i\) (\(0 \le l_i \le r_i < 2^{20}\)).

Гарантируется, что есть хотя бы один запрос, где \(t=4\).

Выходные данные

Выведите ответ для каждого запроса четвертого типа (\(t=4\)).

Примечание

В первом примере:

  • В первом запросе, \(2\) заменяется на \(2\) AND \(2 = 2\), и \(3\) заменяется на \(3\) AND \(2 = 2\). Множество чисел становится \(\{1, 2, 4, 5\}\).
  • Во втором запросе, есть \(3\) различных числа от \(2\) по \(5\): \(2\), \(4\) и \(5\).
  • В третьем запросе, \(2\) заменяется на \(2\) XOR \(3 = 1\), \(4\) заменяется на \(4\) XOR \(3 = 7\), и \(5\) заменяется на \(5\) XOR \(3 = 6\). Множество чисел становится \(\{1, 6, 7\}\).
  • В четвертом запросе, есть \(2\) различных числа от \(1\) по \(6\): \(1\) и \(6\).
  • В пятом запросе, \(1\) заменяется на \(1\) OR \(8 = 9\). Множество чисел становится \(\{6, 7, 9\}\).
  • В шестом запросе, есть одно различное число от \(8\) по \(10\): \(9\).

I. Феникс и бриллианты

Бинарный поиск сортировки Структуры данных *3400

Фениксу стало интересно: какого это — красть бриллианты из ювелирного магазина!

Всего есть \(n\) видов бриллиантов: бриллиант \(i\)-го вида весит \(w_i\) и стоит \(v_i\). Первоначально в магазине есть \(a_i\) бриллиантов \(i\)-го вида.

Каждый день, на протяжении \(q\) дней, происходит одно из следующих событий:

  1. В магазин поступает \(k_i\) бриллиантов вида \(d_i\).
  2. Магазин продает \(k_i\) бриллиантов вида \(d_i\).
  3. Феникс интересуется, что произойдет, если он решит ограбить магазин, придя в него с мешком, который может вместить бриллианты суммарным весом не более \(c_i\). Если Феникс будет брать бриллианты жадно начиная с самых дорогих, бриллиантов на какую стоимость он наберет? Если есть несколько бриллиантов с максимальной стоимостью, он будет брать сначала самые легкие. Если же среди бриллиантов с максимальной стоимостью есть несколько с минимальным весом, то он берет любой из них.

Конечно же, так как Феникс — законопослушный гражданин, то все описанное выше — не более чем мысленный эксперимент и он никогда не будет по-настоящему забирать бриллианты из магазина. Другими словами, запросы типа \(3\) не влияют на количество бриллиантов в магазине.

Входные данные

В первой строке заданы два целых числа \(n\) и \(q\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le q \le 10^5\)) — количество видов бриллиантов и количество дней, соответственно.

В следующих \(n\) строках описаны каждый из видов бриллиантов. В \(i\)-й строке заданы три целых числа \(a_i\), \(w_i\) и \(v_i\) (\(0 \le a_i \le 10^5\); \(1 \le w_i, v_i \le 10^5\)) — первоначальное количество бриллиантов \(i\)-го вида, вес бриллианта \(i\)-го вида и стоимость бриллианта \(i\)-го вида, соответственно.

В следующих \(q\) строках заданы запросы. Для каждого запроса, первое число в строке \(t\) (\(1 \le t \le 3\)) — это тип запроса.

Если \(t=1\), то далее заданы два целых числа \(k_i\) и \(d_i\) (\(1 \le k_i \le 10^5\); \(1 \le d_i \le n\)) означающие, что в магазин поступает \(k_i\) бриллиантов вида \(d_i\).

Если \(t=2\), то далее заданы два целых числа \(k_i\) и \(d_i\) (\(1 \le k_i \le 10^5\); \(1 \le d_i \le n\)) означающие, что магазин продает \(k_i\) бриллиантов вида \(d_i\). Гарантируется, что в магазине действительно было необходимое количество бриллиантов.

Если \(t=3\), то далее задано одно целое число \(c_i\) (\(1 \le c_i \le 10^{18}\)) — суммарный вес, который выдерживает мешок Феникса.

Гарантируется, что есть хотя бы один запрос, где \(t=3\).

Выходные данные

Выведите ответ для каждого запроса третьего типа (\(t=3\)).

Примечание

В первом запросе с \(t=3\), Феникс может уместить \(2\) бриллианта вида \(1\), с общим весом \(6\) и стоимостью \(8\).

Во втором запросе с \(t=3\), Феникс может забрать \(3\) бриллианта вида \(3\) и еще один вида \(1\). Общий вес будет равен \(9\), а стоимость — \(16\). Заметим, что бриллианты вида \(3\) предпочтительнее, чем вида \(1\), потому что вид \(3\) при равной стоимости имеет меньший вес.

В последнем запросе с \(t=3\), Феникс может забрать все бриллианты с общей стоимостью \(13\).

D. Ехаб разрезает массив

Бинарный поиск графы дп Структуры данных теория чисел *2100

В этот раз Ехаб решил только разрезать массив. Он начинает с массива \(a\) длины \(n\), записанного на полоске бумаги, и делает следующее:

  • Ехаб выбирает отрезок \((l, r)\) и вырезает отрезок с элементами \(a_l, a_{l + 1}, \ldots, a_r\), выбрасывая остальные элементы.
  • Затем он разрезает его на несколько подотрезков.
  • Чтобы добавить интереса в это занятие, он требует, чтобы произведение элементов на каждом подотрезке было равно их наименьшему общему кратному (НОК).

Формально, он разбивает элементы \(a_l, a_{l + 1}, \ldots, a_r\) на подотрезки так, чтобы произведение элементов каждого подотрезка было равно НОК элементов этого подотрезка. У Ехаба есть \(q\) независимых отрезков \((l, r)\), для которых он хочет узнать, на какое минимальное число подотрезков их необходимо разрезать, чтобы условие выполнялось.

Входные данные

В первой строке записано \(2\) целых числа \(n\) и \(q\) (\(1 \le n,q \le 10^5\)) — длина массива \(a\) и количество запросов.

Во второй строке записано \(n\) целых чисел, \(a_1\), \(a_2\), \(\ldots\), \(a_n\) (\(1 \le a_i \le 10^5\)) — элементы массива \(a\).

В каждой из следующих \(q\) строк записано \(2\) целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)) — границы каждого запроса.

Выходные данные

Для каждого запроса выведите ответ на него.

Примечание

Первый запрос спрашивает про весь массив. Вы можете разделить его так: \([2]\), \([3,10,7]\), и \([5,14]\). Произведение и НОК первого подотрезка равны \(2\). Произведение и НОК второго подотрезка равны \(210\). И произведение и НОК третьего подотрезка равны \(70\). Существует другое возможное разделение: \([2,3]\), \([10,7]\), и \([5,14]\).

Второй запрос спрашивает про отрезок \((2,4)\). Его произведение уже равно его НОК, следовательно, не нужно делить его ни разу.

Последний запрос про отрезок \((3,5)\). Вы можете разделить его на \([10,7]\) и \([5]\).

E. Групповое фото

Бинарный поиск реализация Структуры данных *2500

На конференции 2050 собралось несколько человек, увлекающихся спортивным программированием. Они собираются сделать общее фото. \(n\) человек выстроились в ряд. Они пронумерованы от \(1\) до \(n\) слева направо. Каждый из них держит в руках табличку с буквой «C» или с буквой «P».

Пусть \(C=\{c_1,c_2,\dots,c_m\}\) \((c_1<c_2<\ldots <c_m)\) — это множество людей, которые держат таблички с буквой «C». Аналогично, \(P=\{p_1,p_2,\dots,p_k\}\) \((p_1<p_2<\ldots <p_k)\) — множество людей, которые держат таблички с буквой «P». Фото хорошее тогда и только тогда, когда выполнены следующие ограничения:

  1. \(C\cup P=\{1,2,\dots,n\}\)
  2. \(C\cap P =\emptyset \).
  3. \(c_i-c_{i-1}\leq c_{i+1}-c_i(1< i <m)\).
  4. \(p_i-p_{i-1}\geq p_{i+1}-p_i(1< i <k)\).

Вам дан массив \(a_1,\ldots, a_n\), найдите количество хороших фото, удовлетворяющих условию: \(\)\sum\limits_{x\in C} a_x < \sum\limits_{y\in P} a_y.\(\)

Ответ может быть большим, поэтому выведите его по модулю \(998\,244\,353\). Два фото считаются разными, если существует хотя бы один человек, который держит табличку с буквой «C» на одном фото, и с буквой «P» на другом.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 200\,000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\leq n\leq 200\,000\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите ответ по модулю \(998\,244\,353\) на новой строке.

Примечание

В первом наборе входных данных есть \(10\) хороших фото, которые удовлетворяют условию: PPPPP, CPPPP, PCPPP, CCPPP, PCCPP, PCPCP, PPPPC, CPPPC, PCPPC, PPPCC.

Во втором наборе входных данных есть \(7\) хороших фото, которые удовлетворяют условию: PPPP, PCPP, PCCP, PPPC, PCPC, PPCC, PCCC

C. Берляндский отбор

жадные алгоритмы Перебор сортировки Структуры данных теория чисел *1400

Поликарп организует региональные ICPC соревнования в Берляндии. Всего в Берляндии \(n\) университетов, пронумерованных от \(1\) до \(n\). Поликарп знает всех спортивных программистов в регионе. Всего \(n\) студентов: \(i\)-й студент учится в университете \(u_i\), а его навык программирования оценивается величиной \(s_i\).

Поликарп сейчас думает над правилами регионального соревнования. В частности, над количеством участников в командах.

Поликарп знает, что если он выберет размер команды, как некоторое целое число \(k\), то каждый университет отправит \(k\) своих самых сильных (с наибольшей величиной навыка \(s\)) студентов в первой команде, следующие \(k\) — во второй команде и так далее. Если остается меньше \(k\) студентов, то команду нельзя собрать. Обратите внимание, что некоторые университеты могут отправить ноль команд.

Сила региона определяется, как суммарная величина навыков участников всех команд. Если ни одной команды нет, то сила равна \(0\).

Помогите Поликарпу найти силу региона для каждого \(k\) от \(1\) до \(n\).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество университетов и количество студентов.

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(u_1, u_2, \dots, u_n\) (\(1 \le u_i \le n\)) — университет, в котором учится \(i\)-й студент.

В третьей строке каждого набора входных данных записаны \(n\) целых чисел \(s_1, s_2, \dots, s_n\) (\(1 \le s_i \le 10^9\)) — величина навыка программирования \(i\)-го студента.

Сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите \(n\) целых чисел: силу региона — суммарную величину навыка программирования участников команд — для каждого выбора размера команды \(k\).

Примечание

В первом наборе входных данных команды университетов для каждого \(k\):

  • \(k=1\):
    • университет \(1\): \([6], [5], [5], [3]\);
    • университет \(2\): \([8], [1], [1]\);
  • \(k=2\):
    • университет \(1\): \([6, 5], [5, 3]\);
    • университет \(2\): \([8, 1]\);
  • \(k=3\):
    • университет \(1\): \([6, 5, 5]\);
    • университет \(2\): \([8, 1, 1]\);
  • \(k=4\):
    • университет \(1\): \([6, 5, 5, 3]\);

D. Одинаковые разницы

математика Структуры данных хэши *1200

Вам дан массив \(a\) из \(n\) целых чисел. Посчитайте количество пар индексов \((i, j)\), таких что \(i < j\) и \(a_j - a_i = j - i\).

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Во второй строке каждого набора входных данных находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество пар индексов \((i, j)\), таких что \(i < j\) и \(a_j - a_i = j - i\).

F2. Угадай K-й ноль (сложная версия)

Бинарный поиск интерактив Конструктив Структуры данных *2200

Это интерактивная задача.

Это сложная версия задачи. Отличия от простой версии состоят в том, что в сложной версии \(1 \le t \le \min(n, 10^4)\) и количество запросов ограничено числом \(6 \cdot 10^4\).

Поликарп играет в компьютерную игру. В этой игре загадан массив, состоящий из нулей и единиц. Поликарп выиграет, если \(t\) раз угадает позицию \(k\)-го слева нуля.

Поликарп может сделать не более \(6 \cdot 10^4\) запросов следующего вида:

  • ? \(l\) \(r\) — узнать сумму всех элементов на позициях от \(l\) до \(r\) (\(1 \le l \le r \le n\)) включительно.

Чтобы игра была более интересной, каждый угаданный ноль превращается в единицу и игра продолжается на измененном массиве. Более формально, если позиция \(k\)-го нуля равнялась \(x\), тогда после того, как Поликарп угадает эту позицию, \(x\)-й элемент массива заменится с \(0\) на \(1\).

Помогите Поликарпу выиграть в игре.

Протокол взаимодействия

Сначала ваша программа должна считать два целых числа \(n\) и \(t\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le t \le \min(n, 10^4)\)).

Далее следуют \(t\) строк, каждая из которых содержит одно целое число \(k\) (\(1 \le k \le n\)). Гарантируется, что в момент запроса в массиве есть хотя бы \(k\) нулей. Для того, чтобы получить следующее значение \(k\), вы должны вывести ответ для текущего значения \(k\).

После этого вы можете сделать не более \(6 \cdot 10^4\) запросов.

Используйте следующий формат, чтобы вывести ответ (это не считается за запрос, то есть не учитывается в ограничении \(6 \cdot 10^4\)):

  • ! \(x\) — позиция \(k\)-го нуля.

Позиции в массиве нумеруются слева направо от \(1\) до \(n\) включительно.

После вывода \(t\) ответов ваша программа должна немедленно завершиться.

В этой задаче интерактор не адаптивный. Это означает, что в рамках одного теста загаданный массив и запросы не меняются.

При некорректном запросе будет выведено -1. При получении данного значения ваша программа должна немедленно завершиться штатным образом (к примеру, с помощью вызова exit(0)), иначе тестирующая система может выдать произвольный вердикт.

При превышении количества запросов будет выведен вердикт неправильный ответ.

Ваше решение может получить вердикт Решение «зависло», если вы ничего не выведете или забудете сбросить буфер вывода.

Чтобы сбросить буфер вывода вам нужно сделать следующее сразу после вывода запроса и символа конца строки:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • см. документацию других языков.

Взломы

Используйте следующий формат для взломов:

В первой строке выведите строку \(s\) (\(1 \le |s| \le 2 \cdot 10^5\)), состоящую из нулей и единиц, и целое число \(t\) (\(1 \le t \le \min(|s|, 10^4)\)) — загаданный массив и количество запросов, соответственно. В следующих \(t\) строках выведите число \(k\) (\(1 \le k \le |s|\)).

Взламываемое решение не будет иметь прямого доступа к загаданному массиву.

Примечание

В первом тесте загадан массив \([1, 0, 1, 1, 0, 1]\). После ответа на запрос \(k=2\) массив превратился в \([1, 0, 1, 1, 1, 1]\).

D. Настя играет с деревом

Деревья дп жадные алгоритмы Конструктив поиск в глубину и подобное реализация снм Структуры данных *2500

У Насти есть невзвешенное дерево из \(n\) вершин, с которым ей не терпится поиграть!

Девочка будет выполнять следующую операцию с деревом столько раз, сколько ей потребуется:

  1. удалить любое существующее ребро, затем
  2. добавить неориентированное ребро между любой парой вершин.

Какое минимальное количество операций требуется девочке, чтобы получить из дерева бамбук? Бамбуком называется дерево, степень вершин в котором не превосходит \(2\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных.

В первой строке каждого набора задано число \(n\) (\(2 \le n \le 10^5\)) — количество вершин в дереве.

Следующая \(n - 1\) строка каждого набора входных данных описывают ребро дерево в формате \(a_i\), \(b_i\) (\(1 \le a_i, b_i \le n\), \(a_i \neq b_i\)).

Гарантируется, что заданный граф является деревом и сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

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

В последующих \(k\) строках выведите \(4\) целых числа \(x_1\), \(y_1\), \(x_2\), \(y_2\) (\(1 \le x_1, y_1, x_2, y_{2} \le n\), \(x_1 \neq y_1\), \(x_2 \neq y_2\)) — таким образом вы удаляете ребро \((x_1, y_1)\) и добавляете неориентированное ребро \((x_2, y_2)\).

Обратите внимание, что ребро \((x_1, y_1)\) обязано содержаться в графе до его удаления.

Примечание

Обратите внимание, что граф может быть несвязным после какого-то количества операций.

Рассмотрим первый набор входных данных:

Красным обозначены удаленные ребра, а зеленым – добавленные.

C. Вложить и выложить

Деревья жадные алгоритмы Перебор реализация Структуры данных *1600

Василий — большой любитель планирования дел наперед. Поэтому каждое утро он занимается формированием вложенного списка предстоящих дел.

Корректным вложенным списком является любой список, который можно получить из списка с одним пунктом «1» путем применения операций. Каждая операция вставляет в список новый пункт на следующей строке после одного из уже существующих пунктов \(a_1 \,.\, a_2 \,.\, a_3 \,.\, \,\cdots\, \,.\,a_k\), и бывает двух видов:

  1. добавить пункт \(a_1 \,.\, a_2 \,.\, a_3 \,.\, \cdots \,.\, a_k \,.\, 1\) (начав более вложенный список), или
  2. добавить пункт \(a_1 \,.\, a_2 \,.\, a_3 \,.\, \cdots \,.\, (a_k + 1)\) (продолжив текущий уровень).
Операцию можно производить только при условии, что в списке не появится двух одинаковых пунктов. А также, если рассматривать каждый пункт как последовательность чисел, последовательность пунктов должна всегда оставаться возрастающей в лексикографическом порядке. Примеры корректных и некорректных списков приведены на рисунке. Пример того, как можно получить корректный список, изображенный на картинке, приведен в секции «Примечание».

Когда Василий захотел сохранить Word-документ со списком своих дел, он промахнулся и вместо «Ctrl+S» нажал совсем другую комбинацию клавиш. Достоверно неизвестно, что это была за комбинация клавиш, но после ее нажатия каждый пункт списка заменился одним числом: числом, изначально написанным последним в номере пункта.

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

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^3\)) — количество строк в списке.

Следующие \(n\) строк набора входных данных содержат по одному числу \(a_i\) (\(1 \le a_i \le n\)) — описание того, что осталось от вложенного списка Василия.

Гарантируется, что в каждом наборе входных данных существует хотя бы один подходящий список.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^3\).

Выходные данные

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

Если ответов несколько, то вы можете вывести любой подходящий.

Примечание

Во втором наборе входных данных одним из корректных подходящих списков является:

1

1.1

1.1.1

1.1.2

1.2

1.2.1

2

2.1

2.2

Такой список можно получить при помощи последовательности операций, показанной ниже:

  1. Изначальный список с одним пунктом \(1\).
  2. Вставляем пункт \(2\) при помощи операции вставки второго типа после пункта \(1\).
  3. Вставляем пункт \(1.1\) при помощи операции вставки первого типа после пункта \(1\).
  4. Вставляем пункт \(1.2\) при помощи операции вставки второго типа после пункта \(1.1\).
  5. Вставляем пункт \(1.1.1\) при помощи операции вставки первого типа после пункта \(1.1\).
  6. Вставляем пункт \(1.1.2\) при помощи операции вставки второго типа после пункта \(1.1.1\).
  7. Вставляем пункт \(1.2.1\) при помощи операции вставки первого типа после пункта \(1.2\).
  8. Вставляем пункт \(2.1\) при помощи операции вставки первого типа после пункта \(2\).
  9. Вставляем пункт \(2.2\) при помощи операции вставки второго типа после пункта \(2.1\).

G. Попробуй забронируй

разделяй и властвуй Структуры данных *3200

Василий владеет квартирой в центре Лондона. Он решил сдавать квартиру в течение следующих \(n\) дней, чтобы подзаработать денег.

Так как квартира Василия находится в центре города, то ему сразу пришло целых \(m\) предложений вида \((l_i, r_i)\) обозначающего, что кто-то хочет забронировать квартиру со дня \(l_i\) до дня \(r_i\) включительно. Чтобы не тратить много времени на определение, выгодно ли ему соглашаться на предложение о съеме, Василий решил разработать алгоритм. Алгоритм обрабатывает все предложения в порядке их поступления и принимает очередное предложение \(i\) в случае, если выполняются следующие два условия:

  • \(r_i - l_i + 1 \ge x\).
  • Все дни на отрезке от \(l_i\) до \(r_i\) не заняты ни одним из ранее принятых предложений.

Василий не определился со значением, которому будет равен \(x\), и просит у вас помощи. Он хочет, чтобы для всех \(x\) от \(1\) до \(n\) вы посчитали суммарное количество дней, в которые будет сдаваться квартира, если алгоритм будет использовать соответствующий параметр \(x\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) \((1 \le n \le 5 \cdot 10^4, 1 \le m \le 10^5)\) — количество дней и количество предложений.

Следующие \(m\) строк содержат по два целых числа \(l_i\) и \(r_i\) \((1 \le l_i \le r_i \le n)\) — описание \(i\)-го предложения на съем квартиры. Все предложения даны в хронологическом порядке.

Выходные данные

Выведите \(n\) целых чисел. Число в \(i\)-й строке должно обозначать количество дней, на которое будет сдана квартира, если алгоритм будет использовать \(x\) равный \(i\).

Примечание

Описание отрезков из первого тестового примера для каждого \(x\):

  • \(x = 1\) — алгоритм одобрит предложения: \(1\) (2..3), \(3\) (1..1). Суммарное количество дней, на которое Василий сдаст квартиру — 3
  • \(x = 2\) — алгоритм одобрит предложение \(1\) (2..3). Суммарное количество дней, на которое Василий сдаст квартиру — 2
  • \(x = 3\) — алгоритм одобрит предложение \(2\) (3..5). Суммарное количество дней, на которое Василий сдаст квартиру — 3
  • \(x = 4\) — алгоритм одобрит предложение \(4\) (1..5). Суммарное количество дней, на которое Василий сдаст квартиру — 5
  • \(x = 5\) — алгоритм одобрит предложение \(4\) (1..5). Суммарное количество дней, на которое Василий сдаст квартиру — 5
  • \(x = 6\) — алгоритм одобрит предложение \(5\) (1..6). Суммарное количество дней, на которое Василий сдаст квартиру — 6

H. Прыжки по массиву

дп Структуры данных *3500

Василий очень хочет завести себе питомца. Еще с детства он мечтал иметь домашнего кузнечика. Василий подходит к выбору питомца очень ответственно, поэтому он хочет устроить кузнечику испытание!

Испытание Василия проходит на массиве \(a\) длины \(n\), который задает длины прыжков для каждой из \(n\) клеток. Кузнечик может прыгать по клеткам по следующим правилам: с клетки с индексом \(i\) он может прыгнуть в любую клетку с индексом от \(i\) до \(i+a_i\) включительно.

Назовем \(k\)-кузнечным числом некоторого массива минимальное количество прыжков, которое потребуется кузнечику, чтобы пропрыгать от первой клетки массива до последней, при этом до начала прыжков вы можете выбрать не более \(k\) клеток и удалить их из массива. Когда клетка удаляется, остальные клетки перенумеровываются, однако величина \(a_i\) для каждой клетки остается неизменной. При этом нельзя удалять первую и последнюю клетки массива.

Требуется обработать \(q\) запросов следующего вида: даны три числа \(l\), \(r\), \(k\), необходимо найти \(k\)-кузнечное число для массива, являющегося подотрезком массива \(a\) с клетками от \(l\) до \(r\) включительно.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 20000\)) — длину массива и количество запросов соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — описание элементов массива.

Следующие \(q\) строк содержат запросы: в каждой строке содержатся три целых числа \(l\), \(r\), \(k\) (\(1 \le l \le r \le n\), \(0 \le k \le min(30, r-l)\)) — границы подотрезков массива и номер кузнечного числа соответственно.

Выходные данные

Для каждого запроса в отдельной строке выведите одно целое число — ответ на запрос.

Примечание

Для второго запроса процесс происходит так:

Для третьего запроса процесс происходит так:

C. Столкновения роботов

жадные алгоритмы реализация сортировки Структуры данных *2000

\(n\) роботов ездят по координатной оси OX. На этой оси также есть две стены: одна в координате \(0\), другая в координате \(m\).

\(i\)-й робот начинает в целой координате \(x_i~(0 < x_i < m)\) и движется либо влево (в сторону \(0\)), либо вправо со скоростью \(1\) в секунду. Никакие два робота не начинают в одной координате.

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

Когда несколько роботов встречаются в одной целой координате, они сталкиваются и взрываются. Как только робот взорвался, он больше не сталкивается с другими роботами. Обратите внимание, что если роботы встретятся в нецелой координате, то ничего не случится.

Для каждого робота проверьте, взорвется ли он когда-нибудь, и выведите время взрыва, если да, и \(-1\) в противном случае.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Затем следуют описания \(t\) наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 3 \cdot 10^5\); \(2 \le m \le 10^8\)) — количество роботов и координата правой стены.

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(0 < x_i < m\)) — начальные координаты каждого робота.

В третьей строке каждого набора входных данных записаны \(n\) символов 'L' или 'R' — начальные направления роботов ('L' означает влево, а 'R' означает вправо).

Все координаты \(x_i\) в наборе входных данных различны.

Сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

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

Примечание

Изображение секунд \(0, 1, 2\) и \(3\) для первого набора входных данных:

Обратите внимание, что роботы \(2\) и \(3\) не сталкиваются, потому что они встречаются в одной точке \(2.5\), которая не является целой.

После секунды \(3\) робот \(6\) просто ездит бесконечно, потому что нет робота, с которым он мог бы столкнуться.

C1. Настойки (простая версия)

дп жадные алгоритмы Перебор Структуры данных *1500

Это простая версия задачи. Единственное отличие в том, что в этой версии \(n \leq 2000\). Вы можете делать взломы, только если решены обе версии задачи.

В линию выстроены \(n\) настоек, причем настойка \(1\) находится слева, а настойка \(n\) — справа. Каждая настойка увеличит ваше здоровье на \(a_i\), если ее выпить. \(a_i\) может быть отрицательным, что означает, что настойка уменьшит ваше здоровье.

Вы начинаете с \(0\) здоровья и будете идти слева направо, от первой настойки до последней. Для каждой настойки вы можете выбрать, выпить ли ее. Вы должны следить за тем, чтобы ваше здоровье всегда было неотрицательным.

Какое наибольшее количество настоек вы можете выпить?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 2000\)) — количество настоек.

Следующая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ... ,\(a_n\) (\(-10^9 \leq a_i \leq 10^9\)), которые обозначают изменения здоровья после употребления данных настоек.

Выходные данные

Выведите одно целое число — максимальное количество настоек, которое вы можете выпить, чтобы ваше здоровье всегда было неотрицательным.

Примечание

В примере, вы можете выпить \(5\) настоек, приняв настойки \(1\), \(3\), \(4\), \(5\) и \(6\). Невозможно выпить все \(6\) настоек, потому что в какой-то момент ваше здоровье станет отрицательным.

C2. Настойки (сложная версия)

жадные алгоритмы Структуры данных *1600

Это сложная версия задачи. Единственное отличие в том, что в этой версии \(n \leq 200000\). Вы можете делать взломы, только если решены обе версии задачи.

В линию выстроены \(n\) настоек, причем настойка \(1\) находится слева, а настойка \(n\) — справа. Каждая настойка увеличит ваше здоровье на \(a_i\), если ее выпить. \(a_i\) может быть отрицательным, что означает, что настойка уменьшит ваше здоровье.

Вы начинаете с \(0\) здоровья и будете идти слева направо, от первой настойки до последней. Для каждой настойки вы можете выбрать, выпить ли ее. Вы должны следить за тем, чтобы ваше здоровье всегда было неотрицательным.

Какое наибольшее количество настоек вы можете выпить?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 200000\)) — количество настоек.

Следующая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ... ,\(a_n\) (\(-10^9 \leq a_i \leq 10^9\)), которые обозначают изменения здоровья после употребления данных настоек.

Выходные данные

Выведите одно целое число — максимальное количество настоек, которое вы можете выпить, чтобы ваше здоровье всегда было неотрицательным.

Примечание

В примере, вы можете выпить \(5\) настоек, приняв настойки \(1\), \(3\), \(4\), \(5\) и \(6\). Невозможно выпить все \(6\) настоек, потому что в какой-то момент ваше здоровье станет отрицательным.

D. Убить Антона

Конструктив математика Перебор Строки Структуры данных *2200

После того, как Антон отклонил \(10^{100}\) задач на структуры данных, Errorgorn очень зол на него и решил его убить.

ДНК Антона можно представить в виде строки \(a\), которая содержит только символы из строки «ANTON» (всего \(4\) различных символов).

Errorgorn может заменить ДНК Антона на строку \(b\), которая должна быть перестановкой \(a\). Однако тело Антона может защититься от этой атаки. За \(1\) секунду его тело может поменять местами \(2\) соседних символа его ДНК, чтобы превратить ее обратно в \(a\). Тело Антона умно и будет использовать минимальное количество ходов.

Чтобы максимизировать вероятность смерти Антона, Errorgorn хочет изменить ДНК Антона на строку, которая максимизирует время, необходимое телу Антона для возвращения к его исходному ДНК. Но поскольку Errorgorn занят решением новых задач на структуры данных, ему нужна ваша помощь, чтобы найти лучшую строку \(B\). Сможете ли вы ему помочь?

Входные данные

Первая строка ввода содержит одно целое число \(t\) \((1 \leq t \leq 100000)\) — количество наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит \(1\) строку \(a\) (\(1 \leq |a| \leq 100000\)). \(a\) состоит только из символов "A", "N", "O" и "T".

Гарантируется, что сумма \(|a|\) по всем тестовым примерам не превышает \(100000\).

Выходные данные

Для каждого набора входных данных выведите единственную строку \(b\). Если ответов несколько, вы можете вывести любой из них. \(b\) должна быть перестановкой строки \(a\).

Примечание

Для первого набора входных данных, телу Антона требуется \(7\) секунд, чтобы превратить NNOTA в ANTON:

NNOTA \(\to\) NNOAT \(\to\) NNAOT \(\to\) NANOT \(\to\) NANTO \(\to\) ANNTO \(\to\) ANTNO \(\to\) ANTON.

Обратите внимание, что нельзя вывести такие строки, как AANTON, ANTONTRYGUB, AAA и anton, так как они не являются перестановкой ANTON.

Для первого тестового случая телу Антона требуется \(2\) секунды, чтобы преобразовать AANN в NAAN. Обратите внимание, что другие строки, такие как NNAA и ANNA также будут приняты.

E. Игра в разделения

Бинарный поиск дп разделяй и властвуй Структуры данных *2500

Дан массив \(a\) из \(n\) целых чисел. Стоимость массива \(t\) вычисляется следующим образом:

\(\)cost(t) = \sum_{x \in set(t) } last(x) - first(x),\(\)

где \(set(t)\) есть множество всех различных значений в \(t\) без повторений, \(first(x)\), и \(last(x)\) индексы первого и последнего вхождения \(x\) в \(t\), соответственно. Другими словами, мы считаем сумму расстояний между первым и последним вхождением каждого значения.

Вам нужно разделить \(a\) на \(k\) последовательных отрезков так, что каждый элемент \(a\) принадлежит ровно одному отрезку, а сумма стоимостей отрезков минимальна.

Входные данные

Первая строка содержит целые числа \(n\), \(k\) (\(1 \le n \le 35\,000\), \(1 \le k \le \min(n,100)\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)).

Выходные данные

Выведите минимальную возможную сумму стоимостей.

Примечание

В первом примере мы можем разделить массив на \([1,6,6,4]\) и \([6,6,6]\). Стоимость \([1,6,6,4]\) будет \((1-1) + (3 - 2) + (4-4) = 1\), а стоимость \([6,6,6]\) будет \(3-1 = 2\). Суммарная стоимость будет \(1 + 2 = 3\).

Во втором примере разделим массив на \([5,5],[5],[5,2,3]\) и \([3]\). Суммарная стоимость будет \(1 + 0 + 0 + 0 = 1\).

C. Деревья примирения

Деревья жадные алгоритмы поиск в глубину и подобное Структуры данных *2300

У Soroush и Keshi есть по одному пронумерованному корневому дереву на \(n\) вершин. У обоих деревьев корнем является вершина \(1\).

Раньше Soroush и Keshi воевали. После бесконечных десятилетий борьбы они, наконец, стали союзниками, чтобы подготовить раунд Codeforces. Чтобы отметить это счастливое событие, они решили сделать памятный граф на \(n\) вершинах.

Они добавляют ребро между вершинами \(u\) и \(v\) в памятный граф, если выполняются оба из следующих условий:

  • Одна из вершин \(u\) и \(v\) является предком второй в дереве Soroush.
  • Ни одна из вершин \(u\) и \(v\) не является предком другой в дереве Keshi.

Здесь вершина \(u\) считается предком вершины \(v\), если \(u\) лежит на пути от \(1\) (корня) к \(v\).

Выскочивший из ниоткуда Mashtali попытался найти максимальную клику в памятном графе. Он потерпел неудачу, потому что граф был слишком большим.

Помогите Mashtali, найдя размер максимальной клики в памятном графе.

Напомним, что клика — это такое подмножество вершин графа, каждые две из которых соединены ребром.

Входные данные

Первая строка содержит целое число \(t\) \((1\le t\le 3 \cdot 10^5)\) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) \((2\le n\le 3 \cdot 10^5)\).

Вторая строка каждого набора входных данных содержит \(n-1\) целых чисел \(a_2, \ldots, a_n\) \((1 \le a_i < i)\), \(a_i\) — родитель вершины \(i\) в дереве Soroush.

Третья строка каждого набора входных данных содержит \(n-1\) целых чисел \(b_2, \ldots, b_n\) \((1 \le b_i < i)\), \(b_i\) — родитель вершины \(i\) в дереве Keshi.

Гарантируется, что заданные графы являются деревьями.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — размер максимальной клики в памятном графе.

Примечание

В первом и третьем наборах входных данных можно выбрать любую вершину.

Во втором наборе входных данных одна из максимальных клик — \(\{2, 3, 4, 5\}\).

В четвертом наборе входных данных одна из максимальных клик — \(\{3, 4, 6\}\).

H. Премия Тьюринга

дп Структуры данных *3400

Алан Тьюринг стоит на бесконечной в обе стороны ленте, разделённой на ячейки.

Ячейки пронумерованы слева направо подряд идущими целыми числами, а Алан изначально стоит в ячейке \(0\). Слева от любой ячейки \(x\) находится ячейка \(x - 1\), а справа — ячейка \(x + 1\).

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

Алану выдали перестановку \(a_1, a_2, \ldots, a_n\) чисел от \(1\) до \(n\), выбранную случайно равновероятно среди всех перестановок длины \(n\).

В момент времени \(1\) в ячейку \(0\), в которой находится Алан, записывается число \(a_1\).

В каждый момент времени \(i\) до \(2\) до \(n\) включительно происходит следующее. Сначала Алан принимает решение, остаться ли ему в той же ячейке, где он сейчас находится, сдвинуться на соседнюю ячейку слева, или же сдвинуться на соседнюю ячейку справа. После этого в ту ячейку, где находится Алан, записывается число \(a_i\). Если ячейка уже содержала некоторое число, старое число перезаписывается и больше не играет роли.

После того, как в момент времени \(n\) в некоторую ячейку будет записано число \(a_n\), сформируется последовательность \(b\) из всех чисел, записанных в ячейках, слева направо. Пустые ячейки игнорируются.

Премия Тьюринга будет равна длине наибольшей возрастающей подпоследовательности последовательности \(b\).

Помогите Алану и определите, каков максимальный возможный размер его премии, если он будет действовать оптимально.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Каждый набор входных данных задан на двух строках. Первая строка набора входных данных содержит целое число \(n\) (\(2 \le n \le 15\,000\)) — длину перестановки, предоставленной Алану.

Вторая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы перестановки.

Гарантируется, что перестановка была выбрана случайно равновероятно среди всех перестановок соответствующей длины.

Сумма значений \(n\) по всем наборам входных данных не превосходит \(15\,000\).

Выходные данные

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

Взломы в этой задаче запрещены.

Примечание

Наибольшая возрастающая подпоследовательность последовательности \(b\) — это самая длинная возрастающая последовательность, которую можно получить удалением нескольких (возможно, ни одного или всех) элементов из \(b\).

В первом наборе входных данных Алан может принять решение только в момент времени \(2\). Если Алан останется в ячейке \(0\), последовательность \(b\) будет равна \([2]\). Если Алан сдвинется влево, в ячейку \(-1\), последовательность \(b\) будет равна \([2, 1]\). Если Алан сдвинется вправо, в ячейку \(1\), последовательность \(b\) будет равна \([1, 2]\). Только в последнем случае длина наибольшей возрастающей подпоследовательности в \(b\) равна \(2\), следовательно, ответ равен \(2\).

Во втором наборе входных данных одна из оптимальных последовательностей действий такова: сдвинуться влево в моменты времени \(2\) и \(3\), и сдвинуться вправо в момент времени \(4\). Тогда последовательность \(b\) будет равна \([2, 3, 4]\), длина её наибольшей возрастающей подпоследовательности — \(3\).

В третьем наборе входных данных один из оптимальных способов — всё время сдвигаться влево. Тогда последовательность \(b\) будет равна \([2, 1, 4, 7, 5, 6, 3]\), длина её наибольшей возрастающей подпоследовательности — \(4\).

В четвёртом наборе входных данных один из оптимальных способов — четырежды сдвинуться вправо, далее один раз сдвинуться влево, и один раз остаться на месте. Последовательность \(b\) будет равна \([5, 2, 3, 4, 6]\).

C. Сладости

*особая задача реализация Структуры данных

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

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

Игра проходит по следующим правилам:

  • если на столе не осталось сладостей, которые нравятся Ане, то игра заканчивается;
  • в самом начале игры, если на столе есть хотя бы одна сладость, которую Аня хочет съесть, она съедает сладость под номером \(1\);
  • после того, как Аня съела какую-то сладость, она отсчитывает \(k\) сладостей по часовой стрелке, начиная со следующей сладости в круге, и съедает \(k\)-ю сладость в отсчете (если в круге меньше \(k\) сладостей, некоторые сладости могут поучаствовать в отсчете несколько раз, и Аня выбирает последнюю сладость в отсчете). Очевидно, уже съеденные сладости в отсчете не участвуют.

Например, пусть по кругу расположены \(6\) сладостей, сладости под номерами \(4\), \(5\) и \(6\) нравятся Ане, \(k = 4\). Тогда игра проходит следующим образом:

  1. изначально на столе расположены сладости \([1, 2, 3, 4, 5, 6]\), Аня выбирает сладость под номером \(1\).
  2. Аня съедает сладость \(1\), после этого на столе остаются сладости \([2, 3, 4, 5, 6]\). Аня отсчитывает \(4\) сладости, начиная со сладости \(2\), и останавливается на сладости \(5\).
  3. Аня съедает сладость \(5\), после этого на столе остаются сладости \([2, 3, 4, 6]\). Аня отсчитывает \(4\) сладости, начиная со сладости \(6\), и останавливается на сладости \(4\).
  4. Аня съедает сладость \(4\), после этого на столе остаются сладости \([2, 3, 6]\). Аня отсчитывает \(4\) сладости, начиная со сладости \(6\), и останавливается на сладости \(6\).
  5. Аня съедает сладость \(6\), после этого на столе остаются сладости \([2, 3]\). На столе не осталось сладостей, которые нравятся Ане, поэтому игра заканчивается.

Ваша задача — определить, сколько сладостей съест Аня.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 5000\)) — количество сладостей и параметр \(k\).

Следующая строка содержит строку \(s\), где \(s_i = 1\), если \(i\)-я сладость нравится Ане, и \(s_i = 0\) в противном случае.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — сколько сладостей съест Аня.

Примечание

Первый набор входных данных примера разобран в условии.

E. Укомплектование шахматной команды

*особая задача Бинарный поиск жадные алгоритмы Структуры данных

Поликарп готовит команду к предстоящей игре на шахматном турнире. Полная команда для турнира должна состоять из \(n+1\) участника.

В его команде \(n\) участников, у \(i\)-го уровень подготовки равен \(a_i\). Поликарпу предстоит выбрать последнего участника команды.

В команде соперника \(n+1\) участник, у \(j\)-го уровень подготовки равен \(b_j\).

У Поликарпа есть \(m\) вариантов выбора последнего участника. У \(k\)-го из них уровень подготовки равен \(c_k\).

До начала игры Поликарп ставит каждого игрока своей команды в пару с игроком команды соперника. Каждый игрок обеих команд состоит ровно в одной паре. Сложность игры для конкретного игрока — это разница между уровнем подготовки его соперника и его уровнем. То есть, если \(i\)-й игрок команды Поликарпа в паре с \(j\)-м игроком команды соперника, то сложность равна \(b_j - a_i\). Сложность игры для команды — это максимум по сложностям ее участников.

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

Для каждого из \(m\) вариантов последнего участника команды выведите наименьшую сложность игры, которую может получить Поликарп.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество игроков в команде Поликарпа.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — уровень подготовки \(i\)-го игрока команды Поликарпа.

В третьей строке записано \(n+1\) целое число \(b_1, b_2, \dots, b_{n+1}\) (\(1 \le b_j \le 10^9\)), где \(b_j\) — уровень подготовки \(j\)-го игрока команды соперника.

В четвертой строке записано одно целое число \(m\) (\(1 \le m \le 2 \cdot 10^5\)) — количество вариантов последнего игрока.

В пятой строке записаны \(m\) целых чисел \(c_1, c_2, \dots, c_m\) (\(1 \le c_k \le 10^9\)), где \(c_k\) — уровень подготовки \(k\)-го игрока среди вариантов для последнего участника команды Поликарпа.

Выходные данные

Выведите \(m\) целых чисел — \(k\)-е должно быть равно минимальной сложности игры, которую может получить Поликарп, если он выберет \(k\)-й вариант последнего игрока.

Примечание

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

Первый вариант:

Команда Поликарпа: 6 1 3 1 10 4

Команда соперника: 9 4 2 5  9 8

Соответствующие сложности игры для каждого игрока равны: 3, 3, -1, 4, -1, 4. Максимум равен 4, поэтому он является сложностью игры для команды.

Второй вариант:

Команда Поликарпа: 10 4 1 3 7 6

Команда соперника:  9 4 2 5 9 8

Третий вариант:

Команда Поликарпа: 6 3 1 4 10 6

Команда соперника: 9 4 2 5  9 8

H. Подматрицы

*особая задача битмаски дп Структуры данных

Вам дана матрица \(s\), содержащая \(n\) строк и \(m\) столбцов. Каждый элемент матрицы представляет собой одну из первых \(5\) латинских букв (в верхнем регистре).

Для каждого \(k\) (\(1 \le k \le 5\)) посчитайте количество подматриц, содержащих ровно \(k\) различных букв. Напомним, что подматрица матрицы \(s\) — это матрица, которую можно получить из \(s\) после удаления нескольких (возможно, нуля) первых строк, нескольких (возможно, нуля) последних строк, нескольких (возможно, нуля) первых столбцов и нескольких (возможно, нуля) последних столбцов. Если некоторая подматрица может быть получена из \(s\) двумя или более способами, вы должны учесть эту подматрицу соответствующее количество раз.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 800\)).

Затем следует \(n\) строк, каждая из которых содержит строку \(s_i\) (\(|s_i| = m\)) — \(i\)-я строка матрицы.

Выходные данные

Для каждого \(k\) (\(1 \le k \le 5\)) выведите одно целое число — количество подматриц, содержащих ровно \(k\) различных букв.

G. Новое начало

геометрия дп сортировки Структуры данных *3300

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

Участок Анни можно представить в виде бесконечной плоскости. Анни должна посадить \(n\) кустов картошки, \(i\)-й куст должен быть посажен в точке \((x_i,y_i)\). Анни начнет в точке \((0, 0)\), и за один шаг будет перемещаться на одну единицу длины вправо или вверх (т. е. увеличивать свою координату \(x\) или \(y\) на \(1\)). Из любой точки \((X,Y)\) в процессе движения она может посадить любое количество кустов в любых точках плоскости, используя свою картофельную пушку. Для посадки одного куста в точку \((x,y)\) требуется \(\max(|X-x|,|Y-y|)\) единиц энергии. Найдите минимальное количество энергии, необходимое для посадки всех кустов картошки.

Обратите внимание, что Анни может посадить любое количество кустов из любой точки.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 800\,000\)).

Следующие \(n\) строк содержат по два целых числа \(x_i\) и \(y_i\) (\(0 \le x_i,y_i \le 10^9\)), определяющие требуемое положение \(i\)-го куста картошки. Возможно, некоторые кусты картошки требуется посадить в одно и то же место.

Выходные данные

Выведите минимальное количество энергии, необходимое для посадки всей картошки.

Примечание

В примере \(1\) Анни может посетить все необходимые точки, поэтому энергия не требуется.

В примере \(2\) Анни сначала может пойти в \((1,0)\), посадить оттуда второй куст, используя \(1\) единицу энергии. Затем она пойдет в \((1,1)\) и посадит первый куст, используя \(0\) единиц энергии.

D. Плей-офф турнир

Деревья дп поиск в глубину и подобное реализация Структуры данных *1800

\(2^k\) команд участвуют в плей-офф турнире. Турнир состоит из \(2^k - 1\) игры. Они проводятся следующим образом: во-первых, команды делятся на пары: команда \(1\) играет против команды \(2\), команда \(3\) играет против команды \(4\) (именно в таком порядке) и так далее (таким образом, в этой фазе будет сыграно \(2^{k-1}\) игры). Когда команда проигрывает игру, она выбывает, и каждая игра приводит к выбыванию одной команды (нет ничьих). После этого остается \(2^{k-1}\) команд. Если остается только одна команда, она объявляется чемпионом; в противном случае играется еще \(2^{k-2}\) игр: в первой из них победитель игры «\(1\) против \(2\)» играет против победителя игры «\(3\) против \(4\)», затем победитель игры «\(5\) против \(6\)» играет против победителя игры «\(7\) против \(8\)» и так далее. Этот процесс повторяется до тех пор, пока не останется только одна команда.

Например, на этом рисунке описан хронологический порядок игр с \(k = 3\):

Пусть строка \(s\), состоящая из \(2^k - 1\) символов, описывает результаты игр в хронологическом порядке следующим образом:

  • если \(s_i\) равно 0, то команда с меньшим индексом выигрывает \(i\)-ю игру;
  • если \(s_i\) равно 1, то команда с большим индексом выигрывает \(i\)-ю игру;
  • если \(s_i\) равно ?, то результат \(i\)-й игры неизвестен (любая команда может выиграть эту игру).

Пусть \(f(s)\) — число возможных победителей турнира, описываемого строкой \(s\). Команда \(i\) является возможным победителем турнира, если можно заменить каждый ? на 1 или 0 таким образом, что команда \(i\) является чемпионом.

Вам дается начальное состояние строки \(s\). Вы должны обработать \(q\) запросов следующей формы:

  • \(p\) \(c\) — заменить \(s_p\) символом \(c\) и вывести \(f(s)\) в результате запроса.
Входные данные

Первая строка содержит одно целое число \(k\) (\(1 \le k \le 18\)).

Вторая строка содержит строку, состоящую из \(2^k - 1\) символов — начальное состояние строки \(s\). Каждый символ либо ?, 0, либо 1.

Третья строка содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

Затем следует \(q\) строк, строка \(i\) содержит целое число \(p\) и символ \(c\) (\(1 \le p \le 2^k - 1\); \(c\) - это либо ?, 0, либо 1), описывающие запрос \(i\).

Выходные данные

Для каждого запроса выведите одно целое число — \(f(s)\).

E. Поставки золота

Бинарный поиск Деревья дп жадные алгоритмы интерактив Структуры данных *2200

Вам задано корневое дерево. Каждая вершина дерева содержит \(a_i\) тонн золота, стоящее \(c_i\) за тонну. Первоначально, дерево состоит только из корня с номером \(0\), в котором \(a_0\) тонн золота с ценой \(c_0\) за тонну.

Всего есть \(q\) запросов. Каждый запрос одного из двух видов:

  1. Подвесить вершину \(i\) (где \(i\) — это номер запроса) за некоторую вершину \(p_i\); вершина \(i\) будет содержать \(a_i\) тонн золота с ценой \(c_i\) за тонну. Гарантируется, что \(c_i > c_{p_i}\).
  2. Для заданной вершины \(v_i\) рассмотрим простой путь от \(v_i\) к корню. Нам нужно приобрести \(w_i\) тонн золота из вершин на этом пути, потратив наименьшее количество денег. Если на этом пути недостаточно золота, мы покупаем все что можно.

Если мы покупаем \(x\) тон золота в некоторой вершине \(v\), то оставшееся количество золота в ней уменьшается на \(x\) (очевидно, мы не можем купить больше золота, чем есть в вершине на данный момент). Для каждого запроса второго вида посчитайте, сколько тонн золота мы купим в результате и сколько мы на это потратим.

Заметим, что вы должны решить данную задачу в онлайне. То есть вы не можете считать все входные данные заранее. Вы можете считать очередной запрос только после того как выведете ответ на предыдущий, поэтому не забывайте сбрасывать поток вывода после вывода ответа. Вы можете использовать такие функции как fflush(stdout) в C++, BufferedWriter.flush в Java или похожие после каждого вывода в программе. По стандарту (если вы не модифицировали I/O), endl сбрасывает cout в C++, а System.out.println в Java (или println в Kotlin) сбрасывают поток вывода автоматически.

Входные данные

В первой строке заданы три целых числа \(q\), \(a_0\) и \(c_0\) (\(1 \le q \le 3 \cdot 10^5\); \(1 \le a_0, c_0 < 10^6\)) — количество запросов, количество золота в корне и его цена за тонну.

В следующих \(q\) строках заданы описания запросов: \(i\)-й запрос имеет один из следующих видов:

  • «\(1\) \(p_i\) \(a_i\) \(c_i\)» (\(0 \le p_i < i\); \(1 \le a_i, c_i < 10^6\)): подвесить вершину \(i\) за вершину \(p_i\). Вершина \(i\) будет содержать \(a_i\) тонн золота по цене \(c_i\) за тонну. Гарантируется, что вершина \(p_i\) существует и \(c_i > c_{p_i}\).
  • «\(2\) \(v_i\) \(w_i\)» (\(0 \le v_i < i\); \(1 \le w_i < 10^6\)): приобрести \(w_i\) тонн золота из вершин на пути из \(v_i\) в \(0\), потратив минимальное количество денег. Если на пути золота недостаточно, мы покупаем все что есть. Гарантируется, что вершина \(v_i\) существует.

Гарантируется, что есть хотя бы один запрос второго типа.

Выходные данные

Для каждого запроса второго вида, выведите сколько тонн золота мы смогли купить и сколько на это потратили.

Примечание

Рассмотрим пример:

В первом запросе, дерево состоит только из корня, поэтому мы приобретаем \(2\) тонны золота и платим \(2 \cdot 2 = 4\). В корне осталось \(3\) тонны.

Во втором запросе, вы подвешиваем вершину \(2\) за вершину \(0\). В вершине \(2\) сейчас \(3\) тонны золота по цене \(4\) за тонну.

В третьем запросе, простой путь из \(2\) в \(0\) содержит только вершины \(0\) и \(2\), а так как \(c_0 < c_2\), мы покупаем оставшиеся \(3\) тонны золота в вершине \(0\) и \(1\) тонну в вершине \(2\). Таким образом, мы приобрели \(3 + 1 = 4\) тонны и заплатили \(3 \cdot 2 + 1 \cdot 4 = 10\). Теперь, вершина \(0\) осталась без золота, а вершине \(2\) осталось \(2\) тонны золота.

В четвертом запросе, мы подвешиваем вершину \(4\) за вершину \(0\). В вершине \(4\) сейчас \(1\) тонна золота по цене \(3\).

В пятом запросе, простой путь из \(4\) в \(0\) состоит только из вершин \(0\) и \(4\). Но так как в вершине \(0\) уже нет золота, а в вершине \(4\) только \(1\) тонна, то мы покупаем \(1\) тонну из вершины \(4\) и тратим \(1 \cdot 3 = 3\). Теперь в вершине \(4\) больше не осталось золота.

F. Расстояние между строками

Бинарный поиск Перебор реализация Строки Структуры данных хэши *3000

Предположим, вам даны две строки \(a\) и \(b\). Вы можете применить следующую операцию любое количество раз: выбрать любую непрерывную подстроку \(a\) или \(b\) и отсортировать символы в ней в порядке неубывания. Пусть \(f(a, b)\) — минимальное количество операций, которое необходимо применить, чтобы сделать строки равными (или \(f(a, b) = 1337\), если невозможно сделать \(a\) и \(b\) равными с помощью этих операций).

Например:

  • \(f(\text{ab}, \text{ab}) = 0\);
  • \(f(\text{ba}, \text{ab}) = 1\) (за одну операцию мы можем отсортировать всю первую строку);
  • \(f(\text{ebcda}, \text{ecdba}) = 1\) (за одну операцию мы можем отсортировать подстроку со \(2\)-го по \(4\)-й символ второй строки);
  • \(f(\text{a}, \text{b}) = 1337\).

Вам задано \(n\) строк \(s_1, s_2, \dots, s_k\) одинаковой длины. Вычислите \(\sum \limits_{i = 1}^{n} \sum\limits_{j = i + 1}^{n} f(s_i, s_j)\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество строк.

Затем следует \(n\) строк, каждая строка содержит одну из строк \(s_i\), состоящую из строчных латинских букв. \(|s_1| = |s_2| = \ldots = |s_n|\) и \(n \cdot |s_1| \le 2 \cdot 10^5\). Все заданные строки попарно различны.

Выходные данные

Выведите одно целое число: \(\sum \limits_{i = 1}^{n} \sum\limits_{j = i + 1}^{n} f(s_i, s_j)\).

C. Diluc и Kaeya

дп Структуры данных теория чисел хэши *1500

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

На этот раз братья имеют дело со странным куском дерева, помеченного их именами. Этот кусок дерева можно представить в виде строки из \(n\) символов. Каждый символ — это либо 'D', либо 'K'. Вы хотите сделать некоторое количество разрезов (возможно, \(0\)) в этой строке, разделив ее на несколько последовательных частей, каждая из которых имеет длину не менее \(1\). Оба брата ведут себя достойно, поэтому они хотят разделить дерево как можно более равномерно. Они хотят знать, на какое максимальное число кусков можно разделить дерево, чтобы отношение числа символов 'D' и числа символов 'K' в каждом куске было одинаковым.

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

Для строки мы определяем отношение как \(a:b\), где 'D' встречается в ней \(a\) раз, а 'K' встречается \(b\) раз. Обратите внимание, что \(a\) или \(b\) могут быть равны \(0\), но не оба. Отношения \(a:b\) и \(c:d\) считаются равными тогда и только тогда, когда \(a\cdot d = b\cdot c\).

Например, для строки 'DDD' отношение будет \(3:0\), для 'DKD'\(2:1\), для 'DKK'\(1:2\), а для 'KKKKDD'\(2:4\). Обратите внимание, что отношения двух последних строк равны между собой, но не равны отношениям первых двух строк.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 1000\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 5 \cdot 10^5\)) — длина дерева.

Вторая строка каждого набора входных данных содержит строку \(s\) длиной \(n\). Каждый символ \(s\) будет либо 'D', либо 'K'.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел через пробел. \(i\)-е из этих чисел должно быть равно ответу для префикса \(s_{1},s_{2},\dots,s_{i}\).

Примечание

Для первого набора входных данных нет способа разбить 'D' или 'DDK' на более чем один блок с равным отношением количеств 'D' и 'K', в то время как 'DD' можно разбить на 'D' и 'D'.

Для второго набора входных данных, каждый префикс длины \(i\) вы можете разделить на \(i\) блоков 'D'.

D. Омкар и медианы

жадные алгоритмы реализация Структуры данных *2000

О-о-о! Рэй снова потерял свой массив! Однако Омкар может помочь, потому что он думает, что нашел OmkArray массива Рэя. OmkArray массива \(a\) с элементами \(a_1, a_2, \ldots, a_{2k-1}\) — это массив \(b\) с элементами \(b_1, b_2, \ldots, b_{k}\) такой, что \(b_i\) равен медиане \(a_1, a_2, \ldots, a_{2i-1}\) для всех \(i\). Омкар нашел массив \(b\) размера \(n\) (\(1 \leq n \leq 2 \cdot 10^5\), \(-10^9 \leq b_i \leq 10^9\)). Для этого массива \(b\), Рэй хочет проверить утверждение Омкара и узнать, действительно ли \(b\) является OmkArray некоторого массива \(a\). Можете ли вы помочь Рэю?

Медиана набора чисел \(a_1, a_2, \ldots, a_{2i-1}\) — это число \(c_{i}\), где \(c_{1}, c_{2}, \ldots, c_{2i-1}\) представляют собой \(a_1, a_2, \ldots, a_{2i-1}\), отсортированные в неубывающем порядке.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длину массива \(b\).

Вторая строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(-10^9 \leq b_i \leq 10^9\)) — элементы \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую YES, если существует массив \(a\) такой, что \(b_i\) является медианой \(a_1, a_2, \dots, a_{2i-1}\) для всех \(i\), и NO в противном случае. Регистр букв в YES и NO не имеет значения (поэтому yEs и No также будут приняты).

Примечание

Во втором наборе входных данных первого примера массив \([4]\) даст OmkArray \([4]\), так как медиана первого элемента равна \(4\).

В четвертом наборе входных данных первого примера массив \([3, 2, 5]\) даст OmkArray \([3, 3]\), так как медиана \(3\) равна \(3\), а медиана \(2, 3, 5\) равна \(3\).

В пятом наборе входных данных первого примера массив \([2, 1, 0, 3, 4, 4, 3]\) даст OmkArray \([2, 1, 2, 3]\), так как

  • медиана \(2\) равна \(2\)
  • медиана \(0, 1, 2\) равна \(1\)
  • медиана \(0, 1, 2, 3, 4\) равна \(2\)
  • и медиана \(0, 1, 2, 3, 3, 4, 4\) равна \(3\).

Во втором наборе входных данных второй выборки массив \([1, 0, 4, 3, 5, -2, -2, -2, -4, -3, -4, -1, 5]\) даст OmkArray \([1, 1, 3, 1, 0, -2, -1]\), как

  • медиана \(1\) равна \(1\)
  • медиана из \(0, 1, 4\) равна \(1\)
  • медиана из \(0, 1, 3, 4, 5\) равна \(3\)
  • медиана \(-2, -1, 0, 1, 3, 4, 5\) равна \(1\)
  • медиана \(-4, -2, -2, -2, 0, 1, 3, 4, 5\) равна \(0\)
  • медиана \(-4, -4, -3, -2, -2, -2, 0, 1, 3, 4, 5\) равна \(-2\)
  • и медиана \(-4, -4, -3, -2, -2, -2, -1, 0, 1, 3, 4, 5, 5\) равна \(-1\)

Для всех случаев, когда ответ NO, можно доказать, что невозможно найти массив \(a\) такой, что \(b\) является Omkarray \(a\).

E2. Удаляй и удлиняй (сложная версия)

Бинарный поиск жадные алгоритмы Строки строковые суфф. структуры Структуры данных хэши *2200

Это сложная версия задачи. Единственное отличие — это ограничения на \(n\) и \(k\). Вы можете делать взломы, только если все версии задачи решены.

У вас есть строка \(s\), и вы можете выполнять над ней два типа операций:

  • Удалить последний символ строки.
  • Дублировать строку: \(s:=s+s\), где \(+\) обозначает конкатенацию.

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

Ваша задача — найти лексикографически наименьшую строку длины ровно \(k\), которую можно получить, выполнив эти операции над строкой \(s\).

Строка \(a\) лексикографически меньше строки \(b\) тогда и только тогда, когда выполняется одно из следующих условий:

  • \(a\) является префиксом \(b\), но \(a\ne b\);
  • В первой позиции, где \(a\) и \(b\) отличаются, строка \(a\) имеет букву, которая появляется раньше в алфавите, чем соответствующая буква в \(b\).
Входные данные

Первая строка содержит два целых числа \(n\), \(k\) (\(1 \leq n, k \leq 5\cdot 10^5\)) — длину исходной строки \(s\) и длину желаемой строки.

Вторая строка содержит строку \(s\), состоящую из \(n\) строчных английских букв.

Выходные данные

Выведите лексикографически наименьшую строку длины \(k\), которая может быть получена путем выполнения операций над строкой \(s\).

Примечание

В первом тесте оптимально сделать одно дублирование: «dbcadabc» \(\to\) «dbcadabcdbcadabc».

Во втором тесте оптимально удалить последние \(3\) символа, затем продублировать строку \(3\) раза, затем удалить последние \(3\) символов, чтобы строка имела длину \(k\).

«abcd» \(\to\) «abc» \(\to\) «ab» \(\to\) «a» \(\to\) «aa» \(\to\) «aaaa» \(\to\) «aaaa» \(\to\) «aaaa» \(\to\) «aaaa» \(\to\) «aaaa».

C. Количество пар

Бинарный поиск математика Структуры данных *1300

Вам задан массив \(a\), состоящий из \(n\) целых чисел. Найдите количество пар индексов \((i, j)\) (\(1 \le i < j \le n\)), для которых сумма \(a_i + a_j\) больше или равна \(l\) и меньше или равна \(r\) (то есть \(l \le a_i + a_j \le r\)).

Например, если \(n = 3\), \(a = [5, 1, 2]\), \(l = 4\) и \(r = 7\), то подходят две пары:

  • \(i=1\) и \(j=2\) (\(4 \le 5 + 1 \le 7\));
  • \(i=1\) и \(j=3\) (\(4 \le 5 + 2 \le 7\)).
Входные данные

В первой строке находится целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных находятся три целых числа \(n, l, r\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le l \le r \le 10^9\)) — количество чисел в массиве и ограничения на сумму в паре.

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество пар индексов \((i, j)\) (\(i < j\)), для которых \(l \le a_i + a_j \le r\).

E. Смешные подстроки

матрицы реализация Строки Структуры данных хэши *2100

Поликарп придумал новый язык программирования. В нем есть только два типа команд:

  1. «x := s» — назначить переменной с именем x значение s (где s - строка). Например, команда var := hello присваивает переменной с именем var значение hello. Обратите внимание, что s - это значение строки, а не имя переменной. Между названием переменной, оператором := и строкой находится ровно по одному пробелу.
  2. «x = a + b» — назначить переменной с именем x конкатенацию двух переменных a и b. Например, если программа состоит из трех команд a := hello, b := world, c = a + b, то переменная c будет содержать строку helloworld. Гарантируется, что программа корректна и переменные a и b были определены ранее. Между названиями переменных и операторами = и + находится ровно по одному пробелу.

Все имена переменных и строки состоят только из строчных букв английского алфавита и состоят не больше, чем из \(5\) символов.

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

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

Входные данные

В первой строке находится целое число \(t\) (\(1 \le t \le 10^3\)). Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных находятся одно целое число \(n\) — (\(1 \le n \le 50\)) — количество команд в программе. Все имена переменных и строки гарантированно состоят только из строчных букв английского алфавита и состоят не больше, чем из \(5\) символов.

Далее следуют \(n\) строк описывающих команды в формате из условия выше. Гарантируется, что программа корректна.

Выходные данные

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

Примечание

В первом наборе входных данных результат — значение переменной d=hhahahaha.

E. Игра с картами

Бинарный поиск дп жадные алгоритмы Конструктив реализация Структуры данных *2500

У Алисы сломался компьютер и теперь она не может играть в свою любимую карточную игру. Чтобы помочь Алисе, Боб решил помочь ей и ответить на \(n\) запросов.

Изначально в левой и правой руке Боб держит по одной карте с числом \(0\), записанным на этих картах. Во время выполнения \(i\)-го запроса Алиса предлагает Бобу заменить карту в правой или левой руке на карту с числом \(k_i\) (Боб выбирает, какую из карт заменить, Боб обязан заменить ровно одну карту).

После замены карты Алиса хочет, чтобы число на левой и правой картах принадлежали каким-то заданным отрезкам (отрезки для левой и правой карты могут быть различны). Формально, пусть число записанное на левой карте — \(x\), а на правой — \(y\). Тогда после замены карты на \(i\)-м запросе должно выполняться, что \(a_{l, i} \le x \le b_{l, i}\) и \(a_{r, i} \le y \le b_{r,i}\).

Скажите, сможет ли Боб ответить на все запросы, чтобы все условия удовлетворялись. Если ответить на все запросы возможно, то приведите способ это сделать.

Входные данные

В первой строке вводятся два целых числа \(n\) и \(m\) (\(2 \le n \le 100\,000\), \(2 \le m \le 10^9\)) — количество запросов и максимально возможное значение на карте.

Далее следует описание \(n\) запросов. Описание каждого запроса состоит из трех строк.

В первой строке описания \(i\)-го запроса вводится целое число \(k_i\) (\(0 \le k_i \le m\)) — число, записанное на новой карте.

Во второй строке описания \(i\)-го запроса вводятся два целых числа \(a_{l, i}\) и \(b_{l, i}\) (\(0 \le a_{l, i} \le b_{l, i} \le m\)) — минимальное и максимальное допустимые значения, записанные на карте в левой руке после замены.

Во третьей строке описания \(i\)-го запроса вводятся два целых числа \(a_{r, i}\) и \(b_{r,i}\) (\(0 \le a_{r, i} \le b_{r,i} \le m\)) — минимальное и максимальное допустимые значения, записанные на карте в правой руке после замены.

Выходные данные

В первой строке выведите «Yes», если Боб может ответить на все запросы, и «No» иначе.

Если Боб может ответить на все \(n\) запросов, то во второй строке выходных данных должны содержаться \(n\) чисел, соответствующих корректному способу ответить на все запросы. Если в ответ на \(i\)-й запрос Бобу нужно взять карту в левую руку, выведите \(0\), иначе выведите \(1\). Если существует несколько корректных способов ответить на запросы, то любой из них будет засчитан.

F. Необычный массив

жадные алгоритмы сортировки Структуры данных *2600

У Васи есть массив, состоящий из \(n\) чисел \(a_1, a_2, \ldots, a_n\). Каждое число в этом массиве Вася считает по-своему необычным. Чтобы вычислить необычность числа на позиции \(i\), Вася делает следующее:

Он выбирает подотрезок \(a_l, a_{l+1}, \ldots, a_r\) такой, что \(1 \le l \le i \le r \le n\) и мысленно сортирует его по возрастанию (равные элементы он может переставлять так, как ему хочется). Далее на этом подотрезке он находит центр. Центром подотрезка называется элемент на позиции \((l + r) / 2\), если длина отрезка нечётна, или элемент на позиции \((l + r + 1) / 2\), если длина отрезка чётна. Теперь Вася находит на этом подотрезеке элемент, который до сортировки стоял на позиции \(i\), и смотрит на расстояние от этого элемента до центра подотрезка (расстояние между элементами с индексами \(j\) и \(k\) равняется \(|j - k|\)).

Необычностью числа на позиции \(i\) называется максимальное такое расстояние среди всех подходящих выборов \(l\) и \(r\).

Вася хочет посчитать необычность каждого числа в своём массиве. Помогите ему это сделать.

Входные данные

В первой строке входных данных находится одно целое число \(n\) (\(1 \le n \le 200\,000\)) — размер массива.

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — сам массив.

Выходные данные

В единственной строке выведите \(n\) чисел, \(i\)-е из них должно быть равно необычности элемента на позиции \(i\) массива.

Примечание

В первом примере:

  1. Для первой позиции подойдёт отрезок от позиции \(1\) до позиции \(5\). Если его отсортировать, то числа упорядочатся по значению как \([1, 2, 3, 4, 5]\), центр будет равен \(3\), таким образом расстояние от центра до числа \(5\) равно \(2\).
  2. Для второй позиции подойдёт отрезок от позиции \(2\) до позиции \(4\).
  3. Для третей позиции подойдёт отрезок от позиции \(3\) до позиции \(5\).
  4. Для четвёртой позиции подойдёт отрезок от позиции \(1\) до позиции \(4\). Если его отсортировать, то числа упорядочатся по значению как \([2, 3, 4, 5]\), центр будет равен \(4\), таким образом расстояние от центра до числа \(2\) равно \(2\).
  5. Для пятой позиции подойдёт отрезок от позиции \(1\) до позиции \(5\).

D. Инвертируем инверсии

Бинарный поиск Перебор Структуры данных *3200

Вы играли со своей перестановкой \(p\) длины \(n\), но потеряли ее в Блэр, штат Алабама!

К счастью, вы помните некоторую информацию о перестановке. А точнее, вы помните массив \(b\) длины \(n\), где \(b_i\) — это количество индексов \(j\) таких, что \(j < i\) и \(p_j > p_i\).

У вас есть массив \(b\), и вы хотите восстановить перестановку \(p\). Однако ваша память не идеальна, и вы постоянно меняете значения массива \(b\), как вспоминаете что-то еще. В следующие \(q\) секунд каждую секунду происходит одно из следующего:

  1. \(1\) \(i\) \(x\) — вы вспоминаете, что \(b_i\) равно \(x\);
  2. \(2\) \(i\) — вам нужно определить значение элемента \(p_i\). Если существует более одного ответа, выведите любой. Можно доказать, что при данных ограничениях всегда найдется хотя бы одна перестановка.

Отвечайте на запросы, и вы сможете вспомнить массив!

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — размер перестановки.

Во второй строке заданы \(n\) целых чисел \(b_1, b_2 \ldots, b_n\) (\(0 \leq b_i < i\)) — то, как вы помнили массив \(b\) сначала.

В третьей строке задано одно целое число \(q\) (\(1 \leq q \leq 10^5\)) — количество запросов.

В следующих \(q\) строках заданы сами запросы, каждый одного из следующих видов:

  • \(1\) \(i\) \(x\) (\(0 \leq x < i \leq n\)) описывает запрос вида \(1\);
  • \(2\) \(i\) (\(1 \leq i \leq n\)), описывает запрос вида \(2\).

Гарантируется, что есть хотя бы один запрос вида \(2\).

Выходные данные

На каждый запрос вида \(2\) выведите одно число — ответ на заданный запрос.

Примечание

В первом примере первоначально есть ровно одна перестановка, удовлетворяющая условиям: \([1, 2, 3]\), так как должна содержать \(0\) инверсий.

После запроса вида \(1\) массив \(b\) становится равен \([0, 1, 0]\). Единственная перестановка \(p\), порождающая данный массив — это \([2, 1, 3]\). В этой перестановке \(b_2\) равен \(1\), так как \(p_1 > p_2\).

E1. AquaMoon и остановка времени (простая версия)

дп Структуры данных *3500

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

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

Пешеходная улица может быть представлена как координатная прямая. Есть один человек, который передвигается по ней. В момент времени \(0\) он находится в координате \(x\), двигаясь со скоростью \(1\) координата в секунду. В частности, в момент времени \(i\) человек будет в координате \(x+i\).

Призраки собираются совершить \(n\) нападений на улицу. \(i\)-е нападение будет длиться с момента времени \(tl_i-1+10^{-18}\) до момента времени \(tr_i+1-10^{-18}\) (не включительно) и будет убивать людей с координатами от \(l_i-1+10^{-18}\) до \(r_i+1-10^{-18}\) (не включительно). Формально это означает, что человек, чья координата находится в интервале \((l_i-1+10^{-18},r_i+1-10^{-18})\) в любой из моментов времени из интервала \((tl_i-1+10^{-18},tr_i+1-10^{-18})\) умрет.

Чтобы спасти человека на улице, AquaMoon может остановить время в любой момент времени \(t\) и затем переместить человека из его текущей координаты \(x\) в любую координату \(y\) (\(t\), \(x\) и \(y\) не обязательно целые числа). Это перемещение будет стоить для AquaMoon \(|x-y|\) энергии. Перемещение является непрерывным, поэтому если существует координата под нападением между координатами \(x\) и \(y\) в момент времени \(t\), человек также умрет.

AquaMoon хочет узнать какое минимальное количество энергии она должна потратить, чтобы спасти человека на улице от всех \(n\) нападений. Она не очень хороша в программировании. Как ее друг, можете ли вы помочь ей?

Входные данные

В первой строке находится единственное целое число \(n\) (\(1\le n\le 2000\)) — количество нападений.

В следующей строке находится единственное целое число \(x\) (\(1\le x\le 10^6\)) — изначальная координата человека.

В следующих \(n\) строках содержится по четыре целых числа \(tl_i\), \(tr_i\), \(l_i\), \(r_i\) (\(1\le tl_i\le tr_i\le 10^6\), \(1\le l_i\le r_i\le 10^6\)).

Выходные данные

Выведите единственное целое число — минимальное количество энергии, которое AquaMoon должна потратить, округленное до ближайшего целого числа (если есть два ближайших целых числа вы должны округлить ответ до наибольшего из них).

E2. AquaMoon и остановка времени (сложная версия)

дп Структуры данных *3500

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

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

Пешеходная улица может быть представлена как координатная прямая. Есть один человек, который передвигается по ней. В момент времени \(0\) он находится в координате \(x\), двигаясь со скоростью \(1\) координата в секунду. В частности, в момент времени \(i\) человек будет в координате \(x+i\).

Призраки собираются совершить \(n\) нападений на улицу. \(i\)-е нападение будет длиться с момента времени \(tl_i-1+10^{-18}\) до момента времени \(tr_i+1-10^{-18}\) (не включительно) и будет убивать людей с координатами от \(l_i-1+10^{-18}\) до \(r_i+1-10^{-18}\) (не включительно). Формально это означает, что человек, чья координата находится в интервале \((l_i-1+10^{-18},r_i+1-10^{-18})\) в любой из моментов времени из интервала \((tl_i-1+10^{-18},tr_i+1-10^{-18})\) умрет.

Чтобы спасти человека на улице, AquaMoon может остановить время в любой момент времени \(t\) и затем переместить человека из его текущей координаты \(x\) в любую координату \(y\) (\(t\), \(x\) и \(y\) не обязательно целые числа). Это перемещение будет стоить для AquaMoon \(|x-y|\) энергии. Перемещение является непрерывным, поэтому если существует координата под нападением между координатами \(x\) и \(y\) в момент времени \(t\), человек также умрет.

AquaMoon хочет узнать какое минимальное количество энергии она должна потратить, чтобы спасти человека на улице от всех \(n\) нападений. Она не очень хороша в программировании. Как ее друг, можете ли вы помочь ей?

Входные данные

В первой строке находится единственное целое число \(n\) (\(1\le n\le 2 \cdot 10^5\)) — количество нападений.

В следующей строке находится единственное целое число \(x\) (\(1\le x\le 10^6\)) — изначальная координата человека.

В следующих \(n\) строках содержится по четыре целых числа \(tl_i\), \(tr_i\), \(l_i\), \(r_i\) (\(1\le tl_i\le tr_i\le 10^6\), \(1\le l_i\le r_i\le 10^6\)).

Выходные данные

Выведите единственное целое число — минимальное количество энергии, которое AquaMoon должна потратить, округленное до ближайшего целого числа (если есть два ближайших целых числа вы должны округлить ответ до наибольшего из них).

F. AquaMoon и картофель

дп Перебор Структуры данных *3500

У AquaMoon есть три массива \(a\), \(b\), \(c\) длины \(n\), состоящие из целых чисел. Выполнено, что \(1 \leq a_i, b_i, c_i \leq n\) для всех \(i\).

Чтобы ускорить выращивание картофеля, она организует свою ферму, основываясь на этих трех массивах. Сейчас она хочет выполнить \(m\) операций, чтобы посчитать сколько картофелин она получит. Каждая операция будет иметь один из двух типов:

  1. AquaMoon реорганизует ферму и делает \(k\)-й элемент массива \(a\) равным \(x\). Другими словами, она выполняет присваивание \(a_k := x\).
  2. Дано положительное целое число \(r\). AquaMoon получает картофелину за каждую тройку \((i,j,k)\), такую что \(1\le i<j<k\le r\) и \(b_{a_i}=a_j=c_{a_k}\). Посчитайте количество таких троек.

Поскольку AquaMoon очень занята поиском библиотеки, помогите ей выполнить все операции.

Входные данные

В первой строке находится два целых числа \(n\), \(m\) (\(1\le n\le 2\cdot10^5\), \(1\le m\le 5\cdot10^4\)).

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \dots,a_n\) (\(1\le a_i\le n\)).

В третьей строке находится \(n\) целых чисел \(b_1, b_2, \dots,b_n\) (\(1\le b_i\le n\)).

В четвертой строке находится \(n\) целых чисел \(c_1, c_2, \dots,c_n\) (\(1\le c_i\le n\)).

Следующие \(m\) строк описывают операции, \(i\)-я строка описывает \(i\)-ю операцию в одном из двух форматов:

  • "\(1\ k\ x\)" (\(1\le k,x\le n\)) для операции первого типа.
  • "\(2\ r\)" (\(1\le r\le n\)) для операции второго типа.

Гарантируется, что существует хотя бы одна операция второго типа.

Выходные данные

Для каждой операции второго типа выведите ответ.

Примечание

Для первой операции все подходящие тройки:

  • \(i=1\), \(j=2\), \(k=3\)
  • \(i=2\), \(j=3\), \(k=4\)
  • \(i=3\), \(j=4\), \(k=5\)

Не существует подходящих троек для третьей операции.

Для четвертой операции все подходящие тройки:

  • \(i=2\), \(j=4\), \(k=5\)
  • \(i=3\), \(j=4\), \(k=5\)

E. Кондиционеры

дп кратчайшие пути реализация сортировки Структуры данных *1500

На клетчатой полоске длины \(n\) расположены \(k\) кондиционеров: \(i\)-й кондиционер расположен в клетке \(a_i\) (\(1 \le a_i \le n\)). Два или более кондиционера не могут находиться в одной клетке (то есть все \(a_i\) различны).

Каждый кондиционер характеризуется еще одним параметром — температурой: \(i\)-й кондиционер включен на температуру \(t_i\).

Пример полосы длины \(n=6\), где \(k=2\), \(a=[2,5]\) и \(t=[14,16]\).

Для каждой клетки \(i\) (\(1 \le i \le n\)) найдите температуру воздуха в ней, которая равна \(\)\min_{1 \le j \le k}(t_j + |a_j - i|),\(\)

где \(|a_j - i|\) обозначает абсолютную величину (модуль) значения разности \(a_j - i\).

Иными словами, температура в клетке \(i\) равна минимуму среди температур кондиционеров, увеличенных на расстояние от кондиционера до клетки \(i\).

Рассмотрим пример. Пусть \(n=6, k=2\), первый кондиционер стоит в клетке \(a_1=2\) включен на температуру \(t_1=14\), а второй стоит в клетке \(a_2=5\) и включен на температуру \(t_2=16\). В таком случае температуры воздуха в клетках будут следующими:

  1. температура в \(1\)-й клетке равна: \(\min(14 + |2 - 1|, 16 + |5 - 1|)=\min(14 + 1, 16 + 4)=\min(15, 20)=15\);
  2. температура во \(2\)-й клетке равна: \(\min(14 + |2 - 2|, 16 + |5 - 2|)=\min(14 + 0, 16 + 3)=\min(14, 19)=14\);
  3. температура в \(3\)-й клетке равна: \(\min(14 + |2 - 3|, 16 + |5 - 3|)=\min(14 + 1, 16 + 2)=\min(15, 18)=15\);
  4. температура в \(4\)-й клетке равна: \(\min(14 + |2 - 4|, 16 + |5 - 4|)=\min(14 + 2, 16 + 1)=\min(16, 17)=16\);
  5. температура в \(5\)-й клетке равна: \(\min(14 + |2 - 5|, 16 + |5 - 5|)=\min(14 + 3, 16 + 0)=\min(17, 16)=16\);
  6. температура в \(6\)-й клетке равна: \(\min(14 + |2 - 6|, 16 + |5 - 6|)=\min(14 + 4, 16 + 1)=\min(18, 17)=17\).

Для каждой клетки от \(1\) до \(n\) найдите температуру воздуха в ней.

Входные данные

В первой строке задано целое число \(q\) (\(1 \le q \le 10^4\)) — количество наборов входных данных в тесте. Далее следуют наборы входных данных. Перед каждым набором входных данных записана пустая строка.

Каждый набор входных данный состоит из трех строк. В первой строке заданы два целых числа \(n\) (\(1 \le n \le 3 \cdot 10^5\)) и \(k\) (\(1 \le k \le n\)) — длина клетчатой полоски и количество кондиционеров соответственно.

Вторая строка содержит \(k\) целых чисел \(a_1, a_2, \ldots, a_k\) (\(1 \le a_i \le n\)) — позиции кондиционеров на клетчатой полоске.

Третья строка содержит \(k\) целых чисел \(t_1, t_2, \ldots, t_k\) (\(1 \le t_i \le 10^9\)) — температуры кондиционеров.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите через пробел \(n\) целых чисел — температуры воздуха в клетках.

F. Стабилизируй массив (НОД-версия)

Бинарный поиск Перебор разделяй и властвуй Структуры данных теория чисел *1900

Задан массив из положительных целых чисел \(a = [a_0, a_1, \dots, a_{n - 1}]\) (\(n \ge 2\)).

За один шаг массив \(a\) заменяется на другой массив длины \(n\), в котором каждый элемент это наибольший общий делитель (НОД) двух соседних элементов (самого элемента и его правого соседа; считайте, что правый сосед \((n - 1)\)-го элемента это \(0\)-й элемент).

Формально говоря, по массиву \(a = [a_0, a_1, \dots, a_{n - 1}]\) строится новый массив \(b = [b_0, b_1, \dots, b_{n - 1}]\) такой, что \(b_i\) \(= \gcd(a_i, a_{(i + 1) \mod n})\), где \(\gcd(x, y)\) — это наибольший общий делитель \(x\) и \(y\), а \(x \mod y\) — это остаток от деления \(x\) на \(y\). За один шаг строится массив \(b\), а затем массив \(a\) заменяется массивом \(b\) (то есть осуществляется присваивание \(a\) := \(b\)).

Например, если \(a = [16, 24, 10, 5]\), то \(b = [\gcd(16, 24)\), \(\gcd(24, 10)\), \(\gcd(10, 5)\), \(\gcd(5, 16)]\) \(= [8, 2, 5, 1]\). Таким образом, массив \(a = [16, 24, 10, 5]\) после одного шага станет равен \([8, 2, 5, 1]\).

Для заданного массива \(a\) найдите минимальное количество шагов, после которых все значения \(a_i\) станут равными (то есть \(a_0 = a_1 = \dots = a_{n - 1}\)). Если изначально массив \(a\) уже состоял из одинаковых элементов, то считайте, что количество шагов равно \(0\).

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте. Далее записаны \(t\) наборов входных данных.

Каждый набор состоит из двух строк. В первой строке содержится целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длина массива \(a\). Вторая строка содержит \(n\) целых чисел \(a_0, a_1, \dots, a_{n - 1}\) (\(1 \le a_i \le 10^6\)).

Сумма значений \(n\) по всем наборам входных данных теста не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) чисел — ответы на наборы входных данных теста.

B. У чисел есть друзья

Бинарный поиск математика разделяй и властвуй Структуры данных теория чисел *1800

Британский математик Джон Литлвуд однажды высказался об индийском математике Сринивасе Рамануджане: «каждое натуральное число было его личным другом».

Оказывается, натуральные числа могут также дружить друг с другом! Вам дан массив \(a\) из различных натуральных чисел.

Будем называть подмассив \(a_i, a_{i+1}, \ldots, a_j\) группой друзей тогда и только тогда, когда существует целое число \(m \ge 2\) такое, что \(a_i \bmod m = a_{i+1} \bmod m = \ldots = a_j \bmod m\), где \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\).

Ваш друг Грегор хочет знать размер наибольшей группы друзей в \(a\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 2\cdot 10^4\)).

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) – размера массива \(a\).

Вторая строка набора содержит \(n\) натуральных чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le {10}^{18}\)) – содержимое массива \(a\). Гарантируется, что все числа в \(a\) различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных меньше \(2\cdot 10^5\).

Выходные данные

Ваш вывод должен состоять из \(t\) строк. Каждая строка должна содержать одно целое число — размер наибольшей группы друзей из \(a\).

Примечание

В первом наборе массив равен \([1,5,2,4,6]\). Наибольшая группа друзей здесь \([2,4,6]\), потому что все эти числа сравнимы с \(0\) по модулю \(2\), таким образом \(m=2\).

В первом наборе массив равен \([8,2,5,10]\). Наибольшая группа друзей здесь \([8,2,5]\), потому что все эти числа сравнимы с \(2\) по модулю \(3\), таким образом \(m=3\).

В третьем наборе наибольшая группа друзей равна \([1000,2000]\). Существует несколько возможных подходящих значений \(m\).

E. Грегор и два маляра

графы жадные алгоритмы математика разделяй и властвуй Структуры данных *3400

Два маляра, Амин и Бенджи, перекрашивают потолок в гостиной Грегора! Потолок можно представить как таблицу размера \(n \times m\).

Для каждого \(i\) от \(1\) до \(n\) включительно маляр Амин нанес \(a_i\) слоев краски на весь \(i\)-й ряд. Для каждого \(j\) от \(1\) до \(m\) включительно маляр Бенджи нанес \(b_j\) слоев краски на весь \(j\)-й столбец. Таким образом, клетка \((i,j)\) оказалась покрашенной в \(a_i+b_j\) слоев краски.

Грегор считает, что клетка \((i,j)\) плохо покрашена, если \(a_i+b_j \le x\). Определим плохо покрашенную область как максимальную по включению связную компоненту плохо покрашенных клеток, то есть такую связную компоненту плохо покрашенных клеток, что все клетки, соседние с этой компонентой, не являются плохо покрашенными. Две клетки являются соседними, если они имеют общую сторону.

Грегор потрясен состоянием потолка, покрашенного малярами, и хочет знать количество плохо покрашенных областей.

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(x\) (\(1 \le n,m \le 2\cdot 10^5\), \(1 \le x \le 2\cdot 10^5\)) — размеры потолка Грегора и максимальное количество слоев краски в плохо покрашенной клетке.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 2\cdot 10^5\)) — количество слоев краски, которое Амин наносит на каждый ряд.

Третья строка содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \le b_j \le 2\cdot 10^5\)) — количество слоев краски, которое Бенджи наносит на каждый столбец.

Выходные данные

Выведите одно целое число — количество плохо покрашенных областей.

Примечание

Рисунок ниже иллюстрирует первый пример. Числа слева от каждого ряда представляют собой список \(a\), а числа над каждым столбцом — список \(b\). Числа внутри каждой клетки равны количеству слоев краски в этой клетке.

Цветные клетки соответствуют плохо покрашенным клеткам. Красные и синие клетки соответственно образуют \(2\) плохо покрашенных области.

F. Попрыгунчик

Бинарный поиск графы дп кратчайшие пути разделяй и властвуй снм Структуры данных *2700

Представьте себе бесконечный пруд, спроецированный на числовую прямую. В пруду есть \(n\) камней, пронумерованных от \(1\) до \(n\). \(i\)-й камень находится в целой координате \(a_i\). Координаты камней попарно различны. Камни пронумерованы в порядке увеличения координаты, поэтому \(a_1 < a_2 < \dots < a_n\).

Лягушка-робот сидит на камне номер \(s\). Лягушку можно запрограммировать. У нее есть встроенный параметр базовой длины прыжка \(d\). Также есть настройка для интервала длины прыжка. Если интервал длины прыжка выставляется на некоторое целое значение \(k\), то лягушка может прыгать с некоторого камня на любой другой камень на расстоянии от \(d - k\) до \(d + k\) включительно в любом направлении. Расстояние между двумя камнями — это модуль разности между их координатами.

Вам поручили задачу реализовать новую функцию для лягушки. По двум заданным целым числам \(i\) и \(k\) определить, может ли лягушка достичь камня номер \(i\) с камня номер \(s\), осуществив последовательность прыжков с интервалом длины прыжка установленным на \(k\). Последовательность может быть сколь угодно длинной или пустой.

Вам будет предоставлено \(q\) тестов для данной функции, \(j\)-й набор состоит из двух целых чисел \(i\) и \(k\). Выведите «Yes», если \(i\)-й камень достижим и «No» в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Входные данные

В первой строке записаны четыре целых числа \(n\), \(q\), \(s\) и \(d\) (\(1 \le n, q \le 2 \cdot 10^5\); \(1 \le s \le n\); \(1 \le d \le 10^6\)) — количество камней, количество тестов, начальный камень и базовая длина прыжка.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — координаты камней. Координаты камней попарно различны. Камни пронумерованы в порядке увеличения координаты, поэтому \(a_1 < a_2 < \dots < a_n\).

В каждой из следующих \(q\) строк записаны два целых числа \(i\) и \(k\) (\(1 \le i \le n\); \(1 \le k \le 10^6\)) — параметры теста.

Выходные данные

На каждый тест выведите ответ. Если существует такая последовательность прыжков с камня номер \(s\) до камня номер \(i\) с интервалом длины прыжка установленным на \(k\), то выведите «Yes». В противном случае выведите «No».

Примечание

Пояснение к первому примеру:

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

Во втором тесте лягушка может прыгать на любую длину в отрезке \([5 - 2; 5 + 2]\). Поэтому она может достичь камня номер \(5\) (прыжком на \(7\) направо) и камня номер \(3\) (прыжком на \(3\) налево). С камня номер \(3\) она может достичь камня номер \(2\) (прыжком на \(5\) налево). С камня номер \(2\) она может достичь камня номер \(1\) (прыжком на \(4\) налево). Однако, нет способа достичь камня номер \(7\).

В третьем тесте лягушка может прыгать на любую длину в отрезке \([5 - 3; 5 + 3]\). Поэтому она может достичь камня номер \(7\), прыгнув сначала на камень номер \(5\), а с него на \(7\).

Четвертый тест показан в описании ко второму тесту.

B2. Чудесная раскраска - 2

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *1400

Эта задача является продолжением задачи «Чудесная раскраска - 1». Она имеет довольно много отличий, поэтому прочтите это условие полностью.

Совсем недавно у Паши и Маши появилась любимая последовательность чисел \(a_1, a_2, \dots, a_n\). Они захотели и её раскрасить с помощью мелков \(k\) цветов. Раскраска последовательности называется чудесной, если выполняются следующие условия:

  1. каждый элемент последовательности раскрашивается ровно в один из \(k\) цветов, либо не раскрашивается вовсе;
  2. любые два элемента, раскрашенные в один цвет, различны (то есть нет двух одинаковых значений, которые раскрашены в один цвет);
  3. посчитаем для каждого из \(k\) цветов количество элементов, раскрашенных этот цвет — все полученные количества должны быть равны;
  4. суммарное количество раскрашенных элементов при соблюдении первых трёх условий максимально возможно.

Например, пусть последовательность имеет вид \(a=[3, 1, 1, 1, 1, 10, 3, 10, 10, 2]\) и \(k=3\). Одна из чудесных раскрасок изображена на рисунке.

Пример возможной чудесной раскраски для \(a=[3, 1, 1, 1, 1, 10, 3, 10, 10, 2]\) и \(k=3\). Обратите внимание, что один из элементов остался нераскрашенным.

Помогите Паше и Маше найти чудесную раскраску заданной последовательности \(a\).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10000\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая из них содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2\cdot10^5\), \(1 \le k \le n\)) — длину заданной последовательности и количество цветов. Вторая из них содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных теста не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, каждая строка содержит описание возможной чудесной раскраски для соответствующего набора входных данных.

Каждая чудесная раскраска должна быть выведена в виде \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(0 \le c_i \le k\)), где:

  • \(c_i=0\), если \(i\)-й элемент не раскрашен в какой-либо цвет;
  • \(c_i>0\), если \(i\)-й элемент раскрашен в цвет с номером \(c_i\).

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

Примечание

В первом наборе входных данных примера ответ соответствует картинке в условии. Красный цвет имеет номер \(1\), синий имеет номер \(2\), зелёный — номер \(3\).

E. Цвета и отрезки

жадные алгоритмы Конструктив сортировки Структуры данных *2300

Числа \(1, \, 2, \, \dots, \, n \cdot k\) окрашены в \(n\) цветов. Эти цвета обозначены \(1, \, 2, \, \dots, \, n\). Для каждого \(1 \le i \le n\) существует ровно \(k\) чисел, окрашенных в цвет \(i\).

Пусть \([a, \, b]\) обозначает отрезок целых чисел от \(a\) до \(b\) включительно, то есть множество \(\{a, \, a + 1, \, \dots, \, b\}\). Вы должны выбрать \(n\) отрезков \([a_1, \, b_1], \, [a_2, \, b_2], \, \dots, [a_n, \, b_n]\) таких, что:

  • для каждого \(1 \le i \le n\) имеет место \(1 \le a_i < b_i \le n \cdot k\);
  • для каждого \(1 \le i \le n\), числа \(a_i\) и \(b_i\) окрашены цветом \(i\);
  • каждое число \(1 \le x \le n \cdot k\) принадлежит не более чем \(\left\lceil \frac{n}{k - 1} \right\rceil\) отрезкам.

Можно показать, что такое семейство отрезков всегда существует при заданных ограничениях.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 100\), \(2 \le k \le 100\)) — количество цветов и количество вхождений каждого цвета.

Вторая строка содержит \(n \cdot k\) целых чисел \(c_1, \, c_2, \, \dots, \, c_{nk}\) (\(1 \le c_j \le n\)), где \(c_j\) — цвет числа \(j\). Гарантируется, что для каждого \(1 \le i \le n\) \(c_j = i\) имеет место для ровно \(k\) различных индексов \(j\).

Выходные данные

Выведите \(n\) строк. В \(i\)-й строке должны содержаться два целых числа \(a_i\) и \(b_i\).

Если существует несколько допустимых вариантов выбрать отрезки, выведите любой.

Примечание

В первой выборке каждое число может содержаться не более чем в \(\left\lceil \frac{4}{3 - 1} \right\rceil = 2\) отрезках. Вывод описывается следующим рисунком:

Во втором примере единственным отрезком, который можно выбрать, является \([1, \, 2]\), и каждое число действительно содержится не более чем в \(\left\lceil \frac{1}{2 - 1} \right\rceil = 1\) отрезках.

В третьем примере, каждое число может содержаться не более чем в \(\left\lceil \frac{3}{3 - 1} \right\rceil = 2\) отрезках. Вывод описывается следующим рисунком:

F. Муравьепортация

Бинарный поиск дп сортировки Структуры данных *2200

Муравей движется по действительной прямой с постоянной скоростью в \(1\) единицу в секунду. Он начинает движение в точке \(0\) и всегда движется вправо (поэтому его позиция увеличивается на \(1\) каждую секунду).

Существует \(n\) порталов, \(i\)-й из которых находится в позиции \(x_i\) и телепортирует в позицию \(y_i < x_i\). Каждый портал может быть либо активным, либо неактивным. Начальное состояние \(i\)-го портала определяется \(s_i\): если \(s_i=0\), то \(i\)-й портал изначально неактивен, если \(s_i=1\), то \(i\)-й портал изначально активен. Когда муравей проходит через портал (т.е., когда его положение совпадает с положением портала):

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

Сколько времени (с момента начала движения) потребуется муравью, чтобы достичь позиции \(x_n + 1\)? Можно показать, что это произойдет за конечное время. Поскольку ответ может быть очень большим, вычислите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит целое число \(n\) (\(1\le n\le 2\cdot 10^5\)) — количество порталов.

В \(i\)-й из следующих \(n\) строк содержится три целых числа \(x_i\), \(y_i\) и \(s_i\) (\(1\le y_i < x_i\le 10^9\), \(s_i\in\{0,1\}\)) — положение \(i\)-го портала, положение, куда телепортируется муравей, когда он проходит через \(i\)-й портал (если он активен), и начальное состояние \(i\)-го портала.

Позиции порталов строго возрастают, то есть \(x_1<x_2<\cdots<x_n\). Гарантируется, что \(2n\) целых чисел \(x_1, \, x_2, \, \dots, \, x_n, \, y_1, \, y_2, \, \dots, \, y_n\) попарно различны.

Выходные данные

Выведите количество времени в секундах, которое пройдет с момента начала движения муравья до момента достижения им позиции \(x_n+1\). Поскольку ответ может быть очень большим, выведите его по модулю \(998\,244\,353\).

Примечание

Объяснение первого примера: Муравей перемещается следующим образом (кривая стрелка обозначает телепортацию, прямая стрелка обозначает обычное движение со скоростью \(1\), а время, затраченное на движение, написано над стрелкой). \(\) 0 \stackrel{6}{\longrightarrow} 6 \leadsto 5 \stackrel{3}{\longrightarrow} 8 \leadsto 1 \stackrel{2}{\longrightarrow} 3 \leadsto 2 \stackrel{4}{\longrightarrow} 6 \leadsto 5 \stackrel{2}{\longrightarrow} 7 \leadsto 4 \stackrel{2}{\longrightarrow} 6 \leadsto 5 \stackrel{4}{\longrightarrow} 9 \(\) Обратите внимание, что общее время составляет \(6+3+2+4+2+2+4=23\).

Пояснение второго примера: Муравей перемещается следующим образом (кривая стрелка обозначает телепортацию, прямая стрелка обозначает обычное движение со скоростью \(1\), а время, затраченное на движение, написано над стрелкой). \(\) 0 \stackrel{454971987}{\longrightarrow} 454971987 \leadsto 406874902 \stackrel{48097086}{\longrightarrow} 454971988 \(\) Обратите внимание, что общее время составляет \(454971987+48097086=503069073\).

Объяснение третьего примера: Поскольку все порталы изначально неактивны, муравей не будет телепортирован и попадет прямо из \(0\) в \(x_n+1=899754846+1=899754847\).

F. Попарные остатки

математика Структуры данных *2300

У вас есть массив \(a\), состоящий из \(n\) различных положительных целых чисел, пронумерованных от \(1\) до \(n\). Определим \(p_k\) как \(\)p_k = \sum_{1 \le i, j \le k} a_i \bmod a_j,\(\)

где \(x \bmod y\) обозначает остаток при делении \(x\) на \(y\). От вас требуется найти и вывести \(p_1, p_2, \ldots, p_n\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длину массива.

Вторая строка содержит \(n\) различных целых чисел \(a_1, \ldots, a_n\) (\(1 \le a_i \le 3 \cdot 10^5\), \(a_i \neq a_j\), если \(i \neq j\)).

Выходные данные

Выведите \(n\) целых чисел \(p_1, p_2, \ldots, p_n\).

E. Скучные отрезки

Деревья сортировки Структуры данных *2100

Даны \(n\) отрезков на числовой прямой, отрезки пронумерованы от \(1\) до \(n\). \(i\)-й отрезок покрывает все целочисленные точки от \(l_i\) до \(r_i\) и имеет значение \(w_i\).

Требуется выбрать поднабор этих отрезков (возможно, все). Когда набор выбран, разрешается перемещаться между двумя целочисленными точками, если существует выбранный отрезок, который накрывает обе точки. Поднабор называется хорошим, если возможно достичь точку \(m\), начав из точки \(1\), за произвольное количество ходов.

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

В каждом тесте существует хотя бы один хороший набор.

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 3 \cdot 10^5\); \(2 \le m \le 10^6\)) — количество отрезков и количество целочисленных точек.

В каждой из следующих \(n\) строк записаны по три целых числа \(l_i\), \(r_i\) и \(w_i\) (\(1 \le l_i < r_i \le m\); \(1 \le w_i \le 10^6\)) — описание \(i\)-го отрезка.

В каждом тесте существует хотя бы один хороший набор.

Выходные данные

Выведите одно целое число — минимальную цену хорошего поднабора.

F. Хороший граф

графы Деревья снм Структуры данных *2700

У вас есть неориентированный граф из \(n\) вершин, и у каждого ребра есть вес.

Назовем простым циклом цикл в графе без повторяющихся вершин. Назовем весом цикла исключающее ИЛИ весов его ребер.

Скажем, что граф хороший, если все его простые циклы имеют вес \(1\). Граф плохой, если он является не хорошим.

Первоначально, граф пустой. Далее приходят \(q\) запросов. Каждый запрос имеет следующий вид:

  • \(u\) \(v\) \(x\) — нужно добавить ребро между вершинами \(u\) и \(v\) веса \(x\), если добавление данного ребра не делает граф плохим.

Для каждого запроса выведите: было ли добавлено данное ребро.

Входные данные

В первой строке заданы два целых числа \(n\) и \(q\) (\(3 \le n \le 3 \cdot 10^5\); \(1 \le q \le 5 \cdot 10^5\)) — количество вершин и запросов.

В следующих \(q\) строках заданы запросы — по одному в строке. Каждый запрос состоит из трех целых чисел \(u\), \(v\) и \(x\) (\(1 \le u, v \le n\); \(u \neq v\); \(0 \le x \le 1\)) — вершины ребра и его вес.

Гарантируется, что в запросах нет кратных ребер.

Выходные данные

Для каждого запроса, выведите YES, если ребро было добавлено в граф, или NO в противном случае (оба в любом регистре).

E. Равновесие

дп жадные алгоритмы Структуры данных *2200

У Василия есть два массива \(a\) и \(b\), состоящие из \(n\) элементов.

Для некоторых отрезков \(l..r\) этих массивов Василий хочет узнать, можно ли уравнять значения массивов на этих отрезках, используя операцию балансировки. Формально говоря, значения на отрезке уравнены, если для всех \(i\) от \(l\) до \(r\) выполняется \(a_i = b_i\).

Для того, чтобы выполнить операцию балансировки, необходимо выбрать четное количество индексов массива \(l \le pos_1 < pos_2 < \dots < pos_k \le r\). Далее к элементам массива a на позициях \(pos_1, pos_3, pos_5, \dots\) прибавляется единица и к элементам массива b на позициях \(pos_2, pos_4, pos_6, \dots\) прибавляется единица.

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

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2 \le n \le 10^5\), \(1 \le q \le 10^5\)) — размер массива \(a\) и \(b\), а также количество отрезков.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) \((0 \le a_i \le 10^9)\).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) \((0 \le b_i \le 10^9)\).

Следующие \(q\) строк содержат по два целых числа \(l_i\) и \(r_i\) \((1 \le l_i < r_i \le n)\) — границы отрезков.

Выходные данные

Для каждого отрезка выведите одно целое число — минимальное количество операций либо «-1», если сделать отрезки массива одинаковыми не получится.

Примечание

Для первого отрезка от \(2\) до \(6\) можно сделать одну операцию с \(pos = [2, 3, 5, 6]\), после операции массивы буду выглядеть следующим образом: \(a = [0, 2, 2, 9, 4, 2, 7, 5]\), \(b = [2, 2, 2, 9, 4, 2, 5, 8]\). Массивы на отрезке от \(2\) до \(6\) после этой операции совпадают.

Для второго отрезка от \(1\) до \(7\) можно сделать три следующие операции:

  1. \(pos = [1, 3, 5, 6]\)
  2. \(pos = [1, 7]\)
  3. \(pos = [2, 7]\)

После операций массивы станут выглядеть следующим образом: \(a = [2, 2, 2, 9, 4, 2, 7, 5]\), \(b = [2, 2, 2, 9, 4, 2, 7, 8]\). Массивы на отрезке от \(1\) до \(7\) после этих операций совпадают.

Для третьего отрезка от \(2\) до \(4\) можно сделать одну операцию с \(pos = [2, 3]\), после операции массивы буду выглядеть следующим образом: \(a = [0, 2, 2, 9, 3, 2, 7, 5]\), \(b = [2, 2, 2, 9, 4, 1, 5, 8]\). Массивы на отрезке от \(2\) до \(4\) после этой операции совпадают.

Для четвертого и пятого отрезков добиться равенства невозможно.

G. Врата в другой мир

битмаски снм Структуры данных *3300

Как уже упоминалось, Василий любит играть в компьютерные игры. В одной из его любимых игр персонаж находится во вселенной, где каждая планета обозначается двоичным числом от \(0\) до \(2^n - 1\). На каждой из планет находятся врата, позволяющие перемещаться с планеты \(i\) на планету \(j\), если двоичная запись \(i\) отличается от двоичной записи \(j\) ровно в одном бите.

Василий хочет проверить вас и посмотреть, как вы справитесь с обработкой следующих запросов в этом игровом мире:

  • Уничтожить планеты с номерами от \(l\) до \(r\) включительно. На такие планеты больше нельзя перемещаться.
  • Узнать, можно ли с планеты \(a\) долететь до планеты \(b\), используя какое-то количество планетных врат. Гарантируется, что планеты \(a\) и \(b\) не являются уничтоженными.
Входные данные

Первая строка содержит два целых числа \(n\), \(m\) (\(1 \leq n \leq 50\), \(1 \leq m \leq 5 \cdot 10^4\)) — количество бит в двоичной записи каждой планеты и количество запросов соответственно.

Следующие \(m\) строк ввода содержат запросы двух видов:

block l r — запрос на уничтожение планет, с номерами от \(l\) до \(r\) включительно (\(0 \le l \le r < 2^n\)). Гарантируется, что никакая планета не будет уничтожена дважды.

ask a b — запрос на достижимость между планетами \(a\) и \(b\) (\(0 \le a, b < 2^n\)). Гарантируется, что планеты \(a\) и \(b\) еще не были уничтожены.

Выходные данные

На каждый запрос типа ask в отдельной строке необходимо вывести «1», если с планеты \(a\) можно долететь до планеты \(b\), и «0» иначе (без кавычек).

Примечание

Первый тест можно визуализировать следующим образом:

Ответ на запрос ask 0 7 положительный.

Далее после запроса block 3 6 граф будет выглядеть следующим образом (выделены уничтоженные вершины):

Ответ на запрос ask 0 7 отрицательный, так как любой путь из вершины \(0\) в вершину \(7\) лежит через одну из уничтоженных вершин.

D. Ezzat и таблица

дп жадные алгоритмы Структуры данных *2200

Moamen нарисовал таблицу из \(n\) строк и \(10^9\) столбцов, состоящую из цифр \(0\) и \(1\). Ezzat заметил, что Moamen рисует и заинтересовался, какое минимальное число строк нужно удалить, чтобы таблица стала прекрасной.

Таблица прекрасна, если и только если для каждых двух последовательных строк найдется хотя бы один столбец, содержащий \(1\) в этих двух строках.

Ezzat опишет таблицу с помощью числа строк \(n\), и \(m\) отрезков таблицы, содержащих \(1\). Каждый отрезок задается тремя числами \(i\), \(l\), и \(r\), где \(i\) задает номер строки, а \(l\) и \(r\) задают первый и последний столбцы отрезка в этой строке.

Например, если \(n = 3\), \(m = 6\), и заданы отрезки \((1,1,1)\), \((1,7,8)\), \((2,7,7)\), \((2,15,15)\), \((3,1,1)\), \((3,15,15)\), то таблица выглядит так:

Ваша задача — сказать Ezzat, сколько минимум строк нужно удалить, чтобы таблица стала прекрасной.

Входные данные

В первой строке содержатся два целых числа \(n\) и \(m\) (\(1 \le n, m \le 3\cdot10^5\)).

В каждой из следующих \(m\) строк содержатся три целых числа \(i\), \(l\) и \(r\) (\(1 \le i \le n\), \(1 \le l \le r \le 10^9\)). Каждая из этих \(m\) строк означает, что строка \(i\) содержит \(1\) в столбцах с \(l\) по \(r\).

Обратите внимание, что отрезки могут накладываться.

Выходные данные

В первой строке выведите одно целое число \(k\) — минимальное число строк, которые необходимо удалить.

Во второй строке выведите \(k\) различных чисел \(r_1, r_2, \ldots, r_k\), задающих строки, которые нужно удалить (\(1 \le r_i \le n\)), в любом порядке.

Если существует несколько решений, выведите любое из них.

Примечание

Таблица из первого примера приведена в условии задачи. Для нее уже верно, что:

  1. \(1\)-я и \(2\)-я строки имеют \(1\) в столбце \(7\).
  2. \(2\)-я и \(3\)-я строки имеют \(1\) в столбце \(15\).
Значит, исходная таблица уже прекрасная и мы не должны удалять ничего.

Во втором примере таблица следующая:

D. Истинные вставки

Комбинаторика Структуры данных *2600

Рассмотрим алгоритм сортировки вставками целочисленной последовательности \([a_1, a_2, \ldots, a_n]\) длины \(n\) по неубыванию.

Для каждого \(i\) в порядке от \(2\) до \(n\) делаем следующее. Если \(a_i \ge a_{i-1}\), ничего не делаем и переходим к следующему значению \(i\). В противном случае находим минимальный индекс \(j\) такой, что \(a_i < a_j\), и сдвигаем элементы на позициях с \(j\) по \(i-1\) на одну позицию вправо, а на позицию \(j\) записываем исходное значение \(a_i\). В таком случае мы будем говорить, что произошла вставка элемента с позиции \(i\) на позицию \(j\).

Можно заметить, что после рассмотрения любого \(i\) префикс последовательности \([a_1, a_2, \ldots, a_i]\) отсортирован по неубыванию, следовательно, алгоритм действительно отсортирует любую последовательность.

Например, сортировка последовательности \([4, 5, 3, 1, 3]\) происходит так:

  • \(i = 2\): \(a_2 \ge a_1\), ничего не делаем;
  • \(i = 3\): \(j = 1\), вставка с позиции \(3\) на позицию \(1\): \([3, 4, 5, 1, 3]\);
  • \(i = 4\): \(j = 1\), вставка с позиции \(4\) на позицию \(1\): \([1, 3, 4, 5, 3]\);
  • \(i = 5\): \(j = 3\), вставка с позиции \(5\) на позицию \(3\): \([1, 3, 3, 4, 5]\).

Вам дано число \(n\) и список из \(m\) целочисленных пар \((x_i, y_i)\). Нас интересуют последовательности, при сортировке которых произойдёт ровно \(m\) вставок: сначала элемента с позиции \(x_1\) на позицию \(y_1\), потом элемента с позиции \(x_2\) на позицию \(y_2\), ..., наконец, элемента с позиции \(x_m\) на позицию \(y_m\).

Сколько последовательностей длины \(n\) из (необязательно различных) целых чисел от \(1\) до \(n\) удовлетворяют этому условию? Выведите это число по модулю \(998\,244\,353\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\); \(0 \le m < n\)) — длину последовательности и число вставок.

\(i\)-я из следующих \(m\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(2 \le x_1 < x_2 < \ldots < x_m \le n\); \(1 \le y_i < x_i\)). Эти строки описывают последовательность вставок в хронологическом порядке.

Гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Обратите внимание, что аналогичного ограничения на сумму значений \(n\) нет.

Выходные данные

Для каждого набора входных данных выведите число последовательностей длины \(n\) из целых чисел от \(1\) до \(n\), при сортировке которых алгоритмом из условия будет совершена заданная последовательность вставок, по модулю \(998\,244\,353\).

Примечание

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

Во втором наборе входных данных подходит только последовательность \([3, 2, 1]\).

В третьем наборе входных данных \([4, 5, 3, 1, 3]\) является одной из подходящих последовательностей.

F. Странная сортировка

сортировки Структуры данных *3300

У вас есть перестановка — массив \(a = [a_1, a_2, \ldots, a_n]\) из различных целых чисел от \(1\) до \(n\). Длина перестановки \(n\) нечётна.

Рассмотрим следующий алгоритм сортировки перестановки по возрастанию.

Вспомогательная процедура алгоритма, \(f(i)\), принимает на вход индекс \(i\) (\(1 \le i \le n-1\)) и делает следующее. Если \(a_i > a_{i+1}\), значения \(a_i\) и \(a_{i+1}\) меняются местами. В противном случае перестановка остаётся без изменений.

Алгоритм состоит из итераций, пронумерованных последовательными целыми числами, начиная с \(1\). На \(i\)-й итерации алгоритм делает следующее:

  • если \(i\) нечётно, вызываются \(f(1), f(3), \ldots, f(n - 2)\);
  • если \(i\) чётно, вызываются \(f(2), f(4), \ldots, f(n - 1)\).

Можно доказать, что после конечного числа итераций перестановка станет отсортирована по возрастанию.

Через сколько итераций это впервые произойдёт?

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5 - 1\); \(n\) нечётно) — длину перестановки.

Вторая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — саму перестановку.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5 - 1\).

Выходные данные

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

Если заданная перестановка уже отсортирована, выведите \(0\).

Примечание

В первом наборе входных данных перестановка будет меняться следующим образом:

  • после \(1\)-й итерации: \([2, 3, 1]\);
  • после \(2\)-й итерации: \([2, 1, 3]\);
  • после \(3\)-й итерации: \([1, 2, 3]\).

Во втором наборе входных данных перестановка будет меняться следующим образом:

  • после \(1\)-й итерации: \([4, 5, 1, 7, 2, 3, 6]\);
  • после \(2\)-й итерации: \([4, 1, 5, 2, 7, 3, 6]\);
  • после \(3\)-й итерации: \([1, 4, 2, 5, 3, 7, 6]\);
  • после \(4\)-й итерации: \([1, 2, 4, 3, 5, 6, 7]\);
  • после \(5\)-й итерации: \([1, 2, 3, 4, 5, 6, 7]\).

В третьем наборе входных данных перестановка уже отсортирована, поэтому ответ равен \(0\).

B. Подозреваемые

Конструктив реализация Структуры данных *1600

Расследуя очередное убийство, Шерлок Холмс определил n подозреваемых. Он точно знает, что убийство совершил ровно один из них. Чтобы определить, кто именно это сделал, детектив выстроил подозреваемых в ряд и пронумеровал их числами от 1 до n. После этого он спросил каждого: «Кто из вас совершил убийство?». Подозреваемый номер i ответил либо «Убийство совершил подозреваемый номер ai», либо «Подозреваемый номер ai не совершал убийства». В том числе, подозреваемый мог сказать это про себя (ai = i).

Шерлок Холмс безошибочно определил, что ровно m ответов были правдой, а все остальные — ложью. Помогите ему теперь понять, кто из подозреваемых соврал, а кто сказал правду?

Входные данные

В первой строке заданы два целых числа n и m (1 ≤ n ≤ 105, 0 ≤ m ≤ n) — общее количество подозреваемых и количество подозреваемых, сказавших правду. В следующих n строках заданы ответы подозреваемых. В i-ой строке написано «+ai» (без кавычек), если подозреваемый номер i говорит, что убийство совершил подозреваемый номер ai, или «-ai» (без кавычек), если подозреваемый номер i говорит, что подозреваемый номер ai не совершал убийства (ai — целое число, 1 ≤ ai ≤ n).

Гарантируется, что существует хотя бы один подозреваемый, такой, что если он совершил убийство, то правду сказали ровно m человек.

Выходные данные

Выведите n строк. В строке номер i должно быть написано «Truth», если подозреваемый номер i точно сказал правду, «Lie», если подозреваемый номер i точно соврал, и «Not defined», если он мог соврать, а мог и сказать правду, в зависимости от того, кто совершил убийство.

Примечание

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

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

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

D1. Верхняя ячейка (упрощенная версия)

дп математика Перебор Структуры данных теория чисел *1700

Эта версия задачи отличается от следующей только ограничением на \(n\).

Обратите внимание, что ограничение по памяти в этой задаче ниже, чем в других.

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

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

Пусть в некоторый момент токен находится в ячейке \(x > 1\). Один сдвиг токена может иметь любой из следующих двух видов:

  • Вычитание: вы выбираете целое число \(y\) от \(1\) до \(x-1\) включительно и перемещаете токен из ячейки \(x\) в ячейку \(x - y\).
  • Деление с округлением вниз: вы выбираете целое число \(z\) от \(2\) до \(x\) включительно и перемещаете токен из ячейки \(x\) в ячейку \(\lfloor \frac{x}{z} \rfloor\) (частное от деления \(x\) на \(z\) с округлением вниз).

Найдите число способов, которыми токен может добраться из ячейки \(n\) в ячейку \(1\) за один или более сдвигов, и выведите это число по модулю \(m\). Обратите внимание, что если есть несколько способов переместить токен из одной ячейки в другую за один сдвиг, все эти способы считаются различными (смотрите пояснение к примерам для лучшего понимания).

Входные данные

Единственная строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\); \(10^8 < m < 10^9\); \(m\) — простое число) — длину полоски и число, по модулю которого необходимо вычислить ответ.

Выходные данные

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

Примечание

В первом тесте есть три способа добраться из ячейки \(3\) в ячейку \(1\) за один сдвиг: с помощью вычитания \(y = 2\), а также с помощью деления на \(z = 2\) или \(z = 3\).

Также есть два способа добраться из ячейки \(3\) в ячейку \(1\) через ячейку \(2\): сначала вычесть \(y = 1\), а потом либо снова вычесть \(y = 1\), либо поделить на \(z = 2\).

Таким образом, всего способов пять.

D1. Двести двадцать один (простая версия)

дп математика Структуры данных *1700

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

Стич любит экспериментировать с различными механизмами вместе со своим другом Спарки. Сегодня они построили очередную машину.

Главным элементом этой машины являются \(n\) стержней, расположенных вдоль одной прямой и пронумерованных от \(1\) до \(n\) включительно. На каждом из этих стержней должен находиться электрический заряд, количественно равный либо \(1\), либо \(-1\) (иначе машина не будет работать). Другим условием работы этой машины является то, что знакопеременная сумма заряда по всем стержням должна равняться нулю.

Более формально, стержни можно представить как массив из \(n\) чисел, характеризующих заряд: либо \(1\), либо \(-1\). Тогда должно выполняться условие: \(a_1 - a_2 + a_3 - a_4 + \ldots = 0\), или, выражаясь проще, \(\sum\limits_{i=1}^n (-1)^{i-1} \cdot a_i = 0\).

Спарки зарядил все \(n\) стержней электрическим током, но оказалось, что стержни заряжены неправильно (знакопеременная сумма заряда не равна нулю). Друзья решили оставить в машине только часть стержней. У Спарки есть \(q\) вопросов. В \(i\)-м вопросе Спарки интересуется: если бы машина состояла только из стержней с номерами с \(l_i\) по \(r_i\) включительно, какое минимальное количество стержней можно было бы удалить из машины так, чтобы знакопеременная сумма зарядов на оставшихся была равна нулю? Возможно, друзья что-то напутали, и знакопеременная сумма уже равна нулю. В таком случае, можно не удалять стержни вовсе.

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

Помогите друзьям и ответьте на все вопросы Спарки!

Входные данные

Каждый тест содержит несколько наборов входных данных.

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

В первой строке каждого набора входных данных находятся два целых числа \(n\) и \(q\) (\(1 \le n, q \le 3 \cdot 10^5\)) — количество стержней и количество вопросов соответственно.

Во второй строке находятся строка \(s\) длины \(n\), где заряд \(i\)-го стержня равен \(1\), если \(s_i\) это символ «+», или \(-1\), если \(s_i\) это символ «-».

Каждая из следующих \(q\) строк содержит два целых положительных числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — числа, описывающие вопросы Спарки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\), а также сумма \(q\) по всем тестовым случаям не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое число — минимальное количество стержней, которое можно удалить.

Примечание

В первом наборе входных данных для первого запроса можно удалить стержни под номерами \(5\) и \(8\), тогда останется следующий набор стержней: +--+--++-++-. Нетрудно видеть, что здесь знакопеременная сумм равна нулю.

В втором наборе входных данных:

  • Для первого запроса можно удалить стержни под номерами \(1\) и \(11\), тогда останется следующий набор стержней: +--+--++-++-. Нетрудно видеть, что здесь знакопеременная сумма равна нулю.
  • Для второго запроса можно удалить стержень под номером \(9\), тогда останется следующий набор стержней: ---++-. Нетрудно видеть, что здесь знакопеременная сумма равна нулю.
  • Для третьего запроса можно не удалять стержни вовсе.

D2. Двести двадцать один (сложная версия)

математика Структуры данных *2200

Это сложная версия задачи. Различия между версиями заключаются в том, что в сложной версии требуется выводить номера удаляемых стержней. Вы можете делать взломы, только если обе версии задачи сданы.

Стич любит экспериментировать с различными механизмами вместе со своим другом Спарки. Сегодня они построили очередную машину.

Главным элементом этой машины являются \(n\) стержней, расположенных вдоль одной прямой и пронумерованных от \(1\) до \(n\) включительно. На каждом из этих стержней должен находиться электрический заряд, количественно равный либо \(1\), либо \(-1\) (иначе машина не будет работать). Другим условием работы этой машины является то, что знакопеременная сумма заряда по всем стержням должна равняться нулю.

Более формально, стержни можно представить как массив из \(n\) чисел, характеризующих заряд: либо \(1\), либо \(-1\). Тогда должно выполняться условие: \(a_1 - a_2 + a_3 - a_4 + \ldots = 0\), или, выражаясь проще, \(\sum\limits_{i=1}^n (-1)^{i-1} \cdot a_i = 0\).

Спарки зарядил все \(n\) стержней электрическим током, но оказалось, что стержни заряжены неправильно (знакопеременная сумма заряда не равна нулю). Друзья решили оставить в машине только часть стержней. У Спарки есть \(q\) вопросов. В \(i\)-м вопросе Спарки интересуется: если бы машина состояла только из стержней с номерами с \(l_i\) по \(r_i\) включительно, какое минимальное количество стержней можно было бы удалить из машины так, чтобы знакопеременная сумма зарядов на оставшихся была равна нулю? Также Спарки хочет знать номера этих стержней. Возможно, друзья что-то напутали, и знакопеременная сумма уже равна нулю. В таком случае, можно не удалять стержни вовсе.

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

Помогите друзьям и ответьте на все вопросы Спарки!

Входные данные

Каждый тест содержит несколько наборов входных данных.

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

В первой строке каждого набора входных данных находятся два целых числа \(n\) и \(q\) (\(1 \le n, q \le 3 \cdot 10^5\)) — количество стержней и количество вопросов соответственно.

Во второй строке находятся строка \(s\) длины \(n\), где заряд \(i\)-го стержня равен \(1\), если \(s_i\) это символ «+», или \(-1\), если \(s_i\) это символ «-».

Каждая из следующих \(q\) строк содержит два целых положительных числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — числа, описывающие вопросы Спарки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\), а также сумма \(q\) по всем тестовым случаям не превосходит \(3 \cdot 10^5\).

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

Выходные данные

Для каждого набора входных данных выводите ответ в следующем формате:

В первой строке должно находиться одно целое число \(k\) — минимальное количество стержней, которое можно удалить.

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

Если существует несколько правильных вариантов ответа, вы можете вывести любой.

Примечание

В первом наборе входных данных для первого запроса можно удалить стержни под номерами \(5\) и \(8\), тогда останется следующий набор стержней: +--+--++-++-. Нетрудно видеть, что здесь знакопеременная сумм равна нулю.

В втором наборе входных данных:

  • Для первого запроса можно удалить стержни под номерами \(1\) и \(11\), тогда останется следующий набор стержней: --++---++---. Нетрудно видеть, что здесь знакопеременная сумма равна нулю.
  • Для второго запроса можно удалить стержень под номером \(9\), тогда останется следующий набор стержней: ---++-. Нетрудно видеть, что здесь знакопеременная сумма равна нулю.
  • Для третьего запроса можно не удалять стержни вовсе.

D1. Рассадка в кинотеатре (простая версия)

жадные алгоритмы сортировки Структуры данных *1100

Это простая версия задачи. Единственное различие состоит в том, что в этой версии \(n = 1\).

В кинотеатре места могут быть представлены как таблица из \(n\) рядов и \(m\) столбцов. Ряды нумеруются целыми числами от \(1\) до \(n\). Места в каждом ряду нумеруются последовательными целыми числами слева направо: в \(k\)-м ряду от \(m (k - 1) + 1\) до \(m k\) для всех рядов \(1 \le k \le n\).

\(1\)\(2\)\(\cdots\)\(m - 1\)\(m\)
\(m + 1\)\(m + 2\)\(\cdots\)\(2 m - 1\)\(2 m\)
\(2m + 1\)\(2m + 2\)\(\cdots\)\(3 m - 1\)\(3 m\)
\(\vdots\)\(\vdots\)\(\ddots\)\(\vdots\)\(\vdots\)
\(m (n - 1) + 1\)\(m (n - 1) + 2\)\(\cdots\)\(n m - 1\)\(n m\)
Таблица с номерами мест

Есть \(nm\) людей, которые хотят прийти в кинотеатр, чтобы посмотреть новый фильм. Они пронумерованы целыми числами от \(1\) до \(nm\). Вы должны задать ровно одно место для каждого человека.

Известно, что в этом кинотеатре чем меньше номер места, тем лучше виден экран. У \(i\)-го человека уровень зрения \(a_i\). Обозначим за \(s_i\) номер места \(i\)-го человека. Необходимо выдать место лучше тем, у кого зрение хуже, то есть для любых двух людей \(i\), \(j\) таких, что \(a_i < a_j\), должно выполняться условие \(s_i < s_j\).

После того, как вы определите места всем людям, они начнут их занимать. В порядке от \(1\) до \(nm\) каждый человек входит в зал и садится на своё место. Чтобы сесть, человек подходит к своему ряду и начинает двигаться от первого места в ряду к своему слева направо. Во время того, как человек будет занимать свое место, какие-то места будут свободны, какие-то будут заняты теми людьми, которые уже вошли в зал. Неудобство человека равно количеству занятых мест, мимо которых он прошёл, пока занимал своё место.

Рассмотрим пример: \(m = 5\), человеку определено место \(4\) в первом ряду, причём места \(1\), \(3\), \(5\) в первом ряду уже заняты, а места \(2\) и \(4\) свободны. Неудобство этого человека будет равно \(2\), потому что он пройдет мимо двух занятых мест: \(1\) и \(3\).

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(n = 1\), \(1 \le m \le 300\)) — количество рядов и мест в каждом ряду кинотеатра соответственно.

Следующая строка содержит \(n \cdot m\) целых чисел \(a_1, a_2, \ldots, a_{n \cdot m}\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — уровень зрения \(i\)-го человека.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора выходных данных выведите единственное целое число — минимальное общее неудобство, которое можно получить.

Примечание

В первом наборе входных данных существует единственный способ определить людям места, потому что все уровни зрения различны. Первый человек занимает первое место, второй человек занимает второе место, третий человек занимает третье место. Неудобство первого человека равно \(0\), второго — \(1\), а третьего — \(2\). Общее неудобство равно \(0 + 1 + 2 = 3\).

Во втором наборе входных данных люди должны занять следующие места: \(s_1 = 2\), \(s_2 = 1\), \(s_3 = 5\), \(s_4 = 4\), \(s_5 = 3\). Общее неудобство будет равно \(6\).

D2. Рассадка в кинотеатре (сложная версия)

жадные алгоритмы реализация сортировки Структуры данных *1600

Это сложная версия задачи. Единственное различие состоит в том, что в этой версии \(1 \le n \le 300\).

В кинотеатре места могут быть представлены как таблица из \(n\) рядов и \(m\) столбцов. Ряды нумеруются целыми числами от \(1\) до \(n\). Места в каждом ряду нумеруются последовательными целыми числами слева направо: в \(k\)-м ряду от \(m (k - 1) + 1\) до \(m k\) для всех рядов \(1 \le k \le n\).

\(1\)\(2\)\(\cdots\)\(m - 1\)\(m\)
\(m + 1\)\(m + 2\)\(\cdots\)\(2 m - 1\)\(2 m\)
\(2m + 1\)\(2m + 2\)\(\cdots\)\(3 m - 1\)\(3 m\)
\(\vdots\)\(\vdots\)\(\ddots\)\(\vdots\)\(\vdots\)
\(m (n - 1) + 1\)\(m (n - 1) + 2\)\(\cdots\)\(n m - 1\)\(n m\)
Таблица с номерами мест

Есть \(nm\) людей, которые хотят прийти в кинотеатр, чтобы посмотреть новый фильм. Они пронумерованы целыми числами от \(1\) до \(nm\). Вы должны задать ровно одно место для каждого человека.

Известно, что в этом кинотеатре чем меньше номер места, тем лучше виден экран. У \(i\)-го человека уровень зрения \(a_i\). Обозначим за \(s_i\) номер места \(i\)-го человека. Необходимо выдать место лучше тем, у кого зрение хуже, то есть для любых двух людей \(i\), \(j\) таких, что \(a_i < a_j\), должно выполняться условие \(s_i < s_j\).

После того, как вы определите места всем людям, они начнут их занимать. В порядке от \(1\) до \(nm\) каждый человек входит в зал и садится на своё место. Чтобы сесть, человек подходит к своему ряду и начинает двигаться от первого места в ряду к своему слева направо. Во время того, как человек будет занимать свое место, какие-то места будут свободны, какие-то будут заняты теми людьми, которые уже вошли в зал. Неудобство человека равно количеству занятых мест, мимо которых он прошёл, пока занимал своё место.

Рассмотрим пример: \(m = 5\), человеку определено место \(4\) в первом ряду, причём места \(1\), \(3\), \(5\) в первом ряду уже заняты, а места \(2\) и \(4\) свободны. Неудобство этого человека будет равно \(2\), потому что он пройдет мимо двух занятых мест: \(1\) и \(3\).

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 300\)) — количество рядов и мест в каждом ряду кинотеатра соответственно.

Следующая строка содержит \(n \cdot m\) целых чисел \(a_1, a_2, \ldots, a_{n \cdot m}\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — уровень зрения \(i\)-го человека.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора выходных данных выведите единственное целое число — минимальное общее неудобство, которое можно получить.

Примечание

В первом наборе входных данных существует единственный способ рассадить людей: первого человека посадить на первое место, а второго — на второе. Тогда суммарное неудобство будет равно \(1\).

Во втором наборе входных данных оптимальная рассадка выглядит следующим образом:

В третьем наборе входных данных оптимальная рассадка выглядит следующим образом:

Число в клетке обозначает индекс человека, занимающего это место.

F. Движение точек

дп жадные алгоритмы реализация сортировки Структуры данных *2600

На числовой прямой даны \(n\) точек и \(m\) отрезков. Изначальная координата \(i\)-й точки равна \(a_i\). Левая и правая границы \(j\)-го отрезка это \(l_j\) и \(r_j\), соответственно.

Точки можно двигать. За одну операцию можно подвинуть любую точку из ее текущей координаты \(x\) в координату \(x - 1\) или в координату \(x + 1\). Стоимость такого движения \(1\).

Необходимо выполнить последовательность операций такую, чтобы каждый отрезок был посещён хотя бы одной точкой. Точка посетила отрезок \([l, r]\), если был такой момент, когда её координата принадлежала отрезку \([l, r]\) (включая границы).

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество точек и отрезков соответственно.

Следующая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — изначальные координаты точек.

Каждая из следующих \(m\) строк содержит два целых числа \(l_j\) и \(r_j\) (\(-10^9 \le l_j \le r_j \le 10^9\)) — левая и правая границы \(j\)-го отрезка соответственно.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превышают \(2 \cdot 10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных точки можно двигать следующим образом:

  • Подвинуть вторую точку из координаты \(6\) в координату \(5\).
  • Подвинуть третью точку из координаты \(14\) в координату \(13\).
  • Подвинуть четвёртую точку из координаты \(18\) в координату \(17\).
  • Подвинуть третью точку из координаты \(13\) в координату \(12\).
  • Подвинуть четвёртую точку из координаты \(17\) в координату \(16\).

Суммарная стоимость всех действий равна \(5\). Легко заметить, что все отрезки будут посещены после таких перемещений. Например, десятый отрезок (\([7, 13]\)) будет посещён после второго перемещения третьей точкой.

Ниже рисунок, иллюстрирующий первый набор входных данных:

G. Четыре вершины

графы жадные алгоритмы Конструктив кратчайшие пути реализация Структуры данных *3100

Дан неориентированный взвешенный граф, состоящий из \(n\) вершин и \(m\) рёбер.

На этом графе осуществляются запросы:

  • Удалить из графа существующее ребро.
  • Добавить в граф ещё не существующее в нём ребро.

В самом начале и после каждого запроса вам необходимо найти четыре различные вершины \(a\), \(b\), \(c\), \(d\) такие, что существует путь между \(a\) и \(b\), существует путь между \(c\) и \(d\) и сумма длин двух кратчайших путей из \(a\) в \(b\) и из \(c\) в \(d\) минимальна. Ответ на запрос — это сумма длин этих двух кратчайших путей. Длина пути равна сумме весов рёбер на этом пути.

Входные данные

В первой строке находится два целых числа \(n\) и \(m\) \((4 \le n, m \le 10^5)\) — количество вершин и рёбер в графе соответственно.

Каждая из следующих \(m\) строк содержит три целых числа \(v\), \(u\), \(w\) (\(1 \le v, u \le n, v \neq u\), \(1 \le w \le 10^9\)) — это означает, что существует ребро между вершинами \(v\) и \(u\) с весом \(w\).

Следующая строка содержит одно целое число \(q\) \((0 \le q \le 10^5)\) — количество запросов.

Следующие \(q\) строк содержат запросы двух типов:

  • \(0\) \(v\) \(u\) — такой запрос означает удаление ребра между вершинами \(v\) и \(u\) \((1 \le v, u \le n, v \neq u)\). Гарантируется, что такое ребро существует в графе.
  • \(1\) \(v\) \(u\) \(w\) — такой запрос означает добавление ребра между вершинами \(v\) и \(u\) весом \(w\) (\(1 \le v, u \le n, v \neq u\), \(1 \le w \le 10^9\)). Гарантируется, что такого ребра не было в графе.

Гарантируется, что изначальный граф не содержит кратных рёбер.

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

Гарантируется, что в любой момент количество рёбер в графе не будет меньше \(4\). Можно доказать, что в любой момент существуют четыре различные вершины \(a\), \(b\), \(c\), \(d\) такие, что существует путь между вершинами \(a\) и \(b\), и существует путь между вершинами \(c\) и \(d\).

Выходные данные

Выведите \(q + 1\) целое число — минимальную сумму длин кратчайших путей для выбранных пар вершин до всех запросов и после каждого из них.

Примечание

До всех запросов можно выбрать вершины \((a, b) = (3, 2)\) и \((c, d) = (1, 4)\). Сумма длин двух кратчайших путей равна \(3 + 1 = 4\).

После первого запроса можно выбрать вершины \((a, b) = (2, 5)\) и \((c, d) = (1, 4)\). Сумма длин двух кратчайших путей равна \(2 + 1 = 3\).

После второго запроса можно выбрать вершины \((a, b) = (3, 4)\) и \((c, d) = (2, 5)\). Сумма длин двух кратчайших путей равна \(1 + 2 = 3\).

После третьего запроса можно выбрать вершины \((a, b) = (2, 6)\) и \((c, d) = (4, 5)\). Сумма длин двух кратчайших путей равна \(4 + 3 = 7\).

После последнего запроса можно выбрать вершины \((a, b) = (1, 6)\) и \((c, d) = (2, 5)\). Сумма длин двух кратчайших путей равна \(3 + 2 = 5\).

E. Заурядные запросы

математика разделяй и властвуй Структуры данных *2200

Недавно, на свой день рождения, Алиса получила массив \(a_1, a_2, \dots, a_n\). Массив ей очень понравился, как ее другу Бобу, которому Алиса его показала.

Однако довольно скоро Боб, как любой хороший друг, попросил Алису выполнить \(q\) операций двух видов над ее массивом:

  • \(1\) \(x\) \(y\): присвоить элементу \(a_x\) значение \(y\) (или \(a_x = y\));
  • \(2\) \(l\) \(r\): посчитать, сколько неубывающих подмассивов содержится в подмассиве \([a_l, a_{l+1}, \dots, a_r]\). Формально, нужно посчитать количество пар индексов \((p,q)\) таких, что \(l \le p \le q \le r\) и \(a_p \le a_{p+1} \le \dots \le a_{q-1} \le a_q\).

Помогите Алисе ответить на запросы Боба!

Входные данные

В первой строке заданы два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — размер массива и количество запросов, соответственно.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — массив Алисы.

В следующих \(q\) строках заданы по три целых числа. Первое число в \(i\)-й строке — это \(t_i\), тип операции \(i\)-го запроса (\(t_i = 1\) или \(t_i = 2\)).

Если \(t_i = 1\), то следующие два числа — это \(x_i\) и \(y_i\) (\(1 \le x_i \le n\); \(1 \le y_i \le 10^9\)), позиция \(x_i\) и новое значение \(y_i\) (нужно присвоить \(a_{x_i} = y_i\)).

Если \(t_i = 2\), то следующие два числа — это \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)), границы подмассива, о котором Боб спрашивает Алису в \(i\)-м запросе.

Гарантируется, что есть хотя бы один запрос второго типа.

Выходные данные

Для каждого запроса \(2\)-го типа выведите одно целое число — ответ на данный запрос.

Примечание

Для первого запроса (\(l = 2\) и \(r = 5\)) неубывающие подмассивы \([p,q]\) — это \([2,2]\), \([3,3]\), \([4,4]\), \([5,5]\), \([2,3]\) и \([4,5]\).

D. Неудачные пары

Бинарный поиск реализация сортировки Структуры данных *1900

Есть город, который можно представить как квадрат на плоскости с концами в координатах \((0, 0)\) и \((10^6, 10^6)\).

В городе есть \(n\) вертикальных и \(m\) горизонтальных улиц, которые пересекают весь город, т. е. \(i\)-я вертикальная улица проходит от \((x_i, 0)\) до \((x_i, 10^6)\), а \(j\)-я горизонтальная улица проходит от \((0, y_j)\) до \((10^6, y_j)\).

Все улицы двухсторонние. Границы города также являются улицами.

В городе на некоторых улицах стоят \(k\) человек: \(p\)-й человек стоит в точке \((x_p, y_p)\) (таким образом, либо \(x_p\) равняется некоторому \(x_i\), либо \(y_p\) равняется некоторому \(y_j\), либо и то и другое).

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

Посчитайте общее количество неудачных пар (пары \((x, y)\) и \((y, x)\) — это одна и та же пара).

Напомним, что Манхеттенское расстояние между точками \((x_1, y_1)\) и \((x_2, y_2)\) равно \(|x_1 - x_2| + |y_1 - y_2|\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора заданы три целых числа \(n\), \(m\) и \(k\) (\(2 \le n, m \le 2 \cdot 10^5\); \(2 \le k \le 3 \cdot 10^5\)) — количество вертикальных и горизонтальных улиц и количество человек.

Во второй строке каждого набора заданы \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(0 = x_1 < x_2 < \dots < x_{n - 1} < x_n = 10^6\)) — \(x\)-координаты вертикальных улиц.

В третьей строке заданы \(m\) целых чисел \(y_1, y_2, \dots, y_m\) (\(0 = y_1 < y_2 < \dots < y_{m - 1} < y_m = 10^6\)) — \(y\)-координаты горизонтальных улиц.

В следующих \(k\) строках заданы описания людей. В \(p\)-й строке заданы два целых числа \(x_p\) и \(y_p\) (\(0 \le x_p, y_p \le 10^6\); \(x_p \in \{x_1, \dots, x_n\}\) или \(y_p \in \{y_1, \dots, y_m\}\)) — координаты \(p\)-го человека. Все координаты различны.

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\), сумма \(m\) не превосходит \(2 \cdot 10^5\) и сумма \(k\) не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите общее количество неудачных пар людей.

Примечание

Изображение второго набора входных данных представлено ниже:

Для примера, точки \(3\) и \(4\) образуют неудачную пару, потому что кратчайший путь между ними (отмечен красным и равен \(7\)) больше, чем их Манхеттенское расстояние (равное \(5\)).

Точки \(3\) и \(5\) также образуют неудачную пару: кратчайший путь равен \(1000001\) (отмечен зеленым) больше, чем Манхеттенское расстояние равное \(999999\).

Однако, точки \(5\) и \(9\) не образуют неудачную пару, потому что кратчайший путь (отмечен фиолетовым) равен их Манхеттенскому расстоянию.

G. Битва против дракона

*особая задача дп Структуры данных *2500

Отряд из \(n\) воинов защищает замок от нападения дракона. Между драконом и замком есть \(m\) баррикад.

Воины пронумерованы от \(1\) до \(n\). \(i\)-й воин знает \(k_i\) атак: \(j\)-я из них наносит \(a_{i,j}\) урона дракону и может быть применена только есть между замком и драконом ровно \(b_{i,j}\) баррикад.

Воины ходят один за другим, начиная с воина \(1\). После того как воин \(n\) завершит свой ход, считается суммарный урон, нанесенный дракону. \(i\)-й воин в свой ход совершает одно из трех возможных действий:

  1. разрушить одну баррикаду (если еще остались);
  2. применить одну из \(k_i\) своих атак;
  3. пропустить ход.

Суммарный урон считается, как сумма уронов от атак, примененных воинами, которые в свой ход выбрали атаковать. Какой наибольший суммарный урон воины могут нанести дракону?

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n, m \le 3 \cdot 10^5\)) — количество воинов и начальной количество баррикад.

Затем следуют описания атак каждого воина. \(i\)-е описание состоит из трех строк.

В первой строке записано одно целое число \(k_i\) (\(1 \le k_i \le m + 1\)) — количество атак, которые знает \(i\)-й воин.

Во второй строке записаны \(k_i\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i,k_i}\) (\(1 \le a_{i,j} \le 10^9\)) — урон от каждой атаки.

В третьей строке записаны \(k_i\) целых чисел \(b_{i,1}, b_{i,2}, \dots, b_{i,k_i}\) (\(0 \le b_{i,j} \le m\)) — необходимое число баррикад для каждой атаки. \(b_{i,j}\) для \(i\)-го воина попарно различные. Атаки приведены в порядке возрастания необходимого числа баррикад, то есть \(b_{i,1} < b_{i,2} < \dots < b_{i,k_i}\).

Сумма \(k_i\) по всем воинам не превосходит \(3 \cdot 10^5\).

Выходные данные

Выведите одно целое число — наибольший суммарный урон, который воины могут нанести дракону.

Примечание

В первом примере лучший выбор следующий:

  • воин \(1\) уничтожает баррикаду, остается \(3\) баррикады;
  • воин \(2\) применяет свою первую атаку (он может это сделать, потому что \(b_{1,1}=3\), что равно текущему числу баррикад).

Суммарный урон равен \(10\).

Если бы первый воин применил свою атаку или пропустил свой ход, то второй мог бы применить только вторую атаку. Таким образом, урон был бы \(2+5=7\) или \(5\).

Во втором примере первый воин пропускает свой ход, второй воин пропускает свой ход, а третий воин применяет свою единственную атаку.

В третьем примере есть два варианта:

  • оба воина применяют свои вторые атаки;
  • первый воин уничтожает одну баррикаду, а второй воин применяет свою первую атаку.

В обоих случаях получается \(30\) суммарного урона.

I. Медицинское обследование

*особая задача Бинарный поиск Структуры данных *3200

Поликарп планирует пройти полное медицинское обследование в местной поликлинике. В него входит прохождение \(n\) врачей. Врачи пронумерованы от \(1\) до \(n\). \(i\)-й врач принимает пациентов с минуты \(L_i\) по минуту \(R_i\), поэтому Поликарп может прийти к нему в любую минуту из этого интервала. Каждый врач тратит одну минуту, чтобы проверить здоровье Поликарпа.

Поликарп хочет прийти в поликлинику в некоторую минуту \(x\) и посетить всех \(n\) врачей в некотором порядке, не пропуская ни одной минуты и не проходя ни одного врача повторно.

Более формально, он выбирает некоторое целое число \(x\) и перестановку \(p_1, p_2, \dots, p_n\) (последовательность из \(n\) целых чисел от \(1\) до \(n\) такую, что каждое число встречается ровно один раз), затем посещает:

  • врача \(p_1\) в минуту \(x\);
  • врача \(p_2\) в минуту \(x+1\);
  • ...
  • врача \(p_n\) в минуту \(x+n-1\).

\(p_i\)-й врач должен принимать пациентов в минуту \(x+i-1\), то есть должно выполняться следующее: \(L[p_i] \le x + i - 1 \le R[p_i]\).

Определите, может ли Поликарп выбрать такую минуту \(x\) и перестановку \(p\), что он сможет посетить всех \(n\) врачей, не пропуская ни одной минуты и не проходя ни одного врача повторно. Если существует несколько ответов, то выведите любой из них.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Затем следуют описания \(t\) наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество врачей.

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(L_1, L_2, \dots L_n\) (\(1 \le L_i \le 10^9\)).

В третьей строке каждого набора входных данных записаны \(n\) целых чисел \(R_1, R_2, \dots R_n\) (\(L_i \le R_i \le 10^9\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

На каждый набор входных данных выведите ответ.

Если существует такая минута \(x\) и перестановка \(p\), что Поликарп сможет посетить всех \(n\) врачей, не пропуская ни одной минуты и не проходя ни одного врача повторно, то в первой строке выведите \(x\), а во второй — перестановку \(p\). Если существует несколько ответов, то выведите любой из них.

В противном случае выведите \(-1\) в единственной строке.

Примечание

В третьем наборе входных данных невозможно посетить все врачей, потому что Поликарп должен посетить врача \(2\) в минуту \(2\) и врача \(1\) в минуту \(4\). Однако, для этого ему придется подождать минуту между посещениями, что запрещено.

В четвертом наборе входных данных все врачи принимают пациентов в течение одних и тех же \(2\) минут. Однако, так как их трое, Поликарп не сможет посетить их всех.

A. Книга

Бинарный поиск графы дп Перебор реализация сортировки Структуры данных *1800

У вас есть книга, в которой \(n\) глав.

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

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

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

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2\cdot10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит \(n\) (\(1 \le n \le 2\cdot10^5\)) — количество глав.

Далее следуют \(n\) строк. \(i\)-я из этих строк начинается с целого числа \(k_i\) (\(0 \le k_i \le n-1\)) — количества глав, которые требуется понимать для понимания \(i\)-й главы. Далее следуют \(k_i\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i, k_i}\) (\(1 \le a_{i, j} \le n, a_{i, j} \ne i, a_{i, j} \ne a_{i, l}\) для \(j \ne l\)) — главы, которые нужно понимать для понимания \(i\)-й главы.

Гарантируется, что сумма значений \(n\) и сумма значений \(k_i\) по всем наборам входных данных не превосходят \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных, если вы можете понять все главы, выведите, сколько раз вам нужно прочитать книгу целиком, иначе выведите \(-1\).

Примечание

В первом примере с первого прочтения вы поймете главы \(\{2, 4\}\), а со второго — главы \(\{1, 3\}\).

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

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

В четвертом примере вы поймете главы \(\{2, 3, 4\}\) с первого прочтения, и главу \(1\) со второго.

В пятом примере вы будем понимать главы по одной за прочтение, с \(5\)-й по \(1\)-ю.

F. Телебашни

Структуры данных *3400

В ряд расположены \(n\) городов, пронумерованных от \(1\) до \(n\).

В городах строятся телебашни. У телебашни, расположенной в \(i\)-м городе, есть высота \(h_i\) и радиус вещания \(w_i\). Эта башня может вещает в городе \(j\), если и только если выполнены следующие условия:

  • \(i \le j \le w_i\), и
  • для всех \(k\) таких, что \(i < k \le j\), выполняется \(h_k < h_i\).
Другими словами, телебашня в городе \(i\) вещает в городе \(j\), если \(j \ge i\), \(j\) находится в радиусе вещания \(i\)-й телебашни, и \(i\)-я телебашня строго выше всех башен между городами \(i\) и \(j\) (включая город \(j\)).

Изначально во всех городах \(i\) выполняется \(h_i = 0\) и \(w_i = i\).

Затем происходят \(q\) событий. \(i\)-е событие может быть одним из следующих:

  • Город \(c_i\) реконструирует свою телебашню так, что она станет самой высокой среди всех телебашен, и при этом ее радиус вещания \(w_{c_i}\) станет равным \(g_i\).
  • Пусть \(b_j\) равно количеству телебашен, вещающих в городе \(j\). Вам нужно вычислить сумму \(b_j\) по всем \(j\), удовлетворяющим \(l_i \le j \le r_i\).

Ваша задача — обрабатывать все события и вывести ответ на все запросы.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2\cdot10^5\)) — количество городов и количество событий.

Далее следуют \(q\) строк. \(i\)-я из этих строк начинается с одного целого числа \(p_i\) (\(p_i = 1\) или \(p_i = 2\)).

Если \(p_i = 1\), то реконструируется одна из телебашен. Далее следуют два целых числа \(c_i\) и \(g_i\) (\(1 \le c_i \le g_i \le n\)) — город, в котором реконструируется башня, и новый радиус вещания.

Если \(p_i = 2\), то вам нужно ответить на запрос. Далее следуют два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — границы отрезка городов в запросе.

Выходные данные

Для каждого запроса выведите сумму \(b_j\) в данном отрезке.

Примечание

В первом примере единственная телебашня в городе \(1\) вещает в городе \(1\) до и после реконструкции.

Во втором примере после каждой реконструкции массив \(b\) выглядят следующим образом:

  1. \([1, 1, 1, 2, 1]\);
  2. \([1, 2, 2, 3, 2]\);
  3. \([1, 2, 2, 1, 2]\);
  4. \([1, 1, 2, 1, 2]\);
  5. \([1, 1, 2, 1, 1]\).

D. Самый сильный билд

Бинарный поиск графы жадные алгоритмы Перебор поиск в глубину и подобное реализация Структуры данных хэши *2000

Иван играет в очередную roguelike компьютерную игру. В игре он управляет одним героем. У героя есть \(n\) слотов для экипировки предметов. Для \(i\)-го слота есть список из \(c_i\) предметов, \(j\)-й из них увеличивает силу героя на \(a_{i,j}\). Предметы для каждого из слотов попарно различные и упорядочены по возрастанию увеличения силы. То есть, \(a_{i,1} < a_{i,2} < \dots < a_{i,c_i}\).

В каждый слот Иван выбирает ровно один предмет. Пусть в \(i\)-й слот он выбрал \(b_i\)-й предмет из соответствующего списка. Последовательность выборов \([b_1, b_2, \dots, b_n]\) называется билдом.

Сила билда — это сумма увеличений силы предметов в нем. Некоторые билды в игре запрещены. Задан список из \(m\) попарно различных запрещенных билдов. Гарантируется, что хотя бы один билд не запрещен.

Какой билд среди не запрещенных в игре имеет максимальную силу? Если есть несколько билдов с максимальной силой, выведите любой из них.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 10\)) — количество слотов экипировки.

В \(i\)-й из следующих \(n\) строк содержится описание предметов для \(i\)-го слота. Сначала одно целое число \(c_i\) (\(1 \le c_i \le 2 \cdot 10^5\)) — количество предметов для \(i\)-го слота. Затем \(c_i\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i,c_i}\) (\(1 \le a_{i,1} < a_{i,2} < \dots < a_{i,c_i} \le 10^8\)).

Сумма \(c_i\) не превосходит \(2 \cdot 10^5\).

В следующей строке записано одно целое число \(m\) (\(0 \le m \le 10^5\)) — количество запрещенных билдов.

В каждой из следующих \(m\) строк содержится описание запрещенного билда — последовательность из \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le c_i\)).

Билды попарно различные, и существует хотя бы один не запрещенный билд.

Выходные данные

Выведите билд с максимальной силой среди не запрещенных в игре. Если есть несколько билдов с максимальной силой, выведите любой из них.

A. Another Sorting Problem

сортировки Строки Структуры данных *1100

Andi and Budi were given an assignment to tidy up their bookshelf of \(n\) books. Each book is represented by the book title — a string \(s_i\) numbered from \(1\) to \(n\), each with length \(m\). Andi really wants to sort the book lexicographically ascending, while Budi wants to sort it lexicographically descending.

Settling their fight, they decided to combine their idea and sort it asc-desc-endingly, where the odd-indexed characters will be compared ascendingly, and the even-indexed characters will be compared descendingly.

A string \(a\) occurs before a string \(b\) in asc-desc-ending order if and only if in the first position where \(a\) and \(b\) differ, the following holds:

  • if it is an odd position, the string \(a\) has a letter that appears earlier in the alphabet than the corresponding letter in \(b\);
  • if it is an even position, the string \(a\) has a letter that appears later in the alphabet than the corresponding letter in \(b\).
Input

The first line contains two integers \(n\) and \(m\) (\(1 \leq n \cdot m \leq 10^6\)).

The \(i\)-th of the next \(n\) lines contains a string \(s_i\) consisting of \(m\) uppercase Latin letters — the book title. The strings are pairwise distinct.

Output

Output \(n\) integers — the indices of the strings after they are sorted asc-desc-endingly.

Note

The following illustrates the first example.

C. Cyclic Sum

бпф Структуры данных теория чисел *3000

Denote a cyclic sequence of size \(n\) as an array \(s\) such that \(s_n\) is adjacent to \(s_1\). The segment \(s[r, l]\) where \(l < r\) is the concatenation of \(s[r, n]\) and \(s[1, l]\).

You are given an array \(a\) consisting of \(n\) integers. Define \(b\) as the cyclic sequence obtained from concatenating \(m\) copies of \(a\). Note that \(b\) has size \(n \cdot m\).

You are given an integer \(k\) where \(k = 1\) or \(k\) is a prime number. Find the number of different segments in \(b\) where the sum of elements in the segment is divisible by \(k\).

Two segments are considered different if the set of indices of the segments are different. For example, when \(n = 3\) and \(m = 2\), the set of indices for segment \(s[2, 5]\) is \(\{2, 3, 4, 5\}\), and for segment \(s[5, 2]\) is \(\{5, 6, 1, 2\}\). In particular, the segments \(s[1, 6], s[2,1], \ldots, s[6, 5]\) are considered as the same segment.

Output the answer modulo \(10^9 + 7\).

Input

The first line contains three integers \(n\), \(m\), and \(k\) (\(1 \leq n, m, k \leq 2 \cdot 10^5\), \(k = 1\) or \(k\) is a prime number).

The second line contains \(n\) integers \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 2 \cdot 10^5\)).

Output

Output an integer denoting the number of different segments in \(b\) where the sum of elements in the segment is divisible by \(k\), modulo \(10^9 + 7\).

Note

In the first example, all valid segments are \([1,4]\), \([2, 3]\), \([3, 5]\), and \([4, 2]\).

In the second example, one of the valid segments is \([1, 5]\).

E. Eye-Pleasing City Park Tour

Деревья Структуры данных *2600

There is a city park represented as a tree with \(n\) attractions as its vertices and \(n - 1\) rails as its edges. The \(i\)-th attraction has happiness value \(a_i\).

Each rail has a color. It is either black if \(t_i = 0\), or white if \(t_i = 1\). Black trains only operate on a black rail track, and white trains only operate on a white rail track. If you are previously on a black train and want to ride a white train, or you are previously on a white train and want to ride a black train, you need to use \(1\) ticket.

The path of a tour must be a simple path — it must not visit an attraction more than once. You do not need a ticket the first time you board a train. You only have \(k\) tickets, meaning you can only switch train types at most \(k\) times. In particular, you do not need a ticket to go through a path consisting of one rail color.

Define \(f(u, v)\) as the sum of happiness values of the attractions in the tour \((u, v)\), which is a simple path that starts at the \(u\)-th attraction and ends at the \(v\)-th attraction. Find the sum of \(f(u,v)\) for all valid tours \((u, v)\) (\(1 \leq u \leq v \leq n\)) that does not need more than \(k\) tickets, modulo \(10^9 + 7\).

Input

The first line contains two integers \(n\) and \(k\) (\(2 \leq n \leq 2 \cdot 10^5\), \(0 \leq k \leq n-1\)) — the number of attractions in the city park and the number of tickets you have.

The second line contains \(n\) integers \(a_1, a_2,\ldots, a_n\) (\(0 \leq a_i \leq 10^9\)) — the happiness value of each attraction.

The \(i\)-th of the next \(n - 1\) lines contains three integers \(u_i\), \(v_i\), and \(t_i\) (\(1 \leq u_i, v_i \leq n\), \(0 \leq t_i \leq 1\)) — an edge between vertices \(u_i\) and \(v_i\) with color \(t_i\). The given edges form a tree.

Output

Output an integer denoting the total happiness value for all valid tours \((u, v)\) (\(1 \leq u \leq v \leq n\)), modulo \(10^9 + 7\).

I. Illusions of the Desert

Деревья Структуры данных *2300

Chanek Jones is back, helping his long-lost relative Indiana Jones, to find a secret treasure in a maze buried below a desert full of illusions.

The map of the labyrinth forms a tree with \(n\) rooms numbered from \(1\) to \(n\) and \(n - 1\) tunnels connecting them such that it is possible to travel between each pair of rooms through several tunnels.

The \(i\)-th room (\(1 \leq i \leq n\)) has \(a_i\) illusion rate. To go from the \(x\)-th room to the \(y\)-th room, there must exist a tunnel between \(x\) and \(y\), and it takes \(\max(|a_x + a_y|, |a_x - a_y|)\) energy. \(|z|\) denotes the absolute value of \(z\).

To prevent grave robbers, the maze can change the illusion rate of any room in it. Chanek and Indiana would ask \(q\) queries.

There are two types of queries to be done:

  • \(1\ u\ c\) — The illusion rate of the \(x\)-th room is changed to \(c\) (\(1 \leq u \leq n\), \(0 \leq |c| \leq 10^9\)).
  • \(2\ u\ v\) — Chanek and Indiana ask you the minimum sum of energy needed to take the secret treasure at room \(v\) if they are initially at room \(u\) (\(1 \leq u, v \leq n\)).

Help them, so you can get a portion of the treasure!

Input

The first line contains two integers \(n\) and \(q\) (\(2 \leq n \leq 10^5\), \(1 \leq q \leq 10^5\)) — the number of rooms in the maze and the number of queries.

The second line contains \(n\) integers \(a_1, a_2, \ldots, a_n\) (\(0 \leq |a_i| \leq 10^9\)) — inital illusion rate of each room.

The \(i\)-th of the next \(n-1\) lines contains two integers \(s_i\) and \(t_i\) (\(1 \leq s_i, t_i \leq n\)), meaning there is a tunnel connecting \(s_i\)-th room and \(t_i\)-th room. The given edges form a tree.

The next \(q\) lines contain the query as described. The given queries are valid.

Output

For each type \(2\) query, output a line containing an integer — the minimum sum of energy needed for Chanek and Indiana to take the secret treasure.

Note

In the first query, their movement from the \(1\)-st to the \(2\)-nd room is as follows.

  • \(1 \rightarrow 5\) — takes \(\max(|10 + 4|, |10 - 4|) = 14\) energy.
  • \(5 \rightarrow 6\) — takes \(\max(|4 + (-6)|, |4 - (-6)|) = 10\) energy.
  • \(6 \rightarrow 2\) — takes \(\max(|-6 + (-9)|, |-6 - (-9)|) = 15\) energy.
In total, it takes \(39\) energy.

In the second query, the illusion rate of the \(1\)-st room changes from \(10\) to \(-3\).

In the third query, their movement from the \(1\)-st to the \(2\)-nd room is as follows.

  • \(1 \rightarrow 5\) — takes \(\max(|-3 + 4|, |-3 - 4|) = 7\) energy.
  • \(5 \rightarrow 6\) — takes \(\max(|4 + (-6)|, |4 - (-6)|) = 10\) energy.
  • \(6 \rightarrow 2\) — takes \(\max(|-6 + (-9)|, |-6 - (-9)|) = 15\) energy.

Now, it takes \(32\) energy.

L. Longest Array Deconstruction

дп разделяй и властвуй сортировки Структуры данных *2100

Mr. Chanek gives you a sequence \(a\) indexed from \(1\) to \(n\). Define \(f(a)\) as the number of indices where \(a_i = i\).

You can pick an element from the current sequence and remove it, then concatenate the remaining elements together. For example, if you remove the \(3\)-rd element from the sequence \([4, 2, 3, 1]\), the resulting sequence will be \([4, 2, 1]\).

You want to remove some elements from \(a\) in order to maximize \(f(a)\), using zero or more operations. Find the largest possible \(f(a)\).

Input

The first line contains one integer \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — the initial length of the sequence.

The second line contains \(n\) integers \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 2 \cdot 10^5\)) — the initial sequence \(a\).

Output

Output an integer denoting the largest \(f(a)\) that can be obtained by doing zero or more operations.

Note

In the first example, \(f(A) = 3\) by doing the following operations.

\([2,1,\textbf{4},2,5,3,7] \rightarrow [\textbf{2},1,2,5,3,7] \rightarrow [1,2,5,3,\textbf{7}] \rightarrow [1,2,\textbf{5},3] \rightarrow [1,2,3]\)

In the second example, \(f(A) = 2\) and no additional operation is needed.

M. Managing Telephone Poles

геометрия Структуры данных *2400

Mr. Chanek's city can be represented as a plane. He wants to build a housing complex in the city.

There are some telephone poles on the plane, which is represented by a grid \(a\) of size \((n + 1) \times (m + 1)\). There is a telephone pole at \((x, y)\) if \(a_{x, y} = 1\).

For each point \((x, y)\), define \(S(x, y)\) as the square of the Euclidean distance between the nearest pole and \((x, y)\). Formally, the square of the Euclidean distance between two points \((x_1, y_1)\) and \((x_2, y_2)\) is \((x_2 - x_1)^2 + (y_2 - y_1)^2\).

To optimize the building plan, the project supervisor asks you the sum of all \(S(x, y)\) for each \(0 \leq x \leq n\) and \(0 \leq y \leq m\). Help him by finding the value of \(\sum_{x=0}^{n} {\sum_{y=0}^{m} {S(x, y)}}\).

Input

The first line contains two integers \(n\) and \(m\) (\(0 \leq n, m < 2000\)) — the size of the grid.

Then \((n + 1)\) lines follow, each containing \((m + 1)\) integers \(a_{i, j}\) (\(0 \leq a_{i, j} \leq 1\)) — the grid denoting the positions of telephone poles in the plane. There is at least one telephone pole in the given grid.

Output

Output an integer denoting the value of \(\sum_{x=0}^{n} {\sum_{y=0}^{m} {S(x, y)}}\).

Note

In the first example, the nearest telephone pole for the points \((0,0)\), \((1,0)\), \((2,0)\), \((0,1)\), \((1,1)\), and \((2,1)\) is at \((0, 0)\). While the nearest telephone pole for the points \((0, 2)\), \((1,2)\), and \((2,2)\) is at \((0, 2)\). Thus, \(\sum_{x=0}^{n} {\sum_{y=0}^{m} {S(x, y)}} = (0 + 1 + 4) + (1 + 2 + 5) + (0 + 1 + 4) = 18\).

B. Building Forest Trails

снм Структуры данных *2800

There are \(n\) villages lying equidistant on a circle in the middle of a thick, impassable forest. From ancient times, it was impossible to move from one village to another, but technical progress has changed a lot. Now, there is a technology to build passable trails in the forest.

The building process consists of \(m\) events. Each event is either building a trail or querying if two villages are connected. Trails are built as straight lines connecting two villages. After a trail is built, anybody can walk along the trail from one village to another.

Moreover, if two trails cross, anybody can turn at the intersection, and if other trails leave a village you have just reached, they can also be used to walk along. So, for example, if villages are numbered \(1\) to \(6\) in the order around the circle, and there are trails \(1\) to \(3\), \(2\) to \(4\), and \(4\) to \(6\), then all villages, except the \(5\)-th, are reachable from the \(1\)-st village.

Given a list of \(m\) events, for each query, find if two given villages are reachable from each other at that moment.

Input

The first line contains two integers \(n\) (\(2 \le n \le 2\cdot 10^5\)) and \(m\) (\(1 \le m \le 3\cdot 10^5\)) — the number of villages and the number of events respectively.

Next \(m\) lines contain events. Each event description consists of three integers \(e\) (\(e\) is \(1\) or \(2\)), \(v\) (\(1 \le v \le n\)), and \(u\) (\(1 \le u \le n\), \(u \ne v\)). If \(e = 1\), then the event is building a trail between villages \(v\) and \(u\). If \(e = 2\), then the event is a query if the villages \(v\) and \(u\) are connected. It is guaranteed that each trail is built at most once.

Villages are numbered \(1\) to \(n\) in clockwise order around the circle.

Output

For each query print one character '0' if villages are not reachable, and '1' if villages are reachable from each other. Print answers for all queries as a single string in one line.

J. Just Kingdom

Перебор поиск в глубину и подобное Структуры данных *3100

The Just Kingdom is ruled by a king and his \(n\) lords, numbered \(1\) to \(n\). Each of the lords is a vassal of some overlord, who might be the king himself, or a different lord closer to the king. The king, and all his lords, are just and kind.

Each lord has certain needs, which can be expressed as a certain amount of money they need. However, if a lord, or the king, receives any money, they will first split it equally between all their vassals who still have unmet needs. Only if all the needs of all their vassals are met, they will take the money to fulfill their own needs. If there is any money left over, they will return the excess to their overlord (who follows the standard procedure for distributing money).

At the beginning of the year, the king receives a certain sum of tax money and proceeds to split it according to the rules above. If the amount of tax money is greater than the total needs of all the lords, the procedure guarantees everybody's needs will be fulfilled, and the excess money will be left with the king. However, if there is not enough money, some lords will not have their needs met.

For each lord, determine the minimum amount of tax money the king has to receive so that this lord's needs are met.

Input

The first line of the input contains the number of lords \(n\) (\(0 \le n \le 3 \cdot 10^5\)). Each of the next \(n\) lines describes one of the lords. The \(i\)-th line contains two integers: \(o_i\) (\(0 \le o_i < i\)) — the index of the overlord of the \(i\)-th lord (with zero meaning the king is the overlord), and \(m_i\) (\(1 \le m_i \le 10^6\)) — the amount of money the \(i\)-th lord needs.

Output

Print \(n\) integer numbers \(t_i\). The \(i\)-th number should be the minimum integer amount of tax money the king has to receive for which the needs of the \(i\)-th lord will be met.

Note

In the sample input, if the king receives \(5\) units of tax money, he will split it equally between his vassals — the lords \(1\), \(3\), and \(5\), with each receiving \(\frac{5}{3}\) of money.

Lord \(1\) will split the money equally between his vassals — \(2\) and \(4\), with each receiving \(\frac{5}{6}\). Lord \(5\) will keep the money (having no vassals). Lord \(3\) will keep \(1\) unit of money, and give the remaining \(\frac{2}{3}\) to the king. The king will then split the \(\frac{2}{3}\) between the vassals with unmet needs — \(1\) and \(5\), passing \(\frac{1}{3}\) to each. Lord \(5\) will keep the extra cash (now having a total of \(2\), still not enough to meet his needs). Lord \(1\) will split it equally between his vassals, and the extra \(\frac{1}{6}\) will be enough to meet the needs of lord \(4\).

E2. Оптимизация массива деком

жадные алгоритмы Структуры данных *1700

На самом деле, задачи E1 и E2 не имеют много общего. Вероятно, вам надо воспринимать их как две отдельные задачи.

Дан массив целых чисел \(a[1 \ldots n] = [a_1, a_2, \ldots, a_n]\).

Рассмотрим пустой дек (двухстороннюю очередь). Дек — это структура данных, поддерживающая добавление элементов как в начало, так и в конец. Так, если сейчас в деке лежат элементы \([3, 4, 4]\), при добавлении элемента \(1\) в начало получится последовательность \([\color{red}{1}, 3, 4, 4]\), а при добавлении в конец — \([3, 4, 4, \color{red}{1}]\).

Элементы массива по очереди перемещаются в изначально пустой дек, начиная с \(a_1\) и заканчивая \(a_n\). Перед добавлением каждого элемента в дек разрешается выбрать, добавить его в начало или в конец.

Например, если рассмотреть массив \(a = [3, 7, 5, 5]\), то одна из возможных последовательностей действий выглядит так:

\(\quad\) 1.положить \(3\) в начало дека:в деке лежит \([\color{red}{3}]\);
\(\quad\) 2.положить \(7\) в конец дека:в деке лежит \([3, \color{red}{7}]\);
\(\quad\) 3.положить \(5\) в конец дека:в деке лежит \([3, 7, \color{red}{5}]\);
\(\quad\) 4.положить \(5\) в начало дека:в деке лежит \([\color{red}{5}, 3, 7, 5]\);

Определите, какое минимальное число инверсий может быть в деке после того, как будет обработан весь массив.

Инверсией в последовательности \(d\) называется пара индексов \((i, j)\) такая, что \(i < j\) и \(d_i > d_j\). Например, в массиве \(d = [5, 3, 7, 5]\) ровно две инверсии — \((1, 2)\) и \((3, 4)\), так как \(d_1 = 5 > 3 = d_2\) и \(d_3 = 7 > 5 = d_4\).

Входные данные

В первой строке записано целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

В следующих \(2t\) строках даны описания наборов входных данных.

В описании каждого набора входных данных первая строка содержит целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер массива, а во второй строке через пробел перечислены \(n\) целых чисел \(a_i\) (\(-10^9 \le a_i \le 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите одно целое число — минимальное возможное количество инверсий, которое может быть в последовательности, находящейся в деке, после выполнения описанного алгоритма.

Примечание

Один из способов получить в деке из последовательности \([3, 7, 5, 5]\) (первый набор входных данных из примера) последовательность \([5, 3, 7, 5]\), содержащую только две инверсии, описан в условии задачи.

Также в этом примере можно было получить две инверсии, просто положив каждый элемент исходного массива в конец дека. В таком случае в деке будет лежать исходная последовательность \([3, 7, 5, 5]\), также содержащая ровно две инверсии.

C. Команды cd и pwd

*особая задача реализация Структуры данных *1400

Вася пишет оболочку для своей операционной системы. В ней непременно должны присутствовать команды для работы с директориями. Для начала он решил обойтись всего двумя командами: cd (смена текущей директории) и pwd (вывод на экран текущей директории).

Директории в операционной системе Васи образуют традиционную иерархическую древовидную структуру. Существует единственная корневая директория, обозначаемая символом слеш «/». У всех остальных директорий есть названия — непустые строки из строчных латинских букв. У каждой некорневой директории есть родительская директория — та, внутри которой она расположена. Эта директория обозначается как «..».

Команда cd принимает один параметр, являющийся путем в файловой системе. Команда меняет текущую директорию на директорию, расположенную по заданному пути. Путь состоит из названий директорий, разделённых слешами. В качестве названия директории может использоваться «..», что обозначает переход в родительскую директорию. «..» может встретиться вместо названия директории в любом месте пути, возможно, несколько раз. Если путь начинается со слеша, он считается абсолютным путём, то есть директория меняется на указанную, считая от корневой. Если параметр начинается с имени директории (или «..»), он считается относительным путём, то есть директория меняется на указанную, считая от текущей.

Команда pwd должна выводить абсолютный путь до текущей директории. Этот путь не должен содержать «..».

Изначально текущей директорией является корневая. Все директории, явно упоминаемые или проходимые косвенно внутри одной команды cd, считаются существующими. Гарантируется отсутствие попыток перехода в родительскую директорию корневой директории.

Входные данные

В первой строке входных данных записано единственное целое число n (1 ≤ n ≤ 50) — количество команд.

Далее следуют n строк по одной команде в каждой строке. В каждой из этих строк записана либо команда pwd, либо команда cd, после которой идёт отделённый пробелом непустой параметр.

В параметре команды cd используются только строчные латинские буквы, слеши и точки, не может идти два слеша подряд, точки встречаются только как название родительской псевдо-директории. Параметр команды cd не завершается слешем, кроме случая, когда это единственный символ, указывающий на корневую директорию. Параметр команды имеет длину от 1 до 200 символов включительно.

Директории в файловой системе могут иметь одинаковые имена.

Выходные данные

Для каждой команды pwd требуется вывести полный абсолютный путь текущей директории, завершённый слешем. Он должен начинаться со слеша и содержать список директорий в порядке вложенности от корневой до текущей, разделённый слешами. Этот путь не должен содержать точек.

A. Портал

дп жадные алгоритмы Перебор реализация Структуры данных *1700

CQXYM нашел прямоугольник \(A\) размера \(n \times m\), состоящий из \(n\) строк и \(m\) столбцов. Каждый блок прямоугольника либо является обсидиановым блоком, либо пуст. За одну операцию CQXYM может заменить обсидиановый блок пустым или пустой — обсидиановым.

Прямоугольник \(M\) размера \(a \times b\) называется порталом тогда и только тогда, когда он удовлетворяет следующим условиям:

  • \(a \geq 5,b \geq 4\).
  • Для всех \(1 < x < a\), блоки \(M_{x,1}\) и \(M_{x,b}\) обсидиановые.
  • Для всех \(1 < x < b\), блоки \(M_{1,x}\) и \(M_{a,x}\) обсидиановые.
  • Для всех \(1<x<a,1<y<b\), блок \(M_{x,y}\) пустой.
  • \(M_{1, 1}, M_{1, b}, M_{a, 1}, M_{a, b}\) могут быть любого типа.

Обратите внимание, что портал имеет \(a\) строк и \(b\) столбцов (не \(b\) строк и \(a\) столбцов).

CQXYM хочет узнать, за какое минимальное число операций один из подпрямоугольников можно сделать порталом.

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(t \geq 1\)) — количество наборов входных данных.

Для каждого набора входных данных в первой строке содержатся два целых числа \(n\) и \(m\) (\(5 \le n \le 400\), \(4 \le m \le 400\)).

Далее следуют \(n\) строк по \(m\) символов \(0\) или \(1\) в каждой. Если \(j\)-й символ \(i\)-й строки равен \(0\), блок \(A_{i,j}\) пуст. В противном случае блок \(A_{i,j}\) обсидиановый.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(400\).

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(400\).

Выходные данные

Выведите \(t\) ответов, по одному на строке.

Примечание

В первом тестовом случае портал в итоге выглядит следующим образом:


1110
1001
1001
1001
0111

C. Техническое обслуживание поездов

Перебор реализация Структуры данных *2200

Кавасиро Нитори — талантливый инженер. Поэтому ее назначили ответственной по обслуживанию поездов.

Всего существуют \(n\) моделей поездов, и в депо, в котором работает Нитори, в любой момент времени будет не более одного поезда каждой модели. Изначально в депо нет поездов, и в каждый из следующих \(m\) дней либо один поезд будет добавлен в депо, либо один поезд будет убран из депо. Когда добавляется поезд \(i\)-й модели в день \(t\), он будет работать \(x_i\) дней (включая день \(t\)), затем будет на ремонте в течение \(y_i\) дней, затем опять работать \(x_i\) дней, и так далее до тех пор, пока его не уберут из депо.

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

В день, когда поезд убирают, он не считается находящимся в ремонте.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n,m \le 2 \cdot 10^5\)).

Каждая \(i\)-я из следующих \(n\) строк содержит два целых числа \(x_i,y_i\) (\(1 \le x_i,y_i \le 10^9\)).

Далее следуют \(m\) строк, содержащих два целых числа \(op\) и \(k\) (\(1 \le k \le n\), \(op = 1\) или \(op = 2\)). Если \(op=1\), это означает, что в этот день добавляется поезд \(k\)-й модели, иначе поезд модели \(k\) убирают. Гарантируется, что когда добавляется поезд модели \(x\), в депо нет поездов такой модели, а когда поезд модели \(x\) убирают, в депо есть такой поезд.

Выходные данные

Выведите \(m\) строк, каждая \(i\)-я из которых содержит одно целое число, обозначающее количество поездов, находящихся на ремонте в \(i\)-й день.

Примечание

Рассмотрим первый пример.

Первый день: Нитори добавляет поезд модели \(3\). Работает только поезд модели \(3\), и ни один поезд не находится в ремонте.

Второй день: Нитори добавляет поезд модели \(1\), поезд модели \(1\) работает, а поезд модели \(3\) находится в ремонте.

Третий день: Нитори убирает поезд модели \(1\). Ситуация такая же, как и в первый день.

Четвертый день: Нитори убирает поезд модели \(3\). Нет ни одного поезда.

E. Строительство железных дорог

графы Конструктив кратчайшие пути Перебор Структуры данных *3400

Поскольку железнодорожная система в Генсоке часто перегружена, инженер-энтузиастка Кавасиро Нитори планирует построить больше железных дорог, чтобы уменьшить заторы.

В Генсоке есть \(n\) станций, пронумерованных от \(1\) до \(n\), и \(m\) железных дорог с двусторонним движением. Каждая железная дорога с двусторонним движением соединяет две разные станции и имеет положительную целочисленную длину \(d\). Никакие две железные дороги не соединяют одни и те же станции. Среди \(n\) станций станция \(1\) является главной. Вы можете добраться до любой станции от любой другой пользуясь только дорогами с двусторонним движением.

Из-за технологических ограничений Нитори может строить только односторонние железные дороги. Их длина также может быть произвольным целым положительным числом. Строительство железной дороги в один конец от станции \(u\) будет стоить \(w_u\) единиц ресурсов независимо от станции назначения.

Чтобы уменьшить заторы, Нитори планирует, что после строительства из станции \(1\) в любую другую станцию должно быть хотя бы два различных кратчайших пути, не имеющие общих станций, кроме станции \(1\) и конечной станции. Кроме того, Нитори не хочет изменять длину кратчайшего пути от станции \(1\) до любой другой станции.

В силу разных причин стоимость строительства новой железной дороги иногда может расти бесконтрольно. Произойдут \(q\) событий, где \(i\)-е событие увеличивает стоимость постройки односторонних дорог из станции \(k_i\) на \(x_i\).

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

Входные данные

Первая строка входных данных содержит три целых числа \(n\), \(m\), \(q\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le m \le 3 \cdot 10^5\), \(0 \le q \le 2\cdot10^5\)).

Вторая строка содержит \(n\) целых чисел \(w_1,w_2,\ldots,w_n\) (\(1 \le w_i \le 10^9\)).

Каждая из следующих \(m\) строк содержит три целых числа \(u\), \(v\), \(d\) (\(1 \le u,v \le n\), \(u \ne v\), \(1 \le d \le 10^9\)), описывающие двустороннюю железную дорогу между станциями \(u\) и \(v\) длины \(d\).

\(i\)-я из следующих \(q\) строк содержит два целых числа \(k_i,x_i\) (\(1 \le k_i \le n, 1 \le x_i \le 4 \times 10^8\)) — описание событий.

Выходные данные

Выведите \(q+1\) строк, где \(i\)-я строка содержит одно целое число, равное минимальной стоимости строительства железной дороги после \(i-1\)-го события (\(0\)-е событие — ни одного события не произошло).

Примечание

Во втором тестовом примере Нитори может строить железные дороги следующим образом: \(1 \rightarrow 2\), \(1 \rightarrow 3\), \(1 \rightarrow 4\), \(2 \rightarrow 8\). Стоимость в таком случае составит \(14 + 14 + 14 + 4 = 46\).

C. Баба Капа вяжет шарф

жадные алгоритмы Перебор Строки Структуры данных *1200

Баба Капа решила связать шарф и попросила Деда Шера сделать для него шаблон, представляющий собой строку из строчных букв латинского алфавита. Деда Шер написал строку \(s\) длины \(n\).

Баба Капа хочет связать красивый шарф, а по ее мнению красивый шарф можно связать только из строки, являющейся палиндромом. Она хочет изменить шаблон, написанный Дедой Шером, но, чтобы его сильно не обидеть, она выберет одну любую строчную букву латинского алфавита и уберет какие-то (на свой выбор, возможно никакие или все) вхождения этой буквы в строку \(s\).

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

Строка называется палиндромом, если она одинаково читается слева направо и справа налево. Например, строки 'kek', 'abacaba', 'r' и 'papicipap' — палиндромы, а строки 'abb' и 'iq' — нет.

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Следующие \(2 \cdot t\) строк содержат описание наборов входных данных. Описание каждого набора входных данных состоит из двух строк.

Первая строка описания каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — длину строки.

Вторая строка описания каждого набора входных данных содержит строку \(s\) из \(n\) строчных букв латинского алфавита.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество символов, которое потребуется удалить Бабе Капе, чтобы строка стала палиндромом, если это возможно, а если невозможно, выведите \(-1\).

Примечание

В первом наборе входных данных можно выбрать букву 'a' и удалить ее первое и последнее вхождение, получится строка 'bcaacb', являющаяся палиндромом. Также можно выбрать букву 'b' и удалить все ее вхождения, получится строка 'acaaca', также являющаяся палиндромом.

Во втором наборе входных данных можно показать, что нельзя выбрать букву и удалить какие-то ее вхождения так, чтобы получилась строка-палиндром.

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

E. Пчеленок и подотрезки

Бинарный поиск дп жадные алгоритмы математика Структуры данных *2000

Пчеленок решил сделать Миле подарок. Пчеленок уже купил массив \(a\) длины \(n\), но дарить просто массив слишком банально. Вместо этого он решил подарить Миле подотрезки этого массива!

Пчеленок хочет, чтобы его подарок был красивым, поэтому он решил выбрать \(k\) непересекающихся подотрезков массива \([l_1,r_1]\), \([l_2,r_2]\), \(\ldots\) \([l_k,r_k]\) так, что:

  • длина первого отрезка \([l_1,r_1]\) равна \(k\), длина второго отрезка \([l_2,r_2]\) равна \(k-1\), \(\ldots\), длина \(k\)-го отрезка \([l_k,r_k]\) равна \(1\)
  • для любых \(i<j\) \(i\)-й подотрезок встречается в массиве раньше \(j\)-го (т.е. \(r_i<l_j\))
  • суммы в этих подотрезках строго возрастают (т.е. пусть \(sum(l \ldots r) = \sum\limits_{i=l}^{r} a_i\) — сумма чисел на подотрезке массива \([l,r]\), тогда \(sum(l_1 \ldots r_1) < sum(l_2 \ldots r_2) < \ldots < sum(l_k \ldots r_k)\)).

Пчеленок также хочет, чтобы его подарок был как можно больше, поэтому он просит вас узнать, при каком максимальном \(k\) он сможет сделать подарок Миле!

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Следующие \(2 \cdot t\) строк содержат описания наборов входных данных. Описание каждого набора состоит из двух строк.

Первая строка описания каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальное возможное значение \(k\).

G. Кузя и домашнее задание

Структуры данных теория чисел *2600

Кузя начал ходить в школу. На уроке математики ему дали домашнее задание. Для этого задания ему выдали массив натуральных чисел \(a\) длины \(n\) и массив символов \(b\) длины \(n\), состоящий только из символов '*' или '/'.

Давайте определим траекторию вычислений для отрезка \([l; r]\) (\(1 \le l \le r \le n\)) следующим образом:

  • Пусть изначально \(x=1\). Для всех \(i\) от \(l\) до \(r\) последовательно выполним следующее: если \(b_i=\) '*', \(x=x*a_i\), а если \(b_i=\) '/', то \(x=\frac{x}{a_i}\). Траекторией вычисления для отрезка \([l; r]\) назовем список всех \(x\), которые были получены в процессе вычислений (их будет ровно \(r - l + 1\)).

Например, пусть \(a=[7,\) \(12,\) \(3,\) \(5,\) \(4,\) \(10,\) \(9]\), \(b=[/,\) \(*,\) \(/,\) \(/,\) \(/,\) \(*,\) \(*]\), \(l=2\), \(r=6\), тогда траектория вычислений для этого отрезка — это \([12,\) \(4,\) \(0.8,\) \(0.2,\) \(2]\).

Давайте назовем отрезок \([l;r]\) простым, если траектория вычислений для него содержит только целые числа.

Кузе нужно посчитать количество простых отрезков \([l;r]\) (\(1 \le l \le r \le n\)). Так как у него явно нет ни времени, ни желания проводить вычисления для всех вариантов, он попросил вас написать программу, чтобы узнать это количество!

Входные данные

Первая строка содержит единственное целое число \(n\) (\(2 \le n \le 10^6\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^6\)).

Третья строка содержит \(n\) символов без пробелов между ними — массив \(b_1, b_2 \ldots b_n\) (\(b_i=\) '/' или \(b_i=\) '*' для всех \(1 \le i \le n\)).

Выходные данные

В единственной строке выведите одно целое число — количество простых отрезков \([l;r]\).

C. Омкар и определение

дп Структуры данных *1700

Условие задачи вырисовывается ниже, наполняя вас определенностью.

Рассмотрим таблицу, в которой некоторые клетки пустые, а некоторые заполнены. Назовем клетку в этой таблице хорошей, если, начиная с этой клетки, вы можете выйти из таблицы, двигаясь вверх и влево только через пустые клетки. Это касается и стартовой клетки, поэтому все заполненные клетки не являются хорошими. Обратите внимание, вы можете покинуть таблицу из любой крайней левой клетки (в первом столбце), двигаясь влево, а также из любой крайней верхней клетки (в первой строке) — двигаясь вверх.

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

Вам дана таблица \(a\) размером \(n \times m\), т. е. таблица с \(n\) строками и \(m\) столбцами. Вам нужно ответить на \(q\) запросов (\(1 \leq q \leq 2 \cdot 10^5\)). Каждый запрос задается двумя целыми числами \(x_1, x_2\) (\(1 \leq x_1 \leq x_2 \leq m\)) и спрашивает, является ли часть таблицы \(a\), состоящая из столбцов \(x_1, x_1 + 1, \ldots, x_2 - 1, x_2\), определяемой.

Входные данные

Первая строка содержит два целых числа \(n, m\) (\(1 \leq n, m \leq 10^6\), \(nm \leq 10^6\))  — размеры таблицы \(a\).

Далее следуют \(n\) строк. В \(y\)-й строке содержится \(m\) символов, \(x\)-й из которых «X», если клетка на пересечении \(y\)-й строки и \(x\)-го столбца заполнена, и «.», если она пуста.

Следующая строка содержит одно целое число \(q\) (\(1 \leq q \leq 2 \cdot 10^5\))  — количество запросов.

Далее следуют строки по \(q\). Каждая строка содержит два целых числа \(x_1\) и \(x_2\) (\(1 \leq x_1 \leq x_2 \leq m\)), представляющих запрос, спрашивающий, является ли часть таблицы \(a\), содержащая только столбцы \(x_1, x_1 + 1, \ldots, x_2 - 1, x_2\), определяемой.

Выходные данные

Для каждого запроса выведите одну строку, содержащую «YES», если часть таблицы, указанная в запросе, определяемая, и «NO» в противном случае. Вывод не чувствителен к регистру (поэтому «YEs» и «No» также будут приняты).

Примечание

Для каждого запроса из примера соответствующая часть таблицы изображена дважды: сначала в исходном формате, затем с каждой клеткой, помеченной как «E», если она хорошая, и «N» в противном случае.

Для первого запроса:


..X EEN
... EEE
... EEE
... EEE


Для второго запроса:


X N
. E
. E
. E

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



Для третьего запроса:


XX NN
X. NN
X. NN
X. NN

Эта часть таблицы не может быть определена только по тому, является ли каждая клетка хорошей, потому что таблица, показанная ниже, также производит показанную выше «таблицу выходимости клеток»:


XX
XX
XX
XX


Для четвертого запроса:


X N
. E
. E
. E


Для пятого запроса:


..XXX EENNN
...X. EEENN
...X. EEENN
...X. EEENN

Этот запрос — это просто вся таблица. Она не может быть определена только по тому, является ли каждая клетка хорошей, потому что таблица, показанная ниже, также производит показанную выше «таблицу выходимости клеток»:


..XXX
...XX
...XX
...XX

G. Омкар и путешествия во времени

математика Структуры данных *3000

El Psy Kongroo.

Омкар смотрит Steins;Gate.

В Steins;Gate, Окабэ Ринтару нужно выполнить \(n\) заданий (\(1 \leq n \leq 2 \cdot 10^5\)). К сожалению, он не знает, когда ему нужно выполнить задания.

Изначально время равно \(0\). Путешествие во времени происходит по следующим правилам:

  • Для каждого \(k = 1, 2, \ldots, n\), Окабэ поймет в момент времени \(b_k\), что он должен был выполнить \(k\)-е задание в момент времени \(a_k\) (\(a_k < b_k\)).

  • Когда он осознает это, если \(k\)-е задание уже было выполнено в момент времени \(a_k\), Окабэ сохраняет обычный ход времени. В противном случае, он перемещается во времени к моменту \(a_k\).

  • Если Окабэ переместится во времени к моменту \(a_k\), то все задания после этого времени снова станут невыполненными. То есть, для каждого \(i\), если \(a_i>a_k\), \(a_i\) станет невыполненным, если оно было выполненным (если оно было невыполненным, ничего не изменится).

  • У Окабэ плохая память, поэтому он может путешествовать во времени во время \(a_k\) только сразу после того, как попадет во время \(b_k\) и узнает, что он должен был выполнить \(k\)-е задание во время \(a_k\). То есть, даже если Окабэ уже выполнял \(k\)-е задание ранее, он не вспомнит об этом до того, как опять наткнется на информацию об этом задании в момент времени \(b_k\).

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

Существует определенный набор \(s\) заданий, такой, что в первый момент, когда все задания из \(s\) будут одновременно выполнены (независимо от того, выполнены ли в данный момент какие-либо другие задания), произойдет забавная сцена. Окабэ нравится эта сцена, и он хочет знать, сколько раз Окабэ будет перемещаться во времени, прежде чем эта сцена произойдет. Найдите это число по модулю \(10^9 + 7\). Можно доказать, что в конце концов все \(n\) заданий будут выполнены, поэтому ответ всегда существует.

Входные данные

Первая строка содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\))  — количество заданий, которые должен выполнить Окабэ.

Далее следует \(n\) строк. В \(k\)-й из этих строк содержатся два целых числа \(a_k\) и \(b_k\) (\(1 \leq a_k < b_k \leq 2n\))  — время, в которое Окабэ должен выполнить \(k\)-ю задачу и время, когда он узнает об этом соответственно. Все \(2n\) этих времен попарно различны (поэтому каждое время от \(1\) до \(2n\) включительно встречается во входных данных ровно один раз).

Следующая строка содержит единственное целое число \(t\) (\(1 \leq t \leq n\))  — размер набора \(s\) задач, которые приводят к смешной сцене.

Последняя строка содержит \(t\) целых чисел \(s_1, s_2, \ldots, s_t\)  — (\(1 \leq s_k \leq n\), числа \(s_1, s_2, \ldots, s_t\) различны)  — множество \(s\) задач.

Выходные данные

Выведите одно целое число  — количество раз, которое время Окабэ будет путешествовать во времени, пока все задачи в наборе \(s\) не будут одновременно завершены, по модулю \(10^9 + 7\),

Примечание

Для первого примера все задания должны быть выполнены, чтобы произошла забавная сценка.

Первоначально время равно \(0\). Ничего не происходит до момента времени \(3\), когда Окабэ понимает, что он должен был выполнить \(2\)-ю задачу в момент времени \(2\). Затем он перемещается во времени в момент времени \(2\) и выполняет задание.

Поскольку задание уже выполнено, он не перемещается во времени снова, когда время снова становится \(3\). Однако в момент времени \(4\) он перемещается в момент времени \(1\), чтобы выполнить \(1\)-е задание.

Это отменяет \(2\)-е задание. Это означает, что задание \(2\) на данный момент не выполнено, а значит, смешная сцена не произойдет в этот момент, несмотря на то что задание \(1\) на данный момент выполнено, и Окабэ ранее выполнял задачу \(2\).

Когда снова наступит время \(3\), он снова вернется во время \(2\) и снова выполнит \(2\)-е задание.

Теперь все задания выполнены, а Окабэ успел переместиться во времени \(3\) раза.

Во втором примере Окабэ предстоит выполнить те же задания. Однако на этот раз для того, чтобы произошла забавная сцена, необходимо выполнить только первое задание. Прочитав приведенный выше пример, вы можете увидеть, что это произойдет, как только Окабэ переместится во времени в момент \(2\).

H. Омкар и туры

Деревья разделяй и властвуй сортировки Структуры данных *3300

Омкар устраивает туры по своей стране, Омкарландии! В Омкарландии \(n\) городов, и, что довольно любопытно, существует ровно \(n-1\) двунаправленных дорог, соединяющих города друг с другом. Гарантируется, что вы можете добраться до любого города из любого другого города через сеть дорог.

Каждый город имеет значение удовольствия \(e\). У каждой дороги есть пропускная способность \(c\), обозначающее максимальное количество автомобилей, которое может на ней находиться, и соответствующая плата за проезд \(t\). Однако система взимания платы в Омкарландии имеет интересную особенность: если автомобиль проезжает по нескольким дорогам за одну поездку, он платит только самую высокую плату за проезд по любой отдельной дороге, по которой он проехал. (Другими словами, он платит \(\max t\) по всем дорогам, по которым они проехал). Если автомобиль не проезжает ни одной дороги, он платит \(0\) за проезд.

Омкар решил принять \(q\) туристических групп. Каждая туристическая группа состоит из \(v\) автомобилей, стартующих из города \(x\). (Следует помнить, что туристическая группа с \(v\) автомобилями может передвигаться только по дорогам с пропускной способностью \(\geq v\)). Будучи организатором тура, Омкар хочет, чтобы его группы получили как можно больше удовольствия, но при этом он должен возместить своим группам расходы на проезд по дорогам, которые они должны заплатить. Таким образом, для каждой туристической группы Омкар хочет знать две вещи: во-первых, какое максимальное значение удовольствия имеет город \(y\) — город с максимальным значением удовольствия среди тех, до которых туристическая группа может добраться из своего начального города, и, во-вторых, сколько Омкар должен будет заплатить с каждого автомобиля, чтобы возместить расходы всей группы на поездку из \(x\) в \(y\)? (Эта поездка из \(x\) в \(y\) всегда будет проходить по кратчайшему пути из \(x\) в \(y\)).

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

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2 \leq n \leq 2 \cdot 10^5\), \(1 \leq q \leq 2 \cdot 10^5\)), обозначающих количество городов и количество групп, соответственно.

Следующая строка содержит \(n\) целых чисел \(e_1, e_2, \ldots, e_n\) (\(1 \leq e_i \leq 10^9\)), где \(e_i\) представляет собой значение удовольствия для города \(i\).

Следующие \(n-1\) строки содержат по четыре целых числа \(a\), \(b\), \(c\) и \(t\) (\(1 \leq a,b \leq n\), \(1 \leq c \leq 10^9\), \(1 \leq t \leq 10^9\)), обозначающих дорогу между городом \(a\) и городом \(b\) с пропускной способностью \(c\) и платой за проезд \(t\).

Следующие \(q\) строк содержат по два целых числа \(v\) и \(x\) (\(1 \leq v \leq 10^9\), \(1 \leq x \leq n\)), обозначающих количество автомобилей в туристической группе и начальном городе, соответственно.

Выходные данные

Выведите \(q\) строк. \(i\)-я строка должна содержать два целых числа: максимально возможное значение удовольствия города, до которого может добраться \(i\)-я туристическая группа, и количество денег на автомобиль, которое необходимо Омкару, чтобы гарантировать возмещение расходов \(i\)-й туристической группы.

Примечание

Карта с первого примера показана ниже. Для вершин нежирные числа представляют индексы, а жирные — значения удовольствия. Для ребер нежирные цифры обозначают пропускную способность, а жирные — стоимость проезда.

Для первого запроса туристическая группа размером \(1\), стартующая из города \(3\), может достичь городов \(1\), \(2\), \(3\), \(4\) и \(5\). Таким образом, наибольшее значение удовольствия, которого они могут достичь, равно \(3\). Если туристическая группа решит поехать в город \(4\), Омкар должен будет заплатить \(8\) за машину, что является максимумом.

Для второго запроса туристическая группа размером \(9\), стартующая из города \(5\), может достичь только города \(5\). Таким образом, наибольшее достижимое значение удовольствия по-прежнему составляет \(3\), и Омкар заплатит \(0\) за автомобиль.

Для третьего запроса туристическая группа размером \(6\), стартующая из города \(2\), может достичь городов \(2\) и \(4\). Наибольшее достижимое значение удовольствия снова равно \(3\). Если туристическая группа решит поехать в город \(4\), Омкар должен будет заплатить \(2\) за машину, что является максимумом.

Карта второй выборки показана ниже:

Для первого запроса, туристическая группа размером \(5\), стартующая из города \(1\), может достичь только города \(1\). Таким образом, их максимальная ценность удовольствия составляет \(1\), а стоимость, которую придется заплатить Омкару, равна \(0\) за автомобиль.

Для второго запроса туристическая группа размером \(4\), стартующая из города \(1\), может добраться до городов \(1\) и \(2\). Таким образом, их максимальная ценность удовольствия составляет \(2\), а Омкар заплатит \(1\) за автомобиль.

Для третьего запроса, туристическая группа размером \(3\), стартующая из города \(1\), может добраться до городов \(1\), \(2\) и \(3\). Таким образом, их максимальная ценность удовольствия составляет \(3\), и Омкар заплатит \(1\) за автомобиль.

Для четвертого запроса туристическая группа размером \(2\), стартующая из города \(1\), может добраться до городов \(1\), \(2\), \(3\) и \(4\). Таким образом, их максимальная ценность удовольствия составляет \(4\), и Омкар заплатит \(1\) за автомобиль.

Для пятого запроса туристическая группа размером \(1\), стартующая из города \(1\), может добраться до городов \(1\), \(2\), \(3\), \(4\) и \(5\). Таким образом, их максимальное удовольствие составляет \(5\), и Омкар заплатит \(1\) за машину.

E. Игра с камнями

Бинарный поиск жадные алгоритмы игры Структуры данных *2300

Боб решил отдохнуть от домашних заданий по матанализу и придумал для себя игру.

Игра происходит на последовательности куч камней, которая может быть представлена как массив \(s_1, \ldots, s_k\), где \(s_i\) — количество камней в \(i\)-й куче. За один ход Боб выбирает две соседние непустые кучи \(i\) и \(i+1\) и убирает по одному камню из каждой. Если куча стала пустой, то её соседи не становятся соседними. Игра заканчивается, когда у Боба нет доступных ходов. Боб считает, что он выиграл, если в конце игры все кучи стали пустыми.

Мы считаем последовательность куч выигрышной, если Боб может начать с неё и выиграть после некоторой последовательности ходов.

Вам дана последовательность \(a_1, \ldots, a_n\), посчитайте количество выигрышных подотрезков \(a\). Другими словами, найдите количество отрезков \([l, r]\) (\(1 \leq l \leq r \leq n\)) таких, что \(a_l, a_{l+1}, \ldots, a_r\) является выигрышной последовательностью куч.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 3 \cdot 10^5\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит единственное целое число \(n\) (\(1 \leq n \leq 3 \cdot 10^5\)).

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — ответ на задачу.

Примечание

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

Во втором наборе входных данных каждый подотрезок не является выигрышным.

В четвертом наборе входных данных подотрезок \([1, 4]\) выигрышный, потому что Боб может сделать ходы со следующими парами соседних кучек: \((2, 3)\), \((1, 2)\), \((3, 4)\). Другой выигрышный подотрезок это \([2, 3]\).

D. Ещё одна задача на сортировку

математика Структуры данных *1900

У Пети есть массив целых чисел \(a_1, a_2, \ldots, a_n\). Ему нравятся только отсортированные массивы. К сожалению, имеющийся массив может быть произвольным, поэтому Петя хочет его отсортировать.

Петя любит придумывать различные усложнения, поэтому он хочет осортировать массив, используя только \(3\)-циклы. Более формально, за одну операцию он может выбрать \(3\) попарно различные позиции \(i\), \(j\) и \(k\) (\(1 \leq i, j, k \leq n\)) и применить цикл (\(i \to j \to k \to i\)) к массиву \(a\). Это действие одновременно положит значение \(a_i\) на позицию \(j\), значение \(a_j\) на позицию \(k\), и значение \(a_k\) на позицию \(i\), а остальные элементы массива останутся неизменными.

Например, если массив \(a\) равен \([10, 50, 20, 30, 40, 60]\), и Петя выбирает \(i = 2\), \(j = 1\) и \(k = 5\), то массив изменяется на \([\underline{50}, \underline{40}, 20, 30, \underline{10}, 60]\).

Петя может применять произвольное количество \(3\)-циклов (возможно, ноль). Определите, может ли Петя отсортировать массив \(a\), то есть сделать его неубывающим.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 5 \cdot 10^5\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит единственное целое число \(n\) (\(1 \leq n \leq 5 \cdot 10^5\)) — длину массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если Петя может отсортировать массив \(a\) с помощью \(3\)-циклов, и «NO» (без кавычек) в противном случае. Вы можете выводить каждую букву в любом регистре (верхнем или нижнем).

Примечание

В \(6\)-м наборе входных данных Петя может применить \(3\)-цикл \(1 \to 3 \to 2 \to 1\) для сортировки массива.

В \(7\)-м наборе входных данных Петя может сначала применить \(1 \to 3 \to 2 \to 1\), получив \(a = [1, 4, 2, 3]\). Затем он может применить \(2 \to 4 \to 3 \to 2\) и окончательно отсортировать массив.

E. Запросы частот

Деревья поиск в глубину и подобное Структуры данных *2400

У Пети есть подвешенное дерево, на вершинах которого написаны целые числа. Корень — вершина \(1\). Вам нужно ответить на некоторые вопросы про это дерево.

Дерево — это связный ацикличный граф. Подвешенное дерево имеет специальную вершину — корень. Родителем вершины \(v\) называется следующая вершина на кратчайшем пути от \(v\) до корня.

Каждый запрос задан тройкой целых чисел \(v\), \(l\), и \(k\). Чтобы на него ответить вы должны проделать следующие шаги:

  • Сначала, выпишите последовательность чисел, записанных на вершинах простого пути от \(v\) до корня (включая вершину \(v\) и сам корень).
  • Посчитайте, сколько раз каждой число встречается в этой последовательности. Выкиньте из неё числа, которые встречаются меньше, чем \(l\) раз.
  • Преобразуйте последовательность, удалив из неё дубликаты, и упорядочив числа в ней возрастанию количеств вхождений в изначальную последовательность. В случая совпадения таких количеств, два числа располагаются в произвольном относительном порядке.
  • Ответом на запрос является число, стоящее \(k\)-м в получившейся последовательности. Важно отметить, что так как порядок определён неоднозначно, то в качестве ответа примется любое число, которое могло стоять на этой позиции. Также может получиться, что в результирующей последовательности меньше \(k\), в таком случае ответом считается \(-1\).

Например, если последовательность чисел на пути от \(v\) до корня равна \([2, 2, 1, 7, 1, 1, 4, 4, 4, 4]\), \(l = 2\) и \(k = 2\), то ответ равен \(1\).

Ответьте, пожалуйста, на все вопросы про дерево.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^6\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит одно целое число \(n\), \(q\) (\(1 \leq n, q \leq 10^6\)) — количество вершин в дереве и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)), где \(a_i\) — число записанное на \(i\)-й вершине.

Третья строка содержит \(n-1\) целых чисел \(p_2, p_3, \ldots, p_n\) (\(1 \leq p_i \leq n\)), где \(p_i\) — родитель вершины \(i\). Гарантируется, что значения \(p\) задают корректное дерево.

Каждая из последующих \(q\) строк содержит по три целых числа \(v\), \(l\), \(k\) (\(1 \leq v, l, k \leq n\)) — описание вопросов.

Гарантируется, что сумма значений \(n\) и сумма значений \(q\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого из запросов, выведите ответ на него. Если ответов несколько, то выведите любой.

F. Прыжки по массиву

Бинарный поиск графы Структуры данных *3500

Вам задан массив целых чисел \(a\) размера \(n\) и перестановка \(p\) размера \(n\). К вам приходят \(q\) запросов трех типов:

  1. Даны числа \(l\) и \(r\). Требуется посчитать сумму чисел массива \(a\) на отрезке c \(l\) по \(r\): \(\sum\limits_{i=l}^{r} a_i\).
  2. Даны числа \(v\) и \(x\). Давайте представим \(p\) в виде ориентированного графа, у которого \(n\) вершин и \(n\) рёбер \(i \to p_i\). Пусть \(C\) — это множество вершин, которые достижимы из \(v\) в графе. Требуется прибавить число \(x\) ко всем \(a_u\) таким, что \(u\) лежит в \(C\).
  3. Даны индексы \(i\) и \(j\). Вам нужно поменять местами значения \(p_i\) и \(p_j\).
Граф, получаемый из перестановки \([2, 3, 1, 5, 4]\).

От вас требуется вывести ответы на все запросы \(1\) вида.

Входные данные

В первой строке находится единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер массива и перестановки.

Во второй строке входных данных находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^8 \le a_i \le 10^8\)).

В третьей строке входных данных находится \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)).

В четвертой строке находится единственное целое число \(q\) — количество запросов (\(1 \le q \le 2 \cdot 10^5\)).

В следующих \(q\) строках заданы запросы. В \(i\)-й строке находится целое число \(t_i\) (\(1 \le t_i \le 3\)) — тип запроса.

  • Если \(t_i = 1\), то в \(i\)-й строке заданы еще два целых числа: \(l\), \(r\) (\(1 \le l \le r \le n\)).
  • Если \(t_i = 2\), то в \(i\)-й строке заданы еще два целых числа: \(v\), \(x\) (\(1 \le v \le n\), \(-10^8 \le x \le 10^8\)).
  • Если \(t_i = 3\), то в \(i\)-й строке заданы еще два целых числа: \(i\), \(j\) (\(1 \le i, j \le n\)).
Выходные данные

Для каждого запроса первого типа выведите единственное целое число — ответ на запрос.

Примечание

Рассмотрим первый тест.

Граф, получаемый из изначальной перестановки.

В первом тесте \(6\) запросов.

  1. Сумма на отрезке с \(1\) по \(5\) это \(a_1 + a_2 + a_3 + a_4 + a_5 = 6 + 9 + (-5) + 3 + 0 = 13\).
  2. Из вершины \(1\) достижимы вершины \(\{1, 2, 3\}\). Получается, что после этого запроса массив \(a\) будет выглядеть так: \([7, 10, -4, 3, 0]\).
  3. Сумма на отрезке с \(1\) по \(5\) это \(a_1 + a_2 + a_3 + a_4 + a_5 = 6 + 9 + (-5) + 3 + 0 = 16\).
  4. После запроса \(p = [4, 3, 1, 5, 2]\).
    Граф, получаемый из перестановки после четвёртого запроса.
  5. Из вершины \(2\) достижимы вершины \(\{1, 2, 3, 4, 5\}\). Получается, что после этого запроса массив \(a\) будет выглядеть так: \([6, 9, -5, 2, -1]\).
  6. Сумма на отрезке с \(1\) по \(5\) это \(a_1 + a_2 + a_3 + a_4 + a_5 = 6 + 9 + (-5) + 2 + (-1) = 11\).

C. String Manipulation 1.0

*особая задача Бинарный поиск Перебор Строки Структуры данных *1400

На одном популярном интернет-ресурсе разработали необычный механизм редактирования имени пользователя. Менять имя пользователя можно только удалением из него некоторых символов: чтобы изменить текущее имя s, пользователь может выбрать число p и символ c и удалить p-е вхождение символа c из имени. После того как пользователь изменил своё имя, отменить это изменение он не может.

Например, имя «arca» можно изменить, удалив второе вхождение символа «a», и получится «arc».

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

Входные данные

В первой строке содержится целое число k (1 ≤ k ≤ 2000). Во второй строке записана непустая строка s, состоящая из строчных букв латинского алфавита, длиной не более 100 символов. В третьей строке записано целое число n (0 ≤ n ≤ 20000) — количество изменений имени. В следующих n строках записаны сами изменения, по одному изменению в строке. Изменения записаны в виде «pi ci» (без кавычек), где pi (1 ≤ pi ≤ 200000) — номер вхождения буквы ci, ci — строчная буква латинского алфавита. Гарантируется, что операции корректные, то есть удаляемая буква всегда существует, и в результате операций из имени удалятся не все буквы. Вхождения букв нумеруются начиная с 1.

Выходные данные

Выведите единственную строку — итоговое имя пользователя после применения всех операций изменения.

Примечание

Рассмотрим первый пример. Изначально у нас будет имя «bacbac»; после первой операции оно превратится в «bacbc», после второй — в «acbc», и, наконец, после третьей — в «acb».

E. Зебробашня

*особая задача жадные алгоритмы сортировки Структуры данных *1700

Маленькая Танечка любит играть в кубики. Вообще-то она любит играть во что угодно, будь то кубики или тессеракты, лишь бы это «что угодно» было разноцветное. Каждый кубик характеризуется двумя параметрами — цвет ci и размер si. Зебробашней называется башня, состоящая из кубиков ровно двух цветов, причем цвета кубиков в башне должны чередоваться (цвета соседних должны отличаться). В Зебробашне должно быть не менее двух кубиков. Каких-либо других ограничений нет. Ниже на рисунке изображен пример Зебробашни.

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

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 105) — количество кубиков. В следующих n строках заданы описания кубиков, по одному описанию в строке. Описание кубика состоит из записанных через пробел двух целых чисел ci и si (1 ≤ ci, si ≤ 109) — цвет i-го кубика и его размер, соответственно. Гарантируется, что существует хотя бы два кубика, цвета которых различны.

Выходные данные

Выведите описание Зебробашни максимальной возможной высоты в следующем формате. В первую строку выведите высоту башни, во вторую строку — количество кубиков в ней, в третью — номера кубиков в башне в порядке их перечисления снизу вверх, разделенные одиночными пробелами. Считайте кубики пронумерованными от 1 до n в том порядке, в котором они были заданы во входных данных.

Если существует несколько Зебробашен максимальной высоты, разрешается вывести любую из них.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

E. Садовник и дерево

Деревья жадные алгоритмы Перебор поиск в глубину и подобное реализация Структуры данных *1600

Дерево — это неориентированный связный граф, в котором отсутствуют циклы. В этой задаче речь идет о некорневых деревьях.

Лист дерева — это вершина, которая соединена не более чем с одной другой вершиной.

Садовник Виталий вырастил дерево из \(n\) вершин. Он решил подстричь дерево. Для этого он совершает несколько операций. За одну операцию он удаляет все листья дерева.

Пример дерева.

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

Результат применения операции «удалить все листья».

Обратите внимание на особенные случаи применения операций:

  • применение операции к пустому дереву (из \(0\) вершин) не меняет его;
  • применение операции к дереву из одной вершины приводит к удалению этой вершины (т. е. одна эта вершина считается листом);
  • применение операции к дереву из двух вершин приводит к удалению обеих вершин (обе вершины считаются листьями).

Виталий применил к дереву последовательно \(k\) операций. Сколько вершин в нём осталось?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Перед каждым набором входных данных расположена пустая строка.

Каждый набор данных состоит из нескольких строк. Первая строка набора данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 4 \cdot 10^5\), \(1 \le k \le 2 \cdot 10^5\)) — количество вершин в дереве и количество операций. Далее идут \(n - 1\) строк, каждая содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — две вершины, которые соединены ребром. Гарантируется, что заданный граф является деревом, в нём отсутствуют петли и кратные рёбра. Гарантируется, что сумма \(n\) из всех наборов входных данных не превосходит \(4 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое число — количество вершин, которое осталось в дереве после применения \(k\) операций.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе задано дерево из двух вершин. К нему применяются \(200000\) операций. Первая удаляет обе вершины, остальные операции не изменяют дерево.

В третьем наборе входных данных дано дерево из трёх вершин. В результате применения первой операции в нём остаётся всего \(1\) вершина (с номером \(2\)), в результате второй операции дерево становится пустым.

G. Меняя скобки

дп жадные алгоритмы Конструктив Структуры данных *2200

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

  1. поменять вид скобки с открывающей на закрывающую и наоборот, не меняя форму скобки: то есть можно поменять '(' на ')' и ')' на '('; можно поменять '[' на ']' и ']' на '['. Эта операция стоит \(0\) бурлей.
  2. взять любую квадратную скобку и поменять на круглую, не меняя направление скобки: то есть можно поменять '[' на '(', но не '(' на '['; можно поменять ']' на ')', но не ')' на ']'. Эта операция стоит \(1\) бурль.

Операции можно производить в любом количестве в любом порядке.

Задана строка \(s\) длины \(n\) и \(q\) запросов вида «l r», где \(1 \le l < r \le n\). Для каждой подстроки \(s[l \dots r]\) найдите минимальную цену, которую нужно заплатить, чтобы сделать её правильной скобочной последовательностью. Гарантируется, что подстрока \(s[l \dots r]\) имеет чётную длину.

Запросы надо обрабатывать независимо, то есть изменения в строке, сделанные для ответа на запрос \(i\), не влияют на запросы \(j\) (\(j > i\)). Иными словами, при обработке запроса подстрока \(s[l \dots r]\) берётся из первоначальной заданной строки \(s\).

Правильная скобочная последовательность — это последовательность, которую можно построить по следующим правилам:

  • пустая последовательность является правильной скобочной;
  • если «s» — правильная скобочная последовательность, то последовательности «(s)» и «[s]» являются правильными скобочными;
  • если «s» и «t» – правильные скобочные последовательности, то последовательность «st» (соединение этих последовательностей) является правильной скобочной.

Например, последовательности «», «(()[])», «[()()]()» и «(())()» являются правильными скобочными, в то время как «(», «[(])» и «)))» — нет.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора данных содержит непустую строку \(s\), содержащую только круглые ('(' и ')') и квадратные ('[' и ']') скобки. Длина строки не превышает \(10^6\). Строка содержит не менее \(2\) символов.

Вторая строка содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

Далее идут \(q\) строк, содержащих два целых числа \(l\) и \(r\) (\(1 \le l < r \le n\), где \(n\) — длина строки \(s\)). Гарантируется, что подстрока \(s[l \dots r]\) имеет чётную длину.

Гарантируется, что сумма длин всех строк, заданных во всех наборах входных данных, не превышает \(10^6\). Сумма всех \(q\), заданных во всех наборах входных данных, не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите в отдельной строке целое число \(x\) (\(x \ge 0\)) — минимальную цену, которую нужно заплатить, чтобы данная подстрока стала правильной скобочной последовательностью.

Примечание

Рассмотрим первый набор входных данных. Первый запрос описывает всю строку, её можно привести к следующей правильной скобочной последовательности: «([()])()[[]]». Форма скобок не изменена, поэтому стоимость изменения равна \(0\).

Второй запрос описывает подстроку «)[)()]». Её можно привести к последовательности «(()())», стоимость равна \(2\).

Третий запрос описывает подстроку «))[)». Её можно привести к последовательности «()()», стоимость равна \(1\).

Во втором наборе входных данных все подстроки состоят только из круглых скобок. Можно показать, что любую последовательность чётной длины из круглых скобок можно привести к правильной за \(0\) бурлей.

В третьем наборе входных данных единственный запрос описывает строку «[]», которая уже является правильной скобочной последовательностью.

C. Удаление двух элементов

дп математика реализация Структуры данных *1200

У Монокарпа есть массив целых чисел \(a\), состоящий из \(n\) элементов. Обозначим среднее арифметическое всех элементов массива за \(k\) (обратите внимание, что \(k\) может быть вещественным числом).

Среднее арифметическое массива из \(n\) элементов — это сумма всех элементов массива деленная на \(n\), то есть на количество элементов массива.

Монокарп решил удалить из массива \(a\) ровно два элемента, при этом он хочет, чтобы после удаления среднее арифметическое оставшихся \((n - 2)\) элементов массива по-прежнему было равно \(k\).

Перед вами стоит задача определить количество пар позиций \([i, j]\) (\(i < j\)) таких, что если удалить элементы из этих позиций, среднее арифметическое оставшихся \((n - 2)\) элементов массива будет равно \(k\), то есть будет равно среднему арифметическому \(n\) элементов изначального массива \(a\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — количество элементов в массиве Монокарпа.

Во второй строке следует последовательность целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^{9}\)), где \(a_i\) равно \(i\)-му элементу массива Монокарпа.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите количество пар позиций \([i, j]\) (\(i < j\)) таких, что если удалить элементы из этих позиций, среднее арифметическое оставшихся \((n - 2)\) элементов массива будет равно \(k\), то есть будет равно среднему арифметическому \(n\) элементов изначального массива \(a\).

Примечание

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

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

В третьем примере можно удалить пару элементов в позициях \(1\) и \(3\) или пару элементов в позициях \(4\) и \(5\).

D. Тренировка

геометрия Комбинаторика математика реализация Структуры данных *1700

Монокарп тренер команд Берляндского ГУ по программированию. Он решил собрать тренировку для своих команд перед квалификационным этапом.

У Монокарпа есть \(n\) задач, которые еще не решал ни один из его студентов. У \(i\)-й задачи есть тема \(a_i\) (целое число от \(1\) до \(n\)) и сложность \(b_i\) (целое число от \(1\) до \(n\)), причем все задачи попарно различны, то есть нет двух задач, у которых одинаковы и тема, и сложность.

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

  • темы всех трех выбранных задач различны;
  • сложности всех трех выбранных задач различны.

Перед вами стоит задача определить количество способов, которыми Монокарп может выбрать три задачи для тренировки.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 50000\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — количество задач, которые есть у Монокарпа.

В \(i\)-й из следующих \(n\) строк следуют по два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le n\)) — тема и сложность \(i\)-й задачи.

Гарантируется, что нет двух задач, у которых одинаковы и тема, и сложность.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

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

Примечание

В первом примере можно взять следующие наборы по три задачи:

  • задачи с номерами \(1\), \(2\), \(4\);
  • задачи с номерами \(1\), \(3\), \(4\);
  • задачи с номерами \(2\), \(3\), \(4\).

Таким образом, количество способов равно трем.

E. Лестницы

дп Комбинаторика математика Перебор поиск в глубину и подобное реализация Структуры данных *2100

Дана матрица, состоящая из \(n\) строк и \(m\) столбцов. Строки пронумерованы сверху вниз, столбцы пронумерованы слева направо.

Ячейки данной матрицы могут быть свободными или заблокированными.

Назовем путь в матрице лестницей, если он:

  • начинается и заканчивается в свободной ячейке;
  • посещает только свободные ячейки;
  • имеет одну из двух возможных структур:
    1. вторая ячейка лежит на \(1\) справа от первой, третья — на \(1\) снизу от второй, четвертая — на \(1\) справа от третьей, и так далее;
    2. вторая ячейка лежит на \(1\) снизу от первой, третья — на \(1\) справа от второй, четвертая — на \(1\) снизу от третьей, и так далее.

В частности, путь, состоящий из одной ячейки, считается лестницей.

Некоторые примеры лестниц:

Изначально все ячейки в матрице свободные.

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

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

Входные данные

В первой строке записаны три целых числа \(n\), \(m\) и \(q\) (\(1 \le n, m \le 1000\); \(1 \le q \le 10^4\)) — размерности матрицы и количество запросов.

В каждой из следующих \(q\) строк записаны два целых числа \(x\) и \(y\) (\(1 \le x \le n\); \(1 \le y \le m\)) — описание очередного запроса.

Выходные данные

Выведите \(q\) целых чисел — \(i\)-е число должно быть равно количеству различных лестниц в матрице после \(i\) запросов. Две лестницы считаются различными, если существует такая ячейка, которая входит в один путь и не входит в другой.

F. ПСП

Бинарный поиск битмаски дп Перебор Структуры данных *2400

Правильная скобочная последовательность (или, коротко, ПСП) — это скобочная последовательность, которую можно превратить в корректное арифметическое выражение, вставив символы «1» и «+» между исходными символами. Например:

  • скобочные последовательности «()()» и «(())» — правильные (из них можно получить выражения «(1)+(1)» и «((1+1)+1)»);
  • скобочные последовательности «)(», «(» и «)» — неправильные.

Обозначим конкатенацию двух строк \(x\) и \(y\) как \(x+y\). Например, «()()» \(+\) «)(» \(=\) «()())(».

У вас есть \(n\) скобочных последовательностей \(s_1, s_2, \dots, s_n\). Вы можете переставить эти строки в любом порядке (можно переставлять только сами строки, но не символы в них).

Ваша задача — переставить строки в таком порядке, чтобы у строки \(s_1 + s_2 + \dots + s_n\) было как можно больше непустых префиксов, являющихся ПСП.

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 20\)).

Далее следуют \(n\) строк, \(i\)-я из которых содержит \(s_i\) — скобочную последовательность (строку, состоящую из символов «(» и/или «)». Все последовательности \(s_i\) непустые, их суммарная длина не превосходит \(4 \cdot 10^5\).

Выходные данные

Выведите одно число — максимальное количество непустых префиксов, являющихся ПСП, у строки \(s_1 + s_2 + \dots + s_n\), если вы переставите строки \(s_1, s_2, \dots, s_n\) оптимальным образом.

Примечание

В первом примере из условия можно склеить строки следующим образом: «(» \(+\) «)» \(=\) «()», у полученной строки будет один префикс, являющийся ПСП: «()».

Во втором примере из условия можно склеить строки следующим образом: «(» \(+\) «)» \(+\) «()()())» \(+\) «(» \(=\) «()()()())(», у полученной строки будет четыре префикса, являющихся ПСП: «()», «()()», «()()()», «()()()()».

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

E. Two Arrays

матрицы Структуры данных *3200

You are given two integer arrays of length \(N\), \(A1\) and \(A2\). You are also given \(Q\) queries of 4 types:

1 k l r x: set \(Ak_i:=min(Ak_i, x)\) for each \(l \leq i \leq r\).

2 k l r x: set \(Ak_i:=max(Ak_i, x)\) for each \(l \leq i \leq r\).

3 k l r x: set \(Ak_i:=Ak_i+x\) for each \(l \leq i \leq r\).

4 l r: find the \((\sum_{i=l}^r F(A1_i+A2_i)) \% (10^9+7)\) where \(F(k)\) is the \(k\)-th Fibonacci number (\(F(0)=0, F(1)=1, F(k)=F(k-1)+F(k-2)\)), and \(x \% y\) denotes the remainder of the division of \(x\) by \(y\).

You should process these queries and answer each query of the fourth type.

Input

The first line contains two integers \(N\) and \(Q\). (\(1 \leq N, Q \leq 5 \times 10^4\))

The second line contains \(N\) integers, array \(A1_1, A1_2, \dots A1_N\). (\(0 \leq A1_i \leq 10^6\))

The third line contains \(N\) integers, array \(A2_1, A2_2, \dots A2_N\). (\(0 \leq A2_i \leq 10^6\))

The next \(Q\) lines describe the queries. Each line contains 5 or 3 integers, where the first integer denotes the type of the query. (\(k \in \{1, 2\}\), \(1 \leq l \leq r \leq N\))

For queries of type 1 and 2, \(0 \leq x \leq 10^9\) holds.

For queries of type 3, \(−10^6 \leq x \leq 10^6\) holds.

It is guaranteed that after every query each number in arrays \(A1\) and \(A2\) will be nonnegative.

Output

Print the answer to each query of the fourth type, in separate lines.

Note

In the first example: The answer for the first query is \(F(1 + 2) + F(0 + 1) + F(2 + 0) = F(3) + F(1) + F(2) = 2 + 1 + 1 = 4\). After the second query, the array \(A2\) changes to \([2, 4, 0]\). After the third query, the array \(A1\) changes to \([0, 0, 0]\). The answer for the fourth query is \(F(0 + 2) + F(0 + 4) + F(0 + 0) = F(2) + F(4) + F(0) = 1 + 3 + 0 = 4\).

In the second example: The answer for the first query is \(F(1 + 4) + F(3 + 2) + F(5 + 1) = F(5) + F(5) + F(6) = 5 + 5 + 8 = 18\). The answer for the second query is \(F(3 + 2) + F(5 + 1) + F(3 + 3) + F(2 + 3) = F(5) + F(6) + F(6) + F(5) = 5 + 8 + 8 + 5 = 26\). After the third query, the array \(A1\) changes to \([1, 6, 6, 6, 2]\). The answer for the fourth query is \(F(6 + 2) + F(6 + 1) + F(6 + 3) = F(8) + F(7) + F(9) = 21 + 13 + 34 = 68\).

I. Desert

графы Структуры данных *2700

You are given an undirected graph of \(N\) nodes and \(M\) edges, \(E_1, E_2, \dots E_M\).

A connected graph is a cactus if each of it's edges belogs to at most one simple cycle. A graph is a desert if each of it's connected components is a cactus.

Find the number of pairs \((L, R)\), (\(1 \leq L \leq R \leq M\)) such that, if we delete all the edges except for \(E_L, E_{L+1}, \dots E_R\), the graph is a desert.

Input

The first line contains two integers \(N\) and \(M\) (\(2 \leq N \leq 2.5 \times 10^5\), \(1 \leq M \leq 5 \times 10^5\)). Each of the next \(M\) lines contains two integers. The \(i\)-th line describes the \(i\)-th edge. It contains integers \(U_i\) and \(V_i\), the nodes connected by the \(i\)-th edge (\(E_i=(U_i, V_i)\)). It is guaranteed that \(1 \leq U_i, V_i \leq N\) and \(U_i \neq V_i\).

Output

The output contains one integer number – the answer.

Note

In the second example: Graphs for pairs \((1, 1)\), \((2, 2)\) and \((3, 3)\) are deserts because they don't have any cycles. Graphs for pairs \((1, 2)\) and \((2, 3)\) have one cycle of length 2 so they are deserts.

E. Автобусы и люди

Бинарный поиск сортировки Структуры данных *2400

Главная улица Бертауна представляет собой прямую, на которой расположено 109 автобусных остановок. Остановки пронумерованы целыми числами от 1 до 109 в порядке следования. В городе ходит n автобусов. Каждый день i-ый автобус едет от остановки с номером si до остановки с номером fi (si < fi), останавливаясь на всех промежуточных остановках, и возвращается назад только ночью. Автобус начинает движение в момент времени ti, и едет настолько быстро, что заканчивает движение в тот же момент времени ti. Времена ti различны для всех автобусов. Автобусы имеют бесконечную вместимость.

В Бертауне живет m человек. Сегодня i-ому человеку нужно доехать от остановки с номером li до остановки с номером ri (li < ri); i-ый житель приходит на свою начальную остановку (li) в момент времени bi. Каждый человек, с одной стороны, хочет добраться как можно быстрее, и с другой стороны, категорически не согласен ехать с пересадками. Более формально: i-ый человек выбирает автобус j, с минимальным временем tj, такой что sj ≤ li, ri ≤ fj и bi ≤ tj.

Ваша задача — определить для каждого жителя, сможет ли он доехать сегодня днем, и если сможет, найти номер автобуса, на котором он поедет.

Входные данные

В первой строке записано два целых числа n и m (1 ≤ n, m ≤ 105) — количество автобусов и количество людей.

Далее следует n строк по три целых числа в каждой: si, fi, ti (1 ≤ si, fi, ti ≤ 109, si < fi) — описание автобусов. Гарантируется, что все ti различны.

Далее следует m строк по три целых числа в каждой: li, ri, bi (1 ≤ li, ri, bi ≤ 109, li < ri) — описание жителей Бертауна. Времена bi могут совпадать.

Выходные данные

В первой строке выведите через пробел m целых чисел: i-ое число должно быть равно либо -1, если i-ый человек не сможет доехать, либо номеру автобуса, на котором i-ый человек поедет. Автобусы нумеруются целыми числами от 1 до n в том порядке, в котором они заданы во входных данных.

B. Лягушка-путешественница

графы дп кратчайшие пути поиск в глубину и подобное Структуры данных *1900

Лягушонок Горф отправился в путешествие по Болотному королевству. К несчастью, он не рассчитал длину своего прыжка и упал в колодец глубиной \(n\) метров. Теперь Горф лежит на самом дне колодца и ему предстоит долгий путь наверх.

Стенки колодца в некоторых местах скользкие, а в некоторых, наоборот, очень удобные. А именно, если Горф сейчас находится на глубине \(x\) метров от уровня земли, то за один прыжок он может подняться на любое расстояние от \(0\) по \(a_x\) метров вверх. (Заметим, что Горф не прыгает вниз, только вверх).

К сожалению, Горф не может прыгать без перерывов. После каждого прыжка ему нужно отдохнуть (даже после прыжка на \(0\) метров). А потому, после прыжка в позицию \(x\) метров ниже уровня земли, он соскользнет ровно на \(b_x\) метров вниз (пока отдыхает).

Определите, за какое минимальное число прыжков Горф способен подняться до уровня земли.

Входные данные

В первой строке задано целое положительное число \(n\) (\(1 \le n \le 300\,000\)) — глубина колодца.

Во второй строке задано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le i\)), где \(a_i\) — это максимальная высота, доступная для прыжка с глубины \(i\).

В третьей строке вводится \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(0 \le b_i \le n - i\)), где \(b_i\) — это глубина, на которую лягушонок провалится, взяв перерыв на глубине \(i\).

Выходные данные

Если лягушонок не может выбраться из колодца, выведите \(-1\). В противном случае сначала выведите целое число \(k\) — минимально возможное количество прыжков.

Далее выведите последовательность глубин \(d_1,\,d_2,\,\ldots,\,d_k\), где \(d_j\) — это глубина, которую достигнет Горф после \(j\)-го прыжка, но до того, как соскользнет вниз во время передышки. Уровень земли считается равным \(0\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере Горф находится на дне колодца, за один прыжок вверх поднимается к отметке в \(1\) метр глубины. После этого он соскальзывает вниз на метр и оказывается на отметке в \(2\) метра. С этой отметки он уже сможет выпрыгнуть из колодца за один прыжок.

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

В третьем примере выбраться из колодца можно только прыгнув с глубины \(5\). Попасть напрямую туда нельзя, но можно добраться с помощью серии прыжков \(10 \Rightarrow 9 \dashrightarrow 9 \Rightarrow 4 \dashrightarrow 5\), где \(\Rightarrow\) обозначает прыжок вверх, а \(\dashrightarrow\) обозначает спуск.

C. Оптимальная вставка

дп жадные алгоритмы разделяй и властвуй сортировки Структуры данных *2300

У вас есть два массива \(a_1, a_2, \ldots, a_n\) и \(b_1, b_2, \ldots, b_m\), состоящие из целых чисел.

Вы должны вставить все элементы массива \(b\) в массив \(a\) в произвольные места. В результате получится массив \(c_1, c_2, \ldots, c_{n+m}\) размера \(n + m\).

Обратите внимание, что элементы массива \(a\) переставлять нельзя, но элементы массива \(b\) можно вставлять куда угодно (в начало, между двумя соседними элементами массива \(a\), в конец). Более того, элементы массива \(b\) могут стоять в получившемся массиве в любом порядке.

Какое минимальное количество инверсий в массиве \(c\) может быть? Напомним, что инверсией называется пара индексов \((i, j)\), такая что \(i < j\) и \(c_i > c_j\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют сами наборы входных данных.

В первой строке каждого набора входных данных заданы два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 10^6\)).

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)).

Во третьей строке каждого набора заданы \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \leq b_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\) и сумма \(m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество инверсий, которое может получиться в массиве \(c\) при вставке.

Примечание

Варианты оптимальных вставок для всех наборов входных данных (элементы массива \(a\) подчеркнуты):

  • В первом наборе входных данных можно сделать \(c = [\underline{1}, 1, \underline{2}, 2, \underline{3}, 3, 4]\).
  • Во втором наборе входных данных можно сделать \(c = [1, 2, \underline{3}, \underline{2}, \underline{1}, 3]\).
  • В третьем наборе входных данных можно сделать \(c = [\underline{1}, 1, 3, \underline{3}, \underline{5}, \underline{3}, \underline{1}, 4, 6]\).

D. Сложная гора

дп жадные алгоритмы сортировки Структуры данных *2700

Группа из \(n\) альпинистов подошла к подножию горы. Сложность подъема на эту гору можно оценить целым числом \(d\).

Каждого альпиниста можно описать всего двумя целыми числами \(s\) и \(a\), где \(s\) характеризует навык альпиниста по восхождению на горы, а \(a\) характеризует его аккуратность.

Альпинист с навыком \(s\) может забраться на гору сложности \(p\) только в том случае, если \(p \leq s\). Во время того, как он забирается, он немного меняет путь, по которому идёт, а вместе с ним и его сложность. А именно, после того как на гору сложности \(p\) забирается альпинист с аккуратностью \(a\), сложность горы становится равной \(\max(p, a)\).

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

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

Входные данные

В первой строке заданы два целых числа \(n\) и \(d\) (\(1 \leq n \leq 500\,000\); \(0 \leq d \leq 10^9\)) — количество альпинистов в группе и изначальная сложность горы.

В каждой из последующих \(n\) строк содержится по два целых числа \(s_i\) и \(a_i\) (\(0 \leq s_i, a_i \leq 10^9\)) — навык восхождению на горы \(i\)-го альпиниста и его аккуратность.

Выходные данные

Выведите одно число — максимальное количество альпинистов, которые смогут забраться на гору, если они будут подниматься на неё в оптимальном порядке.

Примечание

В первом примере из условия на гору могут забраться альпинисты \(2\) и \(3\) в таком порядке. Других вариантов, при которых забираются \(2\) альпиниста, нет.

Во втором примере из условия альпинист \(1\) забраться не может, потому что изначальная сложность горы слишком велика, а альпинисты \(2\) и \(3\) могут забраться в любом порядке.

В третьем примере из условия на гору взберутся альпинисты \(5\), \(3\) и \(4\), причём именно в таком порядке, других вариантов нет.

E. Онлайн-курс по физкультуре

дп жадные алгоритмы Структуры данных *2900

У студентов одного неизвестного ПТУ нет обязательных занятий по физкультуре. Чтобы исправить это недоразумение, \(q\) студентов решили самостоятельно записаться в спортзал. В спортзале действует система абонементов на посещения, в \(i\)-й из \(n\) дней известна цена покупки абонемента \(a_i\). Разрешается покупать более одного абонемента за день.

Купленный в день \(i\) абонемент можно активировать как день \(i\), так и в любой день позднее. Каждый из абонементов после активации будет действовать \(k\) дней, то есть активированный в день \(t\) абонемент будет действовать в дни с номерами \(t, t + 1, \dots, t + k - 1\).

Известно, что \(j\)-й студент хочет посещать спортзал каждый день со дня \(l_j\) по день \(r_j\) включительно. Алгоритм похода в спортзал в некоторый день \(i\) (\(l_j \le i \le r_j\)) любого из студентов выглядит следующим образом:

  1. Студент подходит к кассе перед спортзалом и покупает несколько абонементов по цене \(a_i\) за штуку (возможно, не покупает ни одного).
  2. Если у студента есть хотя бы один действующий сегодня абонемент, то он просто проходит в спортзал. Иначе, он активирует один из купленных сегодня или ранее абонементов, и проходит в спортзал.

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

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

Входные данные

В первой строке заданы три целых числа \(n\), \(q\) и \(k\) (\(1 \le n, q \le 300\,000\); \(1 \le k \le n\)) — количество дней, количество студентов и длительность любого абонемента.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — стоимость одного абонемента в соответствующий день.

В следующих \(q\) строках заданы два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — отрезок дней, в которые соответствующий студент хочет посещать спортзал.

Выходные данные

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

Примечание

Рассмотрим как нужно покупать абонементы каждому из студентов:

  • Первому студенту достаточно купить один сертификат в день \(1\).
  • Второму студенту нужно купить один сертификат в день \(3\) и два сертификата в день \(4\). Обратите внимание, что он не обязан использовать их в тот же день.
  • Третьему студенту достаточно купить один сертификат в день \(5\).
  • Четвертому студенту достаточно купить сертификат в день \(7\).
  • Пятому студенту нужно купить по одному сертификату в дни \(3\) и \(4\).

C. Мастер игры

графы дп жадные алгоритмы поиск в глубину и подобное Структуры данных *1700

\(n\) игроков играют в игру.

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

Вы — мастер этой игры, и хотите организовать турнир. Всего будет проведено \(n-1\) боев. Пока в турнире участвует более одного игрока, выберите любую карту и любых двух из оставшихся игроков, которые будут сражаться на ней. Игрок, который проиграет, выбывает из турнира.

В итоге останется ровно один игрок, и он объявляется победителем турнира. Для каждого игрока определите, может ли он выиграть турнир.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество игроков.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^9\), \(a_i \neq a_j\) для \(i \neq j\)), где \(a_i\) — сила \(i\)-го игрока на первой карте.

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \leq b_i \leq 10^9\), \(b_i \neq b_j\) для \(i \neq j\)), где \(b_i\) — сила \(i\)-го игрока на второй карте.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите строку длины \(n\). \(i\)-й символ должен быть «1», если \(i\)-й игрок может выиграть турнир, или «0» в противном случае.

Примечание

В первом наборе входных данных \(4\)-й игрок обыграет любого другого игрока в любой игре, поэтому он обязательно выиграет турнир.

Во втором наборе входных данных каждый может стать победителем.

В третьем наборе входных данных есть только один игрок. Очевидно, что он выиграет турнир.

G. Алфавитное дерево

Бинарный поиск Деревья поиск в глубину и подобное Строки строковые суфф. структуры Структуры данных хэши *3500

Вам даны \(m\) строк и дерево на \(n\) вершинах. На каждом ребре написана какая-то буква.

Вы должны ответить на \(q\) запросов. Каждый запрос описывается \(4\) целыми числами \(u\), \(v\), \(l\) и \(r\). Ответом на запрос является общее количество вхождений \(str(u,v)\) в строки с индексами от \(l\) до \(r\). \(str(u,v)\) определяется как строка, составленная путем конкатенации букв, записанных на ребрах кратчайшего пути от \(u\) до \(v\) (в порядке их прохождения).

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(q\) (\(2 \le n \le 10^5\), \(1 \le m,q \le 10^5\)).

В \(i\)-й из следующих \(n-1\) строк содержатся два целых числа \(u_i, v_i\) и строчная латинская буква \(c_i\) (\(1 \le u_i, v_i \le n\), \(u_i \neq v_i\)), обозначающие ребро между вершинами \(u_i, v_i\) с символом \(c_i\) на нем.

Гарантируется, что эти ребра образуют дерево.

Следующие \(m\) строк содержат строки, состоящие из строчных латинских букв. Общая длина этих строк не превышает \(10^5\).

Затем следуют \(q\) строк, каждая из которых содержит четыре целых числа \(u\), \(v\), \(l\) и \(r\) (\(1 \le u,v \le n\), \(u \neq v\), \(1 \le l \le r \le m\)), обозначающие запросы.

Выходные данные

Для каждого запроса выведите одно целое число — ответ на запрос.

E. Невнимательный Василий

битмаски дп матрицы Структуры данных *2400

Перед тем как стать успешным трейдером, Василий закончил университет. Во время его обучения произошел один случай, после которого Василий стал намного внимательнее слушать условия заданий для домашней работы. Далее приведено формальное условие домашнего задания в том виде, как его услышал Василий.

Дана строка \(s\) длины \(n\), состоящая только из символов «a», «b» и «c». Есть \(q\) запросов вида (\(pos, c\)), который обозначает замену элемента строки \(s\) на позиции \(pos\) на символ \(c\). После каждого запроса требуется вывести минимальное количество символов в строке, которые нужно заменить, чтобы строка не содержала строку «abc» в качестве подпоследовательности. Правильной заменой символа является его изменение на символ «a», «b» или «c».

Строка \(x\) называется подпоследовательностью строки \(y\), если \(x\) может быть получена из \(y\) с помощью удаления некоторых символов без изменения порядка оставшихся символов.

Входные данные

Первая строка ввода содержит два целых числа \(n\) и \(q\) \((1 \le n, q \le 10^5)\) — длину строки и количество запросов соответственно.

Следующая строка ввода содержит строку \(s\), состоящую из символов «a», «b» и «c».

Следующие \(q\) строк содержат целое число \(i\) и символ \(c\) \((1 \le i \le n)\) — индекс и значение нового элемента строки соответственно. Гарантируется, что символ \(c\) равен значению «a», «b» или «c».

Выходные данные

Для каждого запроса выведите минимальное количество символов, которые необходимо заменить, чтобы строка не содержала «abc» как подпоследовательность.

Примечание

Рассмотрим состояния строки после каждого запроса:

  1. \(s = \)«aaaaccccc». В этом случае строка не содержит «abc» как подпоследовательность, поэтому замен делать не требуется.
  2. \(s = \)«aaabccccc». В этом случае можно сделать 1 замену и получить, например, строку \(s = \)«aaaaccccc». Эта строка не содержит «abc» как подпоследовательность.
  3. \(s = \)«ababccccc». В этом случае можно сделать 2 замены и получить, например, строку \(s = \)«aaaaccccc». Эта строка не содержит «abc» как подпоследовательность.
  4. \(s = \)«ababacccc». В этом случае можно сделать 2 замены и получить, например, строку \(s = \)«aaaaacccc». Эта строка не содержит «abc» как подпоследовательность.
  5. \(s = \)«bbabacccc». В этом случае можно сделать 1 замену и получить, например, строку \(s = \)«bbacacccc». Эта строка не содержит «abc» как подпоследовательность.
  6. \(s = \)«bbababccc». В этом случае можно сделать 2 замены и получить, например, строку \(s = \)«bbacacccc». Эта строка не содержит «abc» как подпоследовательность.
  7. \(s = \)«bbabcbccc». В этом случае можно сделать 1 замену и получить, например, строку \(s = \)«bbcbcbccc». Эта строка не содержит «abc» как подпоследовательность.
  8. \(s = \)«baabcbccc». В этом случае можно сделать 2 замены и получить, например, строку \(s = \)«bbbbcbccc». Эта строка не содержит «abc» как подпоследовательность.
  9. \(s = \)«aaabcbccc». В этом случае можно сделать 2 замены и получить, например, строку \(s = \)«aaacccccc». Эта строка не содержит «abc» как подпоследовательность.
  10. \(s = \)«aaababccc». В этом случае можно сделать 2 замены и получить, например, строку \(s = \)«aaacacccc». Эта строка не содержит «abc» как подпоследовательность.
  11. \(s = \)«aaababccc». В этом случае можно сделать 2 замены и получить, например, строку \(s = \)«aaacacccc». Эта строка не содержит «abc» как подпоследовательность.
  12. \(s = \)«aaababbcc». В этом случае можно сделать 2 замены и получить, например, строку \(s = \)«aaababbbb». Эта строка не содержит «abc» как подпоследовательность.

F. Интересные отрезки

meet-in-the-middle разделяй и властвуй Структуры данных *2800

У Василия есть массив неотрицательных чисел \(a_1, a_2, \dots, a_n\). Он хочет, чтобы вы помогли ему узнать количество отрезков \(l \le r\), которые проходят проверку. Проверка отрезка выполняется следующим образом:

  1. Находится минимум и максимум среди чисел на отрезке массива от \(l\) до \(r\).
  2. Проверка считается пройденной, если в битовой записи минимума и максимума одинаковое количество единичных бит.
Входные данные

Первая строка содержит одно число \(n\) (\(1 \le n \le 10^6\)) — размер массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^{18}\)) — описание массива \(a\).

Выходные данные

Выведите одно число — количество отрезков, прошедших проверку.

G. Прогулка по матрице

жадные алгоритмы математика Структуры данных *3000

У Василия есть два массива чисел \(a_1, a_2, \dots, a_n\) и \(b_1, b_2, \dots, b_m\). Для этих массивов выполняется свойство выпуклости. Формально массив \(c\) длины \(k\) называется выпуклым, если \(c_i - c_{i - 1} < c_{i + 1} - c_i\) для всех \(i\) от \(2\) до \(k - 1\) и \(c_1 < c_2\).

За жизнь Василия с этими массивами происходило \(q\) изменений одного из двух типов:

  1. Прибавить к суффиксу массива \(a\) длины \(k\) арифметическую прогрессию \(d, d \cdot 2, d \cdot 3, \dots, d \cdot k\). Массив после изменения выглядит следующим образом: \([a_1, a_2, \dots, a_{n - k}, a_{n - k + 1} + d, a_{n - k + 2} + d \cdot 2, \dots, a_n + d \cdot k]\).
  2. Такая же операция, но для массива \(b\).

После каждого изменения из массивов \(a\) и \(b\) создается матрица \(d\) размера \(n \times m\), где \(d_{i, j}=a_i + b_j\). Василий хочет дойти от клетки (\(1, 1\)) до клетки (\(n, m\)) этой матрицы. От клетки (\(x, y\)) он может перейти только в клетки (\(x + 1, y\)) и (\(x, y + 1\)). Длиной пути считается сумма всех чисел в клетках, которые посетил Василий, включая стартовую и конечную клетку.

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

Входные данные

Первая строка содержит три числа \(n\), \(m\) и \(q\) (\(2 \le n \le 100, 2 \le m \le 10^5\), \(1 \le q \le 10^5\)) — размеры массивов и количество изменений.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^{12}\)) — описание массива \(a\).

Третья строка содержит \(m\) целых чисел \(b_1, b_2, \dots, b_m\) (\(1 \le b_i \le 10^{12}\)) — описание массива \(b\).

Следующие \(q\) строк содержат три целых числа \(type\), \(k\) и \(d\) (\(1 \le type \le 2\), если \(type = 1\), то \(1 \le k \le n\) иначе \(1 \le k \le m\), \(1 \le d \le 10^3\)).

Выходные данные

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

G. AmShZ выиграл пари

жадные алгоритмы Структуры данных хэши *3300

Прямо перед Евро-2020 AmShZ и Safar сделали ставки на то, кто станет чемпионом, AmShZ поставил на Италию, а Safar — на Францию.

Конечно же, AmShZ выиграл. Следовательно, Safar дал ему скобочную последовательность \(S\). Обратите внимание, что скобочная последовательность — это строка, состоящая из символов '(' и ')'.

AmShZ может выполнить следующую операцию любое количество раз:

  • Сначала, он разрезает свою строку \(S\) на три (возможно, пустых) последовательных подстроки \(A, B\) и \(C\). Затем он склеивает их с помощью символов '(' и ')', в результате чего получается новая строка \(S\) = \(A\) + '(' + \(B\) + ')' + \(C\).

    Например, если \(S\) = «))(» и AmShZ разрежет ее на \(A\) = «», \(B\) = «))» и \(C\) = «(», то в качестве новой строки он получит \(S\) = «()))(».

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

Ваша задача — помочь Кеши в достижении его цели.

Строка \(a\) лексикографически меньше строки \(b\) тогда и только тогда, когда выполняется одно из следующих условий:

  • \(a\) является префиксом \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) отличаются, строка \(a\) имеет букву, которая появляется раньше в алфавите, чем соответствующая буква в \(b\).
Входные данные

Единственная строка ввода содержит единственную строку \(S\) — строку после операций \((1\le |S|\le 3 \cdot 10^5)\).

Гарантируется, что первый символ \(S\) — ')'.

Выходные данные

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

Примечание

В первом примере можно преобразовать «)((())))» в «)(()(())))», разбив её на «)(», пустую строку, и «(())))». Можно показать, что это лексикографически наименьшая возможная начальная строка

H. Игра в кальмара

Деревья жадные алгоритмы поиск в глубину и подобное Структуры данных *3100

После просмотра нового сериала «Игра в кальмара» Маштали и Соруш решили провести свою собственную «Игру в кальмара»! Соруш согласился быть ведущим и предоставить деньги для приза победителю, а Маштали стал фронтменом!

\(m\) игроков зарегистрировались для участия в играх, чтобы выиграть большой приз, но когда Маштали узнал, каким огромным будет приз победителя, он решил убить устранить всех игроков, чтобы забрать деньги себе!

Вот как злой Маштали собирается уничтожить игроков:

Дано некорневое дерево с \(n\) вершинами. У каждого игрока есть \(2\) специальные вершины \(x_i\) и \(y_i\).

За одну операцию Маштали может выбрать любую вершину \(v\) дерева. Затем для каждого оставшегося игрока \(i\) он находит вершину \(w\) на простом пути из \(x_i\) в \(y_i\), которая ближе всего к \(v\). Если \(w\ne x_i\) и \(w\ne y_i\), игрок \(i\) будет устранен.

Теперь Маштали задался вопросом: «Какое минимальное количество операций я должен выполнить, чтобы устранить всех игроков и забрать деньги себе?».

Поскольку он думал только о деньгах, он не смог решить задачу самостоятельно и обратился к вам за помощью!

Входные данные

Первая строка содержит \(2\) целое число \(n\) и \(m\) \((1 \le n, m \le 3 \cdot 10^5)\) — количество вершин дерева и количество игроков.

Вторая строка содержит \(n-1\) целых чисел \(par_2, par_3, \ldots, par_n\) \((1 \le par_i < i)\) — обозначающих ребро между вершиной \(i\) и \(par_i\).

В \(i\)-й из следующих \(m\) строк содержится два целых числа \(x_i\) и \(y_i\) \((1 \le x_i, y_i \le n, x_i \ne y_i)\) — специальные вершины \(i\)-го игрока.

Выходные данные

Выведите минимальное количество операций, которые Маштали должен выполнить.

Если Маштали никак не может устранить всех игроков, выведите \(-1\).

Примечание

Пояснение к первому примеру:

В первую операцию, Маштали может выбрать вершину \(1\) и устранить игроков с красным и синим цветами. Во второй операции он может выбрать вершину \(6\) и устранить игрока с оранжевым цветом.

Во втором примере Маштали не сможет устранить первого игрока.

F. Поликарп и банкомат

Бинарный поиск Структуры данных *1800

Поликарп начал работать в банке. Ему назначили следить за банкоматом. В банкомате изначально есть \(s\) рублей.

К нему выстроились очередь из \(n\) студентов. Каждый студент хочет либо снять некоторое количество денег, либо внести на счёт. Если \(a_i\) положительное, то студент зачисляет через банкомат такое количество денег. В противном случае — снимает \(|a_i|\) рублей.

В начале в банкомате \(s\) рублей и он отключён. Поликарп пропускает произвольное количество студентов. В какой-то момент времени Поликарп включает банкомат. Затем банкомат начинает обcлуживать оставшихся студентов по очереди. Если в какой-то момент времени в банкомате меньше рублей, чем хочет снять студент, тогда студент не обслуживается и Поликарп выключает банкомат и больше его никогда не включает.

Более формально, студенты, которые будут обслужены образуют непрерывную подпоследовательность.

Поликарп хочет, чтобы банкомат обслужил наибольшее количество студентов. Помогите ему в этом деле. Выведите номера первого и последнего студента или определите, что он не сможет никого обслужить.

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

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Каждый набор входных данных состоит из двух строк. В первой из них записаны целые числа \(n\) и \(s\) (\(1 \le n \le 2\cdot10^5\); \(0 \le s \le 10^9\)) — длина массива \(a\) и начальное количество рублей в банкомате. Во второй записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — элементы массива \(a\). Заметьте, что \(a_i\) может быть равен нулю.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(2\cdot10^5\).

Выходные данные

Выведите \(t\) строк, каждая из строк должна содержать ответ на соответствующий набор входных данных: если ответ существует выведите номера первого и последнего обслуженного студента. Если решения не существует, то в строку выведите -1.

Если есть несколько возможных ответов, выведите любой.

Примечание

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

Во втором наборе входных данных ответ -1, так как для любого студента в банкомате недостаточно денег.

В третьем наборе входных данных ответ может быть как 1 2, так и 4 5.

G. Робот и конфеты

жадные алгоритмы Паросочетания Структуры данных *2500

У Поликарпа есть прямоугольное поле размером \(n \times m\) клеток (размер поля \(n \cdot m\) не превышает \(10^6\) клеток, \(m \ge 2\)), в каждой клетке которого может быть конфета. Поле состоит из \(n\) строк и \(m\) столбцов.

Обозначим клетку с координатами \(x\) по вертикали и \(y\) по горизонтали за \((x, y)\). Тогда левая верхняя клетка будет обозначаться как \((1, 1)\), а правая нижняя — как \((n, m)\).

Если в клетке поля есть конфета, то клетка поля помечена символом «1», иначе — символом «0».

Поликарп сконструировал Робота, который может собирать конфеты. Робот может переместиться из клетки \((x, y)\) либо в клетку \((x+1, y+1)\), либо в клетку \((x+1, y-1)\). Если Робот находится в клетке, в которой есть конфета, он её забирает.

Пока на поле есть хотя бы одна конфета, выполняется следующий алгоритм:

  • Поликарп ставит Робота в произвольную клетку первой (верхней) строки поля. Он сам выбирает в какую клетку поставить Робота. Робота можно ставить в одну и ту же клетку несколько раз.
  • Робот перемещается по полю и собирает конфеты. Поликарп управляет Роботом. Когда Робот покидает поле, Поликарп подбирает его.
  • Если на поле есть хотя бы одна конфета, Поликарп повторяет алгоритм.

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

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Перед каждым набором в тесте записана пустая строка. Далее идёт строка, которая содержит целые числа \(n\) и \(m\) (\(2 \le m\), \(2 \le n \cdot m \le 10^6\)) — размеры поля. Затем следуют \(n\) строк, \(i\)-я из которых описывает \(i\)-ю строку поля. Каждая из них представляет собой строку размера \(m\) символов: cимвол «1» соответствует клетке с конфетой, символ «0» — пустой клетке.

Гарантируется, что сумма значений \(n \cdot m\) по всем наборам входных данных в тесте не превосходит \(10^6\).

Выходные данные

Выведите \(t\) строк, каждая из строк должна содержать ответ на соответствующий набор входных данных: минимальное количество раз, которое Поликарпу нужно поставить Робота на верхнюю строку поля, чтобы собрать все конфеты.

Примечание

В первом наборе Поликарп может вообще не ставить Робота на поле, так что ответ 0

Во втором наборе Поликарпу потребуется два раза ставить робота на поле. Робот может собрать конфеты так: в первый раз Поликарп ставит Робота в клетку \((1, 1)\) соберет конфеты на позициях \((1, 1)\) и \((3, 3)\). Во второй раз Поликарп может снова поставить Робота в клетку \((1, 1)\) и тогда Робот переместится сначала в клетку \((2,2)\), затем в клетку \((3, 1)\) и соберет последнюю конфету.

В четвертом наборе можно показать, что за три прохода Робот не сможет собрать все конфеты.

E. Divan и коттедж

Бинарный поиск Структуры данных *2600

Новый коттедж Divanа наконец-то достроен! Однако после тщательного осмотра было выяснено — рабочие неправильно проложили термоизоляцию, и теперь температура в доме напрямую зависит от температуры на улице! Говоря точнее, если утром в доме была температура \(P\), а на улице температура равна \(T\), то к следующему утру температура в доме изменится по следующему правилу:

  • \(P_{new} = P + 1\), если \(P < T\);
  • \(P_{new} = P - 1\), если \(P > T\);
  • \(P_{new} = P\), если \(P = T\).
Здесь \(P_{new}\) — температура в доме утром следующего дня.

Divan — очень занятой бизнесмен, поэтому порой не бывает дома продолжительное время и не знает, какая там сейчас температура, поэтому он нанял вас для контроля. Ваша работа будет состоять из \(n\) дней. В начале \(i\)-го дня вам сообщают, что температура на улице в этот день равна \(T_i\). Далее, для каждого из \(i\) дней вам поступает \(k_i\) вопросов от Divan. Каждый запрос имеет следующий вид: «если исходная температура в доме утром первого дня была \(x_i\), то какая температура в доме будет завтра утром (после \(i\)-го дня)?»

Ответьте на все вопросы бизнесмена.

Входные данные

На первой строке находится целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество дней.

Далее следуют описание \(n\) дней в следующем формате.

Первая строка описания содержит целое число \(T_i\) (\(0 \leq T_i \leq 10^9\)) — температура в этот день.

Вторая строка содержит целое неотрицательное число \(k_i\) (\(0 \le k_i \le 2 \cdot 10^5\)) — количество вопросов в этот день.

Третья строка содержит \(k\) целых чисел \(x'_i\) (\(0 \leq x'_{i} \leq 10^9\)) — зашифрованные запросы Divanа.

Пусть \(lastans = 0\) изначально. Тогда настоящий запрос задаётся так: \(x_i = (x'_i + lastans) \bmod (10^9 + 1)\), где \(a \bmod b\) — остаток от деления \(a\) на \(b\). После запроса переменной \(lastans\) присваивается значение, равное вашему ответу на текущий запрос.

Гарантируется, что суммарное количество запросов (то есть сумма по всем \(k_i\)) не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите целое число — температуру в доме после \(i\)-го дня.

Примечание

Рассмотрим первые четыре запроса из примера.

В первый день на улице температура равна \(50\), во второй \(50\) и в третий \(0\).

Положим \(lastans = 0\) изначально.

  • Начальная температура в доме в первом запросе первого дня равна \((1 \, + \, lastans) \bmod (10^9 + 1) = 1\). После первого дня температура в доме увеличится на \(1\), так как \(1 < 50\). Таким образом, ответ на первый запрос равен \(2\). Тогда \(lastans = 2\).
  • Начальная температура в доме во втором запросе первого дня равна \((2 \, + \, lastans) \bmod (10^9 + 1) = 4\). После первого дня температура в доме увеличится на \(1\), так как \(4 < 50\). Таким образом, ответ на второй запрос равен \(5\). Тогда \(lastans = 5\).
  • Начальная температура в доме в третьем запросе первого дня равна \((3 \, + \, lastans) \bmod (10^9 + 1) = 8\). После первого дня температура в доме увеличится на \(1\). Таким образом, ответ на третий запрос равен \(9\). Тогда \(lastans = 9\).
  • Начальная температура в доме в первом запросе второго дня равна \((4 \, + \, lastans) \bmod (10^9 + 1) = 13\). После первого дня температура увеличится на \(1\). После второго дня температура увеличится на \(1\). Таким образом, ответ на запрос равен \(15\). Тогда \(lastans = 15\).

E. Фиолетовый мелок

графы Деревья жадные алгоритмы игры математика поиск в глубину и подобное сортировки Структуры данных *2400

Два игрока, Красный и Синий, снова в деле, и этот раз они играют с цветными мелками! Сегодня озорной паре под руку попалось корневое дерево, с которым они играют в свою любимую игру, раскрашивая вершины этого дерева.

Игра выглядит следующим образом: есть дерево из \(n\) вершин с корнем в вершине \(1\), и каждая вершина первоначально белого цвета. У Красного и Синего есть ровно по одному ходу. Первым ходит Красный.

В свой ход, Красный может выполнить следующее действие произвольное количество раз:

  • Он выбирает любое поддерево корневого дерева и красит каждую из вершин поддерева в красный.
Однако, для большей честности, Красный может покрасить только \(k\) вершин дерева. Другими словами, после окончания хода Красного, не более \(k\) вершин может быть покрашено в красный.

Далее подходит очередь Синего. Он может выполнять следующее действие произвольное количество раз:

  • Он выбирает любое поддерево корневого дерева и красит каждую вершину поддерева в синий. Однако, ему нельзя выбирать поддеревья, в которых содержатся вершины, уже покрашенные в красный. Ведь в таком случае вершина получится фиолетового цвета, а никто не любит фиолетовый мелок* (англ. purple crayon).
Заметим, что нет ограничения на то, сколько вершин покрасит Синий, главное, что он не красит уже покрашенные Красным вершины.

После того как каждый сделает свой ход, счет игры определяется следующим образом: пусть \(w\) — количество оставшихся белых вершин, \(r\) — количество красных вершин, а \(b\) — количество синих вершин. Счет игры будет равен \(w \cdot (r - b)\).

Красный хочет максимизировать счет, а Синий — минимизировать. Чему будет равен счет игры, если оба игрока действуют оптимально?

Входные данные

В первой строке заданы два целых числа \(n\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\); \(1 \le k \le n\)) — количество вершин в дереве и максимальное количество красных вершин.

В следующих \(n - 1\) строках заданы описания ребер дерева. В \(i\)-й строке заданы два целых числа \(u_i\) и \(v_i\) через пробел (\(1 \le u_i, v_i \le n\); \(u_i \neq v_i\)) — \(i\)-е ребро дерева.

Гарантируется, что заданные ребра образуют дерево.

Выходные данные

Выведите одно число — итоговый счет игры, если и Красный и Синий действуют оптимально.

Примечание

В первом наборе входных данных, одна из оптимальных стратегий следующая:

  • Красный выбирает для покраски поддеревья вершин \(2\) и \(3\).
  • Синий выбирает для покраски поддерево вершины \(4\).
В результате вершины \(2\) и \(3\) покрашены в красный, \(4\) — в синий, а вершина \(1\) — в белый. Счет игры равен \(1 \cdot (2 - 1) = 1\).

Во втором наборе, оптимальная стратегия следующая:

  • Красный выбирает для покраски поддерево вершины \(4\). Тем самым красит вершины \(4\) и \(5\).
  • Синий не может ничего выбрать, а потому ничего не красит.
В результате вершины \(4\) и \(5\) покрашены в красный, а вершины \(1\), \(2\) и \(3\) — белые. Счет игры равен \(3 \cdot (2 - 0) = 6\).

В третьем наборе:

Счет игры равен \(4 \cdot (2 - 1) = 4\).

H. Оленьи игры

Бинарный поиск графы Конструктив кратчайшие пути Потоки разделяй и властвуй Структуры данных *3000

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

На текущий момент, у \(i\)-го оленя вклад равен \(a_i\). Вы хотите повлиять на таблицу лидеров с помощью нескольких операций. За одну операцию вы можете выбрать оленя и либо увеличить, либо уменьшить его вклад на \(1\). Отрицательные вклады разрешены.

При этом у вас есть \(m\) ограничений на получившиеся вклады. Каждое ограничение задается упорядоченной парой \((u, v)\), означающей, что в финальный вклад оленя \(u\) должен быть меньше или равен финального вклада оленя \(v\).

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

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(2\le n\le 1000\); \(1\le m\le 1000\)) — количество оленей и ограничений, соответственно.

Во второй строке заданы \(n\) целых чисел \(a_1,\ldots, a_n\) (\(1\le a_i\le 10^9\)), где \(a_i\) равно первоначальному вкладу \(i\)-го оленя.

В следующих \(m\) строках заданы сами ограничения.

В \(i\)-й строке заданы два целых числа \(u_i\) и \(v_i\) (\(1\le u_i, v_i\le n\); \(u_i\ne v_i\)) — номера оленей в \(i\)-м ограничении.

Выходные данные

Выведите \(n\) целых чисел \(b_1,\ldots, b_n\) (\(-10^{15}\le b_i\le 10^{15}\)), где \(b_i\) будет равно финальному вкладу \(i\)-го оленя после применения всех операций.

Если существует несколько решений с наименьшим количеством операций, выведите любое из них.

Можно доказать, что всегда существует оптимальное решение с \(|b_i|\le 10^{15}\) для всех \(i\).

E. Лексикографически достаточно малая

жадные алгоритмы Перебор Строки Структуры данных *2200

Вам даны две строки \(s\) и \(t\) равной длины \(n\). За одну операцию вы можете поменять местами любые два соседних символа в строке \(s\).

Вам нужно сказать, какое наименьшее количество операций вам потребуется, чтобы строка \(s\) стала лексикографически меньше строки \(t\).

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 10\,000\)): количество тестовых случаев.

Первая строка каждого тестового случая содержит одно целое число \(n\) (\(1 \le n \le 10^5\)).

Вторая строка каждого тестового случая содержит строку \(s\) из \(n\) строчных букв латинского алфавита.

Третья строка каждого тестового случая содержит строку \(t\) из \(n\) строчных букв латинского алфавита.

Гарантируется, что сумма значений \(n\) по всем тестовым случаям не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого тестового случая в отдельной строке выведите наименьшее количество операций, которое вам потребуется, чтобы строка \(s\) стала лексикографически меньше строки \(t\), или \(-1\), если это невозможно сделать.

H. Следи за малостью XOR

битмаски дп Комбинаторика математика разделяй и властвуй Структуры данных *3000

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\) и целое число \(x\).

Найдите количество непустых подмножеств индексов этого массива \(1 \leq b_1 < b_2 < \ldots < b_k \leq n\) таких, что для всех пар \((i, j)\), где \(1 \leq i < j \leq k\), выполняется неравенство \(a_{b_i} \oplus a_{b_j} \leq x\). Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ. Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(x\) (\(1 \leq n \leq 150\,000\), \(0 \leq x < 2^{30}\)). Здесь \(n\) — размер массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i < 2^{30}\)) — сам массив.

Выходные данные

Выведите одно целое число: количество непустых подмножеств таких, что побитовое исключающее ИЛИ любых двух элементов не больше \(x\), по модулю \(998\,244\,353\).

G. Торговая задача

жадные алгоритмы снм сортировки Структуры данных *2200

Монокарп играет в компьютерную игру (ага, опять). В этой игре довольно нестандартно реализована механика торговли.

Чтобы поторговать с кем-то из персонажей игры, Монокарп должен выбрать какую-то свою вещь и обменять ее на вещь того персонажа, с которым он торгует. У каждой вещи есть целочисленная цена. Если у Монокарпа есть вещь с ценой \(x\), он может обменять ее на вещь (ровно одну) с ценой не более \(x+k\).

Изначально у Монокарпа есть \(n\) вещей, цена \(i\)-й из них равна \(a_i\). У персонажа, с которым Монокарп торгует, изначально есть \(m\) вещей, цена \(i\)-й из них равна \(b_i\). Монокарп может поторговать с этим персонажем столько раз, сколько захочет (возможно, ноль), каждый раз меняя одну из своих вещей на вещь, принадлежащую персонажу, по описанным ранее правилам. Обратите внимание, что если Монокарп получает какую-то вещь в результате обмена, он потом может ее обменять на другую вещь (так как это теперь его вещь); и наоборот, если Монокарп отдал свою вещь в процессе обмена, он может получить ее обратно, обменяв на нее что-то еще.

Вы должны ответить на \(q\) запросов. В каждом запросе вам подается одно целое число, которое соответствует значению \(k\). Чтобы ответить на запрос, вы должны посчитать максимально возможную суммарную стоимость вещей, которые могут оказаться у Монокарпа (при условии, что вещь стоимости \(x\) можно обменивать на вещь стоимости не более \(x+k\)). Обратите внимание, что запросы независимые: Монокарп на самом деле не обменивает вещи, он просто хочет оценить максимально возможную суммарную цену вещей.

Входные данные

В первой строке заданы три целых числа \(n\), \(m\) и \(q\) (\(1 \le n, m, q \le 2 \cdot 10^5\)).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — цены вещей, которые есть у Монокарпа.

В третьей строке заданы \(m\) целых чисел \(b_1, b_2, \dots, b_m\) (\(1 \le b_i \le 10^9\)) — цены вещей у персонажа, с которым торгует Монокарп.

В четвертой строке заданы \(q\) целых чисел, \(i\)-е из которых равно значению \(k\) в \(i\)-м запросе (\(0 \le k \le 10^9\)).

Выходные данные

Для каждого запроса выведите одно целое число — максимально возможную суммарную цену вещей, которые могут оказаться у Монокарпа при заданном значении \(k\) для запроса.

E. MEX и инкременты

дп жадные алгоритмы Конструктив математика реализация сортировки Структуры данных *1700

У Дмитрия есть массив из \(n\) неотрицательных целых чисел \(a_1, a_2, \dots, a_n\).

За одну операцию он может выбрать произвольный индекс \(j\) (\(1 \le j \le n\)) и увеличить значение элемента \(a_j\) на \(1\). Он может выбирать один и тот же индекс \(j\) многократно.

Для каждого \(i\) от \(0\) до \(n\) определите, сможет ли Дмитрий сделать \(\mathrm{MEX}\) массива равным ровно \(i\). Если сможет, то определите, за какое минимальное количество операций.

\(\mathrm{MEX}\) массива равен минимальному целому неотрицательному числу, которого нет в массиве. Например, \(\mathrm{MEX}\) массива \([3, 1, 0]\) равен \(2\), а массива \([3, 3, 1, 4]\)\(0\).

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину массива \(a\).

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le n\)) — элементы массива \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n + 1\) целое число — \(i\)-е число равно минимальному числу операций, за которое можно сделать \(\mathrm{MEX}\) массива равным \(i\) (\(0 \le i \le n\)), или -1, если этого сделать нельзя.

Примечание

В первом наборе входных данных примера \(n=3\):

  • чтобы получить \(\mathrm{MEX}=0\), достаточно выполнить один инкремент: \(a_1\)++;
  • чтобы получить \(\mathrm{MEX}=1\), достаточно выполнить один инкремент: \(a_2\)++;
  • \(\mathrm{MEX}=2\) для заданного массива, поэтому выполнять инкременты не надо;
  • получить \(\mathrm{MEX}=3\), выполняя инкременты, невозможно.

H. Перестановка и запросы

Перебор разделяй и властвуй Структуры данных *2400

Дана перестановка \(p\) из \(n\) элементов. Перестановка из \(n\) элементов — это массив длины \(n\), в котором каждое целое число от \(1\) до \(n\) встречается ровно по одному разу. Например, \([1, 2, 3]\) и \([4, 3, 5, 1, 2]\) — это перестановки, но \([1, 2, 4]\) и \([4, 3, 2, 1, 2]\) — это не перестановки. Вам нужно выполнить \(q\) запросов.

Есть два типа запросов:

  • \(1\) \(x\) \(y\) — поменять местами \(p_x\) и \(p_y\).
  • \(2\) \(i\) \(k\) — вывести число, которым станет \(i\), если присвоить \(i = p_i\) \(k\) раз.
Входные данные

В первой строке находятся два целых числа \(n\) и \(q\) (\(1 \le n, q \le 10^5\)).

Во второй строке находятся \(n\) целых чисел \(p_1, p_2, \dots, p_n\).

В каждой из следующих \(q\) строк находится по три целых числа. Первое число \(t\) (\(1 \le t \le 2\)) – тип запроса. Если \(t = 1\), то следующие два целых числа — это \(x\) и \(y\) (\(1 \le x, y \le n\); \(x \ne y\)) — запрос первого типа. Если \(t = 2\), то следующие два целых числа — это \(i\) и \(k\) (\(1 \le i, k \le n\)) — запрос второго типа.

Гарантируется, что есть хотя бы один запрос второго типа.

Выходные данные

Для каждого запроса второго типа выведите одно целое число в новой строке — ответ на этот запрос.

Примечание

В первом примере \(p = \{5, 3, 4, 2, 1\}\).

Первый запрос — вывести \(p_3\). Ответ — \(4\).

Второй запрос — вывести \(p_{p_1}\). Ответ — \(1\).

Третий запрос — поменять местами \(p_1\) и \(p_3\). Теперь \(p = \{4, 3, 5, 2, 1\}\).

Четвёртый запрос — вывести \(p_{p_1}\). Ответ — \(2\).

E. Замена чисел

Конструктив реализация снм Структуры данных *1900

У вас есть массив целых чисел (изначально пустой).

Вам предстоит выполнить \(q\) запросов. Каждый запрос имеет один из двух типов:

  • «\(1\) \(x\)» — добавить элемент \(x\) в конец массива;
  • «\(2\) \(x\) \(y\)» — заменить все вхождения \(x\) в массиве на \(y\).

Найдите массив, получившийся после выполнения всех запросов.

Входные данные

Первая строка содержит одно целое число \(q\) (\(1 \le q \le 5 \cdot 10^5\)) — количество запросов.

Следующие \(q\) строк содержат запросы (по одному на строку). Каждый запрос имеет один из двух типов:

  • «\(1\) \(x\)» (\(1 \le x \le 5 \cdot 10^5\));
  • «\(2\) \(x\) \(y\)» (\(1 \le x, y \le 5 \cdot 10^5\)).

Гарантируется, что есть хотя бы один запрос первого типа.

Выходные данные

В единственную строку выведите \(k\) целых чисел — массив, получившийся после выполнения всех запросов, где \(k\) — количество запросов первого типа.

Примечание

В первом примере из условия массив меняется следующим образом:

\([]\) \(\rightarrow\) \([3]\) \(\rightarrow\) \([3, 1]\) \(\rightarrow\) \([3, 2]\) \(\rightarrow\) \([3, 2, 2]\) \(\rightarrow\) \([3, 2, 2, 1]\) \(\rightarrow\) \([3, 2, 2, 1, 2]\) \(\rightarrow\) \([3, 2, 2, 3, 2]\).

Во втором примере из условия массив меняется следующим образом:

\([]\) \(\rightarrow\) \([1]\) \(\rightarrow\) \([1, 2]\) \(\rightarrow\) \([1, 2, 1]\) \(\rightarrow\) \([1, 2, 1]\).

В третьем примере из условия массив меняется следующим образом:

\([]\) \(\rightarrow\) \([]\) \(\rightarrow\) \([1]\) \(\rightarrow\) \([1, 4]\) \(\rightarrow\) \([1, 4, 2]\) \(\rightarrow\) \([1, 4, 4]\) \(\rightarrow\) \([1, 3, 3]\) \(\rightarrow\) \([1, 3, 3, 2]\) \(\rightarrow\) \([1, 3, 3, 7]\).

B. Магазин целых чисел

жадные алгоритмы реализация Структуры данных *1500

Магазин целых чисел продаёт \(n\) отрезков, \(i\)-й из которых состоит из чисел от \(l_i\) до \(r_i\) и стоит \(c_i\) монет.

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

В качестве подарка за покупку, Вася дополнительно получит ещё несколько целых чисел. Число \(x\), не купленное Васей ранее, он получит тогда и только тогда, когда для \(x\) выполняются два следующих условия:

  • Найдётся купленное Васей число \(l\), меньшее \(x\).
  • Найдётся купленное Васей число \(r\), большее \(x\).

Число \(x\) Вася может получить в подарок не более одного раза, таким образом все числа, которые получит Вася будут различными.

Например, если Вася купит отрезок \([2, 4]\) за \(20\) монет и отрезок \([7, 8]\) за \(22\) монеты, он потратит \(42\) монеты и получит числа \(2, 3, 4, 7, 8\) как содержимое отрезков. В качестве подарка он получит числа \(5\) и \(6\).

По техническим причинам, завтра в магазине будут доступны к покупке только \(s\) первых отрезков (то есть отрезки \([l_1, r_1], [l_2, r_2], \ldots, [l_s, r_s]\)). Вася не сможет купить отрезки, не доступные к покупке.

Вася хочет получить (купить или получить в подарок) как можно больше целых чисел. Если это можно сделать разными способами, то он выберет самый дешёвый из них.

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

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано одно число \(n\) (\(1 \leq n \leq 10^5\)) — количество отрезков в магазине.

В следующих \(n\) строках дано по три числа \(l_i\), \(r_i\), \(c_i\) (\(1 \leq l_i \leq r_i \leq 10^9, 1 \leq c_i \leq 10^9\)) — концы \(i\)-го отрезка и его стоимость.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) чисел: \(s\)-е (\(1 \leq s \leq n\)) из них должно быть равно количеству монет, которое потратит Вася, если к покупке будут доступны только первые \(s\) отрезков.

Примечание

В первом наборе входных данных при \(s = 1\) Вася может купить только один отрезок \([2, 4]\) за \(20\) монет и получить \(3\) числа.

Способ получить \(7\) чисел за \(42\) монеты при \(s = 2\) описан в условии.

Во втором наборе входных данных обратите внимание на то, что в магазине могут быть одинаковые отрезки.

E. Новая школа

Бинарный поиск дп жадные алгоритмы реализация сортировки Структуры данных *2300

Вы решили открыть новую школу. Вы уже нашли \(n\) преподавателей и \(m\) групп учеников. Группа учеников \(i\) состоит из \(k_i \geq 2\) учеников. Вы знаете возраста всех преподавателей и всех учеников. Возраста преподавателей равны \(a_1, a_2, \ldots, a_n\), а возраста учеников в \(i\)-й группе равны \(b_{i, 1}, b_{i, 2}, \ldots, b_{i, k_i}\).

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

  • Каждой группе учеников назначен ровно один из преподавателей.
  • Каждому преподавателю назначено не более \(1\) группы учеников.
  • Для каждой группы, cреднее арифметическое возрастов учеников группы не превосходит возраста назначенного этой группе преподавателя.

Средним арифметическим множества \(x_1, x_2, \ldots, x_k\) из \(k\) чисел является значение \(\frac{x_1 + x_2 + \ldots + x_k}{k}\).

Недавно Вы узнали, что один из учеников решил отказаться от обучения в Вашей школе. После его отказа размер одной из групп учеников уменьшится на \(1\), все остальные группы останутся без изменений.

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

Обратите внимание, что не гарантируется, что до отказа ученика от обучения, было возможно начать занятия.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано два числа \(n\) и \(m\) (\(1 \leq m \leq n \leq 10^5\)) — количество преподавателей и количество групп учеников.

Во второй строке дано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^5\)) — возраста преподавателей.

В следующих \(2m\) строках содержатся описания групп.

В первой строке описания группы дано одно число \(k_i\) (\(2 \leq k_i \leq 10^5\)) — количество учеников в группе.

Во второй строке описания группы дано \(k_i\) целых чисел \(b_{i, 1}, b_{i, 2}, \ldots, b_{i, k_i}\) (\(1 \leq b_{i, j} \leq 10^5\)) — возраста учеников в этой группе.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\), и что сумма \(k_1 + k_2 + \ldots + k_m\) всех наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку длины \(k_1 + k_2 + \ldots + k_m\), состоящую из символов \(0\) и \(1\). \(i\)-й символ этой строки должен быть равен \(1\), если в случае отказа \(i\)-го ученика можно будет начать занятия, и равен \(0\) иначе.

Ученики пронумерованы целыми числами от \(1\) до \(k_1 + k_2 + \ldots + k_m\) в том порядке, в котором они встречаются во входных данных. Таким образом, ученики \(1\)-й группы имеют номера \(1\), \(2\), \(\ldots\), \(k_1\), ученики \(2\)-й группы имеют номера \(k_1 + 1\), \(k_1 + 2\), \(\ldots\), \(k_1 + k_2\) и так далее.

Примечание

В первом наборе входных данных есть одна группа учеников с средним возрастом \(\frac{25+16+37}{3}=26\) и один преподаватель с возрастом \(30\). Существует единственный способ назначить каждой группе учеников преподавателя и начать занятия.

Если ученик возраста \(16\) откажется от обучения, среднее арифметическое возрастов в группе станет равно \(\frac{25+37}{2}=31\), и не будет существовать способа назначить каждой группе учеников преподавателя.

Во втором наборе входных данных невозможно начать занятия изначально. Но если \(3\)-й ученик возраста \(111\) откажется от обучения, средние возраста учеников в группах станут равны \(\frac{4 + 5}{2}=4.5\) и \(\frac{11+11}{2} = 11\) соответственно. Тогда можно назначить первой группе первого преподавателя, а второй группе — третьего преподавателя.

F. Странные инструкции

жадные алгоритмы реализация Структуры данных *2700

У Даши есть \(10^{100}\) монет. Недавно она нашла бинарную строку \(s\) длины \(n\) и несколько операций, с помощью которых её можно изменять (каждую операцию можно делать сколько угодно раз):

  1. Заменить подстроку строки \(s\), равную 00, на 0 и получить \(a\) монет.
  2. Заменить подстроку строки \(s\), равную 11, на 1 и получить \(b\) монет.
  3. Удалить из строки \(s\) символ 0, заплатив за это \(c\) монет.

Оказалось, что при выполнении операций нужно соблюдать следующее правило:

  • Запрещается делать две операции с номерами одинаковой чётности подряд. Операции пронумерованы числами от \(1\) до \(3\) в порядке, в котором они даны выше.

Определите максимальное количество монет, которое Даша может получить делая эти операции и не нарушая правило.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано четыре целых числа \(n\), \(a\), \(b\), \(c\) (\(1 \leq n \leq 10^5, 1 \leq a, b, c \leq 10^9\)).

Во второй строке дана бинарная строка \(s\) длины \(n\).

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ.

Примечание

В первом наборе входных данных одна из оптимальных последовательностей операций такая: 01101 \(\rightarrow\) 0101 \(\rightarrow\) 011 \(\rightarrow\) 01. Эта последовательность состоит из операций \(2\), \(3\) и \(2\) в таком порядке. Она удовлетворяет всем правилам и даёт \(3\) монеты. Можно показать, что нельзя получить больше монет, поэтому ответ \(3\).

Во втором наборе входных данных одна из оптимальных последовательностей операций такая: 110001 \(\rightarrow\) 11001 \(\rightarrow\) 1001 \(\rightarrow\) 101.

В третьем наборе входных данных одна из оптимальных последовательностей операций такая: 011110 \(\rightarrow\) 01110 \(\rightarrow\) 1110 \(\rightarrow\) 110 \(\rightarrow\) 11 \(\rightarrow\) 1.

G. Взвешенные возрастающие подпоследовательности

дп математика Структуры данных *3200

Вам дана последовательность целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\).

Последовательность индексов \(i_1 < i_2 < \ldots < i_k\) длины \(k\) задаёт подпоследовательность \(a_{i_1}, a_{i_2}, \ldots, a_{i_k}\) длины \(k\) последовательности \(a\).

Подпоследовательность \(a_{i_1}, a_{i_2}, \ldots, a_{i_k}\) длины \(k\) последовательности \(a\) называется возрастающей, если \(a_{i_j} < a_{i_{j+1}}\) для всех \(1 \leq j < k\).

Назовём весом возрастающей подпоследовательности \(a_{i_1}, a_{i_2}, \ldots, a_{i_k}\) длины \(k\) последовательности \(a\) количество таких \(1 \leq j \leq k\), для которых существует \(i_k < x \leq n\), такой что \(a_x > a_{i_j}\).

Например, если \(a = [6, 4, 8, 6, 5]\), то последовательность индексов \(i = [2, 4]\) задаёт возрастающую подпоследовательность \([4, 6]\) последовательности \(a\). Вес этой возрастающей подпоследовательности будет равен \(1\), так как для \(j = 1\) существует \(x = 5\) для которого \(a_5 = 5 > a_{i_1} = 4\), а для \(j = 2\) такого \(x\) не существует.

Найдите сумму весов всех возрастающих подпоследовательностей \(a\) по модулю \(10^9+7\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано одно число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длина последовательности \(a\).

Во второй строке дано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — последовательность \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число: сумму весов всех возрастающих подпоследовательностей \(a\) по модулю \(10^9+7\).

Примечание

В первом наборе входных данных следующие возрастающие подпоследовательности \(a\) имеют ненулевой вес:

  • \([a_1] = [6]\) имеет вес \(1\).
  • \([a_2] = [4]\) имеет вес \(1\).
  • \([a_2, a_3] = [4, 8]\) имеет вес \(1\).
  • \([a_2, a_4] = [4, 6]\) имеет вес \(1\).
Сумма весов всех возрастающих подпоследовательностей равна \(4\).

Во втором тестовом случае существует \(7\) возрастающих подпоследовательностей \(a\) ненулевого веса: \(3\) веса \(1\), \(3\) веса \(2\) и \(1\) веса \(3\). Сумма весов равна \(12\).

I. Две последовательности

строковые суфф. структуры Структуры данных хэши *3500

Рассмотрим некоторый массив целых чисел \(C = [c_1, c_2, \ldots, c_n]\) длины \(n\). Построим последовательность массивов \(D_0, D_1, D_2, \ldots, D_{n}\) длины \(n+1\) следующим образом:

  • Первый массив в этой последовательности будет равен \(C\): \(D_0 = C\).
  • Для всех \(1 \leq i \leq n\) массив \(D_i\) будет получен из \(D_{i-1}\) следующим образом:
    • Рассмотрим лексикографически наименьший подмассив \(D_{i-1}\) длины \(i\). Тогда первые \(n-i\) элемент массива \(D_i\) будут равны первым \(n-i\) элементам массива \(D_{i-1}\) соответственно, а последние \(i\) элементов массива \(D_i\) будут равны соответствующим элементам этого подмассива длины \(i\).

Массив \(x\) является подмассивом массива \(y\), если \(x\) может быть получен удалением нескольких (возможно, ни одного или всех) элементов из начала \(y\) и нескольких (возможно, ни одного или всех) элементов из конца \(y\).

Для массива \(C\) обозначим массив \(D_n\) как \(op(C)\).

У Алисы есть массив целых чисел \(A = [a_1, a_2, \ldots, a_n]\) длины \(n\). Она построит последовательность массивов \(B_0, B_1, \ldots, B_n\) длины \(n+1\) следующим образом:

  • Первый массив в этой последовательности будет равен \(A\): \(B_0 = A\).
  • Для всех \(1 \leq i \leq n\) массив \(B_i\) будет равен \(op(B_{i-1})\), где \(op\) — преобразование, определённое выше.

Алиса задаст Вам \(q\) запросов про элементы последовательности массивов \(B_0, B_1, \ldots, B_n\). Запрос состоит из двух чисел \(i\) и \(j\), а ответом на него будет значение \(j\)-го элемента массива \(B_i\).

Входные данные

В первой строке дано одно число \(n\) (\(1 \leq n \leq 10^5\)) — длина массива \(A\).

Во второй строке дано \(n\) чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)) — массив \(A\).

В третьей строке дано одно число \(q\) (\(1 \leq q \leq 10^6\)) — количество запросов.

Следующие \(q\) строк содержат по два числа \(i\), \(j\) (\(1 \leq i, j \leq n\)) — параметры запросов.

Выходные данные

Выведите \(q\) целых чисел: значения \(B_{i, j}\) для требуемых \(i\), \(j\).

Примечание

В первом тесте \(B_0 = A = [2, 1, 3, 1]\).

\(B_1\) вычисляется следующим образом:

  • Изначально, \(D_0 = [2, 1, 3, 1]\).
  • Для \(i=1\) лексикографически минимальным подмассивом \(D_0\) длины \(1\) является \([1]\), \(D_1\) будет равен \([2, 1, 3, 1]\).
  • Для \(i=2\) лексикографически минимальным подмассивом \(D_1\) длины \(2\) является \([1, 3]\), \(D_2\) будет равен \([2, 1, 1, 3]\).
  • Для \(i=3\) лексикографически минимальным подмассивом \(D_2\) длины \(3\) является \([1, 1, 3]\), \(D_3\) будет равен \([2, 1, 1, 3]\).
  • Для \(i=4\) лексикографически минимальным подмассивом \(D_3\) длины \(4\) является \([2, 1, 1, 3]\), \(D_4\) будет равен \([2, 1, 1, 3]\).
  • Таким образом, \(B_1 = op(B_0) = op([2, 1, 3, 1]) = [2, 1, 1, 3]\).

B. Berland Music

жадные алгоритмы математика сортировки Структуры данных *1000

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

Представим, что Монокарпу порекомендовали \(n\) песен, пронумерованных от \(1\) до \(n\). У \(i\)-й песни предсказанный рейтинг равен \(p_i\), где \(1 \le p_i \le n\) и каждое целое число от \(1\) до \(n\) встречается ровно один раз. Другими словами, \(p\) — перестановка.

После прослушивания каждой песни Монокарп ее оценил — понравилась она ему или нет. Последовательность его оценок представлена строкой \(s\) такой, что \(s_i=0\) значит, что ему не понравилась \(i\)-я песня, а \(s_i=1\) значит, что понравилась.

Теперь сервису надо пересчитать рейтинги песен так, чтобы:

  • новые рейтинги \(q_1, q_2, \dots, q_n\) все еще были перестановкой (\(1 \le q_i \le n\); каждое целое число от \(1\) до \(n\) встречается ровно один раз);
  • каждая песня, которая понравилась Монокарпу, имеет рейтинг больше каждой, которая ему не понравилась (формально, для всех \(i, j\) таких, что \(s_i=1\) и \(s_j=0\), выполняется \(q_i>q_j\)).

Среди всех корректных перестановок \(q\) найдите такую, у которой значение \(\sum\limits_{i=1}^n |p_i-q_i|\) наименьшее, где \(|x|\) — это абсолютное значение \(x\).

Выведите перестановку \(q_1, q_2, \dots, q_n\). Если существует несколько ответов, выведите любой из них.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество песен.

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\)) — перестановка предсказанных рейтингов.

Третья строка каждого набора входных данных содержит строку \(s\), состоящую из \(n\) символов. Каждый символ — либо \(0\), либо \(1\). \(0\) значит, что Монокарпу не понравилась песня, а \(1\) — что понравилась.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите перестановку \(q\) — пересчитанные рейтинги песен. Если существует несколько ответов таких, что \(\sum\limits_{i=1}^n |p_i-q_i|\) минимально, выведите любой из них.

Примечание

В первом наборе входных данных существует только одна перестановка \(q\) такая, что каждая понравившаяся песня имеет рейтинг выше, чем каждая не понравившаяся: песня \(1\) получает рейтинг \(2\), а песня \(2\) — рейтинг \(1\). \(\sum\limits_{i=1}^n |p_i-q_i|=|1-2|+|2-1|=2\).

Во втором наборе входных данных Монокарпу понравились все песни, поэтому корректны все перестановки. Перестановка с минимальной суммой абсолютных разностей равна перестановке \(p\). Ее стоимость равна \(0\).

E. Дублирование среднего

Деревья жадные алгоритмы поиск в глубину и подобное Строки Структуры данных *2500

Дано бинарное дерево из \(n\) вершин. Вершины дерева пронумерованы от \(1\) до \(n\), корень дерева имеет номер \(1\). Каждая вершина может не иметь детей, иметь только правого или только левого ребенка, или иметь двух детей. Для удобства обозначим за \(l_u\) и \(r_u\) левого и правого ребенка вершины \(u\) соответственно, при этом \(l_u = 0\), если у \(u\) нет левого ребенка, и \(r_u = 0\), если у \(u\) нет правого ребенка.

В каждой вершине дерева записана некоторая строка, изначально состоящая из одного символа \(c_u\). Определим строковое представление дерева как конкатенацию всех строк, записанных в вершинах, в порядке центрированного обхода. Формально, пусть \(f(u)\) — строковое представление поддерева с корнем в вершине \(u\). \(f(u)\) определена так: \(\) f(u) = \begin{cases} \texttt{<пустая строка>,} & \text{если }u = 0; \\ f(l_u) + c_u + f(r_u) & \text{иначе}, \end{cases} \(\) где \(+\) обозначает строковую конкатенацию.

Представление всего дерева это \(f(1)\).

Для каждой вершины мы можем продублировать строку, записанную в ней, не более одного раза, а именно, заменить \(c_u\) на \(c_u + c_u\). Эта операция возможна только если \(u\) — корень дерева, или строка, записанная в родителе этой вершины уже продублирована.

Вам дано дерево и целое число \(k\). Какое лексикографически минимальное строковое представление дерево может иметь, если мы можем продублировать строку в не более чем \(k\) вершинах?

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)).

Вторая строка содержит строку \(c\), состоящую из \(n\) маленьких букв латинского алфавита, где \(c_i\) — строка, записанная в вершине \(i\) изначально, \(1 \le i \le n\). Обратите внимание, что данная строка \(c\) не является начальным строковым представлением дерева.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(0 \le l_i, r_i \le n\)). Если у \(i\)-й вершины нет левого ребенка, \(l_i = 0\), и если у \(i\)-й вершины нет правого ребенка, \(r_i = 0\).

Гарантируется, что данные значения описывают корректное бинарное дерево с корнем в \(1\).

Выходные данные

Выведите одну строку, содержащую лексикографически минимальное строковое представление, которое может иметь дерево после не более чем в \(k\) вершинах строка будет продублирована.

Примечание

Рисунке ниже иллюстрируют примеры. Число в вершине обозначает номер вершины, а строка в нижнем индексе — строку, написанную в вершине. Справа находится строковое представление дерева, где каждая буква имеет цвет соответствующей вершине дерева.

Ниже находится дерево для первого примера. Мы продублировали строки в вершинах \(1\) и \(3\). Строку в вершине \(2\) не нужно дублировать, так как в таком случае представление будет «bbaaab», что лексикографически больше, чем «baaaab».

Во втором примере можно продублировать строки в вершинах \(1\) и \(2\). Обратите внимание, что если продублировать только строку в корне, то представление будет хуже, чем у изначального дерева.

В третьем примере не нужно ничего дублировать. Даже если мы продублируем строку в вершине \(3\), мы будем обязаны также продублировать строку в вершине \(2\), что сделает результат хуже.

Нет способа получить строку «darkkcyan» из дерева с начальным представлением «darkcyan» :(.

D. Двоичные пауки

битмаски Деревья математика реализация сортировки Структуры данных *2300

На Марсе обитает необычный вид пауков — Двоичные пауки. Они плетут паутину, чтобы защищаться от врагов.

Чтобы сплести паутину, пауки объединяются в пары. При этом, если у первого паука в паре \(x\) лапок, а у второго — \(y\) лапок, то у них выходит паутина прочностью \(x \oplus y\). Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Двоичные пауки живут большими группами. Сейчас Вы наблюдаете за группой из \(n\) пауков, причем \(i\)-й паук имеет \(a_i\) лапок.

Когда группе пауков грозит опасность, то некоторые из них становятся защитниками. Защитники выбираются следующим образом. Во-первых, должно быть как минимум два паука-защитника. Во-вторых, любая пара из пауков-защитников должна уметь сплести паутину прочностью хотя бы \(k\). В-третьих, защитников должно быть как можно больше.

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

Входные данные

В первой строке входных данных находится два целых числа \(n\) и \(k\) (\(2 \le n \le 3\cdot10^5\), \(0 \le k \le 2^{30} - 1\)) — количество пауков в группе и минимальная допустимая прочность паутины.

Во второй строке входных данных находится \(n\) целых чисел \(a_i\) (\(0 \le a_i \le 2^{30}-1\)) — количество лапок у \(i\)-го паука.

Выходные данные

В первой строке выведите целое число \(\ell\) (\(2 \le \ell \le n\)) — максимально возможное количество пауков-защитников.

Во второй строке выведите через пробел \(\ell\) различных целых чисел \(b_i\) (\(1 \le b_i \le n\)) — номера пауков, которые станут защитниками.

Если существует несколько способов выбрать защитников, то выведите любой из них.

Увы, может получиться и так, что собрать защитников невозможно. В таком случае требуется вывести единственное число \(-1\).

Примечание

Рассмотрим пример из условия.

В первом примере группа пауков выглядит следующим образом:

Возьмем трех пауков: с двумя, десятью и \(16\)-ю лапками. Тогда нетрудно видеть, что каждая пара сможет сплести достаточно прочную паутину, т. к. \(2 \oplus 10 = 8 \ge 8\), \(2 \oplus 16 = 18 \ge 8\) и \(10 \oplus 16 = 26 \ge 8\).

Данный вариант выбора не единственный: можно, к примеру, выбрать трех пауков с номерами \(3\), \(4\) и \(6\).

Во втором примере никакая пара пауков не сможет сплести паутину прочностью \(1024\) или больше, поэтому ответ \(-1\).

E1. Обновление котов (простая версия)

графы Деревья дп Перебор поиск в глубину и подобное разделяй и властвуй Структуры данных *2500

Это простая версия задачи. Единственным различием между простой и сложной версиями задачи является наличие запросов удаления: они присутствуют лишь в сложной версии.

Компания «Interplanetary Software, Inc.» вместе с компанией «Robots of Cydonia, Ltd.» разработала и выпустила роботов-котов. Эти электронные питомцы умеют мяукать, ловить мышей и всячески развлекать хозяина.

Недавно разработчики из «Interplanetary Software, Inc.» решили выпустить обновление программного обеспечения для этих роботов. После обновления коты должны уметь решать задачи, связанные со скобочными последовательностями. Одна из таких задач приведена ниже.

Сначала немного погрузимся в теорию скобочных последовательностей. Будем рассматривать строки, состоящие из символов «(», «)» и «.». Назовем строку правильной скобочной последовательностью (ПСП), если из нее можно получить пустую строку путем операций удаления одиночных символов «.» либо подряд идущих символов «()». Например, строка «(()(.))» является ПСП, т. к. с ней можно проделать следующую цепочку удалений:

«(()(.))» \(\rightarrow\) «(()())» \(\rightarrow\) «(())» \(\rightarrow\) «()» \(\rightarrow\) «».

Мы получили пустую строку, а это значит, что исходная строка является ПСП. В то же время, строка «)(» не является ПСП, поскольку к ней нельзя применить описанные выше операции удаления.

Будем называть ПСП простой, если эта ПСП непуста, не начинается на «.» и не заканчивается на «.».

Также будем считать, что подстрока строки \(s\) — это ее последовательный подотрезок. В частности, \(s[l\dots r] = s_ls_{l+1}\dots s_r\), где \(s_i\) — \(i\)-й символ строки \(s\).

Теперь перейдем к формулировке задачи. Вам дана строка \(s\), изначально состоящая из символов «(» и «)». Необходимо отвечать на запросы следующего вида.

Даны индексы \(l\) и \(r\) (\(1 \le l < r \le n\)), причем гарантируется, что подстрока \(s[l\dots r]\) — простая ПСП. Требуется найти количество подстрок в \(s[l\dots r]\), которые являются простыми ПСП. Иными словами, необходимо найти количество пар индексов \(i\), \(j\) таких, что \(l \le i < j \le r\) и \(s[i\dots j]\) является простой ПСП.

Вы работаете в «Interplanetary Software, Inc.» и Вам поручили непростое задание: научить котов после обновления решать описанную выше задачу.

Обратите внимание, что в данной версии задачи в строке не может появиться символ «.». Он нужен лишь для сложной версии задачи.

Входные данные

В первой строке входных данных находится два целых числа \(n\) и \(q\) (\(2 \le n \le 3\cdot10^5\), \(1 \le q \le 3\cdot10^5\)) — длина строки и количество запросов.

Во второй строке находится строка \(s\), состоящая из \(n\) символов «(» и «)».

В каждой из следующих \(q\) строк находится по три целых числа \(t\), \(l\) и \(r\) (\(t = 2\), \(1 \le l < r \le n\)) — запросы, которые требуется обработать. Гарантируется, что все запросы корректны и удовлетворяют условию задачи. Обратите внимание, что в данной задаче число \(t\) не используется и всегда равно двум. Оно необходимо для сложной версии задачи.

Выходные данные

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

Примечание

Рассмотрим пример из условия.

Ответ на первый запрос равен \(3\), поскольку существует всего три требуемых подстроки: \(s[3\dots6]\), \(s[3\dots4]\) и \(s[5\dots6]\).

Ответ на второй запрос равен \(4\). Подходящие подстроки — \(s[3\dots6]\), \(s[3\dots4]\), \(s[5\dots6]\) и \(s[2\dots7]\).

Ответ на третий запрос равен \(1\). Подходящая подстрока — \(s[8\dots9]\).

Ответ на четвертый запрос равен \(6\). Подходящие подстроки — \(s[3\dots6]\), \(s[3\dots4]\), \(s[5\dots6]\), \(s[2\dots7]\), \(s[8\dots9]\) и \(s[2\dots9]\).

E2. Обновление котов (сложная версия)

Бинарный поиск графы Деревья поиск в глубину и подобное Структуры данных *2800

Это сложная версия задачи. Единственным различием между простой и сложной версиями задачи является наличие запросов удаления: они присутствуют лишь в сложной версии.

Компания «Interplanetary Software, Inc.» вместе с компанией «Robots of Cydonia, Ltd.» разработала и выпустила роботов-котов. Эти электронные питомцы умеют мяукать, ловить мышей и всячески развлекать хозяина.

Недавно разработчики из «Interplanetary Software, Inc.» решили выпустить обновление программного обеспечения для этих роботов. После обновления коты должны уметь решать задачи, связанные со скобочными последовательностями. Одна из таких задач приведена ниже.

Сначала немного погрузимся в теорию скобочных последовательностей. Будем рассматривать строки, состоящие из символов «(», «)» и «.». Назовем строку правильной скобочной последовательностью (ПСП), если из нее можно получить пустую строку путем операций удаления одиночных символов «.» либо подряд идущих символов «()». Например, строка «(()(.))» является ПСП, т. к. с ней можно проделать следующую цепочку удалений:

«(()(.))» \(\rightarrow\) «(()())» \(\rightarrow\) «(())» \(\rightarrow\) «()» \(\rightarrow\) «».

Мы получили пустую строку, а это значит, что исходная строка является ПСП. В то же время, строка «)(» не является ПСП, поскольку к ней нельзя применить описанные выше операции удаления.

Будем называть ПСП простой, если эта ПСП непуста, не начинается на «.» и не заканчивается на «.».

Также будем считать, что подстрока строки \(s\) — это ее последовательный подотрезок. В частности, \(s[l\dots r] = s_ls_{l+1}\dots s_r\), где \(s_i\) — \(i\)-й символ строки \(s\).

Теперь перейдем к формулировке задачи. Вам дана строка \(s\), изначально состоящая из символов «(» и «)». Необходимо отвечать на следующие запросы:

  1. Даны индексы \(l\) и \(r\) (\(1 \le l < r \le n\)). Гарантируется, что \(l\)-й символ строки равен «(», \(r\)-й символ строки равен «)», а символы между ними равны «.». Тогда требуется сделать \(l\)-й и \(r\)-й символ равными «.».
  2. Даны индексы \(l\) и \(r\) (\(1 \le l < r \le n\)), причем гарантируется, что подстрока \(s[l\dots r]\) — простая ПСП. Требуется найти количество подстрок в \(s[l\dots r]\), которые являются простыми ПСП. Иными словами, необходимо найти количество пар индексов \(i\), \(j\) таких, что \(l \le i < j \le r\) и \(s[i\dots j]\) является простой ПСП.

Вы работаете в «Interplanetary Software, Inc.» и Вам поручили непростое задание: научить котов после обновления решать описанную выше задачу.

Входные данные

В первой строке входных данных находится два целых числа \(n\) и \(q\) (\(2 \le n \le 3\cdot10^5\), \(1 \le q \le 3\cdot10^5\)) — длина строки и количество запросов.

Во второй строке находится строка \(s\), состоящая из \(n\) символов «(» и «)».

В каждой из следующих \(q\) строк находится по три числа \(t\), \(l\) и \(r\) (\(t \in \{1, 2\}\), \(1 \le l < r \le n\)) — запросы, которые требуется обработать. Гарантируется, что все запросы корректны и удовлетворяют условию задачи.

Выходные данные

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

Примечание

Рассмотрим пример из условия.

Ответ на первый запрос равен \(3\), поскольку существует всего три требуемых подстроки: \(s[3\dots6]\), \(s[3\dots4]\) и \(s[5\dots6]\).

Ответ на второй запрос равен \(4\). Подходящие подстроки — \(s[3\dots6]\), \(s[3\dots4]\), \(s[5\dots6]\) и \(s[2\dots7]\).

После третьего запроса строка станет равной «)(..())()».

Ответ на четвертый запрос равен \(2\). Подходящие подстроки — \(s[5\dots6]\) и \(s[2\dots7]\). Обратите внимание, что \(s[3\dots6]\) больше не является простой ПСП, т. к. начинается с «.».

Ответ на пятый запрос равен \(4\). Подходящие подстроки — \(s[5\dots6]\), \(s[2\dots7]\), \(s[8\dots9]\) и \(s[2\dots9]\).

После шестого запроса строка станет равной «)(....)()».

После седьмого запроса строка станет равной «)......()».

Ответ на восьмой запрос равен \(1\). Подходящая подстрока — \(s[8\dots9]\).

C. Монстры и заклинания

Бинарный поиск дп жадные алгоритмы математика реализация Структуры данных *1700

Монокарп снова играет в компьютерную игру. Он ученик мага, поэтому знает только одно заклинание. К счастью, это заклинание может наносить урон монстрам.

Уровень, на котором он сейчас, содержит \(n\) монстров. \(i\)-й из них появляется через \(k_i\) секунд с начала уровня и имеет \(h_i\) очков здоровья. Дополнительно есть ограничение \(h_i \le k_i\) для всех \(1 \le i \le n\). Все \(k_i\) различны.

Монокарп может использовать заклинание в моменты времени, которые являются положительным целым количеством секунд с начала уровня: \(1, 2, 3, \dots\) Урон от заклинания считается следующим образом. Если он не использовал заклинание в предыдущую секунду, то урон равен \(1\). Иначе, пусть урон в прошлую секунду был равен \(x\). Тогда он может выбрать, чтобы урон был либо \(x + 1\), либо \(1\). Заклинание использует ману: использование заклинания с уроном \(x\) использует \(x\) маны. Мана не восстанавливается.

Чтобы убить \(i\)-го монстра, Монокарп должен использовать заклинание с уроном хотя бы \(h_i\) ровно в тот момент, когда появляется монстр, что равно \(k_i\).

Обратите внимание, что Монокарп может использовать заклинание и тогда, когда в текущую секунду монстра нет.

Количество маны, необходимое для использования всех заклинаний, — это сумма маны по всем использованным заклинаниям. Посчитайте наименьшее количество маны, которое потребуется Монокарпу, чтобы убить всех монстров.

Можно показать, что всегда можно убить всех монстров в рамках ограничений задачи.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 100\)) — количество монстров на уровне.

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(k_1 < k_2 < \dots < k_n\) (\(1 \le k_i \le 10^9\)) — количество секунд с начала уровня до появления \(i\)-го монстра. Все \(k_i\) различны, \(k_i\) заданы в порядке возрастания.

В третьей строке записаны \(n\) целых чисел \(h_1, h_2, \dots, h_n\) (\(1 \le h_i \le k_i \le 10^9\)) — здоровье \(i\)-го монстра.

Сумма \(n\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшее количество маны, которое потребуется Монокарпу, чтобы убить всех монстров.

Примечание

В первом наборе входных данных Монокарп может использовать заклинание через \(3, 4, 5\) и \(6\) секунд с начала уровня с уроном \(1, 2, 3\) и \(4\), соответственно. Урон в \(6\) секунду равен \(4\), что действительно больше или равно здоровью монстра, который появляется.

Во втором наборе входных данных Монокарп может использовать заклинание через \(3, 4\) и \(5\) секунд с начала уровня с уроном \(1, 2\) и \(3\), соответственно.

В третьем наборе входных данных Монокарп может использовать заклинание через \(4, 5, 7, 8\) и \(9\) секунд с начала уровня с уроном \(1, 2, 1, 1\) и \(2\), соответственно.

E. Не спасаться

дп кратчайшие пути реализация Структуры данных *2200

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

Здание состоит из \(n\) этажей, на каждом этаже \(m\) комнат. За \((i, j)\) обозначим \(j\)-ю комнату на \(i\)-м этаже. В здании \(k\) лестниц. \(i\)-я лестница позволяет Раму подняться из комнаты \((a_i, b_i)\) в \((c_i, d_i)\), но не в другом направлении. За проход по \(i\)-й лестнице Рам получает \(h_i\) очков здоровья. Гарантируется, что для всех лестниц \(a_i < c_i\).

Если Рам находится на \(i\)-м этаже, то он может двигаться влево или вправо. Путешествовать по этажам, однако, сложно, поэтому если Рам переходит от комнаты \((i, j)\) к \((i, k)\), он теряет \(|j-k| \cdot x_i\) очков здоровья.

Изначально Рам находится в комнате \((1, 1)\), а вертолет ожидает его в \((n, m)\). Какое минимальное количество очков здоровья Рам может потерять, если выберет оптимальный путь? Обратите внимание, что этот ответ может быть отрицательным (в этом случае он наберет очки здоровья). Выведите «NO ESCAPE», если Рам никак не может добраться к вертолету.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 5 \cdot 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит \(3\) целых числа \(n, m, k\) (\(2 \leq n, m \leq 10^5\); \(1 \leq k \leq 10^5\)) — количество этажей, количество комнат на каждом этаже, и количество лестниц, соответственно.

Вторая строка содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \leq x_i \leq 10^6\)).

Следующие \(k\) строк содержат описания лестниц. Лестница \(i\) описана пятью целыми числами \(a_i, b_i, c_i, d_i, h_i\) (\(1 \leq a_i < c_i \leq n\); \(1 \leq b_i, d_i \leq m\); \(1 \leq h_i \leq 10^6\)) — номера комнат, которые она соединяет, и бонус к здоровью при использовании лестницы.

Гарантируется, что для всех лестниц выполняется \(a_i < c_i\), и между любыми двумя комнатами существует не более чем одна лестница.

Гарантируется, что сумма значений \(n\), сумма значений \(m\), сумма значений \(k\) по всем наборам входных данных не превосходят \(10^5\).

Выходные данные

Выведите минимальное число очков здоровья, которое Рам может потерять на пути от \((1, 1)\) до \((n, m)\). Если Рам не может добраться до вертолета, выведите «NO ESCAPE» (заглавными буквами без кавычек).

Примечание

Рисунок в условии демонстрирует первый пример из условия. Есть только \(2\) возможных пути к \((n, m)\):

  • Рам идет в \((1, 3)\), поднимается по лестнице в \((3, 3)\), идет в \((3, 2)\), поднимается по лестнице в \((5, 1)\), идет до \((5, 3)\), откуда улетает на вертолете. Потери здоровья равны \(\) \begin{align*} &\mathrel{\phantom{=}} x_1 \cdot |1-3| - h_1 + x_3 \cdot |3-2| - h_3 + x_5 \cdot |1-3| \\ &= 5 \cdot 2 - 4 + 8 \cdot 1 - 6 + 4 \cdot 2 \\ &= 16. \end{align*} \(\)
  • Рам идет в \((1, 3)\), поднимается по лестнице в \((3, 3)\), идет в \((3, 1)\), поднимается по лестнице в \((5, 2)\), идет до \((5, 3)\) , откуда улетает на вертолете. Потери здоровья равны \(\) \begin{align*} &\mathrel{\phantom{=}} x_1 \cdot |1-3| - h_1 + x_3 \cdot |3-1| - h_2 + a_5 \cdot |2-3| \\ &= 5 \cdot 2 - 4 + 8 \cdot 2 - 5 + 4 \cdot 1 \\ &= 21. \end{align*} \(\)
Минимальная потеря здоровья равна \(16\).

Во втором примере нет пути в \((n, m)\).

В третьем примере Рам идет в \((1, 3)\), а затем поднимается по лестнице в \((5, 3)\). Он теряет \(5 \cdot 2\) очка здоровья и затем получает \(h_1 = 100\) очков. Поэтому его потери равны \(10-100=-90\) (отрицательное число означает, что он улучшил здоровье).

E. Метеоритный город

Бинарный поиск Деревья снм Структуры данных *3100

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

В городе есть \(n\) зданий с номерами от \(1\) до \(n\). Между некоторыми зданиями есть дороги, и существует ровно \(1\) простой путь от любого здания к любому другому. Каждая дорога имеет определенный уровень метеоритной опасности. Во всех зданиях есть продуктовые магазины, но Mihai, конечно, интересуют только открытые магазины. Изначально все продуктовые магазины закрыты.

Вам задано \(q\) запросов трех типов:

  1. Учитывая целые числа \(l\) и \(r\), в зданиях с номерами от \(l\) до \(r\) открываются продуктовые магазины (ничего не происходит со зданиями, в которых уже открыт продуктовый магазин).
  2. Учитывая целые числа \(l\) и \(r\), здания с номерами от \(l\) до \(r\) закрывают свои продуктовые магазины (ничего не происходит со зданиями, в которых уже закрыт продуктовый магазин).
  3. Учитывая целое число \(x\), найдите максимальный уровень метеоритной опасности на простом пути от \(x\) до любого открытого продуктового магазина или \(-1\), если нет ни одной дороги на любом простом пути к любому открытому магазину.
Входные данные

В первой строке находятся два целых числа \(n\) и \(q\) (\(2 \le n, q \le 3\cdot 10^5\)).

Далее следует \(n - 1\) строка, \(i\)-я из которых содержит целые числа \(u_i\), \(v_i\) и \(w_i\) (\(1 \le u_i, v_i \le n, \enspace 1 \le w_i \le 10^9\)) — это означает, что между зданием \(u_i\) и \(v_i\) есть двусторонняя дорога с уровнем метеоритной опасности \(w_i\).

Гарантируется, что данные ребра образуют дерево.

Далее следует \(q\) строк, \(j\)-я из которых начинается с целого числа \(t_j\) (\(1 \le t_j \le 3\)) и означает, что \(j\)-й запрос относится к типу \(t_j\).

Если \(t_j\) равно \(1\) или \(2\), то остальная часть строки содержит целые числа \(l_j\) и \(r_j\) (\(1 \le l_j \le r_j \le n\)).

Если \(t_j\) равно \(3\), то остальная часть строки содержит целое число \(x_j\) (\(1 \le x_j \le n\)).

Выходные данные

Для каждого запроса типа \(3\) (\(t_j = 3\)) выведите максимальный уровень метеоритной опасности, который находится на некотором простом пути от \(x_j\) до некоторого открытого магазина, или \(-1\), если нет ни одной дороги на любом простом пути к любому открытому магазину.

Примечание

Это иллюстрация города, представленного во входных данных примера.

В первом запросе открытых магазинов нет, поэтому очевидно, что нет ребер на простом пути от \(1\) до любого открытого магазина, поэтому ответ \(-1\).

После второго и третьего запросов набор открытых магазинов равен \(\{1\}\). Простой путь от \(1\) до \(1\) не имеет ребер, поэтому ответ для запроса \(3\) равен \(-1\).

После четвертого запроса открытых магазинов нет.

После пятого и шестого запросов набор открытых магазинов равен \(\{5, 6\}\). В шестом запросе есть два пути от \(x_j = 4\) до некоторого открытого продуктового магазина: От \(4\) до \(5\) и от \(4\) до \(6\). Самая большая метеоритная опасность находится на пути от \(4\) до \(6\), так что ответ на запрос \(6\) будет \(4\). На рисунке этот путь отмечен красным.

После остальных запросов набор открытых магазинов равен \(\{5\}\).

В восьмом запросе единственный путь от \(x_j = 4\) к открытому магазину от \(4\) до \(5\), а максимальная метеоритная опасность на этом пути составляет \(3\). На рисунке этот путь отмечен зеленым.

В девятом запросе единственный путь от \(x_j = 1\) к открытому магазину от \(1\) до \(5\), а максимальная метеоритная опасность на этом пути равна \(5\). На рисунке этот путь отмечен синим цветом.

F. Управление кризисом космических кораблей

Бинарный поиск геометрия сортировки Структуры данных *3500

NASA (Норвежская ассоциация астронавтов) разрабатывает новую систему управления космических кораблей. Но в нынешнем состоянии было бы небезопасно, если бы космический корабль оказался в кучке космического мусора. Чтобы система рулевого управления была безопасной, им необходимо ответить на следующее:

Для целевой позиции \(t = (0, 0)\), набора из \(n\) кусков космического мусора \(l\), описанного отрезками \(l_i = ((a_{ix}, a_{iy}), (b_{ix}, b_{iy}))\) и начальной позиции \(s = (s_x, s_y)\), определите существует ли такое направление, что плавание в этом направлении из начальной позиции приведет к целевой позиции.

Когда космический корабль сталкивается с куском космического мусора, то, что происходит дальше, зависит от абсолютной разницы углов между направлением плавания и отрезком космического мусора, \(\theta\):

  • Если \(\theta < 45^{\circ}\), то космический корабль скользит по куску космического мусора в направлении, минимизирующем изменение угла, а когда космический корабль оказывается на краю космического мусора, он продолжает двигаться в том же направлении как и до столкновения.
  • Если \(\theta \ge 45^{\circ}\), то космический корабль останавливается, потому что трение слишком велико, чтобы скользить по космическому мусору.

Вам дается набор кусочков космического мусора только один раз, целевая позиция всегда \((0, 0)\), но есть \(q\) запросов, каждый с начальной позицией \(s_j = (s_{jx}, s_{jy})\).

Ответьте на приведенный выше вопрос для каждого запроса.

Входные данные

В первой строке записано целое число \(n\) (\(1 \le n \le 1500\)).

Далее следует \(n\) строк, в \(i\)-й из которых содержатся \(4\) целых числа \(a_{ix}\), \(a_{iy}\), \(b_{ix}\) и \(b_{iy}\) (\(|a_{ix}|, |a_{iy}|, |b_{ix}|, |b_{iy}| \le 1000\)).

Затем следует строка, содержащая целое число \(q\) (\(1 \le q \le 1000\)).

Далее следует \(q\) строк, \(j\)-я из которых содержит \(2\) целых числа \(s_{jx}\) и \(s_{jy}\) (\(|s_{jx}|, |s_{jy}| \le 1000\)).

Гарантируется, что ни одна пара отрезков в наборе \(l\) не пересекается и не соприкасается, \(t\) не находится ни на одном отрезке из \(l\), \(s_j\) не находится ни на одном отрезке из \(l\) и \(s \neq t\).

Выходные данные

На каждый запрос \(s_j\) выведите ответ. Если существует такое направление, что плавание от \(s_j\) в этом направлении, возможно, скользя по некоторым частям космического мусора, приводит к \(t\), выведите «YES». В противном случае выведите «NO» (без учета регистра).

Примечание

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

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

Желтые линии — это возможные пути к целевому местоположению для запросов \(3\) и \(14\).

Черная линия — это возможный путь от начального местоположения в запросе \(6\), но он немного не попадает в целевое местоположение.

E. Электронное правительство

Деревья дп поиск в глубину и подобное Строки Структуры данных *2800

В рамках проекта «Электронное правительство» лучшим программистам страны Распиляндии поручили создание системы автоматизации сбора статистики и анализа прессы.

Известно, что членами правительства Распиляндии может стать любой из k граждан. Их фамилии — a1, a2, ..., ak. Все фамилии различны. Изначально в правительство входят все k граждан из этого списка. Система должна поддерживать следующие возможности:

  • Включить гражданина ai в состав правительства.
  • Исключить гражданина ai из состава правительства.
  • По заданному тексту статьи определить, насколько она политизирована. Для этого, для каждого действующего члена правительства, вычисляется количество раз, которое его фамилия встречается в тексте как подстрока. Считаются все вхождения, в том числе и пересекающиеся. Степень политизированности текста определяется как сумма этих количеств по всем действующим членам правительства.

Реализуйте эту систему.

Входные данные

В первой строке через пробел записаны числа n и k (1 ≤ n, k ≤ 105) — количество запросов к системе и количество потенциальных членов правительства.

В следующих k строках заданы фамилии a1, a2, ..., ak, по одной на строку. Все фамилии попарно различны.

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

Операции «включить в правительство» соответствует символ «+», операции «исключить» — «-». Аргументом этих операций является целое число от 1 до k — номер гражданина, которого она затрагивает. Любой гражданин может быть включен и исключен из правительства произвольное количество раз в любом порядке. Включение в правительство гражданина, который в него уже входит, или исключение гражданина, который и так не входил, ничего не меняет.

Операции «подсчитать политизированность» соответствует символ «?». Её аргументом является текст.

Все строки, как фамилии, так и тексты, являются непустыми последовательностями строчных букв латинского алфавита. Суммарная длина всех фамилий не превышает 106, суммарная длина всех текстов не превышает 106.

Выходные данные

Для каждой операции «подсчитать политизированность» выведите на отдельной строке степень политизированности заданного в ней текста. Для остальных операций ничего выводить не нужно.

B. Отрезок и разбиение

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *1800

Дан массив \(a\), состоящий из \(n\) целых чисел. Найдите отрезок значений \([x, y]\) (\(x \le y\)) и разбейте \(a\) на ровно \(k\) (\(1 \le k \le n\)) подмассивов таких, что:

  • Каждый подмассив состоит из нескольких последовательных элементов \(a\), то есть он равен \(a_l, a_{l+1}, \ldots, a_r\) для некоторых \(l\) и \(r\) (\(1 \leq l \leq r \leq n\)).
  • Каждый элемент \(a\) принадлежит ровно одному подмассиву.
  • Для каждого подмассива количество элементов внутри отрезка \([x, y]\) (включительно) строго больше, чем количество элементов вне этого отрезка. Элемент с индексом \(i\) находится внутри отрезка \([x, y]\), если и только если \(x \le a_i \le y\).

Напечатайте любое решение, минимизирующее \(y - x\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 3 \cdot 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)) – длина массива \(a\) и количество подмассивов, на которые нужно разбить изначальный массив.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)), где \(a_i\) равен \(i\)-му элементу массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\)

Выходные данные

Для каждого набора входных данных выведите \(k+1\) строк.

В первой строке выведите \(x\) и \(y\) — границы найденного отрезка.

Затем выведите \(k\) строк: \(i\)-я строка должна содержать \(l_i\) и \(r_i\) (\(1\leq l_i \leq r_i \leq n\)) — границы \(i\)-го подмассива.

Вы можете выводить подмассивы в любом порядке.

Примечание

В первом наборе входных данных должен быть только один подмассив, который обязан совпадать со всем массивом. Внутри отрезка \([1, 2]\) содержится \(2\) элемента, а вне его – \(0\). Если выбрать отрезок \([1, 1]\), то внутри него будет содержаться \(1\) элемент (\(a_1\)), вне его будет содержаться \(1\) элемент (\(a_2\)), и ответ будет некорректным.

Во втором наборе можно выбрать отрезок \([2, 2]\) и разбить массив на подмассивы \((1, 3)\) и \((4, 4)\). В подмассиве \((1, 3)\) \(2\) элемента содержатся внутри отрезка (\(a_2\) и \(a_3\)) и \(1\) элемент вне его (\(a_1\)). В подмассиве \((4, 4)\) содержится \(1\) элемент (\(a_4\)), лежащий внутри отрезка.

В третьем наборе можно выбрать отрезок \([5, 5]\) и разбить массив на подмассивы \((1, 4)\), \((5, 7)\) и \((8, 11)\). В подмассиве \((1, 4)\) содержится \(3\) элемента, лежащих внутри отрезка, и \(1\) элемент, лежащий вне его. В подмассиве \((5, 7)\) содержится \(2\) элемента, лежащих внутри отрезка, и \(1\) элемент, лежащий вне его. В подмассиве \((8, 11)\) содержится \(3\) элемента, лежащих внутри отрезка, и \(1\) элемент, лежащий вне его.

D. Новогодний концерт

Бинарный поиск жадные алгоритмы математика Структуры данных теория чисел *2000

Новый год совсем близко, а это значит, что в 179-й школе уже полным ходом идет подготовка к новогоднему концерту.

Всего в школе есть \(n\) классов, пронумерованных целыми числами от \(1\) до \(n\), \(i\)-й класс подготовил сценку продолжительностью \(a_i\) минут.

Иднар, как главный за проведение новогоднего концерта, знает, что если на концерте будет \(k\) сценок продолжительностями \(b_1\), \(b_2\), \(\ldots\), \(b_k\) минут, то зрителям станет скучно, если найдутся \(l\) и \(r\) такие, что \(1 \le l \le r \le k\) и \(\gcd(b_l, b_{l + 1}, \ldots, b_{r - 1}, b_r) = r - l + 1\), где \(\gcd(b_l, b_{l + 1}, \ldots, b_{r - 1}, b_r)\) обозначает наибольший общий делитель (НОД) чисел \(b_l\), \(b_{l + 1}\), \(\ldots\), \(b_{r - 1}\), \(b_r\).

Чтобы во время концерта зрителям не стало скучно, Иднар может сколько угодно раз (возможно, ноль) попросить \(t\)-й класс (\(1 \le t \le k\)) сделать другую сценку продолжительностью \(d\), где \(d\) может быть любым целым положительным числом. Таким образом, после данной операции \(b_t\) станет равно \(d\). Заметьте, что \(t\) и \(d\) для разных операций могут быть различными.

Для последовательности продолжительностей сценок \(b_1\), \(b_2\), \(\ldots\), \(b_{k}\) определим функцию \(f(b)\) как минимальное количество классов, у которых Иднар должен попросить заменить сценку, чтобы зрителям не стало скучно.

Иднар еще точно не определился, какие сценки будут допущены на концерт, поэтому хочет узнать значение функции \(f\) от каждого из непустых префиксов \(a\). Иными словами, Иднар хочет узнать значения \(f(a_1)\), \(f(a_1\),\(a_2)\), \(\ldots\), \(f(a_1\),\(a_2\),\(\ldots\),\(a_n)\).

Входные данные

Первая строка содержит единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество классов в школе.

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), \(\ldots\), \(a_n\) (\(1 \le a_i \le 10^9\)) — продолжительности сценок классов.

Выходные данные

В единственной строке через пробел выведите последовательность из \(n\) чисел — \(f(a_1)\), \(f(a_1\),\(a_2)\), \(\ldots\), \(f(a_1\),\(a_2\),\(\ldots\),\(a_n)\).

Примечание

В первом тесте можно заменить \(1\) на \(2\), поэтому ответ \(1\).

Во втором тесте:

  • \([1]\) можно преобразовать в \([2]\),
  • \([1, 4]\) можно преобразовать в \([3, 4]\),
  • \([1, 4, 2]\) можно преобразовать в \([2, 3, 2]\).

E1. Дистанционное дерево (простая версия)

Бинарный поиск графы Деревья кратчайшие пути поиск в глубину и подобное Структуры данных *2400

Эта версия задачи отличается от следующей только ограничением на \(n\).

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

Дано взвешенное дерево c \(n\) вершинами, у каждого ребра вес \(1\). Введём \(d(v)\) как расстояние между вершиной \(1\) и вершиной \(v\).

Пусть \(f(x)\) равно минимально возможному значению \(\max\limits_{1 \leq v \leq n} \ {d(v)}\), если можно временно добавить одно ребро веса \(x\) между любыми двумя вершинами \(a\) и \(b\) \((1 \le a, b \le n)\). Обратите внимание, что после этой операции граф уже не является деревом.

Для каждого целого числа \(x\) от \(1\) до \(n\) найдите \(f(x)\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 3000\)).

Каждая из следующих \(n−1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u,v \le n\)), указывающих на наличие ребра между вершинами \(u\) и \(v\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3000\).

Выходные данные

Для каждого набора входных данных выведите в одной строке \(n\) целых чисел, \(x\)-е из которых равно \(f(x)\) для всех \(x\) от \(1\) до \(n\).

Примечание
В первом наборе входных данных:
  • Для \(x = 1\) мы можем добавить ребро между вершинами \(1\) и \(3\), после чего \(d(1) = 0\) и \(d(2) = d(3) = d(4) = 1\), поэтому \(f(1) = 1\).
  • Для \(x \ge 2\), вне зависимости от того, какое ребро мы добавим, \(d(1) = 0\), \(d(2) = d(4) = 1\) и \(d(3) = 2\), поэтому \(f(x) = 2\).

E. Запросы об остовном дереве

Бинарный поиск графы Деревья жадные алгоритмы математика поиск в глубину и подобное снм сортировки Структуры данных *2400

Задан связный взвешенный неориентированный граф, состоящий из \(n\) вершин и \(m\) ребер.

К нему задаются \(k\) запросов. Каждый запрос состоит из одного целого числа \(x\). На каждый запрос вы должны выбрать остовное дерево в графе. Пусть веса его ребер будут \(w_1, w_2, \dots, w_{n-1}\). Стоимость остовного дерева равна \(\sum \limits_{i=1}^{n-1} |w_i - x|\) (сумма абсолютных разностей между весами и \(x\)). Ответ на запрос — это минимальная стоимость остовного дерева.

Запросы даны в сжатом формате. Первые \(p\) \((1 \le p \le k)\) запросов \(q_1, q_2, \dots, q_p\) даны явно. Для запросов с \(p+1\) по \(k\) выполняется \(q_j = (q_{j-1} \cdot a + b) \mod c\).

Выведите исключающее или ответов на все запросы.

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(2 \le n \le 50\); \(n - 1 \le m \le 300\)) — количество вершин и количество ребер в графе.

В каждой из следующих \(m\) строк содержится описание неориентированного ребра: три целых числа \(v\), \(u\) и \(w\) (\(1 \le v, u \le n\); \(v \neq u\); \(0 \le w \le 10^8\)) — вершины, которые соединяет ребро, и его вес. Обратите внимание, что между парой вершин может быть несколько ребер. Ребра образуют связный граф.

В следующей строке записаны пять целых чисел \(p, k, a, b\) и \(c\) (\(1 \le p \le 10^5\); \(p \le k \le 10^7\); \(0 \le a, b \le 10^8\); \(1 \le c \le 10^8\)) — количество запросов, заданных явно, общее количество запросов и параметры для генерации запросов.

В следующей строке записаны \(p\) целых чисел \(q_1, q_2, \dots, q_p\) (\(0 \le q_j < c\)) — первые \(p\) запросов.

Выходные данные

Выведите одно целое число — исключающее или ответов на все запросы.

Примечание

Запросы в первом примере: \(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0\). Ответы: \(11, 9, 7, 3, 1, 5, 8, 7, 5, 7, 11\).

Запросы во втором примере: \(3, 0, 2, 1, 6, 0, 3, 5, 4, 1\). Ответы: \(14, 19, 15, 16, 11, 19, 14, 12, 13, 16\).

Запросы в третьем примере: \(75, 0, 0, \dots\). Ответы: \(50, 150, 150, \dots\).

F. Совершенное паросочетание

Деревья интерактив разделяй и властвуй Структуры данных *2800

Вам задано дерево, состоящее из \(n\) вершин (пронумерованных от \(1\) до \(n\)) и \(n-1\) ребер (пронумерованных от \(1\) до \(n-1\)). Изначально все вершины, кроме вершины \(1\), неактивны.

Вам предстоит обрабатывать запросы трех типов:

  • \(1\) \(v\) — активировать вершину \(v\). Гарантируется, что вершина \(v\) неактивна перед этим запросом, а один из ее соседей активен. После активации вершины выберите подмножество ребер дерева таким образом, чтобы каждая активная вершина была инцидентна ровно одному выбранному ребру, и каждая неактивная вершина не была инцидентна ни одному из выбранных ребер — другими словами, это подмножество должно является совершенным паросочетанием активной части дерева. Если такое подмножество ребер существует, выведите сумму индексов ребер в нем; в противном случае выведите \(0\).
  • \(2\) — запросы этого типа будут задаваться только сразу после запроса типа \(1\), и таких запросов будет не более \(10\). Если ваш ответ на предыдущий запрос был \(0\), просто выведите \(0\); в противном случае выведите подмножество ребер для предыдущего запроса в следующем формате: сначала выведите количество ребер в подмножестве, затем выведите индексы выбранных ребер в порядке возрастания. Сумма индексов должна быть равна вашему ответу на предыдущий запрос.
  • \(3\) — завершить программу.

Обратите внимание, что вы должны решить эту задачу в режиме online. Это означает, что вы не можете считать все входные данные сразу. Вы можете считать каждый запрос только после вывода ответа на предыдущий запрос. Используйте функции fflush в C++ и BufferedWriter.flush в Java после каждого вывода в вашей программе.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин дерева.

Затем следует \(n-1\) строка. \(i\)-я строка содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\); \(u_i \ne v_i\)) — концы \(i\)-го ребра. Эти ребра образуют дерево.

Затем следуют запросы в формате, описанном в условии, по одной строке на запрос. Количество запросов не менее \(2\) и не более \(n+10\). Последний запрос (и только последний) будет иметь тип \(3\). Обратите внимание, что вы можете считать \(i\)-й запрос, только если вы уже дали ответ на запрос \(i-1\) (за исключением \(i = 1\)).

Если ваш ответ на один из запросов неверен и программа жюри распознает это, вместо следующего запроса вы можете получить целое число \(0\) в отдельной строке. После его получения ваша программа должна завершиться корректно, и вы получите вердикт «Неправильный ответ». Если ваша программа не завершится, ваше решение может получить какой-то другой вердикт, например «Превышено ограничение времени», «Решение зависло» и т.д. Обратите внимание, что тот факт, что ваше решение не получает целое число \(0\), не означает, что все ваши ответы верны, некоторые из них будут проверены только после завершения вашей программы.

Выходные данные

Для каждого запроса типа \(1\) или \(2\) выведите ответ в отдельной строке в формате, описанном в условии. Не забывайте сбрасывать буфер вывода.

E. Честный делёж

графы Конструктив Паросочетания поиск в глубину и подобное Структуры данных *2400

Even a cat has things it can do that AI cannot.
— Fei-Fei Li

Вам дано \(m\) массивов целых положительных чисел, длина каждого массива чётна.

От вас требуется составить два равных мультимножества \(L\) и \(R\) так, чтобы каждый элемент каждого массива попал ровно в одно мультимножество. Кроме того, для каждого из \(m\) массивов ровно половина его элементов должна попасть в \(L\), а остальные — в \(R\).

Приведите пример такого разбиения или определите, что такого разбиения не существует.

Входные данные

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

В следующих \(2 \cdot m\) строках даны описания массивов.

В описании каждого массива первая строка содержит чётное число \(n\) (\(2 \le n \le 2 \cdot 10 ^ 5\)) — длина массива. Во второй строке через пробел перечислены \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10 ^ 9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем массивам не превосходит \(2 \cdot 10^5\).

Выходные данные

В случае если ответ существует выведите «YES», а затем выведите \(m\) строк.

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

Если ответа не существует, в единственной строке выведите «NO».

Примечание

В первом массиве первый элемент мы добавляем в \(R\), а второй в \(L\). Сейчас \(L = \{2\}\), а \(R = \{1\}\).

Во втором массиве первый и третий элемент мы добавляем в \(L\), а остальные в \(R\). Сейчас \(L = \{1, 2, 3\}\) и \(R = \{1, 2, 3\}\).

В третьем массиве элементы 2, 3 и 6 мы добавляем в \(L\), а на остальных — в \(R\). В итоге \(L = R = \{1, 1, 2, 2, 3, 3\}\).

F. Прибавления Фибоначчи

математика Перебор реализация Структуры данных хэши *2700

One of my most productive days was throwing away 1,000 lines of code.
— Ken Thompson

Прибавление Фибоначчи — это операция на массиве \(X\) целых чисел, параметризованная индексами \(l\) и \(r\). При применении этой операции к \(X_l\) прибавляется \(F_1\), к \(X_{l + 1}\) прибавляется \(F_2\), и так далее, вплоть до числа \(X_r\), которое увеличивается на \(F_{r - l + 1}\).

Здесь \(F_i\) — это \(i\)-е число Фибоначчи (\(F_1 = 1\), \(F_2 = 1\), \(F_{i} = F_{i - 1} + F_{i - 2}\) для \(i > 2\)), и все операции производятся по модулю \(MOD\).

Вам даны массивы \(A\) и \(B\) одинаковой длины. Мы просим вас применить к этим массивам несколько операций прибавления Фибоначчи с разными параметрами. После каждой операции вы должны сообщить, равны ли массивы \(A\) и \(B\) (по модулю \(MOD\)).

Входные данные

В первой строке вводится 3 числа \(n\), \(q\) и \(MOD\) (\(1 \le n, q \le 3\cdot 10^5, 1 \le MOD \le 10^9+7\)) — длина массивов, количество операций и модуль, по которому выполняются все операции.

Во второй строке находится \(n\) чисел — массив \(A\) (\(0 \le A_i < MOD\)).

В третей строке находится \(n\) чисел — массив \(B\) (\(0 \le B_i < MOD\)).

В последующих \(q\) строках находится символ \(c\) и два числа \(l\) и \(r\) (\(1 \le l \le r \le n\)) — параметры операции. Символ \(c\), равный «A», означает, что прибавление Фибоначчи нужно применить к массиву \(A\), равный «B» — к массиву \(B\).

Выходные данные

После каждой операции выведите «YES» (без кавычек), если массивы равны, и «NO» иначе. Ответ можно выводить в любом регистре.

Примечание

Пояснение к тесту из условия:

  • Изначально \(A=[2,2,1]\), \(B=[0,0,0]\).
  • После операции «A 1 3»: \(A=[0,0,0]\), \(B=[0,0,0]\) (сложение производится по модулю 3).
  • После операции «A 1 3»: \(A=[1,1,2]\), \(B=[0,0,0]\).
  • После операции «B 1 1»: \(A=[1,1,2]\), \(B=[1,0,0]\).
  • После операции «B 2 2»: \(A=[1,1,2]\), \(B=[1,1,0]\).
  • После операции «A 3 3»: \(A=[1,1,0]\), \(B=[1,1,0]\).

F. Ближайшая пара

жадные алгоритмы Структуры данных *2800

На оси \(OX\) имеется \(n\) взвешенных точек. Координата и вес \(i\)-й точки равны \(x_i\) и \(w_i\) соответственно. Все точки имеют различные координаты и положительные веса. Кроме того, \(x_i < x_{i + 1}\) выполняется для любого \(1 \leq i < n\).

Взвешенное расстояние между точками \(i\) и \(j\) определяется как \(|x_i - x_j| \cdot (w_i + w_j)\), где \(|val|\) обозначает абсолютное значение \(val\).

Вы должны ответить на \(q\) запросов, где \(i\)-й запрос задает следующее:

Найдите минимальное взвешенное расстояние среди всех пар различных точек подмассива \([l_i,r_i]\).

Входные данные

Первая строка содержит 2 целых числа \(n\) и \(q\) \((2 \leq n \leq 3 \cdot 10^5; 1 \leq q \leq 3 \cdot 10^5)\) — количество точек и количество запросов.

Далее следуют \(n\) строк, \(i\)-я из них содержит 2 целых числа \(x_i\) и \(w_i\) \((-10^9 \leq x_i \leq 10^9; 1 \leq w_i \leq 10^9)\) — координата и вес \(i\)-й точки.

Гарантируется, что точки даны в порядке возрастания \(x\).

Далее следует \(q\) строк, \(i\)-я из которых содержит 2 целых числа \(l_i\) и \(r_i\) \((1 \leq l_i < r_i \leq n)\) — заданный подмассив \(i\)-го запроса.

Выходные данные

Для каждого запроса выведите одно целое число — минимальное взвешенное расстояние среди всех пар различных точек в данном подмассиве.

Примечание

Для первого запроса минимальное взвешенное расстояние находится между точками \(1\) и \(3\), что равно \(|x_1 - x_3| \cdot (w_1 + w_3) = |-2 - 1| \cdot (2 + 1) = 9\).

Для второго запроса минимальное взвешенное расстояние находится между точками \(2\) и \(3\), что равно \(|x_2 - x_3| \cdot (w_2 + w_3) = |0 - 1| \cdot (10 + 1) = 11\).

Для четвертого запроса минимальное взвешенное расстояние находится между точками \(3\) и \(4\), что равно \(|x_3 - x_4| \cdot (w_3 + w_4) = |1 - 9| \cdot (1 + 2) = 24\).

H. Минимизируй количество инверсий

жадные алгоритмы математика сортировки Структуры данных *3500

Дана перестановка \(p\) длины \(n\).

Можно выбрать любую её подпоследовательность, удалить её из перестановки и приписать в начало перестановки в том же порядке.

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

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 50\,000\)) — количество наборов входных данных.

В первой строке каждого набора вводится число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — длина перестановки.

Во второй строке каждого набора вводится перестановка \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)).

Гарантируется, что сумма \(n\) не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора выведите \(n + 1\) число, где \(i\)-е число — ответ на задачу для длины подпоследовательности, равной \(i - 1\).

Примечание

Во втором наборе:

  • Для длины \(0\): \([4, 2, 1, 3] \rightarrow [4, 2, 1, 3]\): \(4\) инверсии.
  • Для длины \(1\): \([4, 2, \mathbf{1}, 3] \rightarrow [1, 4, 2, 3]\): \(2\) инверсии.
  • Для длины \(2\): \([4, \mathbf{2}, \mathbf{1}, 3] \rightarrow [2, 1, 4, 3]\) или \([4, 2, \mathbf{1}, \textbf{3}] \rightarrow [1, 3, 4, 2]\): \(2\) инверсии.
  • Для длины \(3\): \([4, \mathbf{2}, \mathbf{1}, \mathbf{3}] \rightarrow [2, 1, 3, 4]\): \(1\) инверсия.
  • Для длины \(4\): \([\mathbf{4}, \mathbf{2}, \mathbf{1}, \mathbf{3}] \rightarrow [4, 2, 1, 3]\): \(4\) инверсии.

B. Сортировка нечётными обменами

математика сортировки Структуры данных *1100

Вам дан массив \(a_1, a_2, \dots, a_n\). Вы можете выполнять операции с массивом. За одну операцию вы можете выбрать целое число \(i\) (\(1 \le i < n\)) и поменять местами \(a_i\) и \(a_{i+1}\) в массиве, если \(a_i + a_{i+1}\) нечётно.

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится целое число \(n\) (\(1 \le n \le 10^5\)) — длина массива.

Во второй строке каждого набора входных данных содержатся \(n\) целых чисел \(a_1,a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «Yes» или «No» в зависимости от того, можете ли вы или нет отсортировать данный массив.

Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных мы можем просто поменять местами \(31\) и \(14\) (\(31 + 14 = 45\), что нечётно) и получить неубывающий массив \([1,6,14,31]\).

Во втором наборе входных данных единственным способом отсортировать массив является поменять местами \(4\) и \(2\), но это невозможно, поскольку их сумма \(4 + 2 = 6\) является чётной.

В третьем наборе входных данных мы не можем сделать последовательность неубывающей.

В четвёртом наборе входных данных массив уже является неубывающим.

C. Граф инверсий

графы математика снм Структуры данных *1300

Вам дана перестановка \(p_1, p_2, \dots, p_n\). Затем вы строите неориентированный граф следующим образом: добавляется ребро между вершинами \(i\), \(j\) такими, что \(i < j\) тогда и только тогда, когда \(p_i > p_j\). Вам нужно посчитать количество компонент связности в этом графе.

Две вершины \(u\) и \(v\) принадлежат одной компоненте связности тогда и только тогда, когда существует хотя бы один путь по рёбрам графа, соединяющий \(u\) и \(v\).

Перестановкой называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (\(2\) встречается дважды в массиве) и \([1,3,4]\) тоже не является перестановкой (\(n=3\), но \(4\) присутствует в массиве).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится целое число \(n\) (\(1 \le n \le 10^5\)) — длина перестановки.

Во второй строке каждого набора входных данных содержатся \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\)) — элементы перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(k\) — количество компонент связности.

Примечание

Каждый отдельный набор входных данных изображен на картинке ниже. Цветные квадраты представляют собой элементы перестановки. Для одной перестановки каждый цвет представляет некоторую компоненту связности. Ответом является количество различных цветов.

D. Большая кисть

жадные алгоритмы Конструктив реализация Структуры данных *2000

Вы нашли картину на холсте размером \(n \times m\). Холст можно представить в виде сетки с \(n\) строками и \(m\) столбцами. Каждая клетка покрашена в какой-то цвет. Клетка \((i, j)\) имеет цвет \(c_{i,j}\).

Рядом с картиной вы также нашли кисть в форме квадрата \(2 \times 2\), поэтому холст был покрашен следующим образом. Изначально никакая клетка не была покрашена. Затем следующая операция покраски была выполнена некоторое количество раз:

  • Выбрать два целых числа \(i\) и \(j\) (\(1 \le i < n\), \(1 \le j < m\)) и некоторый цвет \(k\) (\(1 \le k \le nm\)).
  • Покрасить клетки \((i, j)\), \((i + 1, j)\), \((i, j + 1)\), \((i + 1, j + 1)\) в цвет \(k\).

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

Найдите некоторую последовательность из не более \(nm\) операций, позволяющую получить картину, которую вы нашли, или определите, что это невозможно.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n, m \le 1000\)) — размеры холста.

В \(i\)-й из следующих \(n\) строк входных данных содержатся \(m\) целых чисел. \(j\)-е из них равно \(a_{i,j}\) (\(1 \le a_{i,j} \le nm\)) — цвет клетки \((i, j)\).

Выходные данные

Если решения не существует, выведите единственное число \(-1\).

Иначе, на первой строке, выведите одно целое число \(q\) (\(1 \le q \le nm\)) — количество операций.

Далее выведите сами операции по порядку. В \(k\)-й из следующих \(q\) строк, выведите три целых числа \(i\), \(j\), \(c\) (\(1 \le i < n\), \(1 \le j < m\), \(1 \le c \le nm\)) — описание \(k\)-й операции.

Если существует несколько решений, выведите любое.

Примечание

В первом наборе входных данных решение не единственно. Здесь представлено одно из них:

Во втором наборе входных данных не существует способа получить данную картину, поэтому ответ \(-1\).

E. Красочные запросы

Перебор реализация Структуры данных *2400

У вас есть массив \(a_1,a_2, \dots, a_n\). Каждый элемент изначально имеет значение \(0\) и цвет \(1\). Также вам дано \(q\) запросов, которые нужно обработать:

  • Color \(l\) \(r\) \(c\): Поменять цвет элементов \(a_l,a_{l+1},\cdots,a_r\) на \(c\) (\(1 \le l \le r \le n\), \(1 \le c \le n\)).
  • Add \(c\) \(x\): Прибавить \(x\) к значениям всех элементов \(a_i\) (\(1 \le i \le n\)), имеющих цвет \(c\) (\(1 \le c \le n\), \(-10^9 \le x \le 10^9\)).
  • Query \(i\): Вывести \(a_i\) (\(1 \le i \le n\)).
Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n,q \le 10^6\)) — длину массива \(a\) и количество запросов, которые нужно обработать.

Каждая из следующих \(q\) строк содержит запрос, который задан в формате, описанном в условии задачи.

Выходные данные

Выведите ответы на запросы третьего типа в отдельных строках.

Примечание

Первый тестовый пример описан ниже. Синий, красный и зеленый обозначают цвета \(1\), \(2\) и \(3\) соответственно.

F. Два плаката

жадные алгоритмы Перебор Структуры данных *3200

Вы хотите прорекламировать свой новый бизнес, поэтому собираетесь разместить два плаката на рекламном щите в центре города. Рекламный щит состоит из \(n\) вертикальных панелей шириной \(1\) и различной целочисленной высоты, соединенных горизонтальной перекладиной. \(i\)-я из \(n\) панелей имеет высоту \(h_i\).

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

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

Какую максимальную общую площадь могут покрыть два плаката, если вы сделаете оптимальные операции? Заметьте, что вы также можете разместить плакат площади \(0\). Этот случай равносилен размещению одного плаката.

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^4\)) — количество вертикальных панелей.

Вторая строка входных данных содержит \(n\) целых чисел \(h_1, h_2, ..., h_n\) (\(1 \le h_i \le 10^{12}\)) — высоты \(n\) вертикальных панелей.

Выходные данные

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

Примечание

В первом тестовом примере мы можем выбрать верхний плакат с площадью \(12\) и нижний плакат с площадью \(6\), как на изображении ниже.

Во втором тестовом примере мы можем покрыть весь рекламный щит, используя один плакат.

C. Анонимность наше все

Бинарный поиск жадные алгоритмы Перебор снм сортировки Структуры данных *2200

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

Именно поэтому в одном центре для сдачи анализов «Девитро» придумали экспериментальный способ сообщать результаты. Пусть всего анализы сдавало \(n\) человек в порядке очереди. Тогда главврач Стас может сделать несколько сообщений, в каждом из которых сообщить, был ли больной человек среди людей в очереди от \(l\)-го до \(r\)-го (включительно) для некоторых значений \(l\) и \(r\).

В процессе Стас будет проверять, насколько хорошо работает эта схема, и будет интересоваться, можно ли однозначно узнать результат анализа \(i\)-го человека по уже сообщенной информации. И если это сделать можно, то болен ли этот человек.

Помогите Стасу протестировать свою схему.

Входные данные

В первой строке находится два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — количество людей, сдавших анализы и количество запросов.

В каждой из следующих \(q\) строк находится описание запросов. Первое число в строке \(t\) (\(t = 0\) или \(t = 1\)) — тип запроса.

Если \(t = 0\), то дальше в этой строке находятся еще три целых числа \(l, r, x\) (\(1 \le l \le r \le n\), \(x = 0\) или \(x = 1\)). Этот запрос соответствует тому, что Стас сообщает, что среди людей от \(l\)-го до \(r\)-го (включительно) в очереди:

  • был больной, если \(x=1\),
  • не было больного, если \(x=0\).

Если \(t = 1\), то дальше в этой строке находится одно целое число \(j\) (\(1 \le j \le n\)) — номер пациента в очереди, чья конфиденциальность волнует Стаса.

Гарантируется, что все запросы корректны, то есть всегда существует пример очереди длины \(n\), для которой все озвученные результаты (утверждения из запросов, где \(t = 0\)) корректны.

Выходные данные

После каждого вопроса Стаса (запроса с \(t = 1\)) выведите:

  • «NO», если пациент однозначно не болен,
  • «YES», если пациент однозначно болен,
  • «N/A», если по имеющейся информации нельзя однозначно сказать, болен пациент или нет.
Примечание

В первом тесте для первых пяти запросов:

  1. Изначально Стас сообщает, что среди \(4\), \(5\) людей нет больных.
  2. В следующем запросе Стас интересуется конфиденциальностью человека \(5\). Из предыдущего запроса мы знаем, что он однозначно не болен.
  3. В следующем запросе Стас интересуется конфиденциальностью человека \(6\). Мы не знаем про него вообще никакой информации, поэтому он может быть как болен, так и не болен.
  4. Затем Стас сообщает, что среди \(4\), \(5\), \(6\) людей есть больной.
  5. В следующем запросе Стас интересуется конфиденциальностью человека \(6\). Теперь мы можем однозначно сказать, что он болен, потому что из предыдущего запроса среди трех человек болен мог быть только он.

D. Раскраска крестиками

математика реализация Структуры данных *1700

Представьте лист бумаги — сетку размера \(n \times m\): \(n\) строк и \(m\) столбцов с ячейками. Все ячейки изначально белые.

К листу применили \(q\) операций. \(i\)-я из них может быть описана следующим образом:

  • \(x_i\) \(y_i\) — выбирается один из \(k\) небелых цветов, и вся строка \(x_i\) и весь столбец \(y_i\) раскрашиваются в этот цвет. Новый цвет наносится на каждую клетку вне зависимости от того, была ли клетка раскрашена до операции.

Лист после применения всех \(q\) операций называется раскраской. Две раскраски различные, если существует хотя бы одна клетка, раскрашенная в разные цвета.

Сколько существует различных раскрасок? Выведите их количество по модулю \(998\,244\,353\).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора записаны четыре целых числа \(n, m, k\) и \(q\) (\(1 \le n, m, k, q \le 2 \cdot 10^5\)) — размер листа, количество небелых цветов и количество операций.

В \(i\)-й из следующих \(q\) строк записана \(i\)-я операция — два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i \le n\); \(1 \le y_i \le m\)) — строка и столбец, к которым применяется операция.

Сумма \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — количество различных раскрасок по модулю \(998\,244\,353\).

E. Расширь маршрут

Комбинаторика математика Перебор реализация Структуры данных *1900

Задана сетка размера \(n \times n\). Строки пронумерованы сверху вниз от \(1\) до \(n\), столбцы пронумерованы слева направо от \(1\) до \(n\).

Робот расположен в клетке \((1, 1)\). Он может делать два типа ходов:

  • D — перейти на одну клетку вниз;
  • R — перейти на одну клетку вправо.

Роботу запрещено выходить за пределы поля.

Дана последовательность ходов \(s\) — изначальный маршрут робота. Этот маршрут не ведет робота за пределы поля.

Вам разрешено провести произвольное количество изменений строки (возможно, ноль). За одно изменение можно раздвоить один ход в последовательности. То есть, заменить одно вхождение D на DD или одно вхождение R на RR.

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

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора записаны два целых числа \(n\) (\(2 \le n \le 10^8\)) — количество строк и столбцов.

Во второй строке каждого набор записана непустая строка \(s\), состоящая только из символов D и R, — изначальный маршрут робота. Этот маршрут не ведет робота за пределы поля.

Суммарная длина строк \(s\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных достаточно рассмотреть следующие измененные маршруты:

  • RD \(\rightarrow\) RRD \(\rightarrow\) RRRD \(\rightarrow\) RRRDD \(\rightarrow\) RRRDDD — этот маршрут посещает клетки \((1, 1)\), \((1, 2)\), \((1, 3)\), \((1, 4)\), \((2, 4)\), \((3, 4)\) и \((4, 4)\);
  • RD \(\rightarrow\) RRD \(\rightarrow\) RRDD \(\rightarrow\) RRDDD — этот маршрут посещает клетки \((1, 1)\), \((1, 2)\), \((1, 3)\), \((2, 3)\), \((3, 3)\) и \((4, 3)\);
  • RD \(\rightarrow\) RDD \(\rightarrow\) RDDD — этот маршрут посещает клетки \((1, 1)\), \((1, 2)\), \((2, 2)\), \((3, 2)\) и \((4, 2)\).

Таким образом, клетки, которые посещены на хотя бы одном измененном маршруте: \((1, 1)\), \((1, 2)\), \((1, 3)\), \((1, 4)\), \((2, 2)\), \((2, 3)\), \((2, 4)\), \((3, 2)\), \((3, 3)\), \((3, 4)\), \((4, 2)\), \((4, 3)\) и \((4, 4)\).

Во втором примере, нет способа изменить последовательность так, чтобы робот не вышел за пределы поля. Поэтому все посещенные клетки — это те, которые посещены на маршруте DRDRDRDR.

В третьем примере клетки, которые посещены на хотя бы одном измененном маршруте: \((1, 1)\), \((2, 1)\) и \((3, 1)\).

Клетки для всех наборов:

E. Мадока и шестиклассики

жадные алгоритмы поиск в глубину и подобное Структуры данных *2500

После ошеломительного успеха у пятого класса, Мадоке решили доверить преподавать уже шестиклассникам.

Всего в её классе есть \(n\) одноместных парт. Изначально Мадока за \(i\)-ю парту посадила ученика под номером \(b_i\) (\(1 \le b_i \le n\)), а за дверью образовалась бесконечная очередь учеников с номерами \(n + 1, n + 2, n + 3, \ldots\) в надежде оказаться на её уроке. Обратите внимание, что все ученики имеют различные номера.

После каждого урока происходит следующие события по порядку.

  1. Ученик, сидевший за партой \(i\), перемещается за парту \(p_i\). Все ученики перемещаются одновременно.
  2. Если за какой-то партой оказалось больше одного ученика, то за ней остается ученик с наименьшим номером, а все остальные навсегда покидают класс.
  3. Затем на каждую пустую парту в порядке возрастания номеров садится ученик с наименьшим номером из очереди снаружи.

Обратите внимание, что в итоге за каждой партой снова находится ровно один ученик. Гарантируется, что числа \(p\) таковы, что как минимум один ученик покидает класс после каждого урока. Обратите внимание на пояснение к первому примеру для лучшего понимания.

После нескольких (возможно нуля) уроков за партой \(i\) сидит ученик \(a_i\). По данным значениям \(a_1, a_2, \ldots, a_n\) и \(p_1, p_2, \ldots, p_n\), найдите лексикографически наименьшую подходящую перестановку \(b_1, b_2, \ldots, b_n\), описывающую возможную начальную рассадку.

Перестановкой называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (\(2\) встречается дважды в массиве) и \([1,3,4]\) тоже не является перестановкой (\(n=3\), но \(4\) присутствует в массиве).

Для двух различных перестановок равной длины \(a\) и \(b\), \(a\) лексикографически меньше \(b\), если в первой позиции, где \(a\) и \(b\) различны, в \(a\) элемент меньше, чем соответствующий элемент в \(b\).

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — количество парт в классе.

Вторая строка содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\)) — места, куда пересаживаются ученики. Гарантируется, что \(p\) содержит хотя бы два равных элемента.

Третья строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — конечная рассадка учеников. Гарантируется, что существует изначальная перестановка, из которой получилась рассадка \(a\).

Выходные данные

В единственной строке выведите \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le n\)) — лексикографически минимальную перестановку, описывающую начальную рассадку учеников, из которой могла получится конечная рассадка \(a\).

Примечание

Описание первого теста находится ниже:

На первой картинке показана стартовая рассадка, являющаяся ответом. Затем ученики, сидящие за партами \(1, 2\) пересаживаются за \(5\) парту. Также за \(1\) парту пересел ученик с парты \(5\), а за парту под номером \(3\) пересаживается ученик с \(4\) парты.

Таким образом, после всех этих пересадок, получается рассадка, показаная на втором изображении. Затем за партой под номером \(5\) выгоняют ученика с номером \(3\), а за партой под номером \(3\) выгоняют ученика с номером \(5\). (Поскольку их номера не самые маленькие) Затем за парты под номерами \(2, 4\) садятся новые ученики с номерами \(6, 7\). И эта рассадка (после конца первого урока) показана на третьем изображении.

На \(4\) изображении показана рассадка, после второго урока до того, как всех лишних выгнали. А на пятой показана финальная рассадка после \(2\) урока.

A. Странная сумма

геометрия Комбинаторика математика матрицы сортировки Структуры данных *1400

У Егора есть табличка \(n \times m\), где строки пронумерованы от \(1\) до \(n\) сверху вниз, а столбцы пронумерованы с \(1\) до \(m\) слева направо. Каждая клетка таблички покрашена в некоторый цвет, где цвета пронумерованы целыми числами от \(1\) до \(10^5\).

Будем обозначать клетку, которая находится на пересечении \(r\)-й строки и \(c\)-го столбца, как \((r, c)\). Определим манхэттенское расстояние между клетками \((r_1, c_1)\) и \((r_2, c_2)\) как длину кратчайшего пути между этими клетками, в котором любые две соседние клетки имеют общую сторону. Например, в таблице \(3 \times 4\) манхэттенское расстояние между клетками \((1, 2)\) и \((3, 3)\) равно \(3\), и один из кратчайших путей имеет вид \((1, 2) \to (2, 2) \to (2, 3) \to (3, 3)\). Обратите внимание, что путь может проходить по клеткам любого цвета.

У Егора возникло желание посчитать сумму манхэттенских расстояний по всем парам клеток одного цвета. Помогите Егору — вычислите эту сумму.

Входные данные

Первая строка входного файла содержит два целых числа \(n\) и \(m\) (\(1 \leq n \le m\), \(n \cdot m \leq 100\,000\)) — число строк и столбцов таблички.

Следующие \(n\) строк описывают соответствующие строки таблицы. \(i\)-я строка содержит \(m\) чисел \(c_{i1}, c_{i2}, \ldots, c_{im}\) (\(1 \le c_{ij} \le 100\,000\)) — цвета клеток в \(i\)-м ряду таблицы.

Выходные данные

Выведите одно число — искомую сумму.

Примечание

В первом примере есть три пары клеток с одинаковым цветом: в координатах \((1, 1)\) и \((2, 3)\), в координатах \((1, 2)\) и \((2, 2)\), в координатах \((1, 3)\) и \((2, 1)\). Соответствующие манхеттенские расстояния равны \(3\), \(1\) и \(3\), их сумма равна \(7\).

B. Целостный массив

Конструктив математика Перебор Структуры данных *1800

Дан массив \(a\) из \(n\) целых положительных чисел, пронумерованных от \(1\) до \(n\). Назовём массив целостным, если для любых двух, не обязательно различных, чисел \(x\) и \(y\) из этого массива, для которых \(x \ge y\), число \(\left \lfloor \frac{x}{y} \right \rfloor\) (частное от деления \(x\) на \(y\) с округлением вниз) тоже лежит в этом массиве.

Известно, что в массиве \(a\) все числа не превосходят \(c\). Ваша задача — проверить, является ли данный массив целостным.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(c\) (\(1 \le n \le 10^6\), \(1 \le c \le 10^6\)) — размер массива \(a\) и ограничение на числа в массиве.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le c\)) — элементы массива \(a\).

Пусть \(N\) обозначает сумму значений \(n\) по всем наборам входных данных, а \(C\) — сумму значений \(c\) по всем наборам входных данных. Гарантируется, что \(N \le 10^6\) и \(C \le 10^6\).

Выходные данные

Для каждого набора входных данных выведите Yes, если массив является целостным, и No иначе.

Примечание

В первом наборе входных данных нетрудно заметить, что массив является целостным:

  • \(\left \lfloor \frac{1}{1} \right \rfloor = 1\), \(a_1 = 1\), число встречается в массиве
  • \(\left \lfloor \frac{2}{2} \right \rfloor = 1\)
  • \(\left \lfloor \frac{5}{5} \right \rfloor = 1\)
  • \(\left \lfloor \frac{2}{1} \right \rfloor = 2\), \(a_2 = 2\), число встречается в массиве
  • \(\left \lfloor \frac{5}{1} \right \rfloor = 5\), \(a_3 = 5\), число встречается в массиве
  • \(\left \lfloor \frac{5}{2} \right \rfloor = 2\), \(a_2 = 2\), число встречается в массиве

Таким образом, условие выполнено, массив является целостным.

Во втором наборе входных данных достаточно заметить, что

\(\left \lfloor \frac{7}{3} \right \rfloor = \left \lfloor 2\frac{1}{3} \right \rfloor = 2\), этого числа нет в массиве \(a\), поэтому он не является целостным.

В третьем наборе входных данных \(\left \lfloor \frac{2}{2} \right \rfloor = 1\), но в массиве есть только число \(2\), поэтому он не является целостным.

C. Тайлер и строки

Комбинаторика реализация Структуры данных *1900

Маленький Тайлер зашел на кухню и увидел, что на холодильнике магнитиками выложена строка \(s\). Он сразу увидел её безграничный потенциал!

Тайлеру нравятся строки, особенно те, которые лексикографически меньше другой строки \(t\). Играя с магнитиками на холодильнике, он задумался, а сколько различных строк, лексикографически меньших строки \(t\), он может собрать, переставляя буквы в строке \(s\). Так как он учится всего лишь во втором классе, он не может этого посчитать, поэтому просит вас о помощи! Так как в алфавите языка Тайлера много букв, то для вашего удобства Тайлер уже заменил одинаковые буквы в строках \(s\) и \(t\) одинаковыми числами, а разные — разными.

Напомним, что строка \(x\) лексикографически меньше строки \(y\), если выполнено одно из двух условий:

  • существует такая позиция символа \(m\), присутствующая в обеих строках, что до \(m\)-го символа строки совпадают, а \(m\)-й символ строки \(x\) меньше \(m\)-го символа \(y\),
  • строка \(x\) является префиксом \(y\) и \(x \neq y\).

Так как ответ может быть слишком большим, выведите его по модулю \(998\,244\,353\).

Входные данные

В первой строке даны два целых числа \(n\) и \(m\) (\(1 \le n, m \le 200\,000\)) — длины строк \(s\) и \(t\) соответственно.

Во второй строке даны \(n\) целых чисел \(s_1, s_2, s_3, \ldots, s_n\) (\(1 \le s_i \le 200\,000\)) — буквы строки \(s\).

Во третьей строке даны \(m\) целых чисел \(t_1, t_2, t_3, \ldots, t_m\) (\(1 \le t_i \le 200\,000\)) — буквы строки \(t\).

Выходные данные

Выведите единственное число — количество строк, лексикографически меньших \(t\), которые можно получить, переставляя буквы в \(s\), по модулю \(998\,244\,353\).

Примечание

В первом примере интересующие нас строки это \([1\, 2\, 2]\) и \([2\, 1\, 2]\). Строка \([2\, 2\, 1]\) лексикографически больше строки \([2\, 1\, 2\, 1]\), поэтому её мы не считаем.

Во втором примере подходят все строки, кроме \([4\, 3\, 2\, 1]\), так что их \(4! - 1 = 23\).

В третьем примере подходит только строка \([1\, 1\, 1\, 2]\).

D. Бизнес-шоу

дп кратчайшие пути разделяй и властвуй реализация Структуры данных *2800

Дима находится на шоу от бизнесмена Петра. В этом шоу Диме предстоит пройтись по дорожке, которая является прямоугольником \(3 \times n\), где строки пронумерованы от \(1\) до \(3\) сверху вниз, а столбцы от \(1\) до \(n\) слева направо.

На клетке на пересечении строки \(i\) и столбца \(j\) написано число \(a_{i,j}\). Изначально у Димы есть баланс, равный нулю, и когда Дима наступает на клетку в \(i\)-й строке и \(j\)-м столбце, его баланс меняется на \(a_{i,j}\) рублей. Баланс может становиться отрицательным.

Дима может заходить на любые клетки первой и третьей строки, но изначально клетки второй строки для него недоступны. Однако есть \(q\) предложений от бизнесмена Петра, которые могут сделать их доступными: \(i\)-е предложение позволяет разблокировать все клетки второй строки на отрезке с \(l_i\) по \(r_i\), заплатив за это \(k_i\) рублей. Дима может воспользоваться любым количеством таких предложений, а также разблокировать одну и ту же клетку несколько раз.

Дима изначально стоит на клетке в клетке \((1, 1)\) и хочет попасть в клетку \((3, n)\). За один ход Дима может подвинуться на 1 вправо или вниз, то есть увеличить на 1 номер строки или столбца. Таким образом, всего в процессе пути Дима сделает \(n + 1\) ход, из которых ровно \(n - 1\) будет по горизонтали и \(2\) по вертикали.

Выигрыш Димы будет равен финальному балансу после совершения всех ходов, то есть сумме чисел на всех посещённых клетках за вычетом стоимости всех использованных предложений. Ваша задача — определить максимальный возможный выигрыш Димы.

Входные данные

В первой строке даны два целых числа \(n\) и \(q\) (\(1 \le n, q \le 500\,000\)) — длина прямоугольника и число возможных отрезков для разблокировки.

В следующих трёх строках описываются числа в прямоугольнике, в \(i\)-й строке даны \(n\) целых чисел \(a_{i1}\), \(a_{i2}\), ..., \(a_{in}\) (\(-10^9 \le a_{ij} \le 10^9)\) — числа в \(i\)-й строке прямоугольника.

В следующих \(q\) строках описываются доступные предложения для разблокировки отрезков, в \(i\)-й из них даны три целых числа \(l_i\), \(r_i\) и \(k_i\) (\(1 \leq l_i \leq r_i \leq n\), \(1\leq k_i\leq 10^9\)) — границы разблокируемого отрезка и стоимость предложения.

Выходные данные

Выведите одно число — максимальный возможный выигрыш Димы.

Примечание

В первом примере оптимально воспользоваться вторым предложением Петра за \(4\) рубля и пройти по клеткам \((1, 1)\), \((1, 2)\), \((1, 3)\), \((2, 3)\), \((3, 3)\), \((3, 4)\), заработав \(1 + 0 + 2 + 9 + 4 + 1 - 4 = 13\) рублей.

Во втором примере оптимально воспользоваться вторым и третьим предложением Петра за \(2\) и \(3\) рубля соответственно, и пройти по клеткам \((1, 1)\), \((2, 1)\), \((2, 2)\), \((2, 3)\), \((2, 4)\), \((3, 4)\), \((3, 5)\), заработав \(-20 + 1 + 3 + 3 + 6 + 6 + 2 - 2 - 3= -4\) рубля.

E. Авиареформа

графы Деревья поиск в глубину и подобное разделяй и властвуй реализация снм Структуры данных *3200

Берляндия — большая страна с развитой системой авиасообщения. Всего в стране есть \(n\) городов, которые исторически обслуживаются авиакомпанией Берляфлот. Авиакомпания выполняет двухсторонние рейсы между \(m\) парами городов, \(i\)-й из них соединяет города с номерами \(a_i\) и \(b_i\) и имеет цену \(c_i\) на перелёт в каждую из сторон.

Известно, что с помощью рейсов Берляфлота можно добраться от любого города до любого другого (возможно, с пересадками), а стоимость любого маршрута из нескольких стыковочных рейсов Берляфлота равна стоимости самого дорогого из них. Более формально, стоимость маршрута из города \(t_1\) в город \(t_k\) с \((k-2)\)-мя пересадками в городах \(t_2,\ t_3,\ t_4,\ \ldots,\ t_{k - 1}\) равна максимуму из стоимостей рейсов из города \(t_1\) в \(t_2\), из \(t_2\) в \(t_3\), из \(t_3\) в \(t_4\) и так далее до рейса из \(t_{k - 1}\) в \(t_k\). Разумеется, все эти рейсы должны выполняться авиакомпанией Берляфлот.

Недавно в Берляндии начала работать новая авиакомпания S8 Airlines. Эта авиакомпания совершает двусторонние рейсы между всеми парами городов, между которыми нет рейсов Берляфлота. Таким образом, между каждой парой городов есть рейс либо Берляфлота, либо S8 Airlines.

Стоимости рейсов авиакомпании S8 Airlines рассчитываются следующим образом: для каждой пары городов \(x\) и \(y\), между которыми выполняется рейс S8 Airlines, стоимость этого рейса равняется минимальной стоимости маршрута между городами \(x\) и \(y\) у Берляфлота в соответствии с описанным ранее ценообразованием.

Известно, что с помощью рейсов S8 Airlines можно добраться от любого города до любого другого с возможными пересадками, и, аналогично Берляфлоту, стоимость маршрута между любыми двумя городами стыковочными рейсами S8 Airlines равна стоимости самого дорогого рейса в этом маршруте.

Из-за увеличившейся конкуренции с S8 Airlines Берляфлот решил провести авиареформу и изменить стоимости своих рейсов. А именно, для \(i\)-го своего рейса между городами \(a_i\) и \(b_i\) Берляфлот хочет сделать стоимость этого рейса равной минимальной стоимости маршрута между городами \(a_i\) и \(b_i\) у авиакомпании S8 Airlines. Помогите менеджерам Берляфлота рассчитать новые стоимости рейсов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке вводятся одно целое число \(t\) (\(1 \le t \le 10\,000\)) — число наборов входных данных. Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных водятся два целых числа \(n\) и \(m\) (\(4 \le n \le 200\,000\), \(n - 1 \le m \le 200\,000\), \(m \le \frac{(n - 1) (n - 2)}{2}\)) — число городов в Берляндии и число рейсов у Берляфлота.

В следующих \(m\) строках описываются рейсы Берляфлота. В \(i\)-й строке даны три целых числа \(a_i\), \(b_i\) и \(c_i\) (\(1 \le a_i, b_i \le n\), \(1 \le c_i \le 10^9\)) — номера городов, которые соединены \(i\)-м рейсом Берляфлота, и стоимость \(i\)-го рейса Берляфлота.

Гарантируется, что никакой рейс не соединяет город сам с собой, а никакие 2 рейса не соединяют одну и ту же пару городов. Гарантируется, что рейсами Берляфлота можно добраться от любого города до любого другого и что рейсами S8 Airlines можно добраться от любого города до любого другого.

Обозначим за \(N\) сумму значений \(n\) по всем наборам входных данных, и за \(M\) — сумму значений \(m\) по всем наборам входных данных. Гарантируется, что \(N, M \le 200\,000\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(m\) целых чисел, \(i\)-е из которых должно быть равно стоимости \(i\)-го рейса Берляфлота после авиареформы.

Примечание

В примере в первом наборе входных данных авиакомпания S8 Airlines будет выполнять рейсы между парами городов: \((1, 3)\), \((1, 4)\) и \((2, 4)\).

Стоимость рейса между городами \(1\) и \(3\) будет равна \(2\), так как минимальная стоимость маршрута Берляфлота равна \(2\) — маршрут состоит из рейса между городами \(1\) и \(2\) стоимостью \(1\) и рейса между городами \(2\) и \(3\) стоимостью \(2\), максимум из стоимостей равен \(2\).

Стоимость рейса между городами \(1\) и \(4\) будет равна \(3\), так как минимальная стоимость маршрута Берляфлота составляет \(3\) — маршрут состоит из рейса между городами \(1\) и \(2\) стоимостью \(1\), рейса между городами \(2\) и \(3\) стоимостью \(2\) и рейса между городами \(3\) и \(4\) стоимостью \(3\), максимум из стоимостей равен \(3\).

Стоимость рейса между городами \(2\) и \(4\) будет равна \(3\), так как минимальная стоимость маршрута Берляфлота составляет \(3\) — маршрут состоит из рейса между городами \(2\) и \(3\) стоимостью \(2\) и рейса между городами \(3\) и \(4\) стоимостью \(3\), максимум из стоимостей равен \(3\).

После авиареформы стоимость рейса Берляфлота между городами \(1\) и \(2\) будет составлять \(3\), так как минимальная стоимость маршрута S8 Airlines между этими городами составляет \(3\) — маршрут состоит из рейса между городами \(1\) и \(4\) стоимостью \(3\) и рейса между городами \(2\) и \(4\) стоимостью \(3\), максимум равен \(3\).

Стоимость рейса Берляфлота между городами \(2\) и \(3\) будет составлять \(3\), так как минимальная стоимость маршрута S8 Airlines между этими городами составляет \(3\) — маршрут состоит из рейса между городами \(2\) и \(4\) стоимостью \(3\), рейса между городами \(1\) и \(4\) стоимостью \(3\) и рейса между \(1\) и \(3\) стоимостью \(2\), максимум равен \(3\).

Стоимость рейса Берляфлота между городами \(3\) и \(4\) будет составлять \(3\), так как минимальная стоимость маршрута S8 Airlines между этими городами составляет \(3\) — маршрут состоит из рейса между городами \(1\) и \(3\) стоимостью \(2\) и рейса между городами \(1\) и \(4\) стоимостью \(3\), максимум равен \(3\).

Во втором наборе входных данных у авиакомпании S8 Airlines будут следующие рейсы: между городами \(1\) и \(4\) стоимостью \(1\), между городами \(2\) и \(3\) стоимостью \(1\), между городами \(2\) и \(5\) стоимостью \(2\), между городами \(3\) и \(4\) стоимостью \(1\) и между городами \(3\) и \(5\) стоимостью \(2\).

F. Два проспекта

графы поиск в глубину и подобное Структуры данных *3500

Для того чтобы сделать столицу Берляндии более привлекательным туристическим местом, великий король придумал следующий план: выбрать две улицы города и назвать их проспектами. Естественно, эти проспекты будут объявлены чрезвычайно важными историческими местами, что должно привлечь туристов со всего мира.

Столицу Берляндии можно представить в виде графа, вершинами которого являются перекрестки, а ребрами являются улицы, соединяющие два перекрестка напрямую. Всего в графе \(n\) вершин и \(m\) ребер, по любой улице можно двигаться в обоих направлениях, от любого перекрестка можно добраться до любого другого, перемещаясь только по улицам, каждая улица соединяет два различных перекрестка, и никакие две улицы не соединяют одинаковую пару перекрестков.

Чтобы снизить поток обычных горожан, перемещающихся по великим проспектам, было решено ввести платный проезд по каждому их них в обе стороны. Теперь за один проезд по проспекту нужно заплатить \(1\) тугрик. За проезд по остальным улицам платить не нужно.

Аналитики собрали выборку из \(k\) горожан, \(i\)-му из них надо ездить на работу от перекрестка \(a_i\) к перекрестку \(b_i\). После выбора двух проспектов каждый горожанин будет добираться на работу вдоль пути, стоимость которого будет минимальна.

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находятся два целых числа \(n\) и \(m\) (\(3 \leq n \leq 500\,000\), \(n - 1 \leq m \leq 500\,000\), \(m \le \frac{n (n - 1)}{2}\)) — количество перекрестков и улиц города.

В следующих \(m\) строках содержатся описания улиц, в \(i\)-й строке находятся два целых числа \(s_i\) и \(f_i\) (\(1 \leq s_i, f_i \leq n\), \(s_i \neq f_i\)) — номера перекрестков, которые соединяет \(i\)-я улица. Гарантируется, что никакие две улицы не соединяют одну и ту же пару перекрестков, и что от любого перекрестка можно добраться до любого другого, перемещаясь только по улицам.

В следующей строке находится единственное целое число \(k\) (\(1 \leq k \leq 500\,000\)) — количество горожан в выборке.

В следующих \(k\) строках содержатся описания горожан, в \(i\)-й строке находятся два целых числа \(a_i\) и \(b_i\) (\(1 \leq a_i, b_i \leq n\), \(a_i \neq b_i\)) — \(i\)-й горожанин едет на работу от перекрестка \(a_i\) до перекрестка \(b_i\).

Пусть \(M\) обозначает сумму значений \(m\) по всем наборам входных данных, а \(K\) означает сумму значений \(k\) по всем наборам входных данных. Гарантируется, что \(M, K \le 500\,000\).

Выходные данные

Для каждого набора входных данных в выведите ответ на задачу.

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

Во второй строке ответа выведите два целых числа \(x_1\) и \(y_1\) — номера перекрёстков, дорогу между которыми нужно сделать первым проспектом.

В третей строке ответа выведите два целых числа \(x_2\) и \(y_2\) — номера перекрёстков, дорогу между которыми нужно сделать вторым проспектом.

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

D. Граф-борода

Деревья снм Структуры данных *2100

Назовем неориентированный связный граф из n вершин и n - 1 ребра бородой, если в нем все вершины кроме, возможно, одной имеют степень 2 или 1 (то есть в нем существует не более одной вершины, степень которой более двух). Напомним, что степень вершины — это количество инцидентных ей ребер.

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

Вам дано описание графа-бороды. Ваша задача — обрабатывать запросы следующих типов:

  • покрасить в черный цвет ребро, которое в описании имеет номер i (гарантируется, что к моменту этого запроса i-ое ребро имеет белый цвет)
  • покрасить в белый цвет ребро, которое в описании имеет номер i (гарантируется, что к моменту этого запроса i-ое ребро имеет черный цвет)
  • найти длину кратчайшего пути только по черным ребрам между вершинами a и b или указать, что не существует такого пути между ними (длина пути — это количество ребер в нем)

Вершины пронумерованы целыми числами от 1 до n, а ребра — целыми числами от 1 до n - 1.

Входные данные

Первая строка входных данных содержит целое число n (2 ≤ n ≤ 105) — количество вершин в графе. Далее в n - 1 строках заданы ребра номерами вершин vi, ui (1 ≤ vi, ui ≤ n, vi ≠ ui), которые данное ребро соединяет. Гарантируется, что заданный граф связен и образует граф-бороду, а также не содержит петель и кратных ребер.

Следующая строка содержит целое число m (1 ≤ m ≤ 3·105) — количество запросов. Следующие m строк содержат запросы в формате: первым в строке записано целое число type, которое принимает значения от 1 до 3 и означает тип запроса.

Если type = 1, то текущий запрос — это запрос на покраску ребра в черный цвет. В этом случае в строке кроме числа type содержится целое число id (1 ≤ id ≤ n - 1), означающее номер ребра, которое нужно покрасить.

Если type = 2, то текущий запрос — это запрос на покраску ребра в белый цвет, его формат аналогичен предыдущему запросу.

Если type = 3, то текущий запрос — запрос нахождения расстояния. В этом случае в строке кроме числа type содержатся два целых числа a, b (1 ≤ a, b ≤ n, a может быть равно b) — номера вершин, расстояние между которыми надо найти.

Числа во всех строках разделены ровно одним пробелом. Ребра нумеруются в том порядке, в котором они заданы во входных данных.

Выходные данные

Для каждого запроса «найти расстояние между вершинами a и b» выведите результат. Если данные вершины на момент запроса недостижимы друг из друга по черным ребрам, то выведите «-1» (без кавычек). Результаты выводите в порядке поступления запросов, числа разделяйте пробелами или переводами строк.

Примечание

В первом примере вершины 1 и 2 связаны ребром номер 1, а вершины 2 и 3 — ребром номер 2. До перекраски ребра номер 2 каждая вершина достижима из каждой по черным ребрам, в частности, кратчайший путь между 1 и 3 проходит через оба ребра.

Если перекрасить ребро номер 2 в белый цвет, то вершина 3 оказывается отрезанной от остальных, то есть из нее не существует пути по черным ребрам ни в какую другую вершину.

E. Перенос экзамена

Бинарный поиск жадные алгоритмы математика реализация сортировки Структуры данных *1900

Сейчас у Дмитрия сессия, и он должен сдать \(n\) экзаменов. Сессия начинается в день \(1\) и длится \(d\) дней. \(i\)-й экзамен пройдёт в день \(a_i\) (\(1 \le a_i \le d\)), все \(a_i\) — различны.

Пример, где \(n=3\), \(d=12\), \(a=[3,5,9]\). Оранжевым — дни сдачи экзамена. Перед первым экзаменом Дмитрий отдохнёт \(2\) дня, перед вторым он отдохнёт \(1\) день и перед третьим он отдохнёт \(3\) дня.

Для расписания сессии Дмитрий считает специальную величину \(\mu\) — наименьшее из времен отдыха перед экзаменом по всем экзаменам. Например, для картинки выше \(\mu=1\). Иными словами, для расписания он подсчитывает ровно \(n\) чисел — сколько дней он отдыхает между экзаменом сдачей экзамена \(i-1\) и \(i\) (для \(i=0\) между началом сессии и сдачей экзамена \(i\)). Затем он находит \(\mu\) — минимум среди этих \(n\) чисел.

Дмитрий считает, что может улучшить предложенное расписание сессии. Он может попросить изменить дату одного экзамена (изменить одно произвольное значение \(a_i\)). Помогите ему поменять дату так, чтобы все \(a_i\) остались различны, а значение \(\mu\) было как можно больше.

Например, для рассмотренного выше расписания Дмитрию наиболее выгодно перенести второй экзамен на самый конец сессии. Новое расписание примет вид:

Теперь длительности отдыхов перед экзаменами равны \([2,2,5]\). Следовательно, \(\mu=2\).

Дмитрий может оставить предложенное расписание без изменений (если не существует способа передвинуть один экзамен так, что это приведёт к улучшению ситуации).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Перед каждым набором в тесте записана пустая строка.

Первая строка описания каждого набора входных данных содержит два целых числа \(n\) и \(d\) (\(2 \le n \le 2 \cdot 10^5, 1 \le d \le 10^9\)) — количество экзаменов и длительность сессии, соответственно.

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_i\) (\(1 \le a_i \le d, a_i < a_{i+1}\)), где \(i\)-е число означает дату сдачи \(i\)-го экзамена.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальное возможное значение \(\mu\), если Дмитрий может перенести один любой экзамен на произвольный день. Все значения \(a_i\) должны остаться различны.

Примечание

Первый пример разобран в условии.

Одно из оптимальных изменений расписаний для второго примера:

Изначальное расписание.

Новое расписание

В третьем примере необходимо передвинуть экзамен с дня \(1\) на любой день от \(4\) до \(100\).

В четвёртом примере любое изменение расписания только уменьшит \(\mu\), соответственно расписание нужно оставить исходным.

В пятом примере необходимо перенести экзамен с дня \(1\) на любой день от \(100000000\) до \(300000000\).

Одно из оптимальных изменений расписаний для шестого примера:

Изначальное расписание.

Новое расписание

В седьмом примере каждый день занят экзаменами и перестроить расписание невозможно.

G. Подсчёт коротких путей

графы дп кратчайшие пути поиск в глубину и подобное Структуры данных *2100

Задан неориентированный связный граф, состоящий из \(n\) вершин и \(m\) ребер. Граф не содержит петель (рёбер из вершины в себя же) и кратных ребер (то есть между каждой парой вершин не более одного ребра). Вершины графа пронумерованы от \(1\) до \(n\).

Найдите количество путей из вершины \(s\) в \(t\), длина которых отличается от длины кратчайшего пути из \(s\) в \(t\) не более, чем на \(1\). Необходимо учесть все подходящие пути, даже если они проходят по одной и той же вершине или ребру более одного раза (то есть, не являются простыми).

Граф, состоящий из \(6\) вершин и \(8\) ребер.

Например, пусть \(n = 6\), \(m = 8\), \(s = 6\) и \(t = 1\), а граф выглядит как на рисунке выше. Тогда длина кратчайшего пути из \(s\) в \(t\) равна \(1\). Рассмотрим все пути, длина которых не более \(1 + 1 = 2\).

  • \(6 \rightarrow 1\). Длина пути равна \(1\).
  • \(6 \rightarrow 4 \rightarrow 1\). Длина пути равна \(2\).
  • \(6 \rightarrow 2 \rightarrow 1\). Длина пути равна \(2\).
  • \(6 \rightarrow 5 \rightarrow 1\). Длина пути равна \(2\).

Всего существует \(4\) подходящих пути.

Входные данные

В первой строке входных данных задано число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Перед каждым набором входных данных записана пустая строка.

Первая строка набора содержит два числа \(n, m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le m \le 2 \cdot 10^5\)) — количество вершин и ребер в графе.

Вторая строка содержит два числа \(s\) и \(t\) (\(1 \le s, t \le n\), \(s \neq t\)) — номера начальной и конечной вершины пути.

В следующих \(m\) строках содержатся описания ребер: в \(i\)-й строке заданы два целых числа \(u_i\), \(v_i\) (\(1 \le u_i,v_i \le n\)) — номера вершин, которые соединяют \(i\)-е ребро. Гарантируется, что граф является связным и не содержит петель и кратных рёбер.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных теста не превосходит \(2 \cdot 10^5\). Аналогично, гарантируется, что сумма значений \(m\) по всем наборам входных данных теста не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого тестового случая выведите единственное число — количество путей из \(s\) в \(t\) таких, что их длина отличается от длины кратчайшего пути не более, чем на \(1\).

Так как это число может быть слишком большим, выведите его по модулю \(10^9 + 7\).

C. Отказоустойчивая сеть

Перебор реализация Структуры данных *1500

В компьютерном классе стоят два ряда компьютеров. В каждом ряду ровно по \(n\) компьютеров и у компьютеров есть своя классификация. Компьютеры в первом ряду имеют классы \(a_1, a_2, \dots, a_n\), а компьютеры во втором ряду — \(b_1, b_2, \dots, b_n\).

Первоначально, все пары соседних компьютеров в каждом ряду соединены кабелем (пары \((i, i + 1)\) для всех \(1 \le i < n\)), а потому ряды образуют две независимые компьютерные сети.

Ваша задача — объединить их в одну общую сеть посредством соединения одной или более пар компьютеров с разных рядов. Соединение \(i\)-го компьютера с первого ряда и \(j\)-го компьютера второго ряда стоит \(|a_i - b_j|\).

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

Чему равна наименьшая стоимость построить отказоустойчивую сеть?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — количество компьютеров в каждом ряду.

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — классы компьютеров в первом ряду.

В третьей строке заданы \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^9\)) — классы компьютеров во втором ряду.

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных, выгодно соединить четыре пары компьютеров:

  1. компьютер \(1\) на первом ряду и компьютер \(2\) на втором ряду: стоимость равна \(|1 - 4| = 3\);
  2. компьютер \(3\) на первом ряду и компьютер \(2\) на втором ряду: стоимость \(|1 - 4| = 3\);
  3. компьютер \(2\) на первом ряду и компьютер \(1\) на втором ряду: стоимость \(|10 - 20| = 10\);
  4. компьютер \(2\) на первом ряду и компьютер \(3\) на втором ряду: стоимость \(|10 - 25| = 15\);
В сумме, \(3 + 3 + 10 + 15 = 31\).

Во втором наборе, выгодно соединить \(1\) на первом ряду и \(1\) на втором ряду, а также \(4\) на первом ряду и \(4\) на втором.

D. Ближайшие точки

Бинарный поиск графы кратчайшие пути поиск в глубину и подобное Структуры данных *1900

Вам даны \(n\) различных точек на плоскости. Координаты \(i\)-й из них — \((x_i, y_i)\).

Для каждой точки \(i\) вам необходимо найти ближайшую (по Манхэттенскому расстоянию) точку с целочисленными координатами, которая не принадлежит множеству заданных \(n\) точек. Если существует несколько таких точек, вы можете выбрать любую из них.

Манхэттенское расстояние между двумя точками \((x_1, y_1)\) и \((x_2, y_2)\) равно \(|x_1 - x_2| + |y_1 - y_2|\).

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество точек в множестве.

Следующие \(n\) строк описывают точки. В \(i\)-й из них находится два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le 2 \cdot 10^5\)) — координаты \(i\)-й точки.

Гарантируется, что все точки во входных данных различны.

Выходные данные

Выведите \(n\) строк. В \(i\)-й из них выведите точку с целочисленными координатами, не принадлежащую заданным \(n\) точкам, и являющуюся ближайшей (по Манхэттенскому расстоянию) к \(i\)-й точке из входных данных.

Выводимые координаты должны находиться в отрезке \([-10^6; 10^6]\). Можно показать, что любой оптимальный ответ удовлетворяет заданным ограничениям.

Если существует несколько возможных ответов, вы можете вывести любой из них.

F. Tower Defense

Бинарный поиск Перебор Структуры данных *3000

Монокарп играет в игру в жанре tower defense. Уровень в этой игре может быть представлен как ось OX, на которой в каждой целочисленной точке от \(1\) до \(n\) стоит башня.

У башни в \(i\)-й точке вместимость маны равна \(c_i\), а скорость восстановления маны равна \(r_i\). В самом начале, до секунды \(0\), у каждой башни полная мана. Если в конце какой-то секунды у \(i\)-й башни \(x\) маны, то к началу следующей секунды становится \(\mathit{min}(x + r_i, c_i)\) маны.

На уровне появляются \(q\) монстров. \(j\)-й монстр появляется в точке \(1\) в начале \(t_j\)-й секунды и имеет \(h_j\) здоровья. Каждый монстр двигается со скоростью \(1\) точка в секунду в направлении увеличения координаты.

Когда монстр проходит мимо башни, башня наносит ему \(\mathit{min}(H, M)\) урона, где \(H\) — это текущий запас здоровья монстра, а \(M\) — текущий запас маны башни. Это количество вычитается из здоровья монстра и из маны башни.

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

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество башен.

В \(i\)-й из следующих \(n\) строк записаны два целых числа \(c_i\) и \(r_i\) (\(1 \le r_i \le c_i \le 10^9\)) — вместимость мана и скорость восстановления маны у \(i\)-й башни.

В следующей строке записано одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество монстров.

В \(j\)-й из следующих \(q\) строк записаны два целых числа \(t_j\) и \(h_j\) (\(0 \le t_j \le 2 \cdot 10^5\); \(1 \le h_j \le 10^{12}\)) — время, когда появляется \(j\)-й монстр, и его здоровье.

Монстры перечислены в порядке увеличения времени появления, поэтому \(t_j < t_{j+1}\) для всех \(1 \le j \le q-1\).

Выходные данные

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

B. Операция вычитания

жадные алгоритмы математика Структуры данных *1100

Вам дан список из \(n\) целых чисел. Вы можете выполнить следующую операцию: вы выбираете элемент \(x\) из списка, удаляете \(x\) из списка и вычитаете \(x\) из всех оставшихся элементов. Таким образом, за одну операцию длина списка уменьшается ровно на \(1\).

Для заданного целого числа \(k\) (\(k>0\)) определите, существует ли такая последовательность из \(n-1\) операции, что после применения этих операций единственный оставшийся элемент списка равен \(k\).

Входные данные

Входные данные состоят из нескольких наборов входных данных. В первой строке записано единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа: \(n\) и \(k\) (\(2 \leq n \leq 2\cdot 10^5\), \(1 \leq k \leq 10^9\)) — количество целых чисел в списке и целевое значение, соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел списка \(a_1, a_2, \ldots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если вы можете получить \(k\) с помощью последовательности из \(n-1\) операций. В противном случае выведите «NO».

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом примере у нас есть список \(\{4, 2, 2, 7\}\), и у нас есть цель \(k = 5\). Один из способов добиться этой цели следующий: сначала выбираем третий элемент, получая список \(\{2, 0, 5\}\). Далее выбираем первый элемент, получая список \(\{-2, 3\}\). Наконец, мы выбираем первый элемент, получая список \(\{5\}\).

H. Одинаковые НОК подмножеств

математика Структуры данных теория чисел *3200

Вам даны два набора натуральных чисел \(A\) и \(B\). Необходимо найти два непустых подмножества \(S_A \subseteq A\), \(S_B \subseteq B\) такие, что наименьшее общее кратное (НОК) элементов \(S_A\) равно наименьшему общему кратному (НОК) элементов \(S_B\).

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка входных данных содержит одно целое число \(t\) (\(1 \leq t \leq 200\)) — количество наборов входных данных.

Для каждого набора входных данных есть одна строка, содержащая два целых числа \(n, m\) (\(1 \leq n, m \leq 1000\)) — размеры множеств \(A\) и \(B\) соответственно.

Следующая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 4 \cdot 10^{36}\)) — элементы \(A\).

Следующая строка содержит \(m\) различных целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \leq b_i \leq 4 \cdot 10^{36}\)) — элементы \(B\).

Гарантируется, что сумма значений \(n\) и сумма значений \(m\) по всем наборам входных данных не превосходят \(1000\).

Выходные данные

Для каждого набора входных данных если не существует двух подмножеств с одинаковым наименьшим общим кратным, выведите одну строку с «NO».

В противном случае выведите одну строку с «YES», а затем строку с двумя целыми числами \(|S_A|, |S_B|\) (\(1 \leq |S_A| \leq n\), \(1 \leq |S_B| \leq m\) ) — размеры подмножеств \(S_A\) и \(S_B\) соответственно.

На следующей строке выведите \(|S_A|\) целых чисел \(x_1, x_2, \ldots, x_{|S_A|}\), элементы \(S_A\), а на следующей строке выведите \(|S_B|\) целых чисел \(y_1, y_2, \ldots, y_{|S_B|}\), элементы \(S_B\).

Если существует несколько возможных пар подмножеств, вы можете вывести любую.

D2. 388535 (усложненная версия)

битмаски математика Перебор Структуры данных *2300

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

Марин и Годзё играют в прятки с массивом.

Сначала Годзё выполняет следующую последовательность действий:

  • Во-первых, Годзё выбирает \(2\) целых числа \(l\) и \(r\) такие, что \(l \leq r\).
  • Затем Годзё составляет массив \(a\) длины \(r-l+1\), который является перестановкой массива \([l,l+1,\ldots,r]\).
  • Наконец, Годзё выбирает секретное целое число \(x\) и присваивает в элемент \(a_i\) значение \(a_i \oplus x\) для всех \(i\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Марин даются значения \(l,r\) и финальный массив \(a\). Её цель — найти секретное число \(x\). Можете ли вы помочь Марин?

Заметим, что значение \(x\) не всегда можно определить однозначно. В этом случае найдите любое возможное \(x\), которое приводит к заданному финальному значению массива \(a\).

Входные данные

В первой строке находится целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных.

В первой строке каждого набора входных данных находятся два целых числа \(l\) и \(r\) (\(\color{red}{\boldsymbol{0} \boldsymbol{\le} \boldsymbol{l}} \le r < 2^{17}\)).

Вторая строка содержит \(r - l + 1\) целое число \(a_1,a_2,\ldots,a_{r-l+1}\) (\(0 \le a_i < 2^{17}\)). Гарантируется, что данный массив \(a\) может быть получен с помощью шагов, выполняемых Годзё.

Гарантируется, что сумма значений \(r - l + 1\) по всем наборам входных данных не превосходит \(2^{17}\).

Выходные данные

Для каждого набора входных данных выведите \(x\). Если ответов несколько, то выведите любой из них.

Примечание

В первом примере начальное значение массива имеет вид \([7, 6, 5, 4]\).

Во втором примере начальное значение массива имеет вид \([4, 7, 6, 5]\).

В третьем примере начальное значение массива имеет вид \([3, 1, 2]\).

E. Годзё и игра на матрице

дп игры математика реализация сортировки Структуры данных теория чисел хэши *2500

Марин измоталась после долгого дня косплея, поэтому Годзё приглашает ее сыграть в игру!

Марин и Годзё по очереди кладут одну из своих фишек на таблицу размером \(n \times n\), при этом Марин ходит первой. Существуют некоторые ограничения на размещение фишек:

  • За исключением первого хода фишка, размещенная игроком, должна находиться на манхэттенском расстоянии более чем \(k\) от последней размещенной фишки. Другими словами, если игрок кладет фишку в \((x_1, y_1)\), то фишка, помещенная на следующем ходу, должна находиться в ячейке \((x_2, y_2)\), удовлетворяющей \(|x_2 - x_1| + |y_2 - y_1| > k\).
  • Помимо предыдущего ограничения, фишка может быть размещена в любом месте матрицы, включая ячейки, где уже были размещены фишки любого игрока.

Каждый раз, когда какой-либо игрок кладет фишку в ячейку \((x, y)\), этот игрок получает \(v_{x,\ y}\) очков. Все значения \(v\) в таблице различны. Очки за ячейку даются даже в случае, если какие-то фишки уже находятся в этой ячейке. Игра заканчивается, когда каждый игрок сделает \(10^{100}\) ходов.

Марин и Годзё сыграют \(n^2\) партий. Для каждой ячейки таблицы будет ровно одна партия, в которой первым ходом Марин размещает фишку в этой ячейке. Для каждой такой партии определите, у кого в итоге будет больше очков при оптимальной игре Марин и Годзё (после первого хода Марин)? Или партия закончится вничью?

Входные данные

Первая строка содержит два целых числа \(n\), \(k\) (\(3 \le n \le 2000\), \(1 \leq k \leq n - 2\)). Заметьте, что при таких ограничениях всегда возможно сделать ход.

Следующие \(n\) строк содержат по \(n\) целых чисел. \(j\)-м числом в \(i\)-й строке является \(v_{i,j}\) (\(1 \le v_{i,j} \le n^2\)). Все значения в \(v\) различны.

Выходные данные

Выведите \(n\) строк. \(i\)-я строка должна содержать \(n\) символов, где \(j\)-й символ является результатом партии, в которой Марин начинает с ячейки \((i, j)\). Выведите 'M' в случае победы Марин, 'G' — в случае победы Годзё и 'D' — в случае равного количества очков. Не выводите пробелы между символами в одной строке.

D. Обратная сумма сортировки

жадные алгоритмы Конструктив математика реализация Структуры данных *1900

Представим, что у вас был массив \(A\) из \(n\) элементов, каждый из которых это \(0\) или \(1\).

Определим функцию \(f(k,A)\), которая возвращает массив \(B\), который является результатом сортировки первых \(k\) элементов массива \(A\) в неубывающем порядке. Например, \(f(4,[0,1,1,0,0,1,0]) = [0,0,1,1,0,1,0]\). Обратите внимание, что первые \(4\) элемента были отсортированы.

Рассмотрим массивы \(B_1, B_2,\ldots, B_n\), равные \(f(1,A), f(2,A),\ldots,f(n,A)\). Пусть \(C\) — массив, равный поэлементной сумме массивов \(B_1, B_2,\ldots, B_n\).

Например, пусть \(A=[0,1,0,1]\). Тогда \(B_1=[0,1,0,1]\), \(B_2=[0,1,0,1]\), \(B_3=[0,0,1,1]\), \(B_4=[0,0,1,1]\). Тогда \(C=B_1+B_2+B_3+B_4=[0,1,0,1]+[0,1,0,1]+[0,0,1,1]+[0,0,1,1]=[0,2,2,4]\).

Вам дан массив \(C\). Найдите бинарный массив \(A\) такой, что, если его обработать как описано выше, то получится данный массив \(C\). Гарантируется, что такой массив \(A\) существует для данного \(C\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(0 \leq c_i \leq n\)). Гарантируется, что для данного массива \(C\) существует подходящий массив \(A\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i\) равно \(0\) или \(1\)). Если существуют несколько ответов, выведите любой.

Примечание

Рассмотрим первый пример. Начнем с массива \(A=[1,1,0,1]\) и построим массивы \(B_i\):

  • \(B_1=[\color{blue}{1},1,0,1]\);
  • \(B_2=[\color{blue}{1},\color{blue}{1},0,1]\);
  • \(B_3=[\color{blue}{0},\color{blue}{1},\color{blue}{1},1]\);
  • \(B_4=[\color{blue}{0},\color{blue}{1},\color{blue}{1},\color{blue}{1}]\)
Затем просуммируем каждый столбик и получим \(C=[1+1+0+0,1+1+1+1,0+0+1+1,1+1+1+1]=[2,4,2,4]\).

F2. Перспективные подстроки (сложная версия)

математика реализация Строки Структуры данных *2100

Это сложная версия задачи F. Единственное различие между простой и сложной версиями заключается в ограничениях.

Будем называть непустую строку сбалансированной, если она содержит одинаковое количество знаков плюс и минус. Например: строки «+--+» и «++-+--» являются сбалансированными, а строки «+--», «--» и «» не являются сбалансированными.

Будем называть строку перспективной, если строку можно сделать сбалансированной при помощи нескольких(возможно нуля) применений следующей операции:

  • заменим два соседних знака минуса на один знак плюс.

В частности, всякая сбалансированная строка является перспективной. Однако обратное неверно: не всякая перспективная строка — сбалансирована.

Например: строка «-+---» является перспективной, так как можно заменить два соседних минуса на плюс и получить сбалансированную строку «-++-», либо получить другую сбалансированную строку «-+-+».

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

Напомним, что подстрока — это последовательность подряд идущих символов строки. Например, для строки «+-+» её подстроками являются строки «+-», «-+», «+», «+-+» (строка является подстрокой самой себя) и некоторые другие. Но следующие строки её подстроками не являются: «--», «++», «-++».

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Каждый набор входных данных состоит из двух строк. В первой строке дано число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина строки \(s\).

Во второй строке набора дана строка \(s\) длины \(n\), состоящая только из знаков «+» и «-».

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — количество непустых перспективных подстрок строки \(s\). Каждая непустая перспективная подстрока должна быть учтена в ответе столько раз, сколько раз она встречается в строке \(s\).

Примечание

Ниже перечислены перспективные подстроки для первых трёх наборов входных данных примера:

  1. \(s[1 \dots 2]\)+-», \(s[2 \dots 3]\)-+»;
  2. \(s[1 \dots 2]\)-+», \(s[2 \dots 3]\)+-», \(s[1 \dots 5]\)-+---», \(s[3 \dots 5]\)---»;
  3. \(s[1 \dots 3]\)---», \(s[2 \dots 4]\)---».

D. Покрытие прогрессиями

жадные алгоритмы Структуры данных *1900

Вам даны два массива: массив \(a\), состоящий из \(n\) нулей и массив \(b\), состоящий из \(n\) целых чисел.

Вы можете применить к массиву \(a\) следующую операцию произвольное количество раз: выбрать какой-то подотрезок \(a\) длины \(k\) и добавить арифметическую прогрессию \(1, 2, \ldots, k\) к этому подотрезку — то есть добавить \(1\) к первому элементу подотрезка, \(2\) ко второму элементу и так далее. Выбранный подотрезок должен находиться внутри границ массива \(a\) (если левая граница выбранного подотрезка равна \(l\), тогда должно выполняться условие \(1 \le l \le l + k - 1 \le n\)). Заметьте, что добавляемая прогрессия всегда имеет вид \(1, 2, \ldots, k\), а не \(k, k - 1, \ldots, 1\) или какой-нибудь другой (то есть самый левый элемент всегда увеличивается на \(1\), второй элемент всегда увеличивается на \(2\) и так далее).

Ваша задача — найти минимально возможное количество операций, необходимое для того, чтобы удовлетворить условие \(a_i \ge b_i\) для всех \(i\) от \(1\) до \(n\). Заметьте, что условие \(a_i \ge b_i\) должно быть выполнено для всех элементов сразу.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 3 \cdot 10^5\)) — количество элементов в обоих массивах и длину подотрезка соответственно.

Вторая строка входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le 10^{12}\)), где \(b_i\) — это \(i\)-й элемент массива \(b\).

Выходные данные

Выведите одно целое число — минимально возможное количество операций, необходимое для того, чтобы удовлетворить условие \(a_i \ge b_i\) для всех \(i\) от \(1\) до \(n\).

Примечание

Рассмотрим первый тестовый пример. В этом тесте у нас нет никакого выбора, кроме как добавить пять прогрессий для того, чтобы сделать первый элемент массива равным \(5\). В этом случае массив \(a\) будет равен \([5, 10, 15]\).

Рассмотрим второй тестовый пример. В этом тесте давайте добавим одну прогрессию на отрезке \([1; 3]\) и две прогрессии на отрезке \([4; 6]\). В этом случае массив \(a\) будет равен \([1, 2, 3, 2, 4, 6]\).

E. Узкие компоненты

Деревья дп математика Перебор снм Структуры данных *2500

Задана матрица \(a\), состоящая из \(3\) строк и \(n\) столбцов. Каждая клетка матрицы либо свободна, либо занята.

Свободная клетка \(y\) достижима из свободной клетки \(x\), если выполняется хотя бы одно из следующих условий:

  • \(x\) и \(y\) имеют общую сторону;
  • существует такая свободная клетка \(z\), что \(z\) достижима из \(x\), а \(y\) достижима из \(z\).

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

К матрице задаются \(q\) запросов. Запросы следующего вида:

  • \(l\) \(r\) — посчитайте количество компонент связности матрицы, состоящей из столбцов с \(l\) по \(r\) матрицы \(a\) включительно.

Выведите ответы на все запросы.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — количество столбцов матрицы \(a\).

В \(i\)-й из следующих трех строк описывается \(i\)-я строка матрицы \(a\) — строка, состоящая из \(n\) символов. Каждый символ — это либо \(1\) (обозначающий свободную клетку), либо \(0\) (обозначающий занятую клетку).

В следующей строке записано одно целое число \(q\) (\(1 \le q \le 3 \cdot 10^5\)) — количество запросов.

В \(j\)-й из следующих \(q\) строк записаны два целых числа \(l_j\) и \(r_j\) (\(1 \le l_j \le r_j \le n\)) — описание \(j\)-го запроса.

Выходные данные

Выведите \(q\) целых чисел — \(j\)-е значение должно быть равно количеству компонент связности матрицы, состоящей из столбцов с \(l_j\) по \(r_j\) матрицы \(a\) включительно.

F. Antennas

графы графы кратчайшие пути кратчайшие пути поиск в глубину и подобное реализация реализация Структуры данных

There are \(n\) equidistant antennas on a line, numbered from \(1\) to \(n\). Each antenna has a power rating, the power of the \(i\)-th antenna is \(p_i\).

The \(i\)-th and the \(j\)-th antenna can communicate directly if and only if their distance is at most the minimum of their powers, i.e., \(|i-j| \leq \min(p_i, p_j)\). Sending a message directly between two such antennas takes \(1\) second.

What is the minimum amount of time necessary to send a message from antenna \(a\) to antenna \(b\), possibly using other antennas as relays?

Input

Each test contains multiple test cases. The first line contains an integer \(t\) (\(1\le t\le 100\,000\)) — the number of test cases. The descriptions of the \(t\) test cases follow.

The first line of each test case contains three integers \(n\), \(a\), \(b\) (\(1 \leq a, b \leq n \leq 200\,000\)) — the number of antennas, and the origin and target antenna.

The second line contains \(n\) integers \(p_1, p_2, \dots, p_n\) (\(1 \leq p_i \leq n\)) — the powers of the antennas.

The sum of the values of \(n\) over all test cases does not exceed \(200\,000\).

Output

For each test case, print the number of seconds needed to trasmit a message from \(a\) to \(b\). It can be shown that under the problem constraints, it is always possible to send such a message.

Note

In the first test case, we must send a message from antenna \(2\) to antenna \(9\). A sequence of communications requiring \(4\) seconds, which is the minimum possible amount of time, is the following:

  • In \(1\) second we send the message from antenna \(2\) to antenna \(1\). This is possible since \(|2-1|\le \min(1, 4) = \min(p_2, p_1)\).
  • In \(1\) second we send the message from antenna \(1\) to antenna \(5\). This is possible since \(|1-5|\le \min(4, 5) = \min(p_1, p_5)\).
  • In \(1\) second we send the message from antenna \(5\) to antenna \(10\). This is possible since \(|5-10|\le \min(5, 5) = \min(p_5, p_{10})\).
  • In \(1\) second we send the message from antenna \(10\) to antenna \(9\). This is possible since \(|10-9|\le \min(5, 1) = \min(p_{10}, p_9)\).

L. Il Derby della Madonnina

дп математика Структуры данных

The derby between Milan and Inter is happening soon, and you have been chosen as the assistant referee for the match, also known as linesman. Your task is to move along the touch-line, namely the side of the field, always looking very carefully at the match to check for offside positions and other offences.

Football is an extremely serious matter in Italy, and thus it is fundamental that you keep very close track of the ball for as much time as possible. This means that you want to maximise the number of kicks which you monitor closely. You are able to monitor closely a kick if, when it happens, you are in the position along the touch-line with minimum distance from the place where the kick happens.

Fortunately, expert analysts have been able to accurately predict all the kicks which will occur during the game. That is, you have been given two lists of integers, \(t_1, \ldots, t_n\) and \(a_1, \ldots, a_n\), indicating that \(t_i\) seconds after the beginning of the match the ball will be kicked and you can monitor closely such kick if you are at the position \(a_i\) along the touch-line.

At the beginning of the game you start at position \(0\) and the maximum speed at which you can walk along the touch-line is \(v\) units per second (i.e., you can change your position by at most \(v\) each second). What is the maximum number of kicks that you can monitor closely?

Input

The first line contains two integers \(n\) and \(v\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le v \le 10^6\)) — the number of kicks that will take place and your maximum speed.

The second line contains \(n\) integers \(t_1, \ldots, t_n\) (\(1 \le t_i \le 10^9\)) — the times of the kicks in the match. The sequence of times is guaranteed to be strictly increasing, i.e., \(t_1 < t_2 < \cdots < t_n\).

The third line contains \(n\) integers \(a_1, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — the positions along the touch-line where you have to be to monitor closely each kick.

Output

Print the maximum number of kicks that you can monitor closely.

Note

In the first sample, it is possible to move to the right at maximum speed for the first \(3.5\) seconds and stay at position \(7\) until the first kick happens, and then immediately move right also at maximum speed to watch the second kick at position \(17\). There is no way to monitor closely the third kick after the second kick, so at most \(2\) kicks can be seen.

E. МинимизатOR

битмаски жадные алгоритмы Перебор разделяй и властвуй реализация Структуры данных *2500

Дан массив \(a\) из \(n\) неотрицательных целых чисел, пронумерованных от \(1\) до \(n\).

Назовём стоимостью массива \(a\) величину, равную \(\displaystyle \min_{i \neq j} a_i | a_j\), где \(|\) обозначает операцию побитового ИЛИ.

Есть \(q\) запросов. Каждый запрос состоит из двух чисел \(l\) и \(r\) (\(l < r\)). Для каждого запроса необходимо вывести стоимость массива \(a_{l}, a_{l + 1}, \ldots, a_{r}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^{30}\)) — элементы массива \(a\).

Третья строка каждого набора входных данных содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов.

Каждая из следующих \(q\) строк содержит два целых числа \(l_j\) и \(r_j\) (\(1 \le l_j < r_j \le n\)) — описание \(j\)-го запроса.

Гарантируется, что сумма \(n\) и сумма \(q\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) чисел, где \(j\)-е число равно стоимости массива \(a_{l_j}, a_{l_j + 1}, \ldots, a_{r_j}\).

Примечание

В первом наборе входных данных массив \(a\) выглядит так:

\(110_2, 001_2, 011_2, 010_2, 001_2\).

Поэтому ответы на запросы будут следующими:

  • \([1; 2]\): \(a_1 | a_2 = 110_2 | 001_2 = 111_2 = 7\);
  • \([2; 3]\): \(a_2 | a_3 = 001_2 | 011_2 = 011_2 = 3\);
  • \([2; 4]\): \(a_2 | a_3 = a_3 | a_4 = a_2 | a_4 = 011_2 = 3\);
  • \([2; 5]\): \(a_2 | a_5 = 001_2 = 1\).

Во втором наборе входных данных массив \(a\) выглядит так:

\(00_2, 10_2, 01_2, \underbrace{11\ldots 1_2}_{30}\) (\(a_4 = 2^{30} - 1\)).

Поэтому ответы на запросы будут следующими:

  • \([1; 2]\): \(a_1 | a_2 = 10_2 = 2\);
  • \([2; 3]\): \(a_2 | a_3 = 11_2 = 3\);
  • \([1; 3]\): \(a_1 | a_3 = 01_2 = 1\);
  • \([3; 4]\): \(a_3 | a_4 = 01_2 | \underbrace{11\ldots 1_2}_{30} = 2^{30} - 1 = 1073741823\).

B. Оптимальное разбиение

дп Структуры данных *2100

Дан массив \(a\), состоящий из \(n\) целых чисел. Ваша задача — разбить \(a\) на непустые подотрезки (всего существует \(2^{n-1}\) таких разбиений).

Пусть \(s=a_l+a_{l+1}+\ldots+a_r\). Значение подмассива \(a_l, a_{l+1}, \ldots, a_r\) равно:

  • \((r-l+1)\), если \(s>0\),
  • \(0\), если \(s=0\),
  • \(-(r-l+1)\), если \(s<0\).
Какую максимальную сумму значений подотрезков можно получить при оптимальном разбиении?
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^5\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(-10^9 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

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

Примечание

Пример \(1\): одно из оптимальных разбиений выглядит так: \([1, 2]\), \([-3]\). \(1+2>0\), поэтому величина \([1, 2]\) равна \(2\). \(-3<0\), поэтому величина \([-3]\) равна \(-1\). \(2+(-1)=1\).

Пример \(2\): возможное оптимальное разбиение выглядит так: \([0, -2, 3]\), \([-4]\), сумма величин подотрезков равна \(3+(-1)=2\).

E. Двухбуквенные строки

математика Строки Структуры данных *1200

Даны \(n\) строк, каждая имеет длину \(2\) и состоит из строчных латинских букв от 'a' до 'k'. Выведите количество пар индексов \((i, j)\) таких, что \(i < j\) и \(i\)-я строка с \(j\)-й строкой различаются ровно в одной позиции.

Другими словами найдите количество пар \((i, j)\) (\(i < j\)) таких, что \(i\)-я строка с \(j\)-й строкой различаются ровно в одной позиции \(p\) (\(1 \leq p \leq 2\)), то есть \({s_{i}}_{p} \neq {s_{j}}_{p}\).

Ответ может не влезать в 32-разрядный целочисленный тип, поэтому вам следует использовать 64-разрядные целые числа, такие как long long в C++, чтобы избежать переполнения целочисленного типа.

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Далее идут описания наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество строк.

Далее следуют \(n\) строк, \(i\)-я из которых содержит единственную строку \(s_i\) длины \(2\), состоящую из строчных латинских букв от 'a' до 'k'.

Гарантируется что сумма \(n\) по всем наборам не превосходит \(10^5\).

Выходные данные

Для каждого набора выведите единственное число — количество пар \((i, j)\) (\(i < j\)) таких, что \(i\)-я строка с \(j\)-й строкой различаются ровно в одной позиции \(p\) (\(1 \leq p \leq 2\)), то есть \({s_{i}}_{p} \neq {s_{j}}_{p}\).

Пожалуйста, обратите внимание, что ответ для некоторых тестовых примеров не будет помещаться в 32-разрядный целочисленный тип, поэтому вы должны использовать по крайней мере 64-разрядный целочисленный тип в вашем языке программирования (например, long long для C++).

Примечание

В первом примере ровно в одной позиции различаются следующие пары: («ab», «cb»), («ab», «db»), («ab», «aa»), («cb», «db») and («cb», «cc»).

Во втором примере ровно в одной позиции различаются следующие пары: («aa», «ac»), («aa», «ca»), («cc», «ac»), («cc», «ca»), («ac», «aa») and («ca», «aa»).

В третьем примере нет пар, удовлетворяющих условиям.

F. Съедая конфеты

Бинарный поиск жадные алгоритмы Структуры данных *1100

Есть \(n\) конфет разложенных слева направо на столе, конфеты пронумерованы слева направо. Вес \(i\)-й конфеты равняется \(w_i\). Алиса и Боб едят конфеты.

Алиса может съесть любое количество конфет слева (она ест их подряд и не может пропускать конфеты).

Боб может съесть любое количество конфет справа (он ест их подряд и не может пропускать конфеты).

Если Алиса съела конфету, то Боб уже не сможет её съесть (и наоборот).

Они хотят поделить конфеты честно. Поэтому суммарные веса съеденных ими конфет должны быть равны. Какое наибольшее суммарное количество конфет они могут съесть в таком случае?

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит единственное целое число \(n\) (\(1 \leq n \leq 2\cdot10^5\)) — количество конфет на столе.

Вторая строка каждого набора содержит \(n\) чисел \(w_1, w_2, \dots, w_n\) (\(1 \leq w_i \leq 10^4\)) — веса конфет от самой левой до самой парвой.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора выведите единственное число — максимальное количество, которое могут съесть Алиса и Боб, соблюдая условие.

Примечание

В первом примере Алиса съест одну конфету слева, а Боб съест одну конфету справа. Нет лучшего способа съесть набор конфет одинакового веса. Ответ \(2\), так как они съедят суммарно две конфеты.

Во втором примере Алиса съест первые три конфеты слева (суммарным весом \(7\)), а Боб съест первые три конфеты справа (суммарным весом \(7\)). Они не могут съесть больше конфет, так как все конфеты съедены. Ответ равен \(6\), так как они съели суммарно шесть конфет.

В третьем примере Алиса и Боб не могут съесть наборы конфет одинакового ненулевого веса, поэтому ответ равен \(0\).

В четвертом примере Алиса съест конфеты весом \([7, 3, 20]\), а Боб съест конфеты весом \([10, 8, 11, 1]\), каждый из них съест набор конфет суммарным весом \(30\). Лучшего способа съесть конфеты нет, поэтому ответ \(7\).

D. Волшебники и дороги

графы жадные алгоритмы Паросочетания разделяй и властвуй Структуры данных *3000

В некоторой стране живут волшебники. Они любят строить города и дороги.

Раньше в стране было k городов, j-ый (1 ≤ j ≤ k) был расположен в точке (xj, yj). Было решено наколдовать еще n - k городов. Причем i-ый (k < i ≤ n) город колдовался в точку с координатами (xi, yi):

  • xi = (a·xi - 1 + bmod (109 + 9)
  • yi = (c·yi - 1 + dmod (109 + 9)

Здесь a, b, c, d — простые числа. Причем a ≠ c, b ≠ d.

После постройки всех n городов, волшебники заметили удивительное свойство. Для любых двух различных городов с номерами i и j: xi ≠ xj и yi ≠ yj.

Города построены, пора строить дороги! Было решено использовать самое сложное (и, конечно же, самое мощное) заклинание для постройки дорог. C использованием этого заклинания, между городами u, v (yu > yv) проводится дорога тогда и только тогда, когда для любого города w, лежащего строго внутри уголка на точках u, v (см. ниже), есть город s, не лежащий в уголке, который находится по x-координате строго между w и u и при этом ys > yv.

Уголком на точках p2(x2, y2), p1(x1, y1) (y2 > y1) называется множество точек (x, y), для которых выполнено хотя бы одно из двух условий:

  • min(x1, x2) ≤ x ≤ max(x1, x2) и y ≥ y1
  • y1 ≤ y ≤ y2 и (x - x2)·(x1 - x2) ≥ 0
На рисунке изображены примеры уголков

Для того, чтобы опробовать заклинание, оно будет применено ко всем городам, лежащим по x-координате в отрезке [L, R]. После постройки дорог руководство страны хочет выбрать как можно больше пар городов, соединенных дорогой, так, что никакой город не лежит в двух или более парах. Вам предлагается для каждого из m предложенных вариантов выбора значений L, R посчитать максимальное количество таких пар после постройки дорог. Обратите внимание, что города, не лежащие в отрезке [L, R] по x-координате, никак не влияют на постройку дорог.

Входные данные

В первой строке через пробел записаны два целых числа n, k (1 ≤ k ≤ n ≤ 105, k ≤ 30). В следующих k строках записаны координаты точек расположения городов с первого по k-ый. В j-й строке записана через пробел пара целых чисел xj, yj (0 ≤ xj, yj < 109 + 9) — координаты j-го города.

В следующей строке через пробел записаны целые числа a, b, c, d (2 ≤ a, b, c, d < 109 + 9). Гарантируется, что эти числа простые, а так же, что a ≠ c, b ≠ d.

Гарантируется, что для любых двух различных городов с номерами i и j, xi ≠ xj и yi ≠ yj.

В следующей строке записано целое число m (1 ≤ m ≤ 105) — количество вариантов постройки дорог. В следующих m строках через пробел записаны пары целых чисел Li, Ri (0 ≤ Li ≤ Ri < 109 + 9) — варианты выбора городов, для постройки дорог.

Выходные данные

Для каждой пары чисел Li, Ri выведите ответ на задачу в отдельной строке. Ответы для пар выводите в том порядке, в котором пары заданы во входных данных.

Примечание

В первом примере дороги соединяют города в цепочку в порядке возрастания x.

Во втором примере оставшиеся 5 городов будут построены в точках (5,  11); (20,  263098); (65,  292514823); (200,  76958738); (605,  622120197).

C. Где пицца?

графы математика поиск в глубину и подобное реализация снм Структуры данных *1400

Хоссам в попытках найти пиццу наткнулся на две перестановки \(a\) и \(b\) длины \(n\).

Вспомним, что перестановкой называется массив из \(n\) различных чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, а \([1,2,2]\) — не перестановка (\(2\) встречается дважды), и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве есть число \(4\)).

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

Более конкретно, он смешал перестановки, получив массив \(c\) следующим образом.

  • Для всех \(i\) (\(1\le i\le n\)), он сделал \(c_i=a_i\) или \(c_i=b_i\).
  • Массив \(c\) является перестановкой.

Вы знаете две перестановки \(a\) и \(b\) и значения на некоторых позициях в \(c\). Пожалуйста, посчитайте количество различных перестановок \(c\), не противоречащих описанному процессу и известным значениям. Так как ответ может быть большим, выведите его по модулю \(10^9+7\).

Гарантируется, что существует хотя бы одна перестановка \(c\), удовлетворяющая всем ограничениям.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 10^5\)) — длину перестановок.

Следующая строка содержит \(n\) различных чисел \(a_1,a_2,\ldots,a_n\) (\(1\le a_i\le n\)) — первую перестановку.

Следующая строка содержит \(n\) различных чисел \(b_1,b_2,\ldots,b_n\) (\(1\le b_i\le n\)) — вторую перестановку.

Следующая строка содержит \(n\) целых чисел \(d_1,d_2,\ldots,d_n\) (\(d_i\) равно \(0\), \(a_i\), или \(b_i\)) — описание известных значений \(c\). Если \(d_i=0\), то про значение \(c_i\) ничего не известно. Иначе \(c_i=d_i\).

Гарантируется, что существует хотя бы одна перестановка \(c\), удовлетворяющая всем ограничениям.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество различных перестановок \(c\) по модулю \(10^9+7\).

Примечание

В первом наборе входных данных подходят \(4\) перестановки: \([2,3,1,4,5,6,7]\), \([2,3,1,7,6,5,4]\), \([2,3,1,4,6,5,7]\), \([2,3,1,7,5,6,4]\).

Во втором наборе входных данных подходит только одна перестановка: \([1]\).

В третьем наборе входных данных подходят \(2\) перестановки: \([6,5,2,1,4,3]\), \([6,5,3,1,4,2]\).

В четвертом наборе входных данных подходят \(2\) перестановки: \([1,2,8,7,4,3,6,5]\), \([1,6,4,7,2,3,8,5]\).

В пятом наборе входных данных подходит только одна перестановка: \([1,9,2,3,4,10,8,6,7,5]\).

H. Зигзаг

жадные алгоритмы Конструктив Структуры данных *2700

У вас есть бинарная строка \(a\) длины \(n\), состоящая только из цифр \(0\) и \(1\).

Вам даны \(q\) запросов. В \(i\)-м запросе даны два индекса \(l\) и \(r\) такие, что \(1 \le l \le r \le n\).

Пусть \(s=a[l,r]\). Вам разрешено выполнять следующую операцию над \(s\):

  1. Выберите два индекса \(x\) и \(y\) такие, что \(1 \le x \le y \le |s|\). Пусть \(t\)  — подстрока \(t = s[x, y]\). Тогда для всех \(1 \le i \le |t| - 1\) должно выполняться условие \(t_i \neq t_{i+1}\). Заметим, что \(x = y\) всегда является допустимой подстрокой.
  2. Удалите подстроку \(s[x, y]\) из \(s\).

Для каждого из \(q\) запросов найдите минимальное количество операций, необходимое для превращения \(s\) в пустую строку.

Напомним, что для строки \(s\), \(s[l,r]\) обозначает подотрезок \(s_l,s_{l+1},\ldots,s_r\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10 ^ 5\))  — длину бинарной строки \(a\) и количество запросов соответственно.

Вторая строка содержит бинарную строку \(a\) длины \(n\) (\(a_i \in \{0, 1\}\)).

Каждая из следующих \(q\) строк содержит два целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\))  — обозначающие подстроку каждого запроса.

Выходные данные

Выведите \(q\) строк, в \(i\)-й строке выведите минимальное количество операций, необходимых для \(i\)-го запроса.

Примечание

В первом примере,

  1. Подстрока равна \(\texttt{101}\), поэтому мы можем сделать одну операцию, чтобы сделать подстроку пустой.
  2. Подстрока равна \(\texttt{11011}\), поэтому мы можем сделать одну операцию над \(s[2, 4]\), чтобы получить \(\texttt{11}\), а затем использовать еще две операции, чтобы сделать подстроку пустой.
  3. Подстрока  — \(\texttt{011}\), поэтому мы можем сделать одну операцию над \(s[1, 2]\), чтобы получить \(\texttt{1}\), а затем использовать еще одну операцию, чтобы сделать подстроку пустой.

I. PermutationForces

жадные алгоритмы Структуры данных *3000

У вас есть перестановка \(p\) целых чисел от \(1\) до \(n\).

У вас есть сила \(s\) и вы будете выполнять следующую операцию несколько раз:

  • Выберите индекс \(i\) такой, что \(1 \leq i \leq |p|\) и \(|i-p_i| \leq s\).
  • Для всех \(j\) таких, что \(1 \leq j \leq |p|\) и \(p_i<p_j\), заменить \(p_j\) на \(p_j-1\).
  • Удалить \(i\)-й элемент из \(p\). Формально, заменить \(p\) на \([p_1,\ldots,p_{i-1},p_{i+1},\ldots,p_n]\).

Можно показать, что независимо от того, какое число \(i\) вы выбрали, после всех операций \(p\) будет перестановкой целых чисел от \(1\) до \(|p|\).

Вы хотите превратить \(p\) в пустую перестановку. Найдите минимальную силу \(s\), которая позволит вам это сделать.

Входные данные

Первая строка ввода содержит одно целое число \(n\) (\(1 \leq n \leq 5 \cdot 10^5\))  — длину перестановки \(p\).

Вторая строка ввода содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\))  — элементы перестановки \(p\).

Гарантируется, что все элементы в \(p\) различны.

Выходные данные

Выведите минимальную необходимую силу \(s\).

Примечание

В первом примере минимальное требуемое значение \(s\) равно \(1\).

Вот как мы можем преобразовать \(p\) в пустую перестановку с \(s=1\):

  • В первую операцию можно выбрать только \(i=2\), так как при любом другом значении \(i\) условие \(|i-p_i| \leq s\) не будет выполнено. При \(i=2\), \(p\) изменится на \([2,1]\).
  • Во вторую операцию, если выбрать \(i=1\), то \(p\) изменится на \([1]\).
  • В третью операциб, вы выбираете \(i=1\), тогда \(p\) будет изменено на \([~]\).

Можно показать, что при \(s=0\) невозможно преобразовать \(p\) в пустую перестановку.

F. Упорядочивание рабочего стола

жадные алгоритмы реализация Структуры данных *1800

Ваш друг Иван попросил вас помочь упорядочить его рабочий стол. Рабочий стол может быть представлен как прямоугольная матрица размера \(n \times m\), состоящая из символов '.' (пустая клетка рабочего стола) и '*' (иконка).

Рабочий стол называется хорошим, если все его иконки находятся на каком-то префиксе столбцов и, возможно, префиксе следующего столбца (и не существует иконок за пределами данной фигуры). Другими словами, какое-то количество первых столбцов будет заполнено иконками, а также, возможно, какое-то количество первых клеток следующего (после последнего полного столбца) столбца будет также заполнено иконками (и все иконки на рабочем столе будут принадлежать этой фигуре). Это выглядит довольно похоже на расположение иконок на рабочем столе в реальной жизни.

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

Иван любит добавлять иконки на свой рабочий стол, а также удалять их, поэтому он просит вас ответить на \(q\) запросов: чему равно минимальное количество ходов, необходимое для того, чтобы сделать рабочий стол хорошим после добавления/удаления одной иконки?

Заметьте, что запросы остаются навсегда и меняют состояние рабочего стола.

Входные данные

Первая строка входных данных содержит три целых числа \(n\), \(m\) и \(q\) (\(1 \le n, m \le 1000; 1 \le q \le 2 \cdot 10^5\)) — количество строк в рабочем столе, количество столбцов в рабочем столе и количество запросов, соответственно.

Следующие \(n\) строк содержат описание рабочего стола. В \(i\)-й из них находится \(m\) символов '.' и '*' — описание \(i\)-й строки рабочего стола.

Следующие \(q\) строк описывают запросы. В \(i\)-й из них находятся два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i \le n; 1 \le y_i \le m\)) — позиция клетки, которая меняет свое состояние (если эта клетка содержала иконку, то эта иконка удаляется, иначе в этой клетке появляется иконка).

Выходные данные

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

F. Самый длинный страйк

жадные алгоритмы реализация сортировки Структуры данных *1300

Дан массив \(a\) длины \(n\) и целое число \(k\), вам нужно найти два любых числа \(l\) и \(r\) (\(l \leq r\)) таких, что:

  • Для каждого \(x\) \((l \leq x \leq r)\), \(x\) содержится в \(a\) хотя бы \(k\) раз (т.е. \(k\) или более элементов массива равны \(x\)).
  • Значение \(r-l\) максимально среди возможных.

Если не существует подходящих чисел, выведите -1.

Например, если \(a=[11, 11, 12, 13, 13, 14, 14]\) и \(k=2\), то:

  • для \(l=12\), \(r=14\) первое условие не выполнено, так как \(12\) содержится менее \(k=2\) раз.
  • для \(l=13\), \(r=14\) первое условие выполнено, так как \(13\) содержится хотя бы \(k=2\) раз в \(a\) и \(14\) содержится хотя бы \(k=2\) раз в \(a\).
  • для \(l=11\), \(r=11\) первое условие выполнено, так как \(11\) содержится хотя бы \(k=2\) раз в \(a\).

Пара \(l\) и \(r\) для которой выполнено первое условие и \(r-l\) максимально — это пара \(l = 13\), \(r = 14\).

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Затем следуют описания наборов.

Первая строка каждого набора содержит целые числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \leq k \leq n\)) — длина массива \(a\) и минимальное количество раз, которое должно встретиться каждое число в диапазоне \([l, r]\), соответственно.

Затем следует единственная строка, состоящая из \(n\) целых чисел — элементов массива \(a\) (\(1 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(2\) числа, \(l\) и \(r\) которые удовлетворяют условиям, или «-1» если таких не существует.

Если ответов может быть несколько, выведите любой.

H2. Максимизация пересечений (сложная версия)

разделяй и властвуй сортировки Структуры данных *1500

Единственная разница между двумя версиями состоит в том, что в этой версии \(n \leq 2 \cdot 10^5\) и сумма по \(n\) по всем наборам входных данных теста не превосходит \(2 \cdot 10^5\).

Терминал — это ряд из \(n\) равных отрезков, пронумерованных от \(1\) до \(n\) по порядку. Есть два терминала, один над другим.

Вам дан массив \(a\) длины \(n\). Для всех \(i = 1, 2, \dots, n\) должен быть прямой провод из некоторой точки на отрезке \(i\) верхнего терминала в некоторую точку на отрезке \(a_i\) нижнего терминала. Например, на следующих рисунках показаны два возможных соединения, при \(n=7\) и \(a=[4,1,4,6,7,7,5]\).

Пересечение происходит, когда два провода имеют общую точку. На картинке выше пересечения обведены красным.

Какое максимальное количество пересечений может быть при оптимальном размещении проводов?

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длина массива.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq n\)) — элементы массива.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выведите единственное целое число — максимальное количество пересечений, при оптимальном расположении проводов.

Примечание

Первый пример показан на втором рисунке в условии.

Во втором примере при единственно возможном соединении появляется пересечение двух проводов, поэтому ответ равен \(1\).

В третьем тестовом примере единственно возможное соединение состоит из одного провода, поэтому ответ равен \(0\).

A. Tokitsukaze и странное неравенство

дп Перебор Структуры данных *1600

У Tokitsukaze есть перестановка \(p\) длины \(n\). Напомним, что перестановкой \(p\) длины \(n\) называется последовательность \(p_1, p_2, \ldots, p_n\), состоящая из \(n\) различных целых чисел, каждое из которых от \(1\) до \(n\) (\(1 \leq p_i \leq n\)).

Она хочет знать, сколько различных наборов индексов \([a,b,c,d]\) (\(1 \leq a < b < c < d \leq n\)) в этой перестановке удовлетворяют следующим двум неравенствам:

\(p_a < p_c\) и \(p_b > p_d\).

Обратите внимание, что два набора \([a_1,b_1,c_1,d_1]\) и \([a_2,b_2,c_2,d_2]\) считаются различными, если \(a_1 \ne a_2\), или \(b_1 \ne b_2\), или \(c_1 \ne c_2\), или \(d_1 \ne d_2\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Каждый набор входных данных состоит из двух строк.

В первой строке записано одно целое число \(n\) (\(4 \leq n \leq 5000\)) — длина перестановки \(p\).

Вторая строка содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\)) — перестановка \(p\).

Гарантируется, что сумма \(n\) по всем тестам не превышает \(5000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество различных наборов индексов \([a,b,c,d]\).

Примечание

В первом наборе входных данных имеется \(3\) различных набора \([a,b,c,d]\).

\(p_1 = 5\), \(p_2 = 3\), \(p_3 = 6\), \(p_4 = 1\), где \(p_1 < p_3\) и \(p_2 > p_4\) удовлетворяет неравенству, поэтому один из \([a,b,c,d]\) наборов — это \([1,2,3,4]\).

Точно так же два других набора — это \([1,2,3,6]\) и \([2,3,5,6]\).

B. Tokitsukaze и собрание

математика реализация Структуры данных *1700

Tokitsukaze устраивает собрание. В зале собрания \(n\) рядов и \(m\) столбцов сидений.

На собрании присутствует ровно \(n \cdot m\) студентов, в том числе несколько непослушных студентов и несколько серьезных студентов. Студенты нумеруются от \(1\) до \(n\cdot m\). Студенты входят в зал по порядку. Когда \(i\)-й студент войдет в зал, он сядет в \(1\)-й столбец \(1\)-го ряда, а уже сидящие студенты отодвинутся на одно место назад. В частности, студент, сидящий в \(j\)-м (\(1\leq j \leq m-1\)) столбце \(i\)-го ряда, переместится в \((j+1)\)-й столбец \(i\)-го ряда, а ученик, сидящий в \(m\)-м столбце \(i\)-го ряда, переместится в \(1\)-й столбец \((i+1)\)-го ряда.

Например, есть конференц-зал с \(2\) рядами и \(2\) столбцами мест, как показано ниже:

В зал войдут \(4\) студента по порядку, представленному в виде двоичной строки «1100», из которых '0' представляет непослушных студентов, а '1' представляет серьезных. Порядок смены мест в зале собрания:

Обозначим ряд или столбец как хорошие тогда и только тогда, когда в этом ряду или столбце есть хотя бы один серьезный студент. Пожалуйста, предскажите количество хороших рядов и столбцов сразу после того, как \(i\)-й студент войдет в зал, для всех \(i\).

Входные данные

Первая строка содержит единственное положительное целое число \(t\) (\(1 \leq t \leq 10\,000\)) — количество наборов входных данных.

Для каждого набора входных данных в первой строке записаны два целых числа \(n\), \(m\) (\(1 \leq n,m \leq 10^6\); \(1 \leq n \cdot m \leq 10^6\)), обозначающие наличие \(n\) рядов и \(m\) столбцов мест в зале.

Вторая строка содержит двоичную строку \(s\) длины \(n \cdot m\), состоящую только из нулей и единиц. Если \(s_i\) равно '0', то \(i\)-й студент является непослушным, а если \(s_i\) равно '1', то \(i\)-й студен является серьезным.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите в одной строке \(n \cdot m\) целых чисел — количество хороших рядов и столбцов сразу после того, как \(i\)-й студент войдет в конференц-зал.

Примечание

Первый набор входных данных показан в условии.

После того, как \(1\)-й студент входит в зал, остается \(2\) хороших ряда и столбца: \(1\)-й ряд и \(1\)-й столбец.

После того, как \(2\)-й студент входит в зал, остается \(3\) хороших ряда и столбца: \(1\)-й ряд, \(1\)-й столбец и \(2\)-й столбец.

После того, как \(3\)-й студент входит в зал, все \(4\) ряда и столбца хорошие.

После того, как \(4\)-й студент входит в зал, остается \(3\) хороших ряда и столбца: \(2\)-й ряд, \(1\)-й столбец и \(2\)-й столбец.

E. Tokitsukaze и красивые подотрезки

Структуры данных *2900

У Tokitsukaze есть перестановка \(p\) длины \(n\).

Назовем подотрезок \([l,r]\) красивым, если существуют \(i\) и \(j\), удовлетворяющие \(p_i \cdot p_j = \max\{p_l, p_{l+1}, \ldots, p_r \}\), где \(l \leq i < j \leq r\).

Также у Tokitsukaze есть \(q\) запросов, в \(i\)-м запросе она хочет узнать, сколько существует красивых подотрезков \([x,y]\) на отрезке \([l_i,r_i]\) (т. е. \(l_i \leq x \leq y \leq r_i\)).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1\leq n \leq 2 \cdot 10^5\); \(1 \leq q \leq 10^6\)) — длина перестановки \(p\) и количество запросов.

Вторая строка содержит \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\)) — перестановка \(p\).

Каждая из следующих \(q\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i \leq r_i \leq n\)) — отрезок \([l_i,r_i]\) этого запроса.

Выходные данные

Для каждого запроса выведите одно целое число — количество красивых подотрезков на отрезке \([l_i,r_i]\).

Примечание

В первом примере для первого запроса есть \(2\) красивых подотрезка — \([1,2]\) и \([1,3]\).

B. Задача каменного века

реализация Структуры данных *1200

Когда-то давно Миша и Миша решили придумать интересную задачу на очередной этап РОИ (редкая олимпиада по информатике). Один из них придумал прототип задачи, но другой своровал идею и предложил задачу на другой этап этой же олимпиады. С тех пор первый Миша ждал возможности предложить оригинальную идею на какую-либо другую олимпиаду... Ждал Миша до этого момента!

Вам дан массив \(a\) из \(n\) целых чисел. Также даны \(q\) запросов двух типов:

  • Заменить \(i\)-й элемент массива на число \(x\).
  • Заменить каждый элемент массива на число \(x\).

После выполнения каждого запроса вы должны вычислить сумму всех элементов в массиве.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — количество элементов в массиве и количество запросов, соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Каждая из следующих \(q\) строк содержит описание очередного запроса. Описание запроса начинается с целого числа \(t\) (\(t \in \{1, 2\}\)), которое обозначает тип запроса:

  • Если \(t = 1\), далее следуют два целых числа \(i\) и \(x\) (\(1 \le i \le n\), \(1 \le x \le 10^9\)) — позиция элемента, который нужно изменить, и его новое значение.
  • Если \(t = 2\), далее следует целое число \(x\) (\(1 \le x \le 10^9\)) — число, на которое нужно заменить каждый элемент массива.
Выходные данные

Выведите \(q\) целых чисел, каждое в отдельной строке. В \(i\)-й строке нужно вывести сумму всех элементов массива после выполнения первых \(i\) запросов.

Примечание

Рассмотрим массив из примера и результат выполнения каждого запроса:

  1. Изначально массив равен \([1, 2, 3, 4, 5]\).
  2. После выполнения первого запроса массив равен \([5, 2, 3, 4, 5]\). Сумма всех элементов равна \(19\).
  3. После выполнения второго запроса массив равен \([10, 10, 10, 10, 10]\). Сумма всех элементов равна \(50\).
  4. После выполнения третьего запроса массив равен \([10, 10, 10, 10, 11\)]. Сумма всех элементов равна \(51\).
  5. После выполнения четвертого запроса массив равен \([10, 10, 10, 1, 11]\). Сумма всех элементов равна \(42\).
  6. После выполнения пятого запроса массив равен \([1, 1, 1, 1, 1]\). Сумма всех элементов равна \(5\).

C. Ладьи-защитники

реализация Структуры данных *1400

У вас есть квадратная шахматная доска размера \(n \times n\). Строки пронумерованы сверху вниз числами от \(1\) до \(n\), а столбцы — слева направо числами от \(1\) до \(n\). Таким образом, каждая клетка доски задается парой целых чисел \((x, y)\) (\(1 \le x, y \le n\)), где \(x\) — номер строки, а \(y\) — номер столбца.

От вас требуется выполнить \(q\) запросов трех типов:

  • Поставить новую ладью в клетку \((x, y)\).
  • Убрать ладью из клетки \((x, y)\), куда ранее была поставлена ладья.
  • Проверить, верно ли, что каждая клетка подпрямоугольника \((x_1, y_1) - (x_2, y_2)\) доски атакована хотя бы одной ладьей.

Подпрямоугольником называется множество клеток доски \((x, y)\), для которых верно, что \(x_1 \le x \le x_2\) и \(y_1 \le y \le y_2\).

Напомним, что клетка \((a, b)\) атакована ладьей, находящейся в клетке \((c, d)\), если \(a = c\) или \(b = d\). В частности, клетка, в которой находится ладья, атакована этой ладьей.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n \le 10^5\), \(1 \le q \le 2 \cdot 10^5\)) — размер доски и также количество запросов, соответственно.

Каждая из следующих \(q\) строк содержит в себе описание очередного запроса. Описание запроса начинается с целого числа \(t\) (\(t \in \{1, 2, 3\}\)), которое обозначает тип запроса:

  • Если \(t = 1\), далее следуют два целых числа \(x\) и \(y\) (\(1 \le x, y \le n\)) — координаты клетки, на которую нужно поставить новую ладью. Гарантируется, что в момент данного запроса в клетке \((x, y)\) не стоит ладья.
  • Если \(t = 2\), далее следуют два целых числа \(x\) и \(y\) (\(1 \le x, y \le n\)) — координаты клетки, с которой нужно убрать ладью. Гарантируется, что в момент данного запроса в клетке \((x, y)\) стоит ладья.
  • Если \(t = 3\), далее следуют четыре целых числа \(x_1, y_1, x_2\) и \(y_2\) (\(1 \le x_1 \le x_2 \le n\), \(1 \le y_1 \le y_2 \le n\)) — подпрямоугольник, для которого нужно проверить, верно ли, что каждая его клетка атакована хотя бы одной ладьей.

Гарантируется, что среди \(q\) запросов есть хотя бы один запрос третьего типа.

Выходные данные

Для каждого запроса третьего типа в отдельной строке выведите «Yes» (без кавычек), если каждая клетка данного подпрямоугольника атакована хотя бы одной ладьей.

В противном случае выведите «No» (без кавычек).

Примечание

Рассмотрим пример. После первых двух запросов доска будет выглядеть следующим образом (буквой \(R\) обозначены клетки, в которых находится ладья, а зеленым выделен прямоугольник запроса третьего типа):

Доска после выполнения третьего и четвертого запросов:

Доска после выполнения пятого и шестого запросов:

Доска после выполнения седьмого и восьмого запросов:

Доска после выполнения последних двух запросов:

E. Приключения в лабиринте

дп кратчайшие пути матрицы Структуры данных *2600

Вы нашли карту лабиринта довольно странной формы. Карта представляет собой сетку, разделенную на \(n\) строк и \(n\) столбцов. Строки карты пронумерованы от \(1\) до \(n\) снизу вверх. Столбцы карты пронумерованы от \(1\) до \(n\) слева направо.

В лабиринте есть \(n\) слоев. Первый слой — это левый нижний угол (ячейка \((1, 1)\)). Второй слой состоит из всех ячеек, которые внутри сетки и смежны с первым слоем по стороне или по углу. Третий слой состоит из всех ячеек, которые внутри сетки и смежны со вторым слоем по стороне или по углу.

Лабиринт из \(5\) слоев, например, выглядит следующим образом:

Слои отделены друг от друга стенами. Однако, в этих стенах есть двери.

В каждом слое (кроме слоя \(n\)) есть ровно две двери в следующий слой. Одна дверь размещена на верхней стене слоя, а другая дверь размещена на правой стене слоя. Для каждого слоя от \(1\) до \(n-1\) вам даны позиции этих двух дверей. Через эти двери можно ходить в обоих направлениях: либо из слоя \(i\) в слой \(i+1\), либо из слоя \(i+1\) в слой \(i\).

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

Вам нужно обработать \(m\) запросов следующего вида: какое минимальное количество ходов необходимо сделать, чтобы дойти из клетки \((x_1, y_1)\) в клетку \((x_2, y_2)\)?

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 10^5\)) — количество слоев в лабиринте.

В \(i\)-й из следующих \(n-1\) строк записаны четыре целых числа \(d_{1,x}, d_{1,y}, d_{2,x}\) and \(d_{2,y}\) (\(1 \le d_{1,x}, d_{1,y}, d_{2,x}, d_{2,y} \le n\)) — координаты дверей. Обе ячейки находятся на \(i\)-м слое. Первая ячейка смежна с верхней стеной \(i\)-го слоя по стороне — эта сторона — это место двери. Вторая ячейка смежна с правой стеной \(i\)-го слоя по стороне — эта сторона — это место двери.

В следующей строке записано одно целое число \(m\) (\(1 \le m \le 2 \cdot 10^5\)) — количество запросов.

В \(j\)-й из следующих \(m\) строк записаны четыре целых числа \(x_1, y_1, x_2\) and \(y_2\) (\(1 \le x_1, y_1, x_2, y_2 \le n\)) — координаты ячеек в \(j\)-м запросе.

Выходные данные

На каждый запрос выведите одно целое число — минимальное количество ходов, которое необходимо сделать, чтобы дойти из клетки \((x_1, y_1)\) в клетку \((x_2, y_2)\).

Примечание

Здесь изображена карта лабиринта из второго примера. Двери отмечены красным.

F. Уникальные вхождения

Деревья дп поиск в глубину и подобное разделяй и властвуй снм Структуры данных *2300

Задано дерево, состоящее из \(n\) вершин. На каждом ребре написано целое число.

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

Посчитайте сумму \(f(v, u)\) по всем парам вершин \(v\) и \(u\), для которых \(1 \le v < u \le n\).

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 5 \cdot 10^5\)) — количество вершин в дереве.

В каждой из следующих \(n-1\) строк записаны три целых числа \(v, u\) и \(x\) (\(1 \le v, u, x \le n\)) — описание ребра: вершины, которое оно соединяет, и значение, написанное на нем.

Заданные ребра образуют дерево.

Выходные данные

Выведите одно целое число — сумму \(f(v, u)\) по всем парам вершин \(v\) и \(u\) таким, что \(v < u\).

F. Поток минимальной стоимости?

графы жадные алгоритмы Потоки сортировки Структуры данных *2700

Вам даны два массива \(a\) и \(b\) целых чисел (\(b_i \neq 0\) и \(|b_i| \leq 10^9\)). Массив \(a\) отсортирован в неубывающем порядке.

Стоимость подмассива \(a[l:r]\) определяется следующим образом:

  • Если \( \sum\limits_{j = l}^{r} b_j \neq 0\), то стоимость не определена.

  • Иначе:

    • Постройте двудольный поточный граф с \(r-l+1\) вершинами, помеченными от \(l\) до \(r\), причем все вершины с \(b_i \lt 0\) расположены слева, а с \(b_i \gt 0\)  — справа. Для каждых \(i, j\) таких, что \(l \le i, j \le r\), \(b_i<0\) и \(b_j>0\), нарисуйте ребро от \(i\) к \(j\) с бесконечной пропускной способностью и стоимостью единицы потока равной \(|a_i-a_j|\).
    • Добавьте еще две вершины: источник \(S\) и сток \(T\).
    • Для каждого \(i\) такого, что \(l \le i \le r\) и \(b_i<0\), добавьте ребро от \(S\) к \(i\) со стоимостью \(0\) и пропускной способностью \(|b_i|\).
    • Для каждого \(i\) такого, что \(l \le i \le r\) и \(b_i>0\), добавьте ребро от \(i\) к \(T\) со стоимостью \(0\) и пропускной способностью \(|b_i|\).
    • Стоимость подмассива определяется как минимальная стоимость максимального потока из \(S\) в \(T\).

Вам даны \(q\) запросов в виде двух целых чисел \(l\) и \(r\). Вы должны вычислить стоимость подмассива \(a[l:r]\) для каждого запроса, по модулю \(10^9 + 7\).

Если вы не знаете, что означает минимальная стоимость максимального потока, обратитесь сюда.

Входные данные

Первая строка ввода содержит два целых числа \(n\) и \(q\) \((2 \leq n \leq 2\cdot 10^5, 1 \leq q \leq 2\cdot10^5)\)  — длину массивов \(a\), \(b\) и количество запросов.

Следующая строка содержит \(n\) целых чисел \(a_1,a_2 \ldots a_n\) (\(0 \leq a_1 \le a_2 \ldots \le a_n \leq 10^9)\)  — массив \(a\). Гарантируется, что \(a\) отсортирован в неубывающем порядке.

Следующая строка содержит \(n\) целых чисел \(b_1,b_2 \ldots b_n\) \((-10^9\leq b_i \leq 10^9, b_i \neq 0)\)  — массив \(b\).

В \(i\)-й из следующих \(q\) строк содержится два целых числа \(l_i,r_i\) \((1\leq l_i \leq r_i \leq n)\). Гарантируется, что \( \sum\limits_{j = l_i}^{r_i} b_j = 0\).

Выходные данные

Для каждого запроса \(l_i\), \(r_i\)  — выведите стоимость подмассива \(a[l_i:r_i]\) по модулю \(10^9 + 7\).

Примечание

В первом запросе, максимально возможный поток составляет \(1\), т.е. одна единица из источника в \(2\), затем одна единица из \(2\) в \(3\), затем одна единица из \(3\) в сток. Стоимость потока равна \(0 \cdot 1 + |2 - 4| \cdot 1 + 0 \cdot 1 = 2\).

Во втором запросе, максимально возможный поток снова составляет \(1\), т.е. от источника к \(7\), от \(7\) к \(6\) и от \(6\) к стоку со стоимостью \(0 \cdot |10 - 10| \cdot 1 + 0 \cdot 1 = 0\).

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

Максимальный поток составляет \(3\) при стоимости \(0 \cdot 3 + 1 \cdot 1 + 4 \cdot 2 + 0 \cdot 1 + 0 \cdot 2 = 9\).

В четвертом запросе, сеть потока выглядит следующим образом:

Минимальная стоимость максимального потока достигается следующим образом:

Максимальный поток в этой сети равен 4, а минимальная стоимость такого потока равна 15.

E. MEX против DIFF

Бинарный поиск жадные алгоритмы Конструктив Перебор Структуры данных *2100

У Тёти Люсине, как и у всех гениальных людей, имеются свои странности. Сегодня в качестве развлечения она решила посмотреть на противостояние двух могущественных функций. В зависимости от результата она решит, добавлять ли эти функции в CrowdScript.

Дан массив \(a\) из \(n\) неотрицательных целых чисел. За одну операцию вы можете заменить любое число в массиве на любое неотрицательное целое число.

Назовём стоимостью массива \(\operatorname{DIFF}(a) - \operatorname{MEX}(a)\), где \(\operatorname{MEX}\) множества чисел — это минимальное целое неотрицательное число, которого нет в множестве, а \(\operatorname{DIFF}\) — количество различных чисел в массиве.

Например, \(\operatorname{MEX}(\{1, 2, 3\}) = 0\), \(\operatorname{MEX}(\{0, 1, 2, 4, 5\}) = 3\).

Вам необходимо определить, какую минимальную стоимость массива \(a\) можно получить, если разрешено сделать не больше \(k\) операций.

Входные данные

В первой строке входных данных находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится два целых числа \(n\) и \(k\) (\(1 \le n \le 10^5\), \(0 \le k \le 10^5\)) — размер массива \(a\) и максимальное количество операций, которое можно сделать.

Во второй строке описания каждого набора входных данных находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальная стоимость, которую можно получить, сделав не больше \(k\) операций.

Примечание

В первом наборе входных данных не требуется делать какие-либо операции, чтобы минимизировать \(\operatorname{DIFF} - \operatorname{MEX}\).

Во втором наборе входных данных можно заменить \(5\) на \(1\). После этого массив \(a\) будет \([0,\, 2,\, 4,\, 1]\), \(\operatorname{DIFF} = 4\), \(\operatorname{MEX} = \operatorname{MEX}(\{0, 1, 2, 4\}) = 3\), поэтому ответ равен \(1\).

В третьем наборе входных данных один из возможных массивов \(a\) будет \([4,\, 13,\, 0,\, 0,\, 13,\, 1,\, 2]\), \(\operatorname{DIFF} = 5\), \(\operatorname{MEX} = 3\).

В четвертом наборе входных данных один из возможных массивов \(a\) будет \([1,\, 2,\, 3,\, 0,\, 0,\, 0]\).

F. Разнообразные отрезки

Структуры данных *2600

CrowdForces — большой проект с большими амбициями. Тётя Люсине об этом знает и делает всё для развития этого проекта. Не так давно она договорилась с админами самых разных платформ с задачами на программирование, чтобы использовать эти платформы для CrowdForces. Но ей в голову пришла ещё одна гениальная мысль: взять с каждой платформы случайную задачу и из задачи взять что-то своё. Собрав всё вместе, Тётя Люсине с улыбкой представляет вам свою собственную задачу, которую вам и предстоит решить.

Дан массив \(a\) из \(n\) целых чисел. Также вам даны \(m\) отрезков этого массива. Левая и правая границы \(j\)-го отрезка равны \(l_j\) и \(r_j\) соответственно.

Вам разрешается не более одного раза применить следующую операцию. Вы выбираете произвольный отрезок массива \(a\) и заменяете значения элементов на этом отрезке на любые (вы также можете не менять значения некоторых элементов на этом отрезке).

Ваша задача заключается в том, чтобы, применив такую операцию, значения элементов на каждом из данных \(m\) отрезков были различны. Более формально, для каждого \(1 \le j \le m\) среди элементов \(a_{l_{j}}, a_{l_{j}+1}, \ldots, a_{r_{j}-1}, a_{r_{j}}\) не должно быть одинаковых.

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — длина массива и количество отрезков соответственно.

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Каждая из следующих \(m\) строк содержит два целых числа \(l_j\) и \(r_j\) (\(1 \le l_j \le r_j \le n\)) — описание \(j\)-го отрезка.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превышают \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальную длину отрезка, к которому можно применить описанную в условии операцию, чтобы сделать элементы на всех заданных отрезках различными. Если можно не применять операцию, то выведите \(0\).

Примечание

В первом наборе входных данных можно применить операцию к отрезку \([1, 2]\) и сделать массив \(a = [5, 6, 2, 1, 3, 3, 5]\).

  • На отрезке \([1, 4]\) будут числа \([5, 6, 2, 1]\).
  • На отрезке \([4, 5]\) будут числа \([1, 3]\).
  • На отрезке \([2, 4]\) будут числа \([6, 2, 1, 3]\).

Таким образом на каждом из данных отрезков все числа будут различны. При этом нельзя заменить ровно одно число, чтобы на каждом из данных отрезков все числа были различны. Поэтому ответ равен \(2\).

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

В третьем наборе входных данных мы можем заменить первую \(5\) на \(1\). Тогда мы получим массив \([1, 7, 5, 6]\), в котором все числа различны, а значит, на каждом из данных отрезков все число также различны.

E. Лучшая задача о LIS

жадные алгоритмы Структуры данных *3500

Оказывается, это ровно \(100\)-я моя задача, которая появляется в каком-то соревновании по программированию. Значит, она должна быть особенной! А что может быть более особенным, чем очередная задача о LIS...

Вам дана перестановка \(p_1, p_2, \ldots, p_{2n+1}\) целых чисел от \(1\) до \(2n+1\). Вам нужно обработать \(q\) обновлений, где \(i\)-е обновление заключается в обмене местами \(p_{u_i}, p_{v_i}\).

После каждого обновления найдите любой циклический сдвиг \(p\) с \(LIS \le n\), или определите, что такого сдвига не существует. (Подробности см. в разделе выходных данных).

Здесь \(LIS(a)\) обозначает длину самой длинной строго возрастающей подпоследовательности \(a\).

Взломы в этой задаче отключены. Не спрашивайте почему.

Входные данные

Первая строка содержит два целых числа \(n, q\) (\(2 \le n \le 10^5\), \(1 \le q \le 10^5\)).

Вторая строка содержит \(2n+1\) целых чисел \(p_1, p_2, \ldots, p_{2n+1}\) (\(1 \le p_i \le 2n+1\), все \(p_i\) различны)  — элементы \(p\).

В \(i\)-й из следующих \(q\) строк содержится по два целых числа \(u_i, v_i\) (\(1 \le u_i, v_i \le 2n+1\), \(u_i \neq v_i\))  — обозначающие, что нужно поменять местами элементы \(p_{u_i}, p_{v_i}\) в \(i\)-м обновлении.

Выходные данные

После каждого обновления выведите любое \(k\) \((0 \le k \le 2n)\), такое, что длина самой длинной возрастающей подпоследовательности \((p_{k+1}, p_{k+2}, \ldots, p_{2n+1}, p_1, \ldots, p_k)\) не превышает \(n\), или \(-1\), если таких \(k\) нет.

Примечание

После первого обновления наша перестановка становится равна \((5, 2, 3, 4, 1)\). Мы можем показать, что все ее циклические сдвиги имеют \(LIS \ge 3\).

После второго обновления наша перестановка становится равна \((1, 2, 3, 4, 5)\). Мы можем показать, что все ее циклические сдвиги имеют \(LIS \ge 3\).

После третьего обновления наша перестановка становится равна \((1, 2, 3, 5, 4)\). Ее сдвиг на \(2\) равен \((3, 5, 4, 1, 2)\), и его \(LIS = 2\).

После четвертого обновления наша перестановка становится равна \((1, 2, 3, 4, 5)\). Мы можем показать, что все ее циклические сдвиги имеют \(LIS \ge 3\).

После пятого обновления наша перестановка становится равна \((4, 2, 3, 1, 5)\). Ее сдвиг на \(4\) равен \((5, 4, 2, 3, 1)\), и его \(LIS = 2\).

После пятого обновления наша перестановка становится равна \((4, 5, 3, 1, 2)\). Ее сдвиг на \(0\) равен \((4, 5, 3, 1, 2)\), и его \(LIS = 2\).

C. Sanae и гигантский робот

Бинарный поиск жадные алгоритмы Перебор снм сортировки Структуры данных *2500

Sanae сделала гигантского робота — Hisoutensoku, но с ним что-то не так. Что еще хуже, Sanae, кажется, не может понять, как его остановить, и она вынуждена исправлять это на лету.

Состояние робота можно представить массивом целых чисел длины \(n\). Изначально робот находится в состоянии \(a\). Она хочет превратить его в состояние \(b\).

Как отличный программист, Sanae владеет искусством копирования и вставки. За одну операцию она может выбрать некоторый отрезок из заданных отрезков, скопировать этот отрезок из \(b\) и вставить его в то же место робота, заменив исходное состояние на этих позициях. Однако она должна следить за тем, чтобы сумма \(a\) не менялась после каждой операции копирования на случай, если робот выйдет из строя. Формально Sanae может выбрать отрезок \([l,r]\) и сделать \(a_i = b_i\) (\(l\le i\le r\)), если \(\sum\limits_{i=1}^n a_i\) не изменится после применения операции.

Определите, может ли Sanae успешно перевести робота из начального состояния \(a\) в желаемое состояние \(b\) с помощью любых (возможно, ноль) операций.

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 2\cdot 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(m\) (\(2 \leq n\leq 2\cdot 10^5\), \(1 \leq m\leq 2\cdot 10^5\)) — длина \(a\), \(b\) и количество отрезков.

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \leq a_i \leq 10^9\)) — начальное состояние \(a\).

Третья строка содержит \(n\) целых чисел \(b_1,b_2,\ldots,b_n\) (\(1 \leq b_i \leq 10^9\)) — искомое состояние \(b\).

Затем следуют \(m\) строк, \(i\)-я строка содержит два целых числа \(l_i,r_i\) (\(1 \leq l_i < r_i \leq n\)) — отрезки, которые Sanae может скопировать и вставить.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10 ^ 5\).

Выходные данные

Для каждого теста выведите «YES» (без кавычек), если \(a\) можно превратить в \(b\), или «NO» (без кавычек) в противном случае.

Вы можете вывести «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» являются правильным ответом).

Примечание

В первом наборе входных данных один из возможных способов превратить \(a\) в \(b\):

Сначала выберите \([1,3]\). После операции \(a=[3,2,5,2,3]\).

Затем выберите \([2,5]\). После операции \(a=[3,2,5,4,1]=b\).

Во втором наборе входных данных можно показать, что невозможно превратить \(a\) в \(b\).

D. Милые числа

Бинарный поиск математика Перебор реализация снм Структуры данных *2900

Ran Yakumo симпатичная девочка, которая любит решать милые математические задачи.

Пусть \(f(x)\) будет минимальным квадратом строго большим, чем \(x\), и \(g(x)\) будет максимальным квадратом, не строго меньшим, чем \(x\). Например, \(f(1)=f(2)=g(4)=g(8)=4\).

Натуральное целое число \(x\) называется милым, если \(x-g(x)<f(x)-x\). Например, \(1,5,11\) это милые целые числа, а \(3,8,15\) нет.

Ran Yakumo дает вам массив \(a\) длины \(n\). Она хочет, чтобы вы нашли минимальное неотрицательное целое число \(k\), такое что \(a_i + k\) является милым числом для любого элемента массива \(a\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^6\)) — длина \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \leq a_1 \leq a_2 \leq \ldots \leq a_n \leq 2\cdot 10^6\)) — массив \(a\).

Выходные данные

Выведите одно целое число \(k\) — ответ на задачу.

Примечание

В первом тесте \(3\) не является красивым целым числом, поэтому \(k\ne 0\).

\(2,4,9,11\) являются милыми целыми числами, поэтому \(k=1\).

B. Странная перестановка

жадные алгоритмы Структуры данных *900

Монокарп — маленький мальчик, который живет в Байтландии и любит программировать.

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

Более формально, если старая перестановка равна \(p_1,p_2,\ldots,p_n\), а новая — \(q_1,q_2,\ldots,q_n\), то должно выполняться \(\)p_1\neq q_1, p_2\neq q_2, \ldots ,p_n\neq q_n.\(\)

Монокарп боится лексикографически больших перестановок. Не могли бы вы помочь ему найти лексикографически минимальную странную перестановку?

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\leq t\leq 200\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1\leq n\leq 1000\)) — длина перестановки.

Во второй строке каждого набора задано \(n\) различных положительных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\)). Гарантируется, что \(p\) является перестановкой, т. е. \(p_i \neq p_j\) для всех \(i \neq j\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых положительных чисел — лексикографически минимальную странную перестановку. Если такой перестановки не существует, выведите вместо нее \(-1\).

Примечание

В первом наборе входных данных всевозможными странными перестановками являются \([2,3,1]\) и \([3,1,2]\). Лексикографически меньшая из них равна \([2,3,1]\).

Во втором наборе входных данных \([1,2,3,4,5]\)  — это лексикографически минимально возможная перестановка, и она является странной.

В третьем наборе входных данных возможные странные перестановки: \([1,2,4,3]\), \([1,4,2,3]\), \([1,4,3,2]\), \([3,1,4,2]\), \([3,2,4,1]\), \([3,4,2,1]\), \([4,1,2,3]\), \([4,1,3,2]\) и \([4,3,2,1]\). Минимальная из них  — \([1,2,4,3]\).

D. Лена и матрица

геометрия дп кратчайшие пути Структуры данных *1900

Лена — красивая девушка, которая любит логические головоломки.

В подарок на день рождения Лена получила матрицу-головоломку!

Матрица состоит из \(n\) строк и \(m\) столбцов, и каждая ячейка либо черная, либо белая. Координаты \((i,j)\) обозначает ячейку, которая находится в \(i\)-й строке и \(j\)-м столбце для любых \(1\leq i \leq n\) и \(1\leq j \leq m\). Чтобы решить головоломку, Лена должна выбрать какую-то ячейку так, чтобы минимизировать манхэттенское расстояние от этой ячейки до самой дальней от нее черной клетки.

Более формально, пусть в матрице \(k \ge 1\) черных ячеек с координатами \((x_i,y_i)\) для каждого \(1\leq i \leq k\). Лене нужно так выбрать ячейку \((a,b)\), чтобы минимизировать \(\)\max_{i=1}^{k}(|a-x_i|+|b-y_i|).\(\)

Поскольку у Лены нет нужных навыков, она попросила вас о помощи. Скажите ей оптимальную клетку, которую нужно выбрать.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\leq t\leq 10\,000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора задано два целых числа \(n\) и \(m\) (\(2\leq n,m \leq 1000\))  — размеры матрицы.

Следующие \(n\) строк содержат по \(m\) символов, каждый символ это «W» или «B». \(j\)-й символ в \(i\)-й строке равен «W», если ячейка \((i,j)\) белая, и «B», если ячейка \((i,j)\) черная.

Гарантируется, что в матрице есть как минимум одна черная клетка.

Также гарантируется, что сумма \(n\cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите оптимальную ячейку \((a,b)\). Если существует несколько оптимальных ответов, выведите любой.

Примечание

В первом наборе входных данных две черные клетки имеют координаты \((1,1)\) и \((3,2)\). Четыре оптимальные ячейки: \((1,2)\), \((2,1)\), \((2,2)\) и \((3,1)\). Можно показать, что никакая другая ячейка не минимизирует максимальное манхэттенское расстояние до самой дальней черной клетки.

Во втором наборе входных данных оптимально выбрать черную клетку \((2,2)\) с максимальным манхэттенским расстоянием \(2\).

C. Восстановление длительности выполнения заданий

жадные алгоритмы реализация Структуры данных *800

Недавно Поликарп выполнил \(n\) последовательно пришедших заданий.

Для каждого выполненного задания известно время \(s_i\), когда оно было дано, никакие два задания не были даны в одно и то же время. Также дано время \(f_i\), когда задание было выполнено. Для каждого задания есть неизвестная величина \(d_i\) (\(d_i>0\)) — длительность выполнения задания.

Известно, что задания были выполнены в том порядке, в котором пришли. Поликарп выполнял задания следующим образом:

  • Как только пришло самое первое задание, Поликарп сразу начал его выполнять.
  • Если приходило новое задание, пока Поликарп еще не закончил выполнять предыдущее, он ставил новое задание в конец очереди.
  • Когда Поликарп заканчивал выполнять очередное задание и очередь была не пуста, он сразу брал из головы очереди новое задание (если очередь пуста — он просто ожидал следующего задания).

Найдите \(d_i\) (длительность выполнения) каждого задания.

Входные данные

В первой строке записано единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных содержится одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Во второй строке каждого набора входных данных записано ровно \(n\) целых чисел \(s_1 < s_2 < \dots < s_n\) (\(0 \le s_i \le 10^9\)).

В третьей строке каждого набора входных данных записано ровно \(n\) целых чисел \(f_1 < f_2 < \dots < f_n\) (\(s_i < f_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого из \(t\) наборов входных данных выведите \(n\) положительных целых чисел \(d_1, d_2, \dots, d_n\) — длительности выполнения каждого задания.

Примечание

Первый набор входных данных:

В начале очередь пуста: \([ ]\). И туда сразу приходит первое задание. В момент времени \(2\) Поликарп заканчивает делать первое задание, соответственно, длительность выполнения первого задания — \(2\). Очередь пуста, поэтому Поликарп просто ждёт.

В момент времени \(3\) приходит второе задание. А в момент времени \(7\) приходит третье задание, и теперь очередь выглядит так: \([7]\).

В момент времени \(10\) Поликарп заканчивает делать второе задание, в итоге длительность выполнения второго задания — \(7\).

И в момент времени \(10\) Поликарп сразу начинает делать третье задание и заканчивает в момент времени \(11\). В итоге длительность выполнения третьего задания — \(1\).

Пример первого набора входных данных.

G. Посчитай поезда

Бинарный поиск жадные алгоритмы сортировки Структуры данных *2000

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

У \(i\)-го вагончика есть свой двигатель, который может разогнать вагончик до \(a_i\) км/ч, но при этом, вагончик не может ехать быстрее, чем вагончик перед ним. Для пояснения смотрите пример.

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

Например, у нас есть \(n=5\) вагончиков и массив \(a = [10, 13, 5, 2, 6]\). Тогда итоговые скорости вагончиков будут равны: \([10, 10, 5, 2, 2]\). Соответственно, будет образовано \(3\) поезда.

Также приходят сообщения о том, что какой-то двигатель был испорчен:

  • cообщение «k d» означает, что скорость \(k\)-го вагончика уменьшилась на \(d\) (то есть произошло изменение максимальной скорости вагончика \(a_k = a_k - d\)).

Сообщения приходят последовательно, при обработке очередного сообщения учитываются изменения от всех предыдущих сообщений.

После каждого сообщения определите количество образовавшихся поездов.

Входные данные

В первой строке входных данных записано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Далее следуют описания наборов входных данных.

Первая строка каждого набора пустая.

Во второй строке набора входных данных заданы два целых числа \(n\) и \(m\) (\(1 \le n,m \le 10^5\)) — количество вагончиков и количество сообщений по замедлению вагончика, соответственно.

В третьей строке даны \(n\) целых чисел: \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^9\)) — число \(a_i\) означает, что вагончик с номером \(i\) может развивать скорость до \(a_i\) км/ч.

В следующих \(m\) строках содержится два целых числа \(k_j\) и \(d_j\) (\(1 \le k_j \le n\), \(0 \le d_j \le a_{k_j}\)) — это сообщение о том, что скорость вагончика с номером \(k_j\) уменьшилась на \(d_j\). Другими словами, произошло изменение его максимальной скорости \(a_{k_j} = a_{k_j} - d_j\). Обратите внимание, что в любой момент времени скорость каждого вагончика неотрицательна. Иными словами, \(a_i \ge s_i\), где \(s_i\) — это сумма таких \(d_j\), что \(k_j=i\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превышает \(10^5\). Аналогично гарантируется, что сумма значений \(m\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Выведите \(t\) строк. В каждой строке выведите ответ для соответствующего набора входных данных.

Для каждого набора входных данных выведите \(m\) чисел: количество образовавшихся поездов после каждого сообщения.

Примечание

Для первого набора входных данных:

  • Изначально массив \(a = [6, 2, 3, 7]\).
  • После первого сообщения массив \(a = [6, 2, 1, 7]\). Соответственно скорости вагончиков равны: \([6, 2, 1, 1]\) и будет образовано \(3\) поезда.
  • После второго сообщения массив \(a = [6, 2, 1, 0]\). Соответственно скорости вагончиков равны: \([6, 2, 1, 0]\) и будет образовано \(4\) поезда.

Для второго набора входных данных:

  • Изначально массив \(a = [10, 13, 5, 2, 6]\).
  • После первого сообщения массив \(a = [10, 9, 5, 2, 6]\). Соответственно скорости вагончиков равны: \([10, 9, 5, 2, 2]\) и будет образовано \(4\) поезда.
  • После второго сообщения массив \(a = [10, 9, 5, 2, 4]\). Соответственно скорости вагончиков равны: \([10, 9, 5, 2, 2]\) и будет образовано \(4\) поезда.
  • После третьего сообщения массив \(a = [5, 9, 5, 2, 4]\). Соответственно скорости вагончиков равны: \([5, 5, 5, 2, 2]\) и будет образовано \(2\) поезда.
  • После четвёртого сообщения массив \(a = [5, 9, 3, 2, 4]\). Соответственно скорости вагончиков равны: \([5, 5, 3, 2, 2]\) и будет образовано \(3\) поезда.

D. Максимум не меньше суммы

Бинарный поиск Конструктив разделяй и властвуй реализация Структуры данных *1800

Вам дан массив \(a\) из \(n\) целых чисел. Вам нужно проверить, верно ли, что неравенство \(\)\max(a_i, a_{i + 1}, \ldots, a_{j - 1}, a_{j}) \geq a_i + a_{i + 1} + \dots + a_{j - 1} + a_{j}\(\) выполняется для всех пар индексов \((i, j)\), где \(1 \leq i \leq j \leq n\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данныхх содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\))  — размер массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если условие для данного массива выполнено, и «NO» в противном случае. Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В примерах \(1\) и \(2\) данное неравенство выполняется для всех пар \((i, j)\).

В примере \(3\) неравенство не выполняется для пары \((1, 2)\), так как \(\max(2, 3) < 2 + 3\).

E. Число групп отрезков

графы жадные алгоритмы поиск в глубину и подобное снм сортировки Структуры данных *2300

Вам дано \(n\) цветных отрезков на числовой оси. Каждый отрезок либо красный, либо синий. Отрезок \(i\) описывается тройкой чисел \((c_i, l_i, r_i)\). Отрезок содержит все точки на отрезке \([l_i, r_i]\), включая концы, а его цвет описывается значением \(c_i\):

  • если \(c_i = 0\), то это красный отрезок;
  • если \(c_i = 1\), то это синий отрезок.

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

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество отрезков.

Каждая из следующих \(n\) строк содержит три целых числа \(c_i, l_i, r_i\) (\(0 \leq c_i \leq 1, 0 \leq l_i \leq r_i \leq 10^9\)), описывающие \(i\)-й отрезок.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(k\) — количество групп отрезков.

Примечание

В первом примере \(5\) отрезков. Отрезки \(1\) и \(2\) соединены, так как они различных цветов и имеют общую точку. Также отрезки \(2\) и \(3\) соединены, и отрезки \(4\) и \(5\) соединены. Таким образом, есть две группы: одна содержит отрезки \(\{1, 2, 3\}\), другая содержит отрезки \(\{4, 5\}\).

G. 2^Сортировка

дп сортировки Структуры данных *1400

Вам дан массив \(a\) длины \(n\) и число \(k\). Посчитайте количество подмассивов \([a_i, \dots, a_{i+k}]\) (здесь \(1 \leq i \leq n - k\)) длины \(k+1\) удовлетворяющих следующим условиям:

  • Если умножить первый элемент подмассива на \(2^0\), второй на \(2^1\), ..., и (\(k+1\))-й элемент на \(2^k\), то этот подмассив будет строго возрастающим.

Более формально, найдите количество индексов \(1 \leq i \leq n - k\) таких, что удовлетворяется \(k\) неравенств: \(\)2^0 \cdot a_i < 2^1 \cdot a_{i+1} < 2^2 \cdot a_{i+2} < \dots < 2^k \cdot a_{i+k}.\(\)

Входные данные

Первая строка содержит единственное число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

В первой строке каждого набора содержатся два целых числа \(n\), \(k\) (\(3 \leq n \leq 2 \cdot 10^5\), \(1 \leq k < n\)).

Во второй строке каждого набора содержатся \(n\) чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы массива.

Сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выведите единственное число — количество индексов, удовлетворяющих условиям.

Примечание

В первом наборе оба подмассива удовлетворяют условиям:

  • \(i=1\): помассив \([a_1,a_2,a_3] = [20,22,19]\), и \(1 \cdot 20 < 2 \cdot 22 < 4 \cdot 19\).
  • \(i=2\): подмассив \([a_2,a_3,a_4] = [22,19,84]\), и \(1 \cdot 22 < 2 \cdot 19 < 4 \cdot 84\).
Во втором наборе три подмассива удовлетворяют условиям:
  • \(i=1\): подмассив \([a_1,a_2] = [9,5]\), и \(1 \cdot 9 < 2 \cdot 5\).
  • \(i=2\): подмассив \([a_2,a_3] = [5,3]\), и \(1 \cdot 5 < 2 \cdot 3\).
  • \(i=3\): подмассив \([a_3,a_4] = [3,2]\), и \(1 \cdot 3 < 2 \cdot 2\).
  • \(i=4\): подмассив \([a_4,a_5] = [2,1]\), но \(1 \cdot 2 = 2 \cdot 1\), так что этот подмассив не удовлетворяет условиям.

H. Азартные игры

дп жадные алгоритмы математика Структуры данных *1700

Мариан пришёл в казино. Игры в казино проходят следующим образом.

Перед каждым раундом игрок выбирает число от \(1\) до \(10^9\). После этого бросается игральная кость с \(10^9\) сторонами, и выпадает случайное число от \(1\) до \(10^9\). Если игрок угадал выпавшее число, количество его денег удваивается, в противном случае количество его денег уменьшается вдвое.

Мариан умеет предсказывать будущее, поэтому он знает все числа \(x_1, x_2, \dots, x_n\) которые выпадут на игральной кости в следующих \(n\) раундах.

Мариан хочет выбрать три числа \(a\), \(l\), \(r\) (\(l \leq r\)). Он будет играть \(r-l+1\) раунд (раунды с номерами от \(l\) до \(r\)). В каждом из этих раундов он будет загадывать одно и тоже число \(a\). На старте (перед раундом \(l\)) у него \(1\) доллар.

Мариан просит вас найти такие \(a\), \(l\) и \(r\) (\(1 \leq a \leq 10^9\), \(1 \leq l \leq r \leq n\)) таких, что в конце игры у него будет максимальная сумма денег.

Заметьте, что при проигрыше или выигрыше (т.е. уменьшении или увеличении количества денег вдвое) количество денег не округляется. Все операции деления/умножения проводятся с бесконечной точностью. Например, во время игры Мариан может иметь количество денег, равное \(\dfrac{1}{1024}\), \(\dfrac{1}{128}\), \(\dfrac{1}{2}\), \(1\), \(2\), \(4\), и т.д. (любое значение \(2^t\), где \(t\) — целое число любого знака).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(1 \leq n \leq 2\cdot 10^5\)) — количество раундов в игре.

Вторая строка каждого набора содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \leq x_i \leq 10^9\)), где \(x_i\) — число, которое выпадет на игральной кости в \(i\)-м раунде.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора выведите три числа — \(a\), \(l\), и \(r\) таких, что выигрыш Мариана в казино будет максимальным. Если существует несколько различных ответов, вы можете вывести любой из них.

Примечание

В первом наборе лучшим выбором будет \(a=4\), \(l=1\), \(r=5\). Игра пройдёт следующим образом:

  • Мариан начинает игру с одним долларом.
  • После первого раунда у Мариана будет \(2\) доллара, так как он угадал выпавшее число.
  • После второго раунда у Мариана будет \(4\) доллара, так как он вновь угадал выпавшее число.
  • После третьего раунда у Мариана будет \(2\) доллара, так как он загадал \(4\), а выпало число \(3\).
  • После четвертого раунда у Мариана вновь будет \(4\) доллара.
  • В последнем раунде Мариан закончит с \(8\) долларами, так как он вновь угадал выпавшее число.

Для второго набора есть много подходящих ответов, однако можно доказать что Мариан не может закончить играть с более чем \(2\) долларами, так что любой выбор \(l = r\) с подходящим \(a\) будет приемлемым.

D. Разбиение на возрастающую и спадающую

дп жадные алгоритмы Перебор разделяй и властвуй Структуры данных *2800

Назовем массив \(a\) из \(m\) целых чисел \(a_1, a_2, \ldots, a_m\) Decinc, если \(a\) можно сделать возрастающим, удалив из него убывающую подпоследовательность (возможно, пустую).

  • Например, если \(a = [3, 2, 4, 1, 5]\), мы можем удалить из \(a\) убывающую подпоследовательность \([a_1, a_4]\) и получить \(a = [2, 4, 5]\), которая является возрастающей.

Вам дана перестановка \(p\) чисел от \(1\) до \(n\). Найдите количество пар целых чисел \((l, r)\) с \(1 \le l \le r \le n\) таких, что \(p[l \ldots r]\) (подмассив \(p\) от \(l\) до \(r\)) является Decinc массивом.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\))  — размер \(p\).

Вторая строка содержит \(n\) целых \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\), все \(p_i\) различны)  — элементы перестановки.

Выходные данные

Выведите количество пар целых чисел \((l, r)\) таких, что \(p[l \ldots r]\) (подмассив \(p\) от \(l\) до \(r\)) является Decinc массивом. \((1 \le l \le r \le n)\)

Примечание

В первом примере все подмассивы являются Decinc.

Во втором примере все подмассивы, кроме \(p[1 \ldots 6]\) и \(p[2 \ldots 6]\) являются Decinc.

E. Крайние максимумы

жадные алгоритмы Структуры данных *3400

У Yeri есть массив из \(n + 2\) неотрицательных целых чисел: \(a_0, a_1, ..., a_n, a_{n + 1}\).

Мы знаем, что \(a_0 = a_{n + 1} = 0\).

Она хочет сделать все элементы \(a\) равными нулю за минимальное количество операций.

За одну операцию она может сделать одно из следующих действий:

  • Выбрать самый левый максимальный элемент и изменить его на максимальный из элементов слева от него.
  • Выбрать самый правый максимальный элемент и изменить его на максимальный из элементов справа от него.

Помогите ей найти минимальное количество операций, необходимых для того, чтобы все элементы \(a\) стали равны нулю.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le n\)).

Выходные данные

Выведите одно целое число  — минимальное количество операций, необходимых для того, чтобы все элементы \(a\) стали равны нулю.

Примечание

В первом примере вы получите \(\langle 1, \underline{1}, 2, 4, 0, 2 \rangle\) при выполнении первой операции и \(\langle 1, 4, 2, \underline{2}, 0, 2 \rangle\) при выполнении второй операции.

Один из способов достижения нашей цели показан ниже. (Подчеркивания показывают последнее изменение). \(\langle 1, 4, 2, 4, 0, 2 \rangle \to \langle 1, 4, 2, \underline{2}, 0, 2 \rangle \to \langle 1, \underline{1}, 2, 2, 0, 2 \rangle \to \langle 1, 1, 2, 2, 0, \underline{0} \rangle \to \langle 1, 1, 2, \underline{0}, 0, 0 \rangle \to \langle 1, 1, \underline{0}, 0, 0, 0 \rangle \to \langle \underline{0}, 1, 0, 0, 0, 0 \rangle \to \langle 0, \underline{0}, 0, 0, 0, 0 \rangle \)

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

C. Нулевой путь

графы дп жадные алгоритмы кратчайшие пути Перебор Структуры данных *1700

Вам дана таблица с \(n\) строк и \(m\) столбцов. Обозначим ячейку в \(i\)-й (\(1\le i\le n\)) строке и \(j\)-м (\(1\le j\le m\)) столбце через \((i, j)\), а число в ней через \(a_{ij}\). Все числа равны \(1\) или \(-1\).

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

Можно ли двигаться таким образом, чтобы сумма значений, записанных во всех посещенных ячейках (включая \(a_{11}\) и \(a_{nm}\)), была равна \(0\)?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \leq t \leq 10^4\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 1000\))  — размер таблицы.

Каждая из следующих \(n\) строк содержит \(m\) целых чисел. \(j\)-е целое число в \(i\)-й строке это \(a_{ij}\) (\(a_{ij} = 1\) или \(-1\))  — элемент в ячейке \((i, j)\).

Гарантируется, что сумма \(n\cdot m\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите «YES», если существует путь из левого верхнего угла в правый нижний, который дает в сумме \(0\), и «NO» в противном случае. Вы можете выводить каждую букву в любом регистре.

Примечание

Один из возможных путей для четвертого набора входных данных приведен на рисунке в утверждении.

D. Граф перестановки

Бинарный поиск жадные алгоритмы Конструктив кратчайшие пути разделяй и властвуй Структуры данных *1900

Перестановкой является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Дана перестановка \([a_1,a_2,\dots,a_n]\) чисел \(1,2,\dots,n\). Для целых \(i\),\(j\), таких что \(1\le i<j\le n\), определим \(\operatorname{mn}(i,j)\) как \(\min\limits_{k=i}^j a_k\), а \(\operatorname{mx}(i,j)\) как \(\max\limits_{k=i}^j a_k\).

Построим неориентированный граф на \(n\) вершинах, пронумерованных от \(1\) до \(n\). Для каждой пары \(1\le i<j\le n\), если одновременно \(\operatorname{mn}(i,j)=a_i\) и \(\operatorname{mx}(i,j)=a_j\), или одновременно \(\operatorname{mn}(i,j)=a_j\) и \(\operatorname{mx}(i,j)=a_i\), то между вершинами \(i\) и \(j\) проводится неориентированное ребро длины \(1\).

Найдите в этом графе длину кратчайшего пути от вершины \(1\) до вершины \(n\). Можно доказать, что в таком графе вершины \(1\) и \(n\) всегда будут соединены каким-либо путём, так что кратчайший путь всегда существует.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 5\cdot 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(1\le n\le 2.5\cdot 10^5\)).

Вторая строка набора входных данных содержит \(n\) целых чисел \(a_1\),\(a_2\),\(\ldots\),\(a_n\) (\(1\le a_i\le n\)). Гарантируется, что \(a\) является перестановкой чисел \(1\),\(2\),\(\dots\),\(n\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — длину кратчайшего пути от \(1\) до \(n\).

Примечание

Ниже приведены построенные графы, отвечающие наборам входных данных.

граф в наборе 1
граф в наборе 2
граф в наборе 3
граф в наборе 4
граф в наборе 5

G. Fishingprince снова играет с массивом

геометрия математика Перебор Структуры данных *3300

Пусть дана последовательность неотрицательных целых чисел \(a\) длины \(n\) в 1-индексации. Также даны два целых числа \(x\), \(y\). В течение отрезка времени в \(t\) секунд (\(t\) может быть любым положительным вещественным числом) можно выполнить одну из следующих операций:

  • Выбрать \(1\le i<n\), уменьшить \(a_i\) на \(x\cdot t\) и уменьшить \(a_{i+1}\) на \(y\cdot t\).
  • Выбрать \(1\le i<n\), уменьшить \(a_i\) на \(y\cdot t\) и уменьшить \(a_{i+1}\) by \(x\cdot t\).

Определим \(f(a)\) как минимальное количество времени (может быть вещественным числом), необходимое для того, чтобы сделать все элементы последовательности неположительными (меньше или равными \(0\)).

Например, если \(x=1\), \(y=2\), то массив \([3,1,1,3]\) можно обработать за \(3\) секунды. Для этого нужно:

  • В течение первых \(1.5\) секунд выполнять вторую операцию с параметром \(i=1\).
  • В течение оставшихся \(1.5\) секунд выполнять первую операцию с параметром \(i=3\).

Можно доказать, что в этом случае невозможно сделать все элементы меньше или равными \(0\) меньше чем за \(3\) секунды, поэтому \(f([3,1,1,3])=3\).

Вам дана последовательность положительных целых чисел \(b\) длины \(n\) в 1-индексации. Также даны положительные целые числа \(x\), \(y\). Обработайте \(q\) запросов следующих двух типов:

  • 1 k v: изменить значение \(b_k\) на \(v\).
  • 2 l r: вывести \(f([b_l,b_{l+1},\dots,b_r])\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2\le n\le 2\cdot 10^5\), \(1\le q\le 2\cdot 10^5\)).

Вторая строка содержит два целых числа \(x\) и \(y\) (\(1\le x,y\le 10^6\)).

Третья строка содержит \(n\) целых чисел \(b_1,b_2,\ldots,b_n\) (\(1\le b_i\le 10^6\)).

Далее следует \(q\) строк. Каждая из этих \(q\) строк содержит по три целых числа. Первое число \(op\) равно \(1\) или \(2\).

  • Если оно равно \(1\), далее следуют два целых числа \(k\) и \(v\) (\(1\le k\le n\), \(1\le v\le 10^6\)). Такой запрос означает, что нужно изменить значение \(b_k\) на \(v\).
  • Если оно равно \(2\), далее следуют два целых числа \(l\) и \(r\) (\(1\le l<r\le n\)). Такой запрос означает, что нужно вывести значение \(f([b_l,b_{l+1},\dots,b_r])\).
Выходные данные

Для каждого запроса типа \(2\) выведите одно вещественное число — ответ на этот запрос. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-9}\).

Примечание

Разберём тестовый пример.

В первом запросе требуется вычислить \(f([3,1,1,4])\). Ответ равен \(3.5\). Одной из оптимальных последовательностей операций является следующая:

  • В течение первых \(1.5\) секунд выполнять вторую операцию с параметром \(i=1\).
  • В течение оставшихся \(2\) секунд выполнять первую операцию с параметром \(i=3\).

В третьем запросе требуется вычислить \(f([1,1,1])\). Ответ равен \(1\). Одной из оптимальных последовательностей операций является следующая:

  • В течение первых \(0.5\) секунд выполнять вторую операцию с параметром \(i=1\).
  • В течение оставшихся \(0.5\) секунд выполнять первую операцию с параметром \(i=2\).

C. Любимая задача awoo

Бинарный поиск жадные алгоритмы Конструктив реализация Строки Структуры данных *1400

Заданы две строки \(s\) и \(t\), обе длины \(n\). Каждый символ в обеих строках — 'a', 'b' или 'c'.

За один ход разрешается совершить одно из следующих действий:

  • выбрать вхождение «ab» в \(s\) и заменить его на «ba»;
  • выбрать вхождение «bc» в \(s\) и заменить его на «cb».

Разрешается совершить произвольное количество ходов (включая ноль). Можно ли сделать строку \(s\) равной строке \(t\)?

Входные данные

В первой строке записано одно целое число \(q\) (\(1 \le q \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 10^5\)) — длина строк \(s\) и \(t\).

Во второй строке записана строка \(s\) длины \(n\). Каждый символ — 'a', 'b' или 'c'.

В третьей строке записана строка \(t\) длины \(n\). Каждый символ — 'a', 'b' или 'c'.

Сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

На каждый набор входных данных выведите «YES», если возможно сделать строку \(s\) равной строке \(t\), совершив произвольное количество ходов (возможно, ноль). В противном случае выведите «NO».

C. 3SUM-замыкание

Перебор Структуры данных *1300

Вам дан массив \(a\) длины \(n\). Массив называется 3SUM-замкнутым, если для любой тройки различных индексов \(i\), \(j\), \(k\) сумма \(a_i + a_j + a_k\) является элементом массива. Формально, \(a\) 3SUM-замкнутый, если для любых индексов \(1 \leq i < j < k \leq n\) существует такой индекс \(1 \leq l \leq n\), что \(a_i + a_j + a_k = a_l\).

Определите, является ли \(a\) 3SUM-замкнутым.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \leq n \leq 2 \cdot 10^5\)) — длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)) — элементы массива.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если \(a\) 3SUM-замкнутый, и «NO» в противном случае. Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В первом примере есть только одна тройка: \(i=1\), \(j=2\), \(k=3\). В этом случае \(a_1 + a_2 + a_3 = 0\), что является элементом массива (\(a_2 = 0\)), поэтому этот массив 3SUM-замкнутый.

Во втором примере \(a_1 + a_4 + a_5 = -1\), что не является элементом массива. Поэтому массив не 3SUM-замкнутый.

В третьем примере \(a_i + a_j + a_k = 0\) для всех различных \(i\), \(j\), \(k\), и \(0\) является элементом массива, поэтому массив 3SUM-замкнутый.

D. Почти тройные удаления

дп жадные алгоритмы Структуры данных *2300

Вам дано целое число \(n\) и массив целых чисел \(a_1,a_2,\ldots,a_n\).

За одну операцию вы можете выбрать индекс \(i\) (\(1 \le i \lt n\)), для которого \(a_i \neq a_{i+1}\), и удалить оба элемента \(a_i\) и \(a_{i+1}\) из массива. После удаления \(a_i\) и \(a_{i+1}\) оставшиеся части массива соединяются.

Например, если \(a=[1,4,3,3,6,2]\), то после применения операции с \(i=2\) получившийся массив будет равен \([1,3,6,2]\).

Какова максимальная возможная длина массива из равных элементов, который можно получить из \(a\) применением нескольких (возможно, нуля) операций, описанных выше?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 5000\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le n\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10\,000\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимальную возможную длину массива из равных элементов, который можно получить из \(a\) применением некоторой последовательности операций.

Примечание

Для первого набора входных данных оптимальной последовательностью операций будет: \([1,2,3,2,1,3,3] \rightarrow [3,2,1,3,3] \rightarrow [3,3,3]\).

Во втором наборе входных данных все элементы массива уже равны.

В третьем наборе входных данных единственной возможной последовательностью операций является: \([1,1,1,2,2,2] \rightarrow [1,1,2,2] \rightarrow [1,2] \rightarrow []\). Обратите внимание, что по условию два удаляемых элемента должны быть различны.

В четвёртом наборе входных данных оптимальной последовательностью является: \([1,1,2,2,3,3,1,1] \rightarrow [1,1,2,3,1,1] \rightarrow [1,1,1,1]\).

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

E. Three Days Grace

дп жадные алгоритмы математика Структуры данных теория чисел *2600

Ibti раздумывал о хорошем названии для этой задачи, которое подойдёт к теме раунда (число три). Он сразу подумал о третьей производной, но это было довольно глупо, поэтому он решил включить лучшую группу в мире — Three Days Grace.

Вам дано мультимножество \(A\) изначального размера \(n\), элементы которого — целые числа от \(1\) до \(m\). За одну операцию можно сделать следующее:

  • выбрать значение \(x\) из мультимножества \(A\), затем
  • выбрать два целых числа \(p\) и \(q\) такие, что \(p, q > 1\) и \(p \cdot q = x\). Добавить \(p\) и \(q\) в \(A\), удалить \(x\) из \(A\).

Заметьте, что размер мультимножества \(A\) увеличивается на \(1\) после каждой операции.

Назовём балансом мультимножества \(A\) значение \(\max(a_i) - \min(a_i)\). Найдите минимально возможный баланс после применения нескольких (возможно, нуля) операций.

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целые числа \(n\) и \(m\) (\(1 \le n \le 10^6\), \(1 \le m \le 5 \cdot 10^6\)) — изначальный размер мультимножества и максимально возможное значение числа в мультимножестве.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le m\)) — элементы в изначальном мультимножестве.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\) и сумма \(m\) по всем наборам входных данных не превосходит \(5 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимально возможный баланс.

Примечание

В первом наборе входных данных мы можем применить операцию к каждому из чисел \(4\) с \((p,q) = (2,2)\) и сделать мультимножество \(\{2,2,2,2,2,2,2\}\) с балансом \(\max(\{2,2,2,2,2,2,2\}) - \min(\{2,2,2,2,2,2,2\}) = 0\). Очевидно, мы не можем сделать баланс меньше \(0\).

Во втором входных данных мы можем применить операция к \(12\) с \((p,q) = (3,4)\). После этого мультимножество станет равным \(\{3,4,2,3\}\). Мы можем применить ещё одну операцию к числу \(4\) с \((p,q) = (2,2)\), сделав мультимножество \(\{3,2,2,2,3\}\) с балансом \(1\).

В третьем входных данных мы можем применить операцию к \(35\) с \((p,q) = (5,7)\). Итоговое мультимножество будет \(\{6,5,7\}\) с балансом \(7-5 = 2\).

В четвёртом наборе входных данных мы не может применить никакую операцию, поэтому ответ равен \(5 - 1 = 4\).

C. Помогаем природе

жадные алгоритмы Конструктив Структуры данных *1700

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

Возле тропинки растут \(n\) деревьев, текущие уровни влажности которых заданы массивом \(a_1, a_2, \dots, a_n\). Леон научился трем способностям, которые помогут ему осушать и поливать почву.

  • Выбрать позицию \(i\) и уменьшить уровень влажности деревьев \(1, 2, \dots, i\) на \(1\).
  • Выбрать позицию \(i\) и уменьшить уровень влажности деревьев \(i, i + 1, \dots, n\) на \(1\).
  • Увеличить уровень влажности всех деревьев на \(1\).

Леон хочет узнать минимальное число действий, которое необходимо совершить, чтобы каждое дерево имело уровень влажности равный \(0\).

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\))  — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных вводится одно целое число \(n\) (\(1 \leq n \leq 200\,000\)).

Во второй строке вводятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)) — изначальные уровни влажности деревьев.

Сумма значений \(n\) по всем наборам тестовых данных не превосходит \(200\,000\).

Выходные данные

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

Примечание

В первом наборе входных данных достаточно \(2\) раза применить операцию прибавления \(1\) ко всему массиву.

Во втором наборе входных данных можно \(4\) раза применить операцию вычитания на префиксе длины \(3\) и получить массив \(6, 0, 3\).

После этого \(6\) раз применить операцию вычитания на префиксе длины \(1\) и \(3\) раза операцию вычитания на суффиксе длины \(1\). Итого, количество действий составит \(4 + 6 + 3 = 13\). Можно показать, что меньшим количеством действий обойтись нельзя, поэтому \(13\) — это ответ.

D. Восстановление перестановки

Бинарный поиск жадные алгоритмы математика сортировки Структуры данных *1900

У Монокарпа была перестановка \(a\) состоящая из \(n\) чисел \(1\), \(2\), ..., \(n\) (перестановка — это массив, в котором каждый элемент от \(1\) до \(n\) встречается ровно один раз).

Монокарп составил массив целых чисел \(b\) размера \(n\), где \(b_i = \left\lfloor \frac{i}{a_i} \right\rfloor\). Например, если перестановка \(a\) равна \([2, 1, 4, 3]\), то массив \(b\) равен \(\left[ \left\lfloor \frac{1}{2} \right\rfloor, \left\lfloor \frac{2}{1} \right\rfloor, \left\lfloor \frac{3}{4} \right\rfloor, \left\lfloor \frac{4}{3} \right\rfloor \right] = [0, 2, 0, 1]\).

К сожалению, Монокарп потерял свою перестановку, поэтому он хочет восстановить ее. Ваша задача — найти перестановку \(a\), которая соответствует заданному массиву \(b\). Если таких перестановок несколько — выведите любую. Гарантируется, что хотя бы одна подходящая перестановка существует.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(0 \le b_i \le n\)).

Дополнительные ограничения на входные данные:

  • сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\);
  • существует хотя бы одна перестановка \(a\), по которой описанным в условии процессом можно получить заданный массив \(b\).
Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел — перестановку \(a\), которая соответствует заданному массиву \(b\). Если таких перестановок несколько — выведите любую.

F. Точки

Комбинаторика математика матрицы реализация Структуры данных *2500

Тройка точек \(i\), \(j\) и \(k\) на координатной прямой считается красивой, если \(i < j < k\) и \(k - i \le d\).

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

  • добавить точку в множество;
  • удалить точку из множества;
  • посчитать количество красивых троек из точек, принадлежащих множеству.
Входные данные

В первой строке заданы два целых числа \(q\) и \(d\) (\(1 \le q, d \le 2 \cdot 10^5\)) — количество запросов и параметр, по которому определяется, является ли тройка красивой.

Во второй строке заданы \(q\) целых чисел \(a_1, a_2, \dots, a_q\) (\(1 \le a_i \le 2 \cdot 10^5\)). Число \(a_i\) обозначает \(i\)-й запрос следующим образом:

  • если точка \(a_i\) входит в множество, удалить ее; иначе добавить ее;
  • после удаления или добавления точки надо вывести количество красивых троек.
Выходные данные

Для каждого запроса выведите одно целое число — количество красивых троек после обработки запроса.

C. Поезд и запросы

жадные алгоритмы Структуры данных *1100

Вдоль железной дороги расположены станции, пронумерованные от \(1\) до \(10^9\). Скорый поезд всегда едет по маршруту, состоящему из \(n\) станций \(u_1, u_2, \dots, u_n\), где (\(1 \le u_i \le 10^9\)). Поезд едет по маршруту слева направо. Он начинает свой путь на станции \(u_1\), затем останавливается на станции \(u_2\), затем на \(u_3\) и так далее. Станция \(u_n\) — конечная.

Допустимо, что поезд посетит одну станцию более одного раза. То есть среди чисел \(u_1, u_2, \dots, u_n\) могут быть дубликаты.

Вам даны \(k\) запросов, каждый из которых содержит два различных целых числа \(a_j\) и \(b_j\) (\(1 \le a_j, b_j \le 10^9\)). Для каждого запроса необходимо определить, можно ли доехать на поезде от станции с номером \(a_j\) до станции с номером \(b_j\).

Например, пусть маршрут поезда состоит из \(6\) станций с номерами [\(3, 7, 1, 5, 1, 4\)] и даны \(3\) следующих запроса:

  • \(a_1 = 3\), \(b_1 = 5\)

    Доехать от станции \(3\) до станции \(5\) можно, проехав по участку маршрута, состоящего из станций [\(3, 7, 1, 5\)]. Ответ: YES.

  • \(a_2 = 1\), \(b_2 = 7\)

    Доехать от станции \(1\) до станции \(7\) нельзя, так как поезд не может ехать в обратном направлении. Ответ: NO.

  • \(a_3 = 3\), \(b_3 = 10\)

    Доехать от станции \(3\) до станции \(10\) нельзя, так как станция \(10\) не входит в маршрут поезда. Ответ: NO.

Входные данные

В первой строке записано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка каждого набора пустая.

Во второй строке каждого набора входных данных содержится два целых числа: \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5, 1 \le k \le 2 \cdot 10^5\)) — количество станций, из которых состоит маршрут поезда и количество запросов соответственно.

В третьей строке каждого набора входных данных записано ровно \(n\) целых чисел \(u_1, u_2, \dots, u_n\) (\(1 \le u_i \le 10^9\)). Числа \(u_1, u_2, \dots, u_n\) необязательно различны.

В следующих \(k\) строках содержатся два различных целых числа \(a_j\) и \(b_j\) (\(1 \le a_j, b_j \le 10^9\)), описывающие запрос с номером \(j\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных в тесте не превышает \(2 \cdot 10^5\). Аналогично гарантируется, что сумма значений \(k\) по всем наборам входных данных в тесте также не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса в каждом наборе входных данных в отдельной строке выведите:

  • YES, если на поезде можно доехать от станции \(a_j\) до станции \(b_j\).
  • NO в противном случае.

Вы можете выводить YES и NO в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

Первый набор входных данных разобран в условии задачи.

F. Уравняй мультимножества

жадные алгоритмы Конструктив математика Структуры данных теория чисел *1700

Мультимножество — это такой набор чисел, в котором могут быть равные элементы, а порядок чисел не имеет значение. Два мультимножества равны, когда каждое значение встречается в них одинаковое количество раз. Например, мультимножества \(\{2,2,4\}\) и \(\{2,4,2\}\) равны, но мультимножества \(\{1,2,2\}\) и \(\{1,1,2\}\) — нет.

Вам даны два мультимножества \(a\) и \(b\), каждое состоит из \(n\) целых чисел.

За одну операцию можно любой элемент мультимножества \(b\) увеличить в два раза или уменьшить в два раза (с округлением вниз). Другими словами, вам доступна одна из следующих операций для элемента \(x\) из мультимножества \(b\):

  • либо заменить \(x\) на \(x \cdot 2\),
  • либо заменить \(x\) на \(\lfloor \frac{x}{2} \rfloor\) (округление вниз).

Обратите внимание, что изменять элементы мультимножества \(a\) нельзя.

Проверьте, можно ли за произвольное количество операций (возможно, \(0\)) сделать так, чтобы мультимножество \(b\) стало равно мультимножеству \(a\).

Например, если \(n = 4\), \(a = \{4, 24, 5, 2\}\), \(b = \{4, 1, 6, 11\}\), то ответ положительный. Можно действовать следующим образом:

  • Заменим \(1\) на \(1 \cdot 2 = 2\). Получим \(b = \{4, 2, 6, 11\}\).
  • Заменим \(11\) на \(\lfloor \frac{11}{2} \rfloor = 5\). Получим \(b = \{4, 2, 6, 5\}\).
  • Заменим \(6\) на \(6 \cdot 2 = 12\). Получим \(b = \{4, 2, 12, 5\}\).
  • Заменим \(12\) на \(12 \cdot 2 = 24\). Получим \(b = \{4, 2, 24, 5\}\).
  • получили равные мультимножества \(a = \{4, 24, 5, 2\}\) и \(b = \{4, 2, 24, 5\}\).
Входные данные

В первой строке входных данных задано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из трех строк.

В первой строке набора задано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество элементов в мультимножествах \(a\) и \(b\).

Во второй строке даны \(n\) целых чисел: \(a_1, a_2, \dots, a_n\) (\(1 \le a_1 \le a_2 \le \dots \le a_n \le 10^9\)) — элементы набора \(a\). Обратите внимание, что среди элементов могут быть равные.

В третьей строке даны \(n\) целых чисел: \(b_1, b_2, \dots, b_n\) (\(1 \le b_1 \le b_2 \le \dots \le b_n \le 10^9\)) — элементы набора \(b\). Обратите внимание, что среди элементов могут быть равные.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • YES, если можно сделать так, чтобы мультимножество \(b\) стало равно \(a\),
  • NO в противном случае.

Вы можете выводить YES и NO в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

Первый пример разобран в условии.

Во втором примере невозможно получить значение \(31\) из чисел мультимножества \(b\) доступными операциями.

В третьем примере можно действовать следующим образом:

  • Заменим \(2\) на \(2 \cdot 2 = 4\). Получим \(b = \{4, 14, 14, 26, 42\}\).
  • Заменим \(14\) на \(\lfloor \frac{14}{2} \rfloor = 7\). Получим \(b = \{4, 7, 14, 26, 42\}\).
  • Заменим \(26\) на \(\lfloor \frac{26}{2} \rfloor = 13\). Получим \(b = \{4, 7, 14, 13, 42\}\).
  • Заменим \(42\) на \(\lfloor \frac{42}{2} \rfloor = 21\). Получим \(b = \{4, 7, 14, 13, 21\}\).
  • Заменим \(21\) на \(\lfloor \frac{21}{2} \rfloor = 10\). Получим \(b = \{4, 7, 14, 13, 10\}\).
  • получили равные мультимножества \(a = \{4, 7, 10, 13, 14\}\) и \(b = \{4, 7, 14, 13, 10\}\).

G2. Проходимые пути (сложная версия)

Деревья поиск в глубину и подобное Структуры данных *2000

Это сложная версия задачи. Единственное различие простой и сложной версии в количестве запросов.

Поликарп вырастил дерево из \(n\) вершин. Напоминаем, что деревом из \(n\) вершин называется неориентированный связный граф из \(n\) вершин и \(n-1\) ребра, не содержащий циклов.

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

Иными словами, множество вершин называется проходимым, если существует простой путь, который проходит по всем вершинам этого множества (и, возможно, каким-то другим).

Например для дерева ниже множества \(\{3, 2, 5\}\), \(\{1, 5, 4\}\), \(\{1, 4\}\) проходимы, а \(\{1, 3, 5\}\), \(\{1, 2, 3, 4, 5\}\) — нет.

Поликарп просит вас ответить на \(q\) запросов. Каждый запрос является множеством вершин. Для каждого запроса вам необходимо определить проходимо ли соответствующее множество вершин.

Входные данные

Первая строка входных данных содержит единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество вершин дерева.

Следующие \(n - 1\) строк содержат описание дерева.

Каждая строка содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \ne v\)) — индексы вершин, соединённых ребром.

Далее следует строка с единственным целым числом \(q\) (\(1 \le q \le 10^5\)) — количество запросов.

Следующие \(2 \cdot q\) строк содержат описания множеств.

Первая строка описания содержит целое число \(k\) (\(1 \le k \le n\)) — размер множества.

Вторая строка описания содержит \(k\) различных целых чисел \(p_1, p_2, \dots, p_k\) (\(1 \le p_i \le n\)) — индексы вершин множества.

Гарантируется, что сумма значений \(k\) по всем запросам не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(q\) строк, каждая из которых содержит ответ на соответствующий запрос. В качестве ответа выведите «YES», если множество проходимо, и «NO» в противном случае.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

B. ICPC шарики

реализация Структуры данных *800

Во время соревнования ICPC шарики распределяются между командами следующим образом:

  • Когда команда решает задачу, она получает один шарик.
  • Первая команда, решившая определённую задачу, получает дополнительный шарик.
Всего в соревновании 26 задач, проиндексированных \(\textsf{A}\), \(\textsf{B}\), \(\textsf{C}\), ..., \(\textsf{Z}\). Вам известен порядок, в котором решались задачи во время соревнования, обозначенный строкой \(s\), где \(i\)-й символ строки обозначает, что задача с индексом \(s_i\) была решена одной из команд. Гарантируется, что никакая команда не может решить одну и ту же задачу дважды.

Посчитайте, какое суммарное количество шариков получили команды за время соревнования. Обратите внимание, что некоторые задачи могут быть не решены ни одной из команд.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следует описание наборов.

Первая строка каждого набора входных данных содержит число \(n\) (\(1 \leq n \leq 50\)) — длину строки.

Вторая строка каждого набора содержит строку \(s\) длины \(n\), состоящую из заглавных букв латинского алфавита, обозначающую порядок, в котором решались задачи.

Выходные данные

Для каждого набора входных данных выведите одно число — суммарное количество шариков, полученных командами за время соревнования.

Примечание

В первом наборе входных данных были разданы \(5\) шаров:

  • Была решена задача \(\textsf{A}\). Решившая её команда получила \(2\) шара: один за решение задачи, второй за то, что она решила задачу \(\textsf{A}\) первой.
  • Была решена задача \(\textsf{B}\). Решившая её команда получила \(2\) шара: один за решение задачи, второй за то, что она решила задачу \(\textsf{B}\) первой.
  • Была решена задача \(\textsf{A}\). Решившая её команда получила \(1\) шар за решение задачи. Обратите внимание, что эта команда не получила дополнительный шарик, так как она не является первой командой, решившей задачу \(\textsf{A}\).
Суммарно команды получили \(2+2+1=5\) шариков.

Во втором наборе входных данных была решена только одна задача. Решившая её команда получила \(2\) шара: один за решение задачи, второй за то, что она решила задачу \(\textsf{A}\) первой.

D. Двойные строки

Перебор Строки Структуры данных *1100

Вам даны \(n\) строк \(s_1, s_2, \dots, s_n\) длины не более \(\mathbf{8}\).

Для каждой строки \(s_i\), проверьте, существуют ли такие \(s_j\) и \(s_k\), что \(s_i = s_j + s_k\). То есть определите, является ли \(s_i\) конкатенацией \(s_j\) и \(s_k\). Обратите внимание, что \(j\) может быть равным \(k\).

Напомним, что конкатенацией строк \(s\) и \(t\) называется строка \(s + t = s_1 s_2 \dots s_p t_1 t_2 \dots t_q\), где \(p\) и \(q\) длины строк \(s\) и \(t\) соответственно. Например, конкатенация строк «code» и «forces» равна «codeforces».

Входные данные

Первая строка содержит одно число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит число \(n\) (\(1 \leq n \leq 10^5\)) — количество строк.

Затем следуют \(n\) строк, \(i\)-я из которых содержит непустую строку \(s_i\) длины не более \(\mathbf{8}\), состоящую из строчных английских букв. Среди заданных \(n\) строк могут быть одинаковые.

Сумма \(n\) по всем наборам не превосходит \(10^5\).

Выходные данные

Для каждого набора выведите бинарную строку длины \(n\). \(i\)-й бит строки должен равняться \(\texttt{1}\) если существуют две строки \(s_j\) и \(s_k\) таких, чтобы \(s_i = s_j + s_k\), или же \(\texttt{0}\) в противном случае. Обратите внимание, что \(j\) может совпадать с \(k\).

Примечание

В первом наборе мы имеем следующее:

  • \(s_1 = s_2 + s_2\), так как \(\texttt{abab} = \texttt{ab} + \texttt{ab}\). Помните, что \(j\) может совпадать с \(k\).
  • \(s_2\) не может быть представлена как конкатенация никаких двух строк.
  • \(s_3 = s_2 + s_5\), так как \(\texttt{abc} = \texttt{ab} + \texttt{c}\).
  • \(s_4\) не может быть представлена как конкатенация никаких двух строк.
  • \(s_5\) не может быть представлена как конкатенация никаких двух строк.
Так как только \(s_1\) и \(s_3\) удовлетворяют условиям, то только первый и третий биты в ответе будут равняться \(\texttt{1}\), поэтому ответ — \(\texttt{10100}\).

F. Очередная задача про пары, удовлетворяющие неравенству

Бинарный поиск дп жадные алгоритмы сортировки Структуры данных *1300

Вам дан массив целых чисел \(a_1, a_2, \dots a_n\). Найдите число пар индексов \(1 \leq i, j \leq n\) таких, что \(a_i < i < a_j < j\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора содержит число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — длину массива.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \leq a_i \leq 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — количество пар индексов, удовлетворяющих неравенству из условия.

Пожалуйста, обратите внимание, что ответ для некоторых тестовых примеров может не поместиться в 32-разрядный целочисленный тип, поэтому вы должны использовать по крайней мере 64-разрядный целочисленный тип в вашем языке программирования (например, long long для C++).

Примечание

В первом наборе входных данных пары \((i, j)\) = \(\{(2, 4), (2, 8), (3, 8)\}\).

  • Пара \((2, 4)\) подходит, потому что \(a_2 = 1\), \(a_4 = 3\) и \(1 < 2 < 3 < 4\).
  • Пара \((2, 8)\) подходит, потому что \(a_2 = 1\), \(a_8 = 4\) и \(1 < 2 < 4 < 8\).
  • Пара \((3, 8)\) подходит, потому что \(a_3 = 2\), \(a_8 = 4\) и \(2 < 3 < 4 < 8\).

E. Марк и профессор Коро

Бинарный поиск битмаски жадные алгоритмы Комбинаторика Перебор Структуры данных *2300

После просмотра одного аниме перед сном Марку снится, что он стоит в старом классе с меловой доской, на которой записана последовательность из \(n\) положительных целых чисел \(a_1, a_2,\dots,a_n\).

Затем в класс заходит профессор Коро. Он может выполнять следующую операцию:

  • выбрать целое число \(x\) которое присутствует на доске хотя бы \(2\) раза,
  • стереть эти \(2\) вхождения,
  • записать число \(x+1\) на доску.

После чего профессор Коро задает марку вопрос: «Какое максимально возможное число может появиться на доске после некоторого количества таких операций?»

Марк быстро отвечает на этот вопрос, но он всё ещё медленнее профессора Коро. Поэтому профессор Коро решает задать Марку дополнительные вопросы. Он будет менять изначальную последовательность чисел на доске \(q\) раз. Каждый раз он будет выбирать положительные целые числа \(k\) и \(l\), затем менять \(a_k\) на \(l\). После каждого такого изменения он будет спрашивать у Марка ответ на тот же самый вопрос.

Помогите Марку ответить на вопросы быстрее профессора Коро!

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

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(q\) (\(2\leq n\leq 2\cdot 10^5\), \(1\leq q\leq 2\cdot 10^5\)) — длина последовательности \(a\) и количество изменений соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\dots,a_n\) (\(1\leq a_i\leq 2\cdot 10^5\)).

Затем следуют \(q\) строк, каждая из которых содержит два целых числа \(k\) и \(l\) (\(1\leq k\leq n\), \(1\leq l\leq 2\cdot 10^5\)), означающие изменение \(a_k\) на значение \(l\).

Выходные данные

Выведите \(q\) строк, \(i\)-я строка должна содержать единственное целое число — ответ после \(i\)-го изменения.

Примечание

В первом примере программа должна обработать \(4\) изменения.

После первого обновления последовательность на доске выглядит как \([2,3,2,4,5]\). Одна из возможных последовательностей операций, достигающих числа \(6\), такая:

  • Изначально, на доске числа \([2,3,2,4,5]\).
  • Удаляем два вхождения числа \(2\) и записываем \(3\), получая \([3,4,5,\color{red}{3}]\).
  • Удаляем два вхождения числа \(3\) и записываем \(4\), получая \([4,5,\color{red}{4}]\).
  • Удаляем два вхождения числа \(4\) и записываем \(5\), получая \([5,\color{red}{5}]\).
  • Удаляем два вхождения числа \(5\) и записываем \(6\), получая \([\color{red}{6}]\).

Затем, во время второго изменения, массив станет равным \([2,3,2,4,3]\). В этот раз Марк не может достичь числа \(6\). Однако одна из последовательностей операций, приводящая к числу \(5\), такая:

  • Изначально, на доске числа \([2,3,2,4,3]\).
  • Удаляем два вхождения числа \(2\) и записываем \(3\), получая \([3,4,3,\color{red}{3}]\).
  • Удаляем два вхождения числа \(3\) и записываем \(4\), получая \([3,4,\color{red}{4}]\).
  • Удаляем два вхождения числа \(4\) и записываем \(5\), получая \([3,\color{red}{5}]\).

Во время третьего изменения массив станет равным \([2,3,2,1,3]\). Один из возможных вариантов достичь числа \(4\) такой:

  • Изначально, на доске числа \([2,3,2,1,3]\).
  • Удаляем два вхождения числа \(3\) и записываем \(4\), получая \([2,2,1,\color{red}{4}]\).

D2. Нарезка морковки (cложная версия)

дп жадные алгоритмы Конструктив математика Перебор Структуры данных теория чисел *2400

Это сложная версия задачи. Единственное отличие между простой и сложной версиями — ограничения на \(n\), \(k\), \(a_i\) и сумму \(n\) по всем наборам входных данных. Вы можете делать взломы, только если обе версии задачи решены.

Обратите внимание на нестандартное ограничение по памяти.

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\) и целое число \(k\).

Стоимость массива целых чисел \(p_1, p_2, \ldots, p_n\) длины \(n\) равна \(\)\max\limits_{1 \le i \le n}\left(\left \lfloor \frac{a_i}{p_i} \right \rfloor \right) - \min\limits_{1 \le i \le n}\left(\left \lfloor \frac{a_i}{p_i} \right \rfloor \right).\(\)

Здесь \(\lfloor \frac{x}{y} \rfloor\) обозначает целую часть от деления \(x\) на \(y\). Найдите минимальную возможную стоимость массива \(p\), такого что \(1 \le p_i \le k\) для всех \(1 \le i \le n\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке даны два числа \(n\) и \(k\) (\(1 \le n, k \le 10^5\)).

Во второй строке даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_1 \le a_2 \le \ldots \le a_n \le 10^5\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число: минимальную возможную стоимость массива \(p\), удовлетворяющего требованию выше.

Примечание

В первом наборе входных данных оптимальный массив \(p = [1, 1, 1, 2, 2]\). Массив значений \(\lfloor \frac{a_i}{p_i} \rfloor\) для данного массива равен \([4, 5, 6, 4, 5]\). Стоимость \(p\) равна \(\max\limits_{1 \le i \le n}(\lfloor \frac{a_i}{p_i} \rfloor) - \min\limits_{1 \le i \le n}(\lfloor \frac{a_i}{p_i} \rfloor) = 6 - 4 = 2\). Можно показать, что не существует массива (удовлетворяющего требованию из условия) с меньшей стоимостью.

Во втором наборе входных данных один из оптимальных массивов \(p = [12, 12, 12, 12, 12]\). Все значения \(\lfloor \frac{a_i}{p_i} \rfloor\) для данного массива равны \(0\).

В третьем наборе входных данных единственный возможный массив \(p = [1, 1, 1]\).

E. Qpwoeirut и вершины

Бинарный поиск Деревья жадные алгоритмы поиск в глубину и подобное разделяй и властвуй снм Структуры данных *2300

Вам дан связный неориентированный граф из \(n\) вершин и \(m\) рёбер. Вершины графа пронумерованы целыми числами от \(1\) до \(n\), а рёбра графа пронумерованы целыми числами от \(1\) до \(m\).

Вам предстоит ответить на \(q\) запросов, каждый из которых состоит из двух чисел \(l\) и \(r\). Ответом на запрос является наименьшее неотрицательное число \(k\), для которого выполняется следующее условие:

  • для всех пар чисел \((a, b)\) таких, что \(l\le a\le b\le r\), вершины \(a\) и \(b\) достижимы друг из друга по пути, проходящему только по первым \(k\) рёбрам (то есть в пути могут встречаться только рёбра \(1, 2, \ldots, k\)).
Входные данные

В первой строке задано одно целое число \(t\) (\(1\le t\le 1000\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке даны три числа \(n\), \(m\) и \(q\) (\(2\le n\le 10^5\), \(1\le m, q\le 2\cdot 10^5\)) — количество вершин, рёбер и запросов соответственно.

В каждой из следующих \(m\) строк дано по два числа \(u_i\) и \(v_i\) (\(1\le u_i, v_i\le n\)) — концы \(i\)-го ребра.

Гарантируется, что заданный граф связный и в нём нет кратных рёбер и петель.

В каждой из следующих \(q\) строк дано по два числа \(l\) и \(r\) (\(1\le l\le r\le n\)) — описания запросов.

Гарантируется, что сумма \(n\) во всем наборам входных данных не превосходит \(10^5\), сумма \(m\) во всем наборам входных данных не превосходит \(2\cdot 10^5\), сумма \(q\) во всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) чисел — ответы на запросы.

Примечание
Граф из первого набора входных данных. Около ребра записан его номер.

В первом наборе входных данных граф состоит из \(2\) вершин и одного ребра между вершинами \(1\) и \(2\).

В первом запросе \(l=1\) и \(r=1\). Вершина достижима сама из себя без использования рёбер, поэтому ответ на этот запрос равен \(0\).

Во втором запросе \(l=1\) и \(r=2\). Вершины \(1\) и \(2\) достижимы друг из друга по пути \(1 \longleftrightarrow 2\), состоящему только из первого ребра. В то же время невозможно добраться из вершины \(1\) до вершины \(2\), используя только первые \(0\) рёбер. Поэтому ответ на запрос равен \(1\).

Граф из второго набора входных данных. Около рёбер записаны их номера.

Во втором наборе входных данных граф состоит из \(5\) вершин и \(5\) рёбер.

В первом запросе \(l=1\) и \(r=4\). Чтобы выполнить требуемое условие, достаточно использовать первые \(3\) ребра:

  • Вершины \(1\) и \(2\) достижимы друг из друга по пути \(1 \longleftrightarrow 2\) (состоящему из ребра \(1\)).
  • Вершины \(1\) и \(3\) достижимы друг из друга по пути \(1 \longleftrightarrow 3\) (состоящему из ребра \(2\)).
  • Вершины \(1\) и \(4\) достижимы друг из друга по пути \(1 \longleftrightarrow 2 \longleftrightarrow 4\) (состоящему из рёбер \(1\) и \(3\)).
  • Вершины \(2\) и \(3\) достижимы друг из друга по пути \(2 \longleftrightarrow 1 \longleftrightarrow 3\) (состоящему из рёбер \(1\) и \(2\)).
  • Вершины \(2\) и \(4\) достижимы друг из друга по пути \(2 \longleftrightarrow 4\) (состоящему из ребра \(3\)).
  • Вершины \(3\) и \(4\) достижимы друг из друга по пути \(3 \longleftrightarrow 1 \longleftrightarrow 2 \longleftrightarrow 4\) (состоящему из рёбер \(2\), \(1\) и \(3\)).

Невозможно выполнить требуемое условие, используя меньше \(3\) первых рёбер. Например, при использовании \(2\) рёбер, невозможно добраться из вершины \(1\) в вершину \(4\). Поэтому ответ на запрос равен \(3\).

Во втором запросе \(l=3\) и \(r=4\). Вершины \(3\) и \(4\) достижимы друг из друга по пути \(3 \longleftrightarrow 1 \longleftrightarrow 2 \longleftrightarrow 4\) (состоящему из рёбер \(2\), \(1\) и \(3\)). При использовании меньшего числа первых рёбер вершины \(3\) и \(4\) не будут достижимы друг из друга.

B. Разностный массив

Перебор реализация сортировки Структуры данных *1900

Вам дан массив \(a\) состоящий из \(n\) неотрицательных целых чисел. Гарантируется, что \(a\) отсортирован от меньших к большим.

За одну операцию мы создаем новый массив \(b_i=a_{i+1}-a_{i}\) для всех \(1 \le i < n\). Затем сортируем \(b\) от меньших к большим, заменяем \(a\) на \(b\) и уменьшаем \(n\) на \(1\).

После применения \(n-1\) операции \(n\) становится равным \(1\). Вам нужно вывести единственное целое число в массиве \(a\) (то есть вывести \(a_1\)).

Входные данные

Входные данные состоят из нескольких наборов. Первая строка содержит единственное целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Затем следуют описания наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(2\le n\le 10^5\)) — длина массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\dots,a_n\) (\(0\le a_1\le \ldots\le a_n \le 5\cdot 10^5\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2.5\cdot 10^5\) и сумма \(a_n\) по всем наборам не превосходит \(5\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ в отдельной строке.

Примечание

Чтобы упростить примечание, обозначим как \(\operatorname{sort}(a)\) массив, получаемый из \(a\) сортировкой от меньших к большим.

В первом наборе изначально \(a=[1,10,100]\). После первой операции \(a=\operatorname{sort}([10-1,100-10])=[9,90]\). После второй операции \(a=\operatorname{sort}([90-9])=[81]\).

Во втором наборе изначально \(a=[4,8,9,13]\). После первой операции \(a=\operatorname{sort}([8-4,9-8,13-9])=[1,4,4]\). После второй операции \(a=\operatorname{sort}([4-1,4-4])=[0,3]\). После последней операции \(a=\operatorname{sort}([3-0])=[3]\).

E. Замена

Бинарный поиск Структуры данных *3500

Вам дан массив целых чисел \(a_1,\ldots, a_n\), где \(1\le a_i \le n\) для всех \(i\).

Так же есть функция «замены» \(f\), которая принимает в качестве аргументов пару целых чисел \((l, r)\), где \(l \le r\), и возвращает пару \(\)f\big( (l, r) \big)=\left(\min\{a_l,a_{l+1},\ldots,a_r\},\, \max\{a_l,a_{l+1},\ldots,a_r\}\right).\(\)

Рассмотрим повторные вызовы этой функции. То есть взяв начальную пару \((l, r)\) мы получаем \(f\big((l, r)\big)\), затем \(f\big(f\big((l, r)\big)\big)\), затем \(f\big(f\big(f\big((l, r)\big)\big)\big)\) и так далее.

Вам нужно ответить на \(q\) запросов. В \(i\)-м запросе вам даны два целых числа \(l_i\) и \(r_i\) (\(1\le l_i\le r_i\le n\)). Вы должны сказать, какое минимальное число раз вы должны применить функцию «замены» к паре \((l_i,r_i)\), чтобы получить \((1, n)\), или определить, что это невозможно.

Входные данные

Первая строка содержит два положительных целых числа \(n\), \(q\) (\(1\le n,q\le 10^5\)) — длина последовательности \(a\) и количество запросов.

Вторая строка содержит \(n\) положительных целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\le a_i\le n\)) — последовательность \(a\).

Каждая из следующих \(q\) строк содержит два целых числа \(l_i\), \(r_i\) (\(1\le l_i\le r_i\le n\)) — запросы.

Выходные данные

Для каждого запроса выведите требуемое количество применений функции или \(-1\), если достичь требуемого результата невозможно.

Примечание

В первом примере \(n=5\) и \(a=[2,5,4,1,3]\).

В первом запросе: \((4,4)\to(1,1)\to(2,2)\to(5,5)\to(3,3)\to(4,4)\to\ldots\), поэтому невозможно получить \((1,5)\).

Во втором запросе у вас уже есть \((1,5)\).

В третьем запросе: \((1,4)\to(1,5)\).

В четвертом запросе: \((3,5)\to(1,4)\to(1,5)\).

В пятом запросе: \((4,5)\to(1,3)\to(2,5)\to(1,5)\).

В шестом запросе: \((2,3)\to(4,5)\to(1,3)\to(2,5)\to(1,5)\).

B. Also Try Minecraft

дп реализация Структуры данных *900

Вы занимаетесь бета-тестированием нового секретного обновления игры Terraria. Это обновление добавит в игру квесты!

Для простоты карту мира можно представить как массив длины \(n\), где \(i\)-й столбец мира имеет высоту \(a_i\).

Вам необходимо протестировать \(m\) квестов. Квест с номером \(j\) представлен двумя целыми числами \(s_j\) и \(t_j\). В этом квесте вам необходимо добраться из столбца \(s_j\) до столбца \(t_j\). В начале квеста вы появляетесь в столбце \(s_j\).

За один ход вы можете перейти из столбца \(x\) в столбец \(x-1\) или в столбец \(x+1\). В этой версии у вас есть Spectre Boots, которые позволяют вам летать. Так как это бета-версия, эти ботинки работают неправильно, поэтому они позволяют вам летать только тогда, когда вы движетесь вверх, и имеют бесконечную длительность полета. Когда вы перемещаетесь из столбца с высотой \(p\) в столбец с высотой \(q\), вы получаете какое-то количество урона от падения. Если высота \(p\) больше высоты \(q\), вы получаете \(p - q\) единиц урона от падения, иначе вы летите вверх и получаете \(0\) единиц урона.

Для каждого из заданных квестов определите минимальное количество урона от падения, которое вы можете получить, выполняя этот квест.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 10^5; 1 \le m \le 10^5\)) — количество столбцов в мире и количество квестов, которые вам надо протестировать, соответственно.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) равно высоте \(i\)-го столбца мира.

Следующие \(m\) строк описывают квесты. В \(j\)-й из них содержатся два целых числа \(s_j\) и \(t_j\) (\(1 \le s_j, t_j \le n; s_j \ne t_j\)), которые значат, что вам необходимо переместиться из столбца \(s_j\) в столбец \(t_j\) в течение \(j\)-го квеста.

Заметьте, что \(s_j\) может быть больше, чем \(t_j\).

Выходные данные

Выведите \(m\) строк. В \(j\)-й из них должно находиться минимальное количество урона от падения, который вы можете получить во время выполнения \(j\)-го квеста.

D. Роророробот

Бинарный поиск жадные алгоритмы математика Структуры данных *1700

Дано поле, состоящее из \(n\) строк и \(m\) столбцов. Строки пронумерованы от \(1\) до \(n\) снизу вверх. Столбцы пронумерованы от \(1\) до \(m\) слева направо. В \(i\)-м столбце нижние \(a_i\) ячеек заблокированы (ячейки в строках \(1, 2, \dots, a_i\)), оставшиеся \(n - a_i\) ячеек разблокированы.

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

Однако, робот сломан — он выполняет каждую команду \(k\) раз. То есть, если вы говорите ему двигаться вверх, например, то он перейдет вверх \(k\) раз (на \(k\) ячеек). Нельзя посылать команды, пока робот выполняет текущую.

Приходят \(q\) запросов о роботе. Каждый запрос определяется начальной клеткой, конечной клеткой и значением \(k\). Можно ли послать роботу произвольное количество команд (возможно, ноль) так, что он достигнет конечную клетку из начальной с учетом того, что каждая команда выполняется \(k\) раз?

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

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 10^9\); \(1 \le m \le 2 \cdot 10^5\)) — количество строк и столбцов на поле.

Во второй строке записаны \(m\) целых чисел \(a_1, a_2, \dots, a_m\) (\(0 \le a_i \le n\)) — количество заблокированных ячеек внизу \(i\)-го столбца.

В третьей строке записано одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

В каждой из следующих \(q\) строк записаны пять чисел \(x_s, y_s, x_f, y_f\) и \(k\) (\(a[y_s] < x_s \le n\); \(1 \le y_s \le m\); \(a[y_f] < x_f \le n\); \(1 \le y_f \le m\); \(1 \le k \le 10^9\)) — строка и столбец начальной ячейки, строка и столбец конечной ячейки и количество раз, которое выполняется каждая команда. Начальная и конечная клетки разблокированы.

Выходные данные

На каждый запрос выведите «YES», если можно послать роботу произвольное количество команд (возможно, ноль) так, что он достигнет конечную клетку из начальной с учетом того, что каждая команда выполняется \(k\) раз. Иначе выведите «NO».

E. XOR дерево

битмаски Деревья жадные алгоритмы поиск в глубину и подобное снм Структуры данных *2400

Дано дерево из \(n\) вершин. На каждой вершине дерева записано число; на \(i\)-й вершине записано число \(a_i\).

Напомним, что простой путь — это путь, посещающий каждую вершину не более одного раза. Назовем весом пути побитовое исключающее ИЛИ значений записанных на его вершинах. Скажем, что дерево хорошее, если в нем не существует ни одного простого пути с весом \(0\).

Вы можете применить следующую операцию произвольное количество раз (возможно, ноль): выбрать вершину дерева и заменить значение записанное на ней на произвольное положительное целое число. Какое минимальное количество раз необходимо применить данную операцию, чтобы дерево стало хорошим?

Входные данные

В первой строке задано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество вершин.

Во второй строке задано \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i < 2^{30}\)) — числа, записанные на вершинах дерева.

Затем следует \(n - 1\) строка, каждая из которых содержит два числа \(x\) и \(y\) (\(1 \le x, y \le n; x \ne y\)), обозначающие ребро между вершиной \(x\) и вершиной \(y\). Гарантируется, что эти ребра задают дерево.

Выходные данные

Выведите одно целое число — минимальное количество раз, которое необходимо применить операцию, чтобы дерево стало хорошим.

Примечание

В первом примере можно заменить значение на вершине \(1\) на \(13\), а значение на вершине \(4\) — на \(42\).

B. Дождь

Бинарный поиск геометрия жадные алгоритмы математика Перебор реализация Структуры данных *2100

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

В следующие \(n\) дней будет идти дождь. В \(i\)-й день центр дождя будет располагаться в точке \(x_i\), а интенсивность дождя будет равна \(p_i\). Из-за дождей будет собираться дождевая вода; пусть \(a_j\) будет обозначать объем воды, накопившийся в точке \(j\). Изначально \(a_j\) равно \(0\), после дождя в \(i\)-й день это значение увеличится на \(\max(0,p_i-|x_i-j|)\).

Поле затопит, если в некоторый момент будет существовать точка \(j\), в которой накопится \(a_j>m\) воды.

Вы можете использовать заклинание и отменить дождь в ровно один из дней, т. е. установить \(p_i=0\). Для каждого \(i\) от \(1\) до \(n\) определите, если вы отмените дождь в \(i\)-й день, верно ли, что затопления не случится?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 2 \cdot 10^5\), \(1 \leq m \leq 10^9\)) — количество дней и максимальный объем воды, который может находиться в одной точке, не вызывая затопления.

Далее следуют \(n\) строк. \(i\)-я из этих строк содержит два целых числа \(x_i\) и \(p_i\) (\(1 \leq x_i,p_i \leq 10^9\)) — положение центра и интенсивность дождя в \(i\)-й день.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите бинарную строку \(s\) длины \(n\). \(i\)-й символ строки \(s\) должен быть равен 1, если в случае отмены дождя в \(i\)-й день затопления не случится, и 0, если в случае отмены дождя в \(i\)-й день затопление произойдет.

Примечание

В первом наборе входных данных, если не использовать заклинание, собравшаяся вода будет выглядеть следующим образом:

Если отменить дождь в третий день, затопление будет предотвращено, и собравшаяся вода будет выглядеть следующим образом:

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

В третьем примере нет способа избежать затопления.

D. Пустой граф

Бинарный поиск жадные алгоритмы Конструктив кратчайшие пути Структуры данных *2000

 — Do you have a wish?
 — I want people to stop gifting each other arrays.
O_o and Another Young Boy

Массив из \(n\) целых положительных чисел \(a_1,a_2,\ldots,a_n\) упал на вас с небес вместе с целым положительным числом \(k \le n\).

Вы можете применить следующую операцию не более \(k\) раз:

  • Выбрать индекс \(1 \le i \le n\) и целое число \(1 \le x \le 10^9\). Затем выполнить \(a_i := x\) (присвоить \(x\) значению \(a_i\)).

Затем вы строите полный неориентированный взвешенный граф с \(n\) вершинами, пронумерованными целыми числами от \(1\) до \(n\), где ребро \((l, r)\) (\(1 \le l < r \le n\)) имеет вес \(\min(a_{l},a_{l+1},\ldots,a_{r})\).

Вам необходимо найти максимально возможный диаметр итогового графа после применения не более \(k\) операций.

Диаметр неориентированного взвешенного графа равен \(\max\limits_{1 \le u < v \le n}{\operatorname{d}(u, v)}\), где \(\operatorname{d}(u, v)\) является длиной кратчайшего пути между вершинами \(u\) и \(v\) данного графа.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 10^5\), \(1 \le k \le n\)).

Вторая строка каждого набора входных данных содержит \(n\) целых положительных чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимально возможный диаметр итогового графа после применения не более \(k\) операций.

Примечание

В первом наборе входных данных один из оптимальных итоговых массивов — \([2,4,5]\).

Граф, полученный из данного массива:

\(\operatorname{d}(1, 2) = \operatorname{d}(1, 3) = 2\) и \(\operatorname{d}(2, 3) = 4\), поэтому диаметр графа равен \(\max(2,2,4) = 4\).

E2. Сумма НОК (сложная версия)

математика Перебор Структуры данных теория чисел *2500

We are sum for we are many
Some Number

Это сложная версия задачи. Разница между простой и сложной версиями задачи заключается только в ограничении на \(t\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Вам даны два целых положительных числа \(l\) и \(r\).

Посчитайте количество уникальных троек целых чисел \((i, j, k)\) таких, что \(l \le i < j < k \le r\) и \(\operatorname{lcm}(i,j,k) \ge i + j + k\).

Здесь \(\operatorname{lcm}(i, j, k)\) означает наименьшее общее кратное (НОК) целых чисел \(i\), \(j\), и \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(\bf{1 \le t \le 10^5}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(l\) и \(r\) (\(1 \le l \le r \le 2 \cdot 10^5\), \(l + 2 \le r\)).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — количество уникальных троек целых чисел, подходящих под условия задачи.

Примечание

В первом наборе входных данных существует \(3\) подходящих тройки:

  • \((1,2,3)\),
  • \((1,3,4)\),
  • \((2,3,4)\).

Во втором наборе входных данных существует только \(1\) подходящая тройка:

  • \((3,4,5)\).

F. Триаметр

Бинарный поиск Деревья поиск в глубину и подобное Структуры данных *3200

 — What is my mission?
 — To count graph diameters.
You and Your Submission

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

Вам дано взвешенное дерево с \(n\) вершинами, каждое ребро которого имеет вес \(1\). Определим множество вершин \(L\) следующим образом: все вершины, степень которых равна \(1\), входят в это множество, остальные вершины в это множество не входят.

Вам необходимо ответить на \(q\) независимых запросов. В \(i\)-м запросе:

  1. Вам дано целое положительное число \(x_i\).
  2. Для всех \(u,v \in L\) таких, что \(u < v\), добавьте ребро \((u, v)\) с весом \(x_i\) в граф (который изначально является данным вам деревом).
  3. Найдите диаметр итогового графа.

Диаметр графа равен \(\max\limits_{1 \le u < v \le n}{\operatorname{d}(u, v)}\), где \(\operatorname{d}(u, v)\) — это длина кратчайшего пути между вершинами \(u\) и \(v\).

Входные данные

В первой строке находится единственное целое число \(n\) (\(3 \le n \le 10^6\)).

Во второй строке находится \(n - 1\) целое число \(p_2,p_3,\ldots,p_n\) (\(1 \le p_i < i\)), каждое из которых означает, что в графе есть ребро между вершинами \(i\) и \(p_i\). Гарантируется, что данные ребра образуют дерево.

В третьей строке находится единственное целое число \(q\) (\(1 \le q \le 10\)).

В четвертой строке находится \(q\) целых чисел \(x_1,x_2,\ldots,x_q\) (\(1 \le x_i \le n\)). Все \(x_i\) попарно различны.

Выходные данные

В единственной строке выведите \(q\) целых чисел, которые являются ответами на запросы.

Примечание

Граф в первом тесте после добавления ребер:

E. Обмен крестом

2-sat жадные алгоритмы матрицы снм Структуры данных *2400

Вам дана квадратная матрица \(A\) размера \(n \times n\), элементы которой — целые числа. Обозначим элемент на пересечении \(i\)-й строки и \(j\)-го столбца за \(A_{i,j}\).

Вы можете выполнять некоторые операции над матрицей. На каждой операции вы выбираете индекс \(k\), а затем для всех \(i\) (\(1 \leq i \leq n\)) меняете местами \(A_{i, k}\) и \(A_{k, i}\). Обратите внимание, что элемент \(A_{k, k}\) не меняется.

Например, для \(n = 4\) и \(k = 3\) матрица будет преобразована следующим образом:

Операция \(k = 3\) меняет местами синюю строку и зеленый столбец.

Вы можете выполнять эту операцию произвольное количество раз. Найдите лексикографически минимальную матрицу\(^\dagger\), которую вы можете получить после выполнения произвольного числа операций.

\({}^\dagger\) Для двух матриц \(A\) и \(B\) размера \(n \times n\) положим \(a_{(i-1) \cdot n + j} = A_{i,j}\) и \(b_{(i-1) \cdot n + j} = B_{i,j}\). Тогда матрица \(A\) лексикографически меньше матрицы \(B\), если существует индекс \(i\) (\(1 \leq i \leq n^2\)) такой, что \(a_i < b_i\) и для всех индексов \(j\) таких, что \(1 \leq j < i\), выполняется \(a_j = b_j\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 1000\)) — размер матрицы.

\(i\)-я из следующих \(n\) строк содержит \(n\) целых чисел \(A_{i, 1}, A_{i, 2}, \dots, A_{i, n}\) (\(1 \le A_{i, j} \le 10^9\)) — описание матрицы \(A\).

Гарантируется, что сумма значений \(n^2\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк по \(n\) чисел — лексикографически минимальную матрицу.

Примечание

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

В первом наборе входных данных можно выполнить \(1\) операцию с \(k = 3\). Матрица будет преобразована следующим образом:

Во втором наборе можно выполнить \(2\) операции с \(k = 1\) и \(k = 3\):

B. Удали префикс

жадные алгоритмы реализация Структуры данных *800

Поликарпу подарили некоторую последовательность целых чисел \(a\) длины \(n\) (\(1 \le a_i \le n\)). Последовательность может порадовать Поликарпа, только если она состоит из различных чисел. Для того чтобы сделать свою последовательность такой, Поликарп собирается сделать некоторое (возможно, нулевое) количество ходов.

За один ход он может:

  • удалить первый (крайний левый) элемент последовательности.

Например, за один ход из последовательности \([3, 1, 4, 3]\) получится последовательность \([1, 4, 3]\), которая состоит из различных чисел.

Определите, какое минимальное количество ходов ему надо сделать, чтобы в оставшейся последовательности все элементы были различны. Иными словами, найдите длину наименьшего префикса заданной последовательности \(a\), после удаления которого все значения в последовательности будут уникальны.

Входные данные

В первой строке входных данных записано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк.

В первой из них записано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина заданной последовательности \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — элементы заданной последовательности \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

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

Примечание

Ниже перечислены последовательности, которые останутся после удаления префиксов:

  • \([1, 4, 3]\);
  • \([1]\);
  • \([1]\);
  • \([6, 5, 4, 3, 2, 1]\);
  • \([2, 1]\).

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

D. Покрась вхождениями

дп жадные алгоритмы Перебор Строки Структуры данных *1600

Вам задан некоторый текст \(t\) и набор из \(n\) строк \(s_1, s_2, \dots, s_n\).

За один ход вы можете выбрать любое вхождение любой строки \(s_i\) в текст \(t\) и покрасить соответствующие символы текста в красный цвет. Например, если \(t=\texttt{bababa}\) и \(s_1=\texttt{ba}\), \(s_2=\texttt{aba}\), то за один ход можно получить \(t=\color{red}{\texttt{ba}}\texttt{baba}\), \(t=\texttt{b}\color{red}{\texttt{aba}}\texttt{ba}\) или \(t=\texttt{bab}\color{red}{\texttt{aba}}\).

Вы хотите сделать все буквы текста \(t\) красными. При повторной покраске буквы в красный цвет, она остаётся красной.

В примере выше достаточно три хода:

  • Перекрасим в красный цвет \(t[2 \dots 4]=s_2=\texttt{aba}\), получим \(t=\texttt{b}\color{red}{\texttt{aba}}\texttt{ba}\);
  • Перекрасим в красный цвет \(t[1 \dots 2]=s_1=\texttt{ba}\), получим \(t=\color{red}{\texttt{baba}}\texttt{ba}\);
  • Перекрасим в красный цвет \(t[4 \dots 6]=s_2=\texttt{aba}\), получим \(t=\color{red}{\texttt{bababa}}\).

Каждая строка \(s_i\) может применяться произвольное количество раз (или не применяться вообще). Вхождения для покраски могут пересекаться произвольным образом.

Определите, какое минимальное количество ходов надо сделать, чтобы покрасить все буквы \(t\) в красный цвет и как для этого надо совершать ходы. Если сделать все буквы текста \(t\) красными невозможно, то выведите -1.

Входные данные

Первая строка входных данных содержит целое число \(q\) (\(1 \le q \le 100\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка каждого набора содержит текст \(t\) (\(1 \le |t| \le 100\)), состоящий только из строчных латинских букв, где \(|t|\) — длина текста \(t\).

Вторая строка каждого набора содержит единственное целое число \(n\) (\(1 \le n \le 10\)) — количество строк в наборе.

Далее следует \(n\) строк, каждая из которых содержит строку \(s_i\) (\(1 \le |s_i| \le 10\)), состоящую только из строчных латинских букв, где \(|s_i|\) — длина строки \(s_i\).

Выходные данные

Для каждого набора входных данных выведите ответ на отдельной строке.

Если невозможно сделать все буквы текста красными, то выведите единственную строку, содержащую число -1.

Иначе, на первой строке выведите число \(m\) — минимальное количество ходов, которые потребуются, чтобы сделать все буквы \(t\) красными.

Затем в последующих \(m\) строках выведите пары чисел: \(w_j\) и \(p_j\) (\(1 \le j \le m\)), которые обозначают, что строка с индексом \(w_j\) была использована как подстрока для покрытия вхождения, начинающегося в тексте \(t\) с позиции \(p_j\). Пары можно выводить в любом порядке.

Если вариантов ответа несколько, выведите любой из них.

Примечание

Первый набор входных данных разобран в условии задачи.

Во втором наборе входных данных невозможно сделать все буквы текста красными.

G. Префиксы путей

Бинарный поиск Деревья поиск в глубину и подобное Структуры данных *1700

Вам задано корневое дерево. Оно содержит \(n\) вершин, которые пронумерованы от \(1\) до \(n\). Корнем является вершина \(1\).

У каждого ребра есть две положительных целых стоимости. Таким образом, для каждого ребра заданы два положительных целых числа \(a_j\) и \(b_j\).

Выведите \(n-1\) число \(r_2, r_3, \dots, r_n\), где \(r_i\) определяется следующим образом.

Рассмотрим путь из корня (вершины \(1\)) в \(i\) (\(2 \le i \le n\)). Пусть сумма стоимостей \(a_j\) вдоль этого пути равна \(A_i\). Тогда \(r_i\) равно длине максимального такого префикса этого пути, что сумма \(b_j\) вдоль этого префикса не превосходит \(A_i\).

Пример для \(n=9\). Синим цветом изображены стоимости \(a_j\), а красным изображены стоимости \(b_j\).

Рассмотрим пример. В этом случае:

  • \(r_2=0\), так как путь до \(2\) имеет сумму по \(a_j\) равную \(5\), только префикс этого пути длины \(0\) имеет меньшую или равную сумму по \(b_j\);
  • \(r_3=3\), так как путь до \(3\) имеет сумму по \(a_j\) равную \(5+9+5=19\), префикс длины \(3\) этого пути имеет сумму по \(b_j\) равную \(6+10+1=17\) (число \(17 \le 19\));
  • \(r_4=1\), так как путь до \(4\) имеет сумму по \(a_j\) равную \(5+9=14\), префикс длины \(1\) этого пути имеет сумму по \(b_j\) равную \(6\) (это самый длинный подходящий префикс, так как префикс длины \(2\) уже имеет сумму по \(b_j\) равную \(6+10=16\), что больше \(14\));
  • \(r_5=2\), так как путь до \(5\) имеет сумму по \(a_j\) равную \(5+9+2=16\), префикс длины \(2\) этого пути имеет сумму по \(b_j\) равную \(6+10=16\) (это самый длинный подходящий префикс, так как префикс длины \(3\) уже имеет сумму по \(b_j\) равную \(6+10+1=17\), что больше \(16\));
  • \(r_6=1\), так как путь до \(6\) имеет сумму по \(a_j\) равную \(2\), префикс длины \(1\) этого пути имеет сумму по \(b_j\) равную \(1\);
  • \(r_7=1\), так как путь до \(7\) имеет сумму по \(a_j\) равную \(5+3=8\), префикс длины \(1\) этого пути имеет сумму по \(b_j\) равную \(6\) (это самый длинный подходящий префикс, так как префикс длины \(2\) уже имеет сумму по \(b_j\) равную \(6+3=9\), что больше \(8\));
  • \(r_8=2\), так как путь до \(8\) имеет сумму по \(a_j\) равную \(2+4=6\), префикс длины \(2\) этого пути имеет сумму по \(b_j\) равную \(1+3=4\);
  • \(r_9=3\), так как путь до \(9\) имеет сумму по \(a_j\) равную \(2+4+1=7\), префикс длины \(3\) этого пути имеет сумму по \(b_j\) равную \(1+3+3=7\).
Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Каждое описание начинается строкой, которая содержит целое число \(n\) (\(2 \le n \le 2\cdot10^5\)) — количество вершин в дереве.

Далее следует \(n-1\) строка, каждая из которых содержит три числа \(p_j, a_j, b_j\) (\(1 \le p_j \le n\); \(1 \le a_j,b_j \le 10^9\)) — предок вершины \(j\), первая и вторая стоимости ребра, которое ведёт из \(p_j\) в \(j\). Величина \(j\) пробегает все значения от \(2\) до \(n\) включительно. Гарантируется, что в каждом наборе входных данных задано корректное подвешенное дерево с корнем в вершине \(1\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n-1\) целое число в одной строке: \(r_2, r_3, \dots, r_n\).

Примечание

Первый пример разобран в условии.

Во втором примере:

  • \(r_2=0\), так как путь до \(2\) имеет сумму по \(a_j\) равную \(1\), только префикс этого пути длины \(0\) имеет меньшую или равную сумму по \(b_j\);
  • \(r_3=0\), так как путь до \(3\) имеет сумму по \(a_j\) равную \(1+1=2\), префикс длины \(1\) этого пути имеет сумму по \(b_j\) равную \(100\) (\(100 > 2\));
  • \(r_4=3\), так как путь до \(4\) имеет сумму по \(a_j\) равную \(1+1+101=103\), префикс длины \(3\) этого пути имеет сумму по \(b_j\) равную \(102\), .

C. Моноблок

Комбинаторика математика реализация Структуры данных *1700

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

Крутостью массива назовем минимальное количество блоков подряд идущих одинаковых чисел, на которые он разбивается.

Например, крутость массива

  • \([1, 1, 1]\) это \(1\);
  • \([5, 7]\) это \(2\), ведь его можно разбить на два блока: \([5]\) и \([7]\);
  • \([1, 7, 7, 7, 7, 7, 7, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9]\) это 3, потому что его можно разбить на блоки \([1]\), \([7, 7, 7, 7, 7, 7, 7]\) и \([9, 9, 9, 9, 9, 9, 9, 9, 9]\).

Вам дан массив \(a\) длины \(n\), а также \(m\) запросов, состоящих из двух целых чисел \(i\) и \(x\). Запрос \(i\), \(x\) означает, что теперь \(i\)-й элемент массива \(a\) равен \(x\).

После каждого запроса выведите сумму крутостей всех непустых подотрезков массива \(a\). Другими словами, после каждого запроса вам надо вычислять \(\)\sum\limits_{l = 1}^n \sum\limits_{r = l}^n g(l, r),\(\) где \(g(l, r)\) это крутость массива \(b = [a_l, a_{l + 1}, \ldots, a_r]\).

Входные данные

В первой строке вводятся \(n\) и \(m\) (\(1 \leq n, m \leq 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — массив \(a\).

В каждой из следующих \(m\) строк вам дает описание запросов. Каждая строка содержит два целых числа \(i\) и \(x\) (\(1 \leq i \leq n\), \(1 \leq x \leq 10^9\)).

Выходные данные

После каждого запроса выведите ответ на задачу в отдельной строке.

Примечание

После первого запроса массив \(a\) равен \([1, 2, 2, 4, 5]\), ответ равен \(29\), потому что подрезки массива можно разбить на блоки:

  1. \([1; 1]\): \([1]\), 1 блок;
  2. \([1; 2]\): \([1] + [2]\), 2 блока;
  3. \([1; 3]\): \([1] + [2, 2]\), 2 блока;
  4. \([1; 4]\): \([1] + [2, 2] + [4]\), 3 блока;
  5. \([1; 5]\): \([1] + [2, 2] + [4] + [5]\), 4 блока;
  6. \([2; 2]\): \([2]\), 1 блок;
  7. \([2; 3]\): \([2, 2]\), 1 блок;
  8. \([2; 4]\): \([2, 2] + [4]\), 2 блока;
  9. \([2; 5]\): \([2, 2] + [4] + [5]\), 3 блока;
  10. \([3; 3]\): \([2]\), 1 блок;
  11. \([3; 4]\): \([2] + [4]\), 2 блока;
  12. \([3; 5]\): \([2] + [4] + [5]\), 3 блока;
  13. \([4; 4]\): \([4]\), 1 блок;
  14. \([4; 5]\): \([4] + [5]\), 2 блока;
  15. \([5; 5]\): \([5]\), 1 блок;
что в сумме равняется \(1 + 2 + 2 + 3 + 4 + 1 + 1 + 2 + 3 + 1 + 2 + 3 + 1 + 2 + 1 = 29\).

E. Долгий путь домой

геометрия графы дп жадные алгоритмы кратчайшие пути разделяй и властвуй Структуры данных *2400

Олеся решила отправиться в путешествие по стране, состоящей из \(n\) городов (она живет в городе \(1\)). Между некоторыми городами страны есть двусторонние дороги. Для каждой дороги известно время, необходимое для того, чтобы по ней проехать. Также между каждой парой городов есть авиарейс, перелет из города \(u\) в город \(v\) занимает \((u - v)^2\) времени.

Олеся недавно посмотрела «Чудо на Гудзоне» и несколько боится летать, поэтому она может воспользоваться не более чем \(k\) перелетами. Олеся хочет узнать минимальное время путешествия в каждый из \(n\) городов страны из города \(1\).

Входные данные

В первой строке находятся числа \(n\), \(m\) и \(k\) (\(2 \leq n \leq 10^{5}\), \(1 \leq m \leq 10^{5}\), \(1 \leq k \leq 20\)) — количество городов, дорог и максимальное количество перелётов, которое может совершить Олеся.

Следующие \(m\) строк описывают дороги. В каждой находятся числа \(u\), \(v\), \(w\) (\(1 \leq u, v \leq n\), \(u \neq v\), \(1 \leq w \leq 10^{9}\)) — города, которые соединяет дорога, и время, необходимое, чтобы по ней проехать. Некоторые пары городов могут быть соединены более чем одной парой дорог.

Выходные данные

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

Примечание

В первом примере время путешествия до города 1 равно 0; чтобы добраться в город 2, можно воспользоваться авиаперелетом из 1 в 2 за 1 единицу времени; в город 3 можно добраться из города 1 по дороге за 1 единицу времени.

Во втором примере время путешествия до города 1 равно 0. Чтобы добраться в город 2, можно воспользоваться авиаперелетом из 1 в 2, занимающим 1 единицу времени. Чтобы добраться в город 3 за 4 единицы времени, можно проехать из города 1 в город 2 по дороге за 3 единицы времени, а потом воспользоваться авиаперелетом из 2 в 3. Чтобы добраться в город 4, можно воспользоваться авиаперелетом из города 1 в город 2, а потом проехать из города 2 в город 4 по дороге за 5 единиц времени.

C. Робот в коридоре

дп жадные алгоритмы реализация Структуры данных Тернарный поиск *2000

Задано поле, состоящее из \(2\) строк и \(m\) столбцов. Строки занумерованы от \(1\) до \(2\) сверху вниз. Столбцы занумерована от \(1\) до \(m\) слева направо.

Робот начинает в клетке \((1, 1)\). За одну секунду он может проделать любое из двух действий:

  • перейти в соседнюю по стороне клетку: наверх, направо, вниз или налево;
  • остаться в той же клетке.

Роботу запрещено выходить за пределы поля.

Изначально все клетки, кроме клетки \((1, 1)\) заблокированы. Каждая клетка \((i, j)\) содержит значение \(a_{i,j}\) — момент, когда данная клетка будет разблокирована. Робот может перейти в клетку \((i, j)\), если до начала хода прошло хотя бы \(a_{i,j}\) секунд.

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

Какое минимальное время у него это может занять?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора записано одно целое число \(m\) (\(2 \le m \le 2 \cdot 10^5\)) — количество столбцов поля.

В \(i\)-й из следующих \(2\) строк записаны \(m\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i,m}\) (\(0 \le a_{i,j} \le 10^9\)) — момент времени, в который каждая клетка будет разблокирована. \(a_{1,1} = 0\). Если \(a_{i,j} = 0\), то клетка \((i, j)\) разблокирована с самого начала.

Сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

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

E. Обмен и максимальный отрезок

битмаски дп поиск в глубину и подобное разделяй и властвуй Структуры данных *2500

Задан массив длины \(2^n\). Элементы массива пронумерованы от \(1\) до \(2^n\).

Надо обработать \(q\) запросов к массиву. В \(i\)-м запросе будет дано целое число \(k\) (\(0 \le k \le n-1\)). Чтобы обработать запрос, надо сделать следующее:

  • для каждого \(i \in [1, 2^n-2^k]\) в возрастающем порядке сделайте следующее: если \(i\)-й элемент уже менялся местами с каким-либо другим элементов в текущем запросе, пропустите его; иначе поменяйте местами \(a_i\) и \(a_{i+2^k}\);
  • после этого выведите наибольшую сумму среди всех непрерывных подотрезков массива (включая пустой подотрезок).

Например, если массив \(a\) равен \([-3, 5, -3, 2, 8, -20, 6, -1]\), а \(k = 1\), то запрос обрабатывается так:

  • \(1\)-й элемент еще не менялся ни с кем местами, поэтому поменяем его местами с \(3\)-м элементом;
  • \(2\)-й элемент еще не менялся ни с кем местами, поэтому поменяем его местами с \(4\)-м элементом;
  • \(3\)-й элемент уже менялся местами;
  • \(4\)-й элемент уже менялся местами;
  • \(5\)-й элемент еще не менялся ни с кем местами, поэтому поменяем его местами с \(7\)-м элементом;
  • \(6\)-й элемент еще не менялся ни с кем местами, поэтому поменяем его местами с \(8\)-м элементом.

Тогда массив становится равен \([-3, 2, -3, 5, 6, -1, 8, -20]\). Подотрезок с максимальной суммой — это \([5, 6, -1, 8]\), и ответ на запрос равен \(18\).

Обратите внимание, что запросы изменяют массив, т. е. после выполнения запроса массив не возвращается в изначальное состояние, и следующий запрос будет применен к измененному массиву.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 18\)).

Во второй строке записаны \(2^n\) целых чисел \(a_1, a_2, \dots, a_{2^n}\) (\(-10^9 \le a_i \le 10^9\)).

В третьей строке записано одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)).

Затем следуют \(q\) строк, в \(i\)-й из них записано одно целое число \(k\) (\(0 \le k \le n-1\)), описывающее \(i\)-й запрос.

Выходные данные

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

Примечание

Преобразование массива в примере: \([-3, 5, -3, 2, 8, -20, 6, -1] \rightarrow [-3, 2, -3, 5, 6, -1, 8, -20] \rightarrow [2, -3, 5, -3, -1, 6, -20, 8] \rightarrow [5, -3, 2, -3, -20, 8, -1, 6]\).

A2. Бурёнка и традиции (сложная версия)

дп жадные алгоритмы Структуры данных *1900

Это усложненная версия этой задачи. Разница между легкой и сложной версиями заключается в ограничениях на \(a_i\) и на \(n\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Бурёнка — наследная принцесса Бурятии, и скоро она станет \(n\)-й по счёту королевой страны. В Бурятии есть древняя традиция — правитель перед своей коронацией должен показать жителям свою силу. Чтобы определить силу \(n\)-го правителя, жители страны дают ему массив \(a\) из ровно \(n\) чисел, после чего он должен превратить все элементы массива в нули за наименьшее время. Правитель может любое число раз выполнить следующую операцию из двух шагов:

  • выбрать два индекса \(l\) и \(r\) такие, что \(1 \le l \le r \le n\) и целое неотрицательное число \(x\), затем
  • для всех \(l \leq i \leq r\) присвоить \(a_i := a_i \oplus x\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ. На эту операцию он потратит \(\left\lceil \frac{r-l+1}{2} \right\rceil\) секунд, где \(\lceil y \rceil\) обозначает округление числа \(y\) вверх до ближайшего целого.

Помогите Буренке посчитать, сколько времени ей понадобится.

Входные данные

В первой строке находится единственное целое число \(t\) \((1 \le t \le 500)\)  — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится единственное целое число \(n\) \((1 \le n \le 10^5)\).

Во второй строке каждого набора входных данных содержатся \(n\) целых чисел \(a_1, a_2, \cdots , a_n\) \((0 \le a_i < 2^{30})\) — элементы массива.

Cумма \(n\) по всем тестам не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальное время, которое понадобится Буренке.

Примечание

В первом наборе входных данных Бурёнка может выбрать индексы \(l = 1\), \(r = 4\) и \(x=5\). так он заполнит массив нулями за \(2\) секунды.

Во втором наборе входных данных Бурёнка сначала выбирает индексы \(l = 1\), \(r = 2\) и \(x = 1\), после чего \(a = [0, 2, 2]\), а затем индексы \(l = 2\), \(r = 3\) и \(x=2\), что заполняет массив нулями. Суммарно Бурёнка потратит \(2\) секунды.

C. Тоня и Бурёнка-179

жадные алгоритмы математика Структуры данных теория чисел *2400

Тоне на день рождения подарили массив \(a\) длины \(n\), записанный на открытке. По какой-то причине открытка оказалась циклическим массивом, поэтому индекс элемента, находящегося строго справа от \(n\)-го, равен \(1\). Тоня захотел получше изучить её, поэтому он купил робота «Бурёнка-179».

Программа для «Бурёнки» задается парой чисел \((s, k)\), \(1 \leq s \leq n\), \(1 \leq k \leq n-1\). Обратите внимание, что \(k\) не может быть равно \(n\). Изначально Тоня ставит робота в позицию \(s\) массива. После этого «Бурёнка» сделает ровно \(n\) шагов по массиву. Если в начале очередного шага «Бурёнка» стоит в позиции \(i\), то происходит следующее:

  1. К полезности программы добавляется число \(a_{i}\).
  2. «Бурёнка» перемещается на \(k\) позиций вправо (выполняется \(i := i + k\), если \(i\) станет больше \(n\), то \(i := i - n\)).

Помогите Тоне найти максимальную возможную полезность программы для «Бурёнки», если изначальная полезность любой программы равна \(0\).

Кроме того, друг Тони Илюша \(q\) раз просит изменить массив. Каждое изменение состоит в присваивании \(a_p := x\) для некоторых чисел \(p\) и \(x\). Вам необходимо найти максимальную возможную полезность программы после каждого из таких изменений.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится два целых числа \(n\) и \(q\) (\(2 \le n \le 2 \cdot 10^5\), \(0 \le q \le 2 \cdot 10^5\)).

Во второй строке каждого набора входных данных содержатся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива.

В следующих \(q\) строках находятся описания изменений, каждое из которых состоит из двух целых чисел \(p\) и \(x\) (\(1 \leq p \leq n\), \(1 \leq x \leq 10^9\)), означающих, что необходимо выполнить \(a_p := x\).

Гарантируется, что сумма \(n\) и сумма \(q\) по всем тестам не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q+1\) число — максимальную полезность программы изначально и после каждого запроса.

Примечание

В первом наборе входных данных изначально и после каждого запроса ответ достигается при \(s = 1\), \(k = 1\) или \(s = 2\), \(k = 1\).

Во втором наборе входных данных изначально ответ достигается при \(s = 1\), \(k = 2\) или \(s = 3\), \(k = 2\). После первого запроса ответ достигается при \(s = 2\), \(k = 2\) или \(s = 4\), \(k = 2\).

D. Перестановка для Бурёнки

Деревья жадные алгоритмы математика Паросочетания Структуры данных *3300

Назовем массив \(a\) чистым, если в нем все элементы попарно различны. Например, массив \([1, 7, 9]\) — чистый, а \([1, 3, 3, 7]\) — нет, ведь \(3\) встречается в нем дважды.

Чистый массив \(b\) похож на чистый массив \(c\), если их длина \(n\) одинакова, и для всех пар индексов \(l\), \(r\) таких, что \(1 \le l \le r \le n\), выполняется \(\)\operatorname{argmax}([b_l, b_{l + 1}, \ldots, b_r]) = \operatorname{argmax}([c_l, c_{l + 1}, \ldots, c_r]),\(\) где \(\operatorname{argmax}(x)\) — индекс наибольшего элемента в \(x\) (уникального для чистых массивов). Например, \(\operatorname{argmax}([3, 4, 2]) = 2\), \(\operatorname{argmax}([1337, 179, 57]) = 1\).

Недавно Тоня узнал, что Бурёнке очень нравится перестановка \(p\) длины \(n\). Тоня решил обрадовать Бурёнку и подарить ей массив \(a\), похожий на \(p\). Он уже зафиксировал некоторые элементы \(a\), но ровно \(k\) элементов отсутствуют (в этих позициях сейчас \(a_i = 0\)). Гарантируется, что \(k \ge 2\). Кроме того, у Тони есть множество \(S\) из \(k - 1\) числа.

Тоня понял, что для того, чтобы заполнить пропуски в массиве \(a\) ему не хватает одного числа, поэтому он решил купить его. У него есть \(q\) вариантов покупки. Тоня считает, что число \(d\) подходит ему, если можно заполнить пропуски в \(a\) числами из \(S\) и числом \(d\) так, чтобы \(a\) стал чистым массивом, похожим на \(p\). Для каждого варианта покупки числа \(d\) выведите, подходит ли Тоне это число или нет.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится два целых числа \(n\) и \(q\) (\(1 \le n, q \le 3 \cdot 10^5\)) — длина перестановки и количество вариантов покупки.

Во второй строке каждого набора входных данных содержатся \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)) — перестановка, которая нравится Бурёнке.

В третьей строке каждого набора входных данных содержатся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^6\)) — элементы массива, где \(0\) означает место, которое нужно заполнить. Гарантируется, что существуют два индекса \(i, j\) \((1 \le i, j \le n, i \ne j)\) такие, что \(a_i = 0, a_j = 0\) из чего следует, что \(k \geq 2\).

В четвертой строке каждого набора входных данных содержится \(k - 1\) число \(s_1, s_2, \ldots, s_{k-1}\) (\(1 \le s_i \le 10^6\)) — числа, которые есть у Тони во множестве \(S\).

Каждая из следующих \(q\) строк содержит одно целое число \(d\) (\(1 \le d \le 10^6\)) – число, которое планирует купить Тоня.

Гарантируется, что для каждого данного \(d\) существует способ заполнить пропуски в \(a\) числами из \(S\) и числом \(d\) так, чтобы получить чистый массив.

Гарантируется, что сумма \(n\) и сумма \(q\) по всем тестам не превосходят \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) строк. Для каждого значения \(d\) выведите «YES», если существует способ заполнить массив \(a\), сделав его похожим на \(p\), и «NO» в противном случае.

Примечание

В первом наборе входных данных для \(d = 9\) можно получить \(a = [5, 9, 7, 6]\), можно доказать, что такое \(a\) похоже на \(p\), для \(d=1\) и \(d=4\) можно доказать, что ответа не существует.

Во втором наборе входных данных для \(d = 1\) можно получить \(a = [1, 5, 10, 9, 3]\), для \(d = 8\) можно получить \(a = [3, 5, 10, 9, 8]\), можно доказать, что для \(d = 11\) ответа не существует.

F. Бурёнка, массив и запросы

математика Структуры данных теория чисел *3300

Женя подарил Бурёнке на день рождения массив \(a\) длины \(n\) из чисел от \(1\) до \(m\). Бурёнка знает, что Жене очень нравятся взаимно простые числа (числа \(x\) и \(y\) называются взаимно простыми, если у них отсутствуют общие делители, большие \(1\)), поэтому она хочет задать Жене \(q\) вопросов про свой подарок.

Каждый раз она будет выбирать какой-то подотрезок \(a_l, a_{l + 1}, \ldots, a_r\) массива \(a\) и вычислять произведение этих чисел \(p = a_l \cdot a_{l + 1} \cdot \ldots \cdot a_r\). Затем она спросит у Жени, сколько целых чисел от \(1\) до \(C\) взаимно просты с числом \(p\).

Помогите Жене ответить на вопросы!

Входные данные

В первой строке ввода находятся четыре числа \(n\), \(m\), \(C\), \(q\) (\(1 \leq n, q \leq 10^5\), \(1 \leq m \leq 2\cdot 10^4\), \(1 \leq C \leq 10^5\)) — длина массива \(a\), верхнее ограничения на \(a_{i}\), значение \(C\) и количество запросов.

Во второй строке ввода находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_{i} \leq m\)) — массив \(a\).

В следующих \(q\) строках находятся запросы, каждый из которых состоит из двух целых чисел \(l\) и \(r\) (\(1 \leq l \leq r \leq n\)).

Выходные данные

Выведите \(q\) чисел — ответы на вопросы Бурёнки.

Примечание

Рассмотрим запросы из примера:

  1. в первом вопросе произведение чисел на первом отрезке равно \(1\), оно взаимно просто с числами \(1,2,3,4,5\).
  2. во втором вопросе произведение чисел на втором отрезке равно \(12\), оно взаимно просто с числами \(1\) и \(5\).
  3. в третьем вопросе произведение чисел на третьем отрезке равно \(10\), оно взаимно просто с числами \(1\) и \(3\).

C. Турнир по борьбе

Бинарный поиск реализация Структуры данных *1400

Бурёнка пришла смотреть самое интересное спортивное событие года — турнир по борьбе, организованный её другом Тоней.

В турнире участвует \(n\) спортсменов, им были выданы номера от \(1\) до \(n\). Для спортсмена с \(i\)-м номером Бурёнка определила его силу — целое число \(a_i\), где \(1 \leq a_i \leq n\). Все силы различны, то есть массив сил \(a\) является перестановкой длины \(n\). Известно, что если \(a_i > a_j\), то \(i\)-й участник всегда побеждает \(j\)-го

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

Бурёнка решила задать Тоне \(q\) вопросов. В каждом вопросе Бурёнка спрашивает, сколько побед \(i\)-й спортсмен одержит за первые \(k\) туров соревнования для некоторых \(i\) и \(k\). Тоня не очень хорош в аналитике, поэтому просит вас помочь ему с ответом на все вопросы.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(2 \leq n \leq 10^5\), \(1 \leq q \leq 10^5\)) — количество участников турнира и число вопросов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)) — массив \(a\), являющийся перестановкой.

Следующие \(q\) строк набора входных данных содержат вопросы. Каждая строка содержит два целых числа \(i\) и \(k\) (\(1 \leq i \leq n\), \(1 \leq k \leq 10^9\)) — номер участника и число туров.

Гарантируется, что сумма значений \(n\) и сумма значений \(q\) по всем наборам входных данных не превосходят \(10^5\).

Выходные данные

На каждый вопрос Бурёнки выведите единственную строку, содержащую одно целое число — ответ на вопрос.

Примечание

В первом наборе входных данных первый по номеру спортсмен имеет силу \(3\), в первом туре он победит спортсмена с номером \(2\) и силой \(1\), а во втором — спортсмена с номером \(3\) и силой \(2\).

Во втором наборе входных данных перечислим силы спортсменов, дерущихся в первых \(5\) боях: \(1\) и \(3\), \(3\) и \(4\), \(4\) и \(2\), \(4\) и \(1\), \(4\) и \(3\). Участник с номером \(4\) в первых \(5\) турах одержал \(0\) побед (его сила равна \(2\)). Участник с номером \(3\) имеет силу \(4\) и в первых двух боях одержал \(1\) победу, проведя \(1\) бой.

B. Интересная сумма

жадные алгоритмы математика Перебор сортировки Структуры данных *800

Дан массив \(a\) длины \(n\). Вы можете выбрать любой подотрезок \(a_l, a_{l + 1}, \ldots, a_r\) массива длины, не совпадающий со всем массивом, то есть, для которого \(1 \le l \le r \le n\) и \(r - l + 1 < n\). Красотой выбранного подоторезка назовем значение

\(\)\max(a_{1}, a_{2}, \ldots, a_{l-1}, a_{r+1}, a_{r+2}, \ldots, a_{n}) - \min(a_{1}, a_{2}, \ldots, a_{l-1}, a_{r+1}, a_{r+2}, \ldots, a_{n}) + \max(a_{l}, \ldots, a_{r}) - \min(a_{l}, \ldots, a_{r}).\(\)

Найдите максимальную красоту подотрезка среди всех возможных допустимых подотрезков массива (за исключением всего массива).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

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

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_{i} \leq 10^9\)) — элементы данного массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — искомое максимальное значение красоты.

Примечание

В первом тесте из условия оптимально выбрать отрезок \(l = 7\), \(r = 8\). Красота этого отрезка равна \((6 - 1) + (5 - 1) = 9\).

Во втором тесте из условия оптимально выбрать отрезок \(l = 2\), \(r = 4\). Красота этого отрезка равна \((100 - 2) + (200 - 1) = 297\).

D2. Xor-подпоследовательность (сложная версия)

битмаски Деревья дп Строки Структуры данных *2400

Это сложная версия задачи. Единственное различие состоит в том, что в этой версии \(a_i \le 10^9\).

Дан массив из \(n\) целых чисел \(a_0, a_1, a_2, \ldots a_{n - 1}\). Бряп захотел найти в данном массиве самую длинную хорошую подпоследовательность.

Массив \(b = [b_0, b_1, \ldots, b_{m-1}]\), где \(0 \le b_0 < b_1 < \ldots < b_{m - 1} < n\), будем называть подпоследовательностью длины \(m\) массива \(a\).

Подпоследовательность \(b = [b_0, b_1, \ldots, b_{m-1}]\) длины \(m\) называется хорошей, если выполняется следующее условие:

  • Для любого целого числа \(p\) (\(0 \le p < m - 1\)) выполняется условие: \(a_{b_p} \oplus b_{p+1} < a_{b_{p+1}} \oplus b_p\).

Здесь \(a \oplus b\) обозначает побитовое исключающее ИЛИ чисел \(a\) и \(b\). Например, \(2 \oplus 4 = 6\), а \(3 \oplus 1=2\).

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

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2 \leq n \leq 3 \cdot 10^5\)) — длина массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_0,a_1,...,a_{n-1}\) (\(0 \leq a_i \leq 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных единственное число — максимальную длину хорошей подпоследовательности.

Примечание

В первом наборе входных данных в качестве подпоследовательности мы можем выбрать оба элемента массива, так как \(1 \oplus 1 < 2 \oplus 0\).

Во втором наборе входных данных мы можем взять элементы с индексами \(1\), \(2\) и \(4\)\(0\) нумерации). Для них выполняется: \(2 \oplus 2 < 4 \oplus 1\) и \(4 \oplus 4 < 1 \oplus 2\).

E. Миша и раскраски

жадные алгоритмы Конструктив математика реализация Структуры данных *2700

Недавно Миша нашел квадратную матрицу \(n \times n\), где в клетке на пересечении строки \(i\) и столбца \(j\) записано число \(a_{i, j}\). После этого Миша решил немного изменить матрицу, чтобы количество различных чисел в ней стало ровно \(k\). Для этого он может любое число раз (возможно, ноль) применить следующую операцию:

  1. выбрать любую квадратную подматрицу (выбираются \((x_1,y_1)\), \((x_2,y_2)\), такие что \(x_1 \leq x_2\), \(y_1 \leq y_2\), \(x_2 - x_1 = y_2 - y_1\), тогда подматрицей называется множество клеток с координатами \((x, y)\), такими что \(x_1 \leq x \leq x_2\), \(y_1 \leq y \leq y_2\)),
  2. выбрать число \(k\), где \(1 \leq k \leq n^2\),
  3. заменить все числа в выбранной подматрице на \(k\).

Пожалуйста, найдите минимальное количество операций, которые нужны, чтобы Миша достиг своей цели.

Входные данные

В первой строке находятся числа \(n\) и \(k\) (\(1 \leq n \leq 500, 1 \leq k \leq n^2\))— размер матрицы и требуемое количество различных чисел .

Далее следуют \(n\) строк. \(i\)-я из них содержит \(n\) целых чисел \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, n}\) (\(1 \leq a_{i,j} \leq n^2\)) — элементы \(i\)-й строки матрицы.

Выходные данные

Выведите одно число — искомое минимальное число операций.

Примечание

В первом примере ответ \(1\), так как можно заменить число в правом нижнем углу таблички на \(1\). Получится такая матрица:

111
112
341

Во втором примере ответ \(2\). Можно сначала заменить все значения матрицы на \(1\), а потом заменить число в любой клетке на \(2\). Получится такая матрица:

111
111
112

C. Игра в слова

реализация Структуры данных *800

Три друга играют в игру. Каждый из них пишет \(n\) различных слов, каждое длины \(3\).

После этого они считают очки по следующим правилам:

  • если слово написано только одним игроком, то тот, кто его написал, получает 3 очка;
  • если слово написано двумя игроками, то каждый из них получает по 1 очку;
  • если слово написано всеми тремя игроками, то за него очки не начисляются.

Выведите финальное количество очков у каждого игрока.

Входные данные

В первой строке записано целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит целое число \(n\) (\(1 \leq n \leq 1000\)) — количество слов, написанных каждым игроком.

Следующие три строки содержат по \(n\) различных слов каждая — слова написанные каждым из игроков. Все эти слова состоят из \(3\) строчных букв латинского алфавита.

Выходные данные

Для каждого набора входных данных выведите через пробел три целых числа — количество очков у первого, второго и третьего из друзей. Выводите очки именно в таком порядке — \(i\)-м выводите количество очков у \(i\)-го из друзей.

Примечание

В первом наборе входных данных примера:

  • слово \(\texttt{abc}\) было написано первым и третьим другом — они получают по \(1\) очку;
  • слово \(\texttt{def}\) было написано только вторым другом — он получает \(3\) очка.

E. Считаем прямоугольники

дп Перебор реализация Структуры данных *1600

У вас есть \(n\) прямоугольников, \(i\)-й из них имеет высоту \(h_i\) и ширину \(w_i\).

Вам надо ответить на \(q\) запросов, которые задаются четырьмя числами: \(h_s \ w_s \ h_b \ w_b\).

Для каждого запроса выведите суммарную площадь всех таких прямоугольников, которые могут вместить в себя прямоугольник с высотой \(h_s\) и шириной \(w_s\) и при этом сами вмещаются в прямоугольник с высотой \(h_b\) и шириной \(w_b\). Иными словами, выведите \(\sum h_i \cdot w_i\) по всем \(i\), что \(h_s < h_i < h_b\) и \(w_s < w_i < w_b\).

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

Обратите внимание, что для некоторых наборов входных данных ответ не будет помещаться в 32-х битных целочисленный тип, вы должны использовать 64-битный целочисленный тип вашего языка (например, long long в C++).

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n, q\) (\(1 \leq n \leq 10^5\); \(1 \leq q \leq 10^5\)) — количество прямоугольников и количество запросов.

Затем следуют \(n\) строк, каждая содержит два целых числа \(h_i, w_i\) (\(1 \leq h_i, w_i \leq 1000\)) — высоту и ширину \(i\)-го прямоугольника.

Затем в \(q\) строках заданы запросы, каждая строка содержит четыре целых числа \(h_s, w_s, h_b, w_b\) (\(1 \leq h_s < h_b,\ w_s < w_b \leq 1000\)) — описание запроса.

Сумма значений \(q\) по всем набора входных данных не превосходит \(10^5\). Сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) строк, \(i\)-я должна содержать ответ на \(i\)-й запрос.

Примечание

В первом наборе входных данных только один запрос. Нам надо найти сумму площадей всех прямоугольников, которые вмещают прямоугольник \(1 \times 1\) и сами вмещаются в прямоугольник \(3 \times 4\).

Нам подходит только прямоугольник \(2 \times 3\), так как \(1 < 2\) (сравниваем высоты) и \(1 < 3\) (сравниваем ширины), то \(1 \times 1\) помещается в него. Аналогично, \(2 < 3\) (сравниваем высоты) и \(3 < 4\) (сравниваем ширины), то есть он помещается в \(3 \times 4\).

Прямоугольник \(3 \times 2\) слишком высок, чтобы поместиться в \(3 \times 4\) rectangle.

Суммарная площадь в ответа равна \(2 \cdot 3 = 6\).

E. Electrical Efficiency

Деревья дп Комбинаторика математика Структуры данных теория чисел *2500

In the country of Dengkleknesia, there are \(N\) factories numbered from \(1\) to \(N\). Factory \(i\) has an electrical coefficient of \(A_i\). There are also \(N-1\) power lines with the \(j\)-th power line connecting factory \(U_j\) and factory \(V_j\). It can be guaranteed that each factory in Dengkleknesia is connected to all other factories in Dengkleknesia through one or more power lines. In other words, the collection of factories forms a tree. Each pair of different factories in Dengkleknesia can use one or more existing power lines to transfer electricity to each other. However, each power line needs to be turned on first so that electricity can pass through it.

Define \(f(x, y, z)\) as the minimum number of power lines that need to be turned on so that factory \(x\) can make electrical transfers to factory \(y\) and factory \(z\). Also define \(g(x, y, z)\) as the number of distinct prime factors of \(\text{GCD}(A_x, A_y, A_z)\).

To measure the electrical efficiency, you must find the sum of \(f(x, y, z) \times g(x, y, z)\) for all combinations of \((x, y, z)\) such that \(1 \leq x < y < z \leq N\). Because the answer can be very large, you just need to output the answer modulo \(998\,244\,353\).

Note: \(\text{GCD}(k_1, k_2, k_3)\) is the greatest common divisor of \(k_1\), \(k_2\), and \(k_3\), which is the biggest integer that simultaneously divides \(k_1\), \(k_2\), and \(k_3\).

Input

The first line contains a single integer \(N\) (\(1 \le N \le 2 \cdot 10^5\)) — the number of factories in Dengkleknesia.

The second line contains \(N\) integers \(A_1, A_2, \dots, A_N\) (\(1 \leq A_i \leq 2 \cdot 10^5\)) — the electrical coefficients of the factories.

The \(j\)-th of the next \(N-1\) lines contains two integers \(U_j\) and \(V_j\) (\(1 \le U_j, V_j \le N\)) — a power line that connects cities \(U_j\) and \(V_j\). The collection of factories forms a tree.

Output

An integer representing the sum of \(f(x, y, z) \times g(x, y, z)\) for all combinations of \((x, y, z)\) such that \(1 \leq x < y < z \leq N\), modulo \(998\,244\,353\)

Note

In the first example, the only \((x, y, z)\) possible is \((1, 2, 3)\). Because \(\text{GCD}(A_1, A_2, A_3) = \text{GCD}(1, 2, 3) = 1\) has \(0\) distinct prime factors, therefore \(f(x, y, z) \times g(x, y, z) = 2 \times 0 = 0\).

In the second example, all triples \((x, y, z)\) that satisfy the condition are as follows:

  • \((1, 2, 3) \rightarrow f(1, 2, 3) \times g(1, 2, 3) = 2 \times 1 = 2\)
  • \((1, 2, 4) \rightarrow f(1, 2, 4) \times g(1, 2, 4) = 2 \times 1 = 2\)
  • \((1, 3, 4) \rightarrow f(1, 3, 4) \times g(1, 3, 4) = 3 \times 2 = 6\)
  • \((2, 3, 4) \rightarrow f(2, 3, 4) \times g(2, 3, 4) = 2 \times 1 = 2\)

So the electrical efficiency is \(2 + 2 + 6 + 2 = 12\).

F. Field Photography

битмаски сортировки Структуры данных *2100

Pak Chanek is traveling to Manado. It turns out that OSN (Indonesian National Scientific Olympiad) 2019 is being held. The contestants of OSN 2019 are currently lining up in a field to be photographed. The field is shaped like a grid of size \(N \times 10^{100}\) with \(N\) rows and \(10^{100}\) columns. The rows are numbered from \(1\) to \(N\) from north to south, the columns are numbered from \(1\) to \(10^{100}\) from west to east. The tile in row \(r\) and column \(c\) is denoted as \((r,c)\).

There are \(N\) provinces that participate in OSN 2019. Initially, each contestant who represents province \(i\) stands in tile \((i, p)\) for each \(p\) satisfying \(L_i \leq p \leq R_i\). So, we can see that there are \(R_i-L_i+1\) contestants who represent province \(i\).

Pak Chanek has a variable \(Z\) that is initially equal to \(0\). In one operation, Pak Chanek can choose a row \(i\) and a positive integer \(k\). Then, Pak Chanek will do one of the two following possibilities:

  • Move all contestants in row \(i\) exactly \(k\) tiles to the west. In other words, a contestant who is in \((i, p)\) is moved to \((i, p-k)\).
  • Move all contestants in row \(i\) exactly \(k\) tiles to the east. In other words, a contestant who is in \((i, p)\) is moved to \((i, p+k)\).

After each operation, the value of \(Z\) will change into \(Z \text{ OR } k\), with \(\text{OR}\) being the bitwise OR operation. Note that Pak Chanek can do operations to the same row more than once. Also note that Pak Chanek is not allowed to move contestants out of the grid.

There are \(Q\) questions. For the \(j\)-th question, you are given a positive integer \(W_j\), Pak Chanek must do zero or more operations so that the final value of \(Z\) is exactly \(W_j\). Define \(M\) as the biggest number such that after all operations, there is at least one column that contains exactly \(M\) contestants. For each question, you must find the biggest possible \(M\) for all sequences of operations that can be done by Pak Chanek. Note that the operations done by Pak Chanek for one question do not carry over to other questions.

Input

The first line contains a single integer \(N\) (\(1 \leq N \leq 10^5\)) — the number of rows in the grid and also the number of provinces that participate in OSN 2019.

The \(i\)-th of the next \(N\) lines contains two integers \(L_i\) and \(R_i\) (\(1 \leq L_i \leq R_i \leq 10^9\)) describing the positions of the contestants who represent province \(i\).

The next line contains a single integer \(Q\) (\(1 \leq Q \leq 10^5\)) — the number of questions.

The \(j\)-th of the next \(Q\) lines contains a single integer \(W_j\) (\(1 \leq W_j \leq 10^9\)) — the required final value of \(Z\) for the \(j\)-th question.

Output

Output \(Q\) lines, with the \(j\)-th line containing an integer that is the answer to the \(j\)-th question.

Note

For the \(1\)-st question, Pak Chanek can do the following operations to get \(M=2\):

  • Move all contestants in row \(2\) to the east by \(4\) tiles. \(Z\) changes into \(0 \text{ OR } 4 = 4\).
  • Move all contestants in row \(1\) to the east by \(12\) tiles. \(Z\) changes into \(4 \text{ OR } 12 = 12\).

Now, columns \(14\) and \(15\) each contains exactly \(2\) contestants.

For the \(2\)-nd question, Pak Chanek can do the following operations to get \(M=3\):

  • Move all contestants in row \(3\) to the east by \(4\) tiles. \(Z\) changes into \(0 \text{ OR } 4 = 4\).
  • Move all contestants in row \(3\) to the west by \(1\) tiles. \(Z\) changes into \(4 \text{ OR } 1 = 5\).
  • Move all contestants in row \(1\) to the east by \(5\) tiles. \(Z\) changes into \(5 \text{ OR } 5 = 5\).
  • Move all contestants in row \(1\) to the east by \(5\) tiles. \(Z\) changes into \(5 \text{ OR } 5 = 5\).

Now, column \(11\) contains exactly \(3\) contestants.

The following is an illustration of the example operations for the \(2\)-nd question.

K. Kingdom of Criticism

снм Структуры данных *2500

Pak Chanek is visiting a kingdom that earned a nickname "Kingdom of Criticism" because of how often its residents criticise each aspect of the kingdom. One aspect that is often criticised is the heights of the buildings. The kingdom has \(N\) buildings. Initially, building \(i\) has a height of \(A_i\) units.

At any point in time, the residents can give a new criticism, namely they currently do not like buildings with heights between \(l\) and \(r\) units inclusive for some two integers \(l\) and \(r\). It is known that \(r-l\) is always odd.

In \(1\) minute, the kingdom's construction team can increase or decrease the height of any building by \(1\) unit as long as the height still becomes a positive number. Each time they receive the current criticism from the residents, the kingdom's construction team makes it so that there are no buildings with heights between \(l\) and \(r\) units inclusive in the minimum time possible. It can be obtained that there is only one way to do this.

Note that the construction team only cares about the current criticism from the residents. All previous criticisms are forgotten.

There will be \(Q\) queries that you must solve. Each query is one of the three following possibilities:

  • 1 k w: The kingdom's construction team changes the height of building \(k\) to be \(w\) units (\(1 \leq k \leq N\), \(1 \leq w \leq 10^9\)).
  • 2 k: The kingdom's construction team wants you to find the height of building \(k\) (\(1 \leq k \leq N\)).
  • 3 l r: The residents currently do not like buildings with heights between \(l\) and \(r\) units inclusive (\(2 \leq l \leq r \leq 10^9-1\), \(r-l\) is odd).

Note that each change in height still persists to the next queries.

Input

The first line contains a single integer \(N\) (\(1 \leq N \leq 4 \cdot 10^5\)) — the number buildings in the kingdom.

The second line contains \(N\) integers \(A_1, A_2, \ldots, A_N\) (\(1 \leq A_i \leq 10^9\)) — the initial heights of the buildings.

The next line contains a single integer \(Q\) (\(1 \leq Q \leq 4 \cdot 10^5\)) — the number of queries.

The \(j\)-th of the next \(Q\) lines contains the \(j\)-th query as described. There is at least one query of type \(2\).

Output

For each query of type \(2\), output a line containing an integer representing the height of the building asked.

Note

After the \(1\)-st query, the height of each building is \(2, 6, 5, 6, 10\).

After the \(3\)-rd query, the height of each building is \(3, 6, 5, 6, 10\).

After the \(4\)-th query, the height of each building is \(2, 7, 7, 7, 10\).

After the \(5\)-th query, the height of each building is \(2, 7, 7, 7, 10\).

After the \(6\)-th query, the height of each building is \(2, 9, 7, 7, 10\).

L. Lemper Cooking Competition

Структуры данных *2400

Pak Chanek is participating in a lemper cooking competition. In the competition, Pak Chanek has to cook lempers with \(N\) stoves that are arranged sequentially from stove \(1\) to stove \(N\). Initially, stove \(i\) has a temperature of \(A_i\) degrees. A stove can have a negative temperature.

Pak Chanek realises that, in order for his lempers to be cooked, he needs to keep the temperature of each stove at a non-negative value. To make it happen, Pak Chanek can do zero or more operations. In one operation, Pak Chanek chooses one stove \(i\) with \(2 \leq i \leq N-1\), then:

  1. changes the temperature of stove \(i-1\) into \(A_{i-1} := A_{i-1} + A_{i}\),
  2. changes the temperature of stove \(i+1\) into \(A_{i+1} := A_{i+1} + A_{i}\), and
  3. changes the temperature of stove \(i\) into \(A_i := -A_i\).

Pak Chanek wants to know the minimum number of operations he needs to do such that the temperatures of all stoves are at non-negative values. Help Pak Chanek by telling him the minimum number of operations needed or by reporting if it is not possible to do.

Input

The first line contains a single integer \(N\) (\(1 \le N \le 10^5\)) — the number of stoves.

The second line contains \(N\) integers \(A_1, A_2, \ldots, A_N\) (\(-10^9 \leq A_i \leq 10^9\)) — the initial temperatures of the stoves.

Output

Output an integer representing the minimum number of operations needed to make the temperatures of all stoves at non-negative values or output \(-1\) if it is not possible.

Note

For the first example, a sequence of operations that can be done is as follows:

  • Pak Chanek does an operation to stove \(3\), \(A = [2, -2, 1, 4, 2, -2, 9]\).
  • Pak Chanek does an operation to stove \(2\), \(A = [0, 2, -1, 4, 2, -2, 9]\).
  • Pak Chanek does an operation to stove \(3\), \(A = [0, 1, 1, 3, 2, -2, 9]\).
  • Pak Chanek does an operation to stove \(6\), \(A = [0, 1, 1, 3, 0, 2, 7]\).

There is no other sequence of operations such that the number of operations needed is fewer than \(4\).

C. Правильная скобочная последовательность Jatayu

графы жадные алгоритмы снм Структуры данных *1300

Прошлым летом Feluda подарил Lalmohan-Babu правильную скобочную последовательность \(s\) длины \(2 n\).

Topshe скучал во время летних каникул, и поэтому решил нарисовать неориентированный граф из \(2 n\) вершин, используя правильную скобочную последовательность \(s\). Для каждых двух различных вершин \(i\) и \(j\) (\(1 \le i < j \le 2 n\)) Topshe рисует ребро между этими двумя вершинами тогда и только тогда, когда подотрезок \(s[i \ldots j]\) образует правильную скобочную последовательность.

Определите количество компонент связности в графе Topshe.

Смотрите определения подчёркнутых терминов в Примечании.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — количество открывающих скобок в строке \(s\).

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(2 n\) — правильная скобочная последовательность, состоящая из \(n\) открывающих скобок «(» и \(n\) закрывающих скобок «)».

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — количество компонент связности в графе Topshe.

Примечание

Объяснение примера:

В первом наборе входных данных, граф, построенный из скобочной последовательности (), является просто графом, содержащим вершины \(1\) и \(2\), соединёнными единственным ребром.

Во втором наборе входных данных, граф, построенный из скобочной последовательности ()(()) будет следующим (содержит две компоненты связности):

Определения подчёркнутых терминов:

  • Последовательность скобок является правильной, если её можно превратить в корректное математическое выражение путём добавления символов \(+\) и \(1\). Например, последовательности (())(), () и (()(())) являются правильными, а )(, (() и (()))( не являются.
  • Подотрезок \(s[l \ldots r]\) обозначает последовательность \([s_l, s_{l + 1}, \ldots, s_r]\).
  • Компонента связности является множеством вершин \(X\) таким, что для каждых двух вершин из этого множества существует хотя бы один путь в графе, соединяющий эти вершины, но добавление любой другой вершины в \(X\) нарушает это правило.

F. Опоздать на работу (отправка решений запрещена)

жадные алгоритмы кратчайшие пути расписания Структуры данных *2900

Эта задача была скопирована автором с другой платформы. Codeforces категорически осуждает такое действие, поэтому дальнейшие посылки по этой задаче не будут приняты.

Debajyoti предстоит очень важная встреча, и он уже очень опаздывает. Harsh, его водитель, должен как можно быстрее доставить Debajyoti к месту встречи.

Harsh должен забрать Debajyoti из его дома и отвезите его к месту назначения, чтобы Debajyoti успел вовремя посетить встречу. Прямая дорога с \(n\) светофорами соединяет дом и место проведения интервью. Светофоры пронумерованы по порядку от \(1\) до \(n\).

Каждый светофор зацикливается через \(t\) секунд. \(i\)-й светофор горит \(\color{green}{\text{зелёным}}\) (в этом случае Harsh может проехать светофор) первые \(g_i\) секунд, и \(\color{red}{\text{красным}}\) (в этом случае Harsh должен дождаться включения \(\color{green}{\text{зелёного}}\)) оставшиеся \((t−g_i)\) секунд, после чего схема повторяется. Цикл каждого светофора повторяется бесконечно, и изначально, \(i\)-й светофор находится на секунде \(c_i\) в своём цикле (светофор с \(c_i=0\) только что включил \(\color{green}{\text{зелёный}}\)). В случае, если Harsh приближается к светофору в то же время, когда он меняет цвет, он будет подчиняться новому цвету. Формально, \(i\)-й светофор горит \(\color{green}{\text{зелёным}}\) в отрезок времени \([0,g_i)\) и \(\color{red}{\text{красным}}\) в отрезок времени \([g_i,t)\) (после чего цикл повторяется). \(i\)-й светофор изначально находится на \(c_i\)-й секунде своего цикла.

От \(i\)-го светофора ровно \(d_i\) секунд требуются, чтобы доехать до следующего светофора (то есть до \((i+1)\)-го светофора). Дом Debajyoti расположен прямо перед первым светофором, и Debajyoti попадает на интервью как только он проезжает \(n\)-й светофор. Другими словами, не требуется времени, чтобы доехать до первого светофора из дома Debajyoti или добраться до центра интервью от \(n\)-го светофора.

Harsh не знает, сколько времени потребуется Debajyoti, чтобы собраться. В ожидании он задается вопросом, какое минимально возможное количество времени ему может понадобиться провести за рулем, если он начнет движение в момент прибытия Debajyoti, которое может быть любым от \(0\) до \(\infty\) секунд от данного момента. Можете ли вы сказать Harsh минимально возможное количество времени, которое ему нужно провести в дороге?

Обратите внимание, что Harsh может начинать или останавливать движение только в целочисленные моменты времени.

Входные данные

Первая строка ввода содержит два целых числа \(n\) и \(t\) (\(2 \le n \le 2 \cdot 10^5\), \(2 \le t \le 10^9\)) — количество светофоров и длину цикла светфоров соответственно.

Далее следуют \(n\) строк. \(i\)-я строка содержит два целых числа \(g_i\) и \(c_i\) (\(1 \le g_i < t\), \(0 \le c_i < t\)), описывающие \(i\)-й светофор.

Следующая строка содержит \(n−1\) целых чисел \(d_1, d_2, \ldots, d_{n-1}\) (\(0 \le d_i \le 10^9\)) — время, нужное чтобы доехать от \(i\)-го до \((i+1)\)-го светофора.

Выходные данные

Выведите единственное целое число — минимально возможное количество времени, которое Harsh может провести в дороге.

Примечание

В первом примере мы можем сделать следующее:

  • Изначально, \(5\) светофоров находятся на следующих секундах в цикле: \(\{2,3,6,2,0\}\).
  • Оптимальное время для Harsh, чтобы начать, если Debajyoti приедет через \(1\) секунду. Заметьте, что эта \(1\) секунда не будет учитываться в финальном ответе.
  • Светофоры сейчас находятся в состоянии \(\{3,4,7,3,1\}\), поэтому Harsh может проехать от \(1\)-го светофора до \(2\)-го светофора, что требует \(1\) секунду для перемещения.
  • Светофоры сейчас находятся в состоянии \(\{4,5,8,4,2\}\), поэтому Harsh может продолжить движение без остановки до \(3\)-го светофора, что требует \(2\) секунды для перемещения.
  • Светофоры сейчас находятся в состоянии \(\{6,7,0,6,4\}\), поэтому Harsh продолжит движение до \(4\)-го светофора, что требует \(3\) секунды для перемещения.
  • Светофоры сейчас находятся в состоянии \(\{9,0,3,9,7\}\). Harsh должен подождать \(1\) секунду, чтобы \(4\)-й светофор загорелся зелёным прежде чем доехать до \(5\)-го светофора, что требует \(4\) секунды для передвижения.
  • Светофоры сейчас находятся в состоянии \(\{4,5,8,4,2\}\), поэтому Harsh может продолжить передвижение без остановки до места встречи. Общее время, которое Harsh провел за рулем, равно \(1+2+3+1+4=11\) секунд.

В втором примере мы можем сделать следующее:

  • Изначально \(6\) светофоров находятся на следующих секундах в цикле: \(\{3,5,0,8,7,6\}\).
  • Оптимальным для Harsh будет начать, если Debajyoti приедет после \(1\) секунды. Заметьте, что эта \(1\) секунда не будет учитываться в финальном ответе.
  • Светофоры сейчас находятся в состоянии \(\{4,6,1,0,8,7\}\), поэтому Harsh может проехать \(1\)-го светофора до \(2\)-го, что требует \(0\) секунд для передвижения.
  • Светофоры всё ещё находятся в состоянии \(\{4,6,1,0,8,7\}\). Harsh должен подождать \(3\) секунды, чтобы \(2\)-й светофор загорелся зелёным, прежде чем поехать до \(3\)-го светофора, что потребует \(0\) секунд для передвижения.
  • Светофоры сейчас находятся в состоянии \(\{7,0,4,3,2,1\}\), поэтому Harsh продолжит двигаться до \(4\)-го светофора, что потребует \(0\) секунд для передвижения.
  • Светофоры всё ещё находятся в состоянии \(\{7,0,4,3,2,1\}\), поэтому Harsh продолжит двигаться до \(5\)-го светофора, что потребует \(0\) секунд для передвижения.
  • Светофоры всё ещё находятся в состоянии \(\{7,0,4,3,2,1\}\), поэтому Harsh продолжит двигаться до \(6\)-го светофора, что потребует \(0\) секунд для передвижения.
  • Светофоры всё ещё находятся в состоянии \(\{7,0,4,3,2,1\}\), поэтому Harsh продолжит двигаться до места назначения без остановки. Общее время, которое Harsh проведёт в дороге равно \(0+3+0+0+0=3\) секунды.

G. Некая волшебная вечеринка

жадные алгоритмы Комбинаторика сортировки Структуры данных *3300

На вечеринке есть \(n\) человек. \(i\)-й человек имеет уровень счастья \(a_i\).

У каждого человека есть определенный тип личности, который можно представить в виде двоичного целого числа \(b\). Если \(b = 0\), то счастье человека будет увеличиваться, если он рассказывает историю кому-то со строго меньшим счастьем, чем у него. Если \(b = 1\), то счастье человека будет увеличиваться, если он рассказывает историю кому-то со строго большим счастьем, чем у него.

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

Как организатор вечеринки, вы не хотите, чтобы кто-то ушел грустным. Следовательно, вы хотите подсчитать количество порядков выступления, чтобы в конце процесса все \(n\) человек имели равные уровни счастья.

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

Входные данные

Первая строка содержит единственное целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество людей.

Вторая строка содержит последовательность из \(n\) целых чисел \(a_1,a_2,...,a_n\) (\(1 \leq a_i \leq 2n\))  — уровни счастья.

Третья строка содержит последовательность из \(n\) двоичных чисел \(b_1,b_2,...,b_n\) (\(b_i \in \{0,1\}\))  — типы личности.

Выходные данные

Выведите количество различных допустимых последовательностей выступлений. Так как это число может быть большим, выведите его по модулю \(998244353\).

Примечание

Здесь объяснение для первого примера. Одним из корректных порядков выступлений является \([2,1,4,3]\) (здесь, мы написали индексы каждого человека). Каждый шаг показывает текущие уровни счастья и результаты.

Шаг \(1\): \([1,2,4,4]\) \(\rightarrow\) Человек \(2\) рассказывает историю остальным. Так как его тип личности равен \(1\), его счастье увеличится на \(2\), так как люди \(3\) и \(4\) имеют строго большие уровни счастья.

Шаг \(2\): \([1,4,4,4]\) \(\rightarrow\) Человек \(1\) рассказывает историю остальным. Так как его тип личности равен \(1\), его счастье увеличится на \(3\), так как люди \(2\), \(3\) и \(4\) имеют строго большие уровни счастья.

Шаг \(3\): \([4,4,4,4]\) \(\rightarrow\) Человек \(4\) рассказывает историю остальным. Так кае его тип личности равен \(0\), его счастье увеличится на \(0\), так как ни у кого нет строго меньшего уровня счастья.

Шаг \(4\): \([4,4,4,4]\) \(\rightarrow\) Человек \(3\) рассказывает историю остальным. Так как его тип личности равен \(0\), его счастье увеличится на \(0\), так как ни у кого нет строго меньшего уровня счастья.

В итоге, у всех одинаковый уровень счастья.

Заметьте, что \([2,1,3,4]\) также является корректным порядком для примера.

Можно показать, что не существует корректных порядков во втором примере.

C. Цифровой логарифм

жадные алгоритмы сортировки Структуры данных *1400

Определим \(f(x)\) для положительного числа \(x\) как длину десятичного представления \(x\) без лидирующих нулей. Мне нравится называть это цифровым логарифмом. Похоже на цифровой корень, если вы с таким знакомы.

Даны два массива \(a\) и \(b\), каждый содержит по \(n\) целых положительных чисел. За одну операцию вы можете сделать следующее:

  1. выбрать целое число \(i\) от \(1\) до \(n\);
  2. присвоить либо \(f(a_i)\) вместо \(a_i\), либо \(f(b_i)\) вместо \(b_i\).

Два массива называются похожими друг на друга, если можно переупорядочить элементы в них обоих так, чтобы они стали равны (т. е. \(a_i = b_i\) для всех \(i\) от \(1\) до \(n\)).

Какое наименьшее количество операций надо сделать, чтобы \(a\) и \(b\) стали похожими друг на друга?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество элементов в каждом из массивов.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i < 10^9\)).

В третьей строке записаны \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_j < 10^9\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите наименьшее количество операций, которые надо сделать, чтобы \(a\) и \(b\) стали похожими друг на друга.

Примечание

В первом наборе входных данных можно применить цифровой логарифм к \(b_1\) дважды.

Во втором наборе входных данных массивы уже похожи друг на друга.

В третьем наборе входных данных можно применить цифровой логарифм сначала к \(a_1\), затем к \(b_2\).

E. Красно-черный перец

жадные алгоритмы математика Перебор Структуры данных теория чисел *2300

Монокарп собирается устроить вечеринку для своих друзей. Он приготовил \(n\) блюд и уже собирается их подать. Сначала он должен добавить в них молотый перец — иначе блюда будут совсем безвкусными.

У \(i\)-го блюда есть два значения \(a_i\) и \(b_i\) — его вкусность, если добавить красный или черный перец, соответственно. Монокарп не будет добавлять оба перца ни в какое блюдо, не будет добавлять перец несколько раз и не оставит ни одно блюдо без перца.

До того как добавить перец, Монокарп должен купить этот самый перец в магазине. У него есть неподалеку \(m\) магазинов. В \(j\)-м из них продаются упаковки красного перца, которых хватает на \(x_j\) порций, и упаковки черного перца, которых хватает на \(y_j\) порций.

Монокарп идет ровно в один магазин, покупает несколько (возможно, ноль) упаковок каждого перца таким образом, чтобы добавить в каждое блюдо перец ровно один раз и чтобы перца не осталось. Более формально, если он покупает \(x\) упаковок красного перца и \(y\) упаковок черного перца, то \(x\) и \(y\) должны быть неотрицательными, а \(x \cdot x_j + y \cdot y_j\) должно быть равно \(n\).

Для каждого магазина определите максимальную суммарную вкусность блюд, после того как Монокарп купит упаковки перца только в этом магазине и добавит перец в блюда. Если невозможно купить упаковки описанным образом, то выведите -1.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество блюд.

В \(i\)-й из следующих \(n\) строк записаны два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^9\)) — вкусность \(i\)-го блюда, если добавить красный или черный перец, соответственно.

В следующей строке записано одно целое число \(m\) (\(1 \le m \le 3 \cdot 10^5\)) — количество магазинов.

В \(j\)-й из следующих \(m\) строк записаны два целых числа \(x_j\) и \(y_j\) (\(1 \le x_j, y_j \le n\)) — количество порций, на которое хватает упаковки красного и черного перца в \(j\)-м магазине, соответственно.

Выходные данные

Выведите \(m\) целых чисел. Для каждого магазина выведите максимальную суммарную вкусность блюд, после того как Монокарп купит упаковки перца только в этом магазине и добавит перец в блюда. Если невозможно купить упаковки так, чтобы в каждое блюдо добавить перец один раз и чтобы перца не осталось, то выведите -1.

Примечание

Рассмотрим первый пример.

В первом магазина Монокарп может купить только \(0\) упаковок красного перца и \(1\) упаковку черного перца. Если добавить черный перец во все блюда, то получится \(10 + 50 + 2 = 62\).

Во втором магазине Монокарп может купить любое количество упаковок красного и черного перца: \(0\) и \(3\), \(1\) и \(2\), \(2\) и \(1\) или \(3\) и \(0\). Лучшим выбором оказывается либо \(1\) и \(2\), либо \(2\) и \(1\). Монокарп может добавить черный перец в первое блюдо, красный перец во второе блюдо и любой перец в третье блюдо, сумма равна \(10 + 100 + 2 = 112\).

В третьем магазине Монокарп может купить только \(1\) упаковку красного перца и \(0\) упаковок черного перца. Если добавить красный перец во все блюда, то получится \(5 + 100 + 2 = 107\).

В четвертом магазине Монокарп может купить только четное суммарное количество упаковок. Так как \(n\) нечетное, невозможно купить ровно \(n\) упаковок. Поэтому ответ равен \(-1\).

E. Отдыхаем группами

сортировки Структуры данных *2600

Один очень известный клуб «по интересам» собирает своих членов на отдых на природе. Чтобы мероприятие было интересней, директора клуба решили разбить членов клуба на группы.

Каждый человек характеризуется двумя целыми числами: ri — ответственность, ai — возраст. Группой назовем непустое подмножество членов клуба с одним особенным членом клуба, которого мы будем называть лидером группы. Лидер группы должен быть одним из самых ответственных людей в группе (его ответственность должна быть не меньше, чем у любого другого человека из группы), также возраст любого человека в группе должен отличаться не более чем на k от возраста лидера группы.

Некоторые члены клуба друзья, поэтому они хотят попасть в одну группу. Конечно же, интересней отдыхать в группе с большим количеством людей. Поэтому администрация клуба просит Вас написать программу, которая будет отвечать на следующий запрос: «Какой наибольший размер может быть у группы, которая содержит одновременно человека x и человека y?». Возможно, x или y будет лидером этой группы.

Входные данные

В первой строке записано два целых числа n и k (2 ≤ n ≤ 105, 0 ≤ k ≤ 109) — количество членов клуба и возрастное ограничение для группы.

В следующей строке записаны целые числа r1, r2, ..., rn (1 ≤ ri ≤ 109), разделенные пробелами, — ответственности людей. В следующей строке в таком же формате записаны целые числа a1, a2, ..., an (1 ≤ ai ≤ 109) — возрасты людей.

В следующей строке записано единственное целое число q (1 ≤ q ≤ 105) — количество запросов. В следующих q строках записаны запросы в виде пар целых чисел, разделенных пробелом, xi и yi (1 ≤ xi, yi ≤ n, xi ≠ yi) — номера людей, которые должны оказаться в одной группе.

Выходные данные

Для каждого запроса выведите ответ в отдельной строке — максимальное количество людей в группе, которая содержит заданных людей. Если такой группы не существует, выведите -1.

Примечание

В первом запросе самая большая группа, включающая участников 3 и 5 — это группа {1, 3, 4, 5}, где 3 является лидером группы.

Во втором запросе лидером должен быть участник 2, так, что группа будет иметь следующий состав: {1, 2, 3}.

В третьем запросе у лидера группы должен быть возраст 3. Следовательно, единственным лидером может быть участник 3, но он менее ответственный, чем участник 2. Таким образом, сформировать такую группу невозможно.

В четвертом запросе группа такая же, как и в первом.

A. Планеты

жадные алгоритмы сортировки Структуры данных *800

Однажды вогоны захотели построить новую гиперпространственную магистраль в удалённой системе из \(n\) планет. Планета номер \(i\) в этой системе находится на орбите \(a_i\), на одной орбите может находиться несколько планет. К сожалению, все эти планеты мешают строительству и должны быть уничтожены.

У вогонов есть для уничтожения две машины.

  1. Первая машина за раз может уничтожить любую планету за \(1\) триганский пу.
  2. Вторая машина за раз может уничтожить все планеты на одной орбите этой системы за \(c\) триганских пу.

Вогоны могут использовать каждую машину сколько угодно раз.

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

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Затем следуют описания наборов входных данных.

Каждый набор входных данных состоит из двух строк.

В первой строке заданы два целых числа \(n\) и \(c\) (\(1 \le n, c \le 100\)) — количество планет и стоимость использования второй машины.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 100\)), где \(a_i\) это номер орбиты \(i\)-й планеты.

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальную стоимость уничтожения всех планет.

Примечание

В первом наборе входных данных стоимость использования обеих машин одинакова, поэтому можно всегда пользоваться второй машиной и уничтожить все планеты, находящиеся на орбите \(1\), все планеты, находящиеся на орбите \(2\), все планеты, находящиеся на орбите \(4\), все планеты, находящиеся на орбите \(5\).

Во втором наборе входных данных выгодно с помощью второй машины за \(2\) триганских пу уничтожить все планеты находящиеся на орбите \(2\), затем уничтожить с помощью первой машины оставшиеся две планеты.

В третьем наборе входных данных можно воспользоваться первой машиной дважды или второй один раз.

В четвертом наборе входных данных выгодно два раза воспользоваться первой машиной.

C. Минимальная запись

жадные алгоритмы математика сортировки Структуры данных *1200

У вас есть строка \(s\), состоящая из цифр от \(0\) до \(9\) включительно. Вы можете произвести над ней следующую операцию любое (возможно нулевое) количество раз:

  • Вы можете выбрать позицию \(i\) и удалить цифру \(d\) на \(i\)-й позиции. Затем нужно вставить цифру \(\min{(d + 1, 9)}\) в любую позицию (в начало, в конец или между любыми двумя соседними цифрами).

Какую лексикографически минимальную строку вы можете получить после этих операций?

Строка \(a\) лексикографически меньше строки \(b\) той же длины, если и только если выполняется следующее:

  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится цифра меньшая, чем соответствующая цифра в \(b\).
Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следуют сами наборы входных данных.

Каждый набор входных данных состоит из одной строки, содержащей строку \(s\) (\(1 \le |s| \le 2 \cdot 10^5\)) — строка из цифр. Обратите внимание, что \(s\) это просто строка, состоящая из цифр, поэтому ведущие нули разрешены.

Гарантируется, что сумма длин строки \(s\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите единственную строку — лексикографически минимальную строку, которую можно получить.

Примечание

В первом наборе входных данных:

  • Удалим \(8\) и поместим в конец строки \(9\). Получается строка \(04299\).
  • Удалим \(4\) и поместим на \(3\)-ю позицию строки \(5\). Получается строка \(02599\).

Во втором и третьем наборах входных данных не нужно ничего делать.

E. Максимумы и минимумы

Комбинаторика разделяй и властвуй Структуры данных теория чисел *2700

Вам дан массив целых положительных чисел \(a_1, a_2, \ldots, a_n\).

Найдите количество пар индексов \((l, r)\) (\(1 \le l \le r \le n\)), которые проходят проверку. Проверка пары чисел выполняется следующим образом:

  1. Находятся минимум и максимум среди чисел \(a_l, a_{l+1}, \ldots, a_r\).
  2. Проверка считается пройденной, если максимум делится на минимум.
Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Затем следуют сами наборы входных данных.

Каждый набор входных данных описывается в двух строках.

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

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — количество проходящих проверку пар чисел.

Примечание

Ниже запись \(x \mid y\) означает, что \(y\) делится на \(x\).

В первом наборе входных данных существует всего одна пара индексов \((1, 1)\), для нее максимум равен \(1\), минимум также \(1\), \(1 \mid 1\), поэтому эта пара проходит проверку, а ответ равен \(1\).

Во втором наборе входных данных \(3\) пары индексов:

  • \((1, 1)\): максимум равен \(2\), минимум равен \(2\), \(2 \mid 2\), проверка пройдена.
  • \((1, 2)\): максимум равен \(4\), минимум равен \(2\), \(2 \mid 4\), проверка пройдена.
  • \((2, 2)\): максимум равен \(4\), минимум равен \(4\), \(4 \mid 4\), проверка пройдена.

В третьем наборе входных данных \(3\) пары индексов:

  • \((1, 1)\): максимум равен \(2\), минимум равен \(2\), \(2 \mid 2\), проверка пройдена.
  • \((1, 2)\): максимум равен \(3\), минимум равен \(2\), \(3\) не делится на \(2\), поэтому проверка не пройдена.
  • \((2, 2)\): максимум равен \(3\), минимум равен \(3\), \(3 \mid 3\), поэтому проверка пройдена.

F. Почти отсортировано

битмаски дп Структуры данных *2700

Дана перестановка \(p\) длины \(n\) и целое число \(k\). Рассмотрим перестановку \(q\) длины \(n\) такую, что для любых целых чисел \(i\) и \(j\), где \(1 \le i < j \le n\), выполняется \(\)p_{q_i} \le p_{q_j} + k.\(\)

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

Перестановкой является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Инверсия в перестановке \(a\) — это пара индексов \(i\) и \(j\) (\(1 \le i, j \le n\)), такая, что \(i < j\), но \(a_i > a_j\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 5000\), \(1 \le k \le 8\)).

Вторая строка содержит \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)).

Выходные данные

Выведите минимально возможное количество инверсий, которое может быть в перестановке \(q\).

Примечание

В первом примере единственный вариант перестановки \(q = [1]\) (\(0\) инверсий). Тогда \(p_{q_1} = 1\).

Во втором примере единственный вариант с \(1\) инверсией — \(q = [1, 3, 2]\). Тогда \(p_{q_1} = 2\), \(p_{q_2} = 1\), \(p_{q_3} = 3\).

В третьем примере один из возможных вариантов с \(6\) инверсиями — \(q = [3, 4, 5, 1, 2]\). Тогда \(p_{q_1} = 3\), \(p_{q_2} = 2\), \(p_{q_3} = 1\), \(p_{q_4} = 5\), \(p_{q_5} = 4\).

D. Новая карта Valiant

Бинарный поиск дп Перебор Структуры данных *1700

Разработчик игр «DbZ Games» хочет добавить еще одну карту в свою популярную игру «Valiant». В этот раз карта под именем «Panvel» будет сделана на основе города Мумбаи.

Мумбаи можно представить как \(n \times m\) клеточное поле. В каждой клетке \((i, j)\) (\(1 \le i \le n\); \(1 \le j \le m\)) поля расположено здание в форме параллелепипеда высотой \(a_{i,j}\).

В этот раз DbZ Games хотят создать карту с идеальным вертикальным геймплеем. Для этого им нужно выбрать квадрат \(l \times l\) в Мумбаи такой, что каждое здание в этом квадрате имеет высоту хотя бы \(l\).

Можете ли вы помочь DbZ Games найти соответствующий квадрат наибольшего размера \(l\)?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных заданы два положительных целых числа \(n\) и \(m\) (\(1 \le n \le m\); \(1 \leq n \cdot m \leq 10^6\)).

В \(i\)-й из следующих \(n\) строк заданы \(m\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i,m}\) (\(1 \leq a_{i,j} \leq 10^6\)) — высоты зданий в \(i\)-м ряду.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно число — наибольший размер \(l\) квадрата, который может выбрать DbZ Games.

Примечание

В первом наборе входных данных мы можем выбрать квадрат со стороной \(l = 2\) (т. е. все поле), так как высоты всех зданий больше или равны \(2\).

Во втором наборе мы можем выбрать сторону квадрата только как \(1\), а потому ответ равен \(1\).

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

D1. Баланс (простая версия)

Перебор реализация Структуры данных теория чисел *1500

Это простая версия задачи. Единственное различие состоит в том, что в этой версии нет запросов удаления.

Изначально у вас есть множество, содержащее единственный элемент — \(0\). Вам нужно обработать \(q\) запросов следующих видов:

  • + \(x\) — добавить целое число \(x\) в множество. Гарантируется, что это число не принадлежит множеству до этого запроса;
  • ? \(k\) — найти \(k\text{-mex}\) множества.

В нашей задаче мы определяем \(k\text{-mex}\) множества целых чисел как наименьшее неотрицательное целое число \(x\), которое делится на \(k\) и которого нет в множестве.

Входные данные

В первой строке находится целое число \(q\) (\(1 \leq q \leq 2 \cdot 10^5\)) — количество запросов.

В следующих \(q\) строках находится описание запросов.

Запрос добавления числа \(x\) описывается как + \(x\) (\(1 \leq x \leq 10^{18}\)). Гарантируется, что число \(x\) не принадлежит множеству.

Запрос нахождения \(k\text{-mex}\) описывается как ? \(k\) (\(1 \leq k \leq 10^{18}\)).

Гарантируется, что хотя бы один запрос имеет тип ?.

Выходные данные

Для каждого запроса типа ? выведите единственное целое число — \(k\text{-mex}\) множества.

Примечание

В первом примере:

После первого и второго запроса в множестве будут элементы \(\{0, 1, 2\}\). Наименьшее неотрицательное число, которое делится на \(1\) и которого нет в множества, равно \(3\).

После четвертого запроса в множестве будут элементы \(\{0, 1, 2, 4\}\). Наименьшее неотрицательное число, которое делится на \(2\) и которого нет в множества, равно \(6\).

Во втором примере:

  • Изначально множество содержит только элемент \(\{0\}\).
  • После добавления числа \(100\) множество содержит элементы \(\{0, 100\}\).
  • \(100\text{-mex}\) множества равен \(200\).
  • После добавления числа \(200\) множество содержит элементы \(\{0, 100, 200\}\).
  • \(100\text{-mex}\) множества равен \(300\).
  • После добавления числа \(50\) множество содержит элементы \(\{0, 50, 100, 200\}\).
  • \(50\text{-mex}\) множества равен \(150\).

D2. Баланс (сложная версия)

Перебор Структуры данных теория чисел *2400

Это сложная версия задачи. Единственное различие состоит в том, что в этой версии есть запросы удаления.

Изначально у вас есть множество, содержащее единственный элемент — \(0\). Вам нужно обработать \(q\) запросов следующих видов:

  • + \(x\) — добавить целое число \(x\) в множество. Гарантируется, что это число не принадлежит множеству до этого запроса;
  • - \(x\) — удалить целое число \(x\) из множества. Гарантируется, что это число принадлежит множеству;
  • ? \(k\) — найти \(k\text{-mex}\) множества.

В нашей задаче мы считаем, что \(k\text{-mex}\) множества — это наименьшее неотрицательное целое число \(x\), которое делится на \(k\) и которого нет в множестве.

Входные данные

В первой строке находятся целое число \(q\) (\(1 \leq q \leq 2 \cdot 10^5\)) — количество запросов.

В следующих \(q\) строках находится описание запросов.

Запрос добавления числа \(x\) описывается как + \(x\) (\(1 \leq x \leq 10^{18}\)). Гарантируется, что число \(x\) не принадлежит множеству.

Запрос удаления числа \(x\) описывается как - \(x\) (\(1 \leq x \leq 10^{18}\)). Гарантируется, что число \(x\) принадлежит множеству.

Запрос нахождения \(k\text{-mex}\) описывается как ? \(k\) (\(1 \leq k \leq 10^{18}\)).

Гарантируется, что хотя бы один запрос имеет тип ?.

Выходные данные

Для каждого запроса типа ? выведите единственное целое число — \(k\text{-mex}\) множества.

Примечание

В первом примере:

После первого и второго запроса во множестве будут элементы \(\{0, 1, 2\}\). Наименьшее неотрицательное число, которое делится на \(1\) и которого нет в множества, равно \(3\).

После четвертого запроса во множестве будут элементы \(\{0, 1, 2, 4\}\). Наименьшее неотрицательное число, которое делится на \(2\) и которого нет в множества, равно \(6\).

Во втором примере:

  • Изначально множество содержит только элемент \(\{0\}\).
  • После добавления числа \(100\) множество содержит элементы \(\{0, 100\}\).
  • \(100\text{-mex}\) множества равен \(200\).
  • После добавления числа \(200\) множество содержит элементы \(\{0, 100, 200\}\).
  • \(100\text{-mex}\) множества равен \(300\).
  • После удаления числа \(100\) множество содержит элементы \(\{0, 200\}\).
  • \(100\text{-mex}\) множества равен \(100\).
  • После добавления числа \(50\) множество содержит элементы \(\{0, 50, 200\}\).
  • \(50\text{-mex}\) множества равен \(100\).
  • После удаления числа \(50\) множество содержит элементы \(\{0, 200\}\).
  • \(100\text{-mex}\) множества равен \(50\).

E. Локация

дп математика Структуры данных теория чисел *2800

Вам даны два массива целых чисел \(a_1, a_2, \ldots, a_n\) и \(b_1, b_2, \ldots, b_n\). Вам нужно обработать \(q\) запросов двух типов:

  • \(1\) \(l\) \(r\) \(x\): присвоить \(a_i := x\) для всех \(l \leq i \leq r\);
  • \(2\) \(l\) \(r\): найти минимальное значение следующего выражения по всем \(l \leq i \leq r\): \(\)\frac{\operatorname{lcm}(a_i, b_i)}{\gcd(a_i, b_i)}.\(\)

В данной задаче \(\gcd(x, y)\) обозначает наибольший общий делитель чисел \(x\) и \(y\), а \(\operatorname{lcm}(x, y)\) обозначает наименьшее общее кратное чисел \(x\) и \(y\)

Входные данные

В первой строке находятся два целых числа \(n\) и \(q\) (\(1 \leq n, q \leq 5 \cdot 10^4\)) — количество чисел в массивах \(a\) и \(b\) и количество запросов.

Во второй строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 5 \cdot 10^4\)) — элементы массива \(a\).

В третьей строке находятся \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq 5 \cdot 10^4\)) — элементы массива \(b\).

Далее следует \(q\) строк, \(j\)-я из которых начинается с целого числа \(t_j\) (\(1 \leq t_j \leq 2\)) и означает, что \(j\)-й запрос имеет тип \(t_j\).

Если \(t_j = 1\), то остальная часть строки содержит целые числа \(l_j\), \(r_j\) и \(x_j\) (\(1 \leq l_j \leq r_j \leq n\), \(1 \leq x_j \leq 5 \cdot 10^4\)).

Если \(t_j = 2\), то остальная часть строки содержит целые числа \(l_j\) и \(r_j\) (\(1 \leq l_j \leq r_j \leq n\)).

Гарантируется, что есть хотя бы один запрос типа \(2\).

Выходные данные

Для каждого запроса второго типа выведите ответ на задачу.

Примечание

В первом примере:

  • Для первого запроса мы можем выбрать \(i = 4\). Тогда значение равно \(\frac{\operatorname{lcm}(4, 4)}{\gcd(4, 4)} = \frac{4}{4} = 1\).
  • После второго запроса массив \(a = [6, 10, 15, 4, 9, 25, 9, 9, 9, 9]\).
  • Для третьего запроса мы можем выбрать \(i = 9\). Тогда значение равно \(\frac{\operatorname{lcm}(9, 18)}{\gcd(9, 18)} = \frac{18}{9} = 2\).

Во втором примере:

  • Для первого запроса мы можем выбрать \(i = 4\). Тогда значение равно \(\frac{\operatorname{lcm}(1, 5)}{\gcd(1, 5)} = \frac{5}{1} = 5\).
  • После второго запроса массив \(a = [10, 18, 18, 5]\).
  • После третьего запроса массив \(a = [10, 10, 18, 5]\).
  • Для четвёртого запроса мы можем выбрать \(i = 2\). Тогда значение равно \(\frac{\operatorname{lcm}(10, 12)}{\gcd(10, 12)} = \frac{60}{2} = 30\).

D. Слаймовый побег

дп жадные алгоритмы Структуры данных *1800

Вы играете в игру под названием Слаймовый побег. Игра проходит на числовой прямой. Изначально на прямой \(n\) слаймов. Для каждого целого числа \(i\) такого, что \(1 \le i \le n\), \(i\)-й слайм находится в позиции \(i\) и имеет здоровье \(a_i\). Вы управляете слаймом в позиции \(k\).

С прямой два выхода в позициях \(0\) и \(n+1\). Ваша цель — достигнуть любого из двух выходов после выполнения любого количества шагов.

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

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

Вы проигрываете, если в какой-то момент игры здоровье вашего слайма становится отрицательным.

Можете ли вы достичь одного из двух выходов, не проиграв?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 20\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(k\) (\(3 \leq n \leq 200\,000\), \(1 \leq k \leq n\)) — количество слаймов и позиция вашего слайма.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)) — здоровье слаймов.

Гарантируется, что здоровье вашего слайма неотрицательное (\(a_k \geq 0\)), и у всех остальных слаймов здоровье не равно нулю (\(a_i \ne 0\) при \(i \ne k\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если можно добраться до выхода, не проиграв, иначе выведите «NO» (без кавычек).

Примечание

В первом примере вы управляете слаймом в позиции \(4\) со здоровьем \(6\). Один из способов выбраться — поглотить слаймов в позициях \(5\), \(6\) и \(7\). Вы достигнете выхода со здоровьем \(0\) в позиции \(8\).

Во втором примере вы управляете слаймом со здоровьем \(232\) в позиции \(1\). Так как ваш слайм уже у выхода в позиции \(0\), вы можете сразу переместиться туда, не поглощая других слаймов.

В третьем примере можно показать, что здоровье вашего слайма всегда достигнет отрицательных значений до того, как вы достигнете выхода.

В четвертом примере вы управляете слаймом в позиции \(4\) со здоровьем \(6\). Ниже описана возможная последовательность действий для победы.

  1. Поглотить слаймов в позициях \(5\), \(6\) и \(7\): ваше здоровье становится равно \(4\) после поглощения слайма со здоровьем \(-2\); становится \(1\) после поглощения слайма со здоровьем \(-3\); \(7\) после поглощения слайма со здоровьем \(6\).
  2. Поглотить слаймов в позициях \(3\) и \(2\): ваше здоровье становится \(7-7+10=10\).
  3. Поглотить слайм в позиции \(8\): ваше здоровье становится \(10-10=0\).
  4. Дойти до выхода в позиции \(9\).

Так как здоровье вашего слайма всегда оставалось неотрицательным, вы выиграли.

D. Мета-cет

Комбинаторика математика Перебор Структуры данных хэши *1700

Вы любите настольную карточную игру «Сет». Каждая карта содержит \(k\) характеристик, каждая из которых может принимать значения из набора \(\{0, 1, 2\}\). В колоде содержатся все возможные варианты карт по одному разу, то есть всего \(3^k\) различных карт.

Для тройки карт характеристика является хорошей, если она совпадает у всех трех карт, либо у всех трех попарно различается. Тройка карт называется сетом, если все \(k\) характеристик для них являются хорошими.

Например, карты \((0, 0, 0)\), \((0, 2, 1)\) и \((0, 1, 2)\) образуют сет, а карты \((0, 2, 2)\), \((2, 1, 2)\) и \((1, 2, 0)\) — нет, так как, например, последняя характеристика не является хорошей.

Группа из пяти карт называется мета-сетом, если среди этих карт строго больше одного сета. Сколько существует мета-сетов среди данных \(n\) различных карт?

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 10^3\), \(1 \le k \le 20\)) — количество карт на столе и количество характеристик у каждой карты. Далее следуют \(n\) строк, описывающие характеристики карт перед вами.

Каждая строка, описывающая карту, содержит \(k\) целых чисел \(c_{i, 1}, c_{i, 2}, \ldots, c_{i, k}\) (\(0 \le c_{i, j} \le 2\)) — характеристики карты. Гарантируется, что все карты различны.

Выходные данные

Выведите одно число — количество мета-сетов.

Примечание

Будем изображать карты из примеров, указывая первые четыре характеристики. Первая характеристика будет обозначать количество объектов на карте: \(1\), \(2\), \(3\). Вторая характеристика — цвет: красный, зеленый, фиолетовый. Третья — форму: овал, ромб, волну. Четвертая — заполнение: контур, штрихованная, закрашенная.

Ниже нарисованы первые три теста. Для первых двух тестов выделены пятерки карт, которые являются мета-сетами.

В первом тесте мета-сетом является пятерка карт \((0000,\ 0001,\ 0002,\ 0010,\ 0020)\). Сетами в нем являются тройки: \((0000,\ 0001,\ 0002)\) и \((0000,\ 0010,\ 0020)\). Также сетом является тройка \((0100,\ 1000,\ 2200)\), которая не принадлежит ни одному мета-сету.

Во втором тесте мета-сетами являются пятерки: \((0000,\ 0001,\ 0002,\ 0010,\ 0020)\), \((0000,\ 0001,\ 0002,\ 0100,\ 0200)\), \((0000,\ 0010,\ 0020,\ 0100,\ 0200)\).

В третьем тесте \(54\) мета-сета.

E. Планирование дома

жадные алгоритмы Конструктив Паросочетания Структуры данных *2400

В вашем городке есть \(n\) домов, расположенных на числовой прямой в точках \(h_1, h_2, \ldots, h_n\). Вы хотите построить себе новый дом и рассматриваете два варианта, где его разместить: точки \(p_1\) и \(p_2\).

Так как вы любите ходить в гости, вы заблаговременно вычислили для обеих точек расстояния до уже существующих домов. Более формально, вы вычислили два массива \(d_1\), \(d_2\): \(d_{i, j} = \left|p_i - h_j\right|\), где \(|x|\) обозначает модуль числа \(x\).

Спустя долгое время бездействия вы забыли расположение домов \(h\) и планируемые точки \(p_1\), \(p_2\). Но в вашем дневнике нашлись два массива — \(d_1\), \(d_2\), в подлинности которых вы сомневаетесь. Также значения внутри каждого из массивов могли перемешаться, поэтому значения на одинаковых позициях массивов \(d_1\) и \(d_2\) могут соответствовать разным домам. Обратите внимание, что значения из одного массива не могли попасть в другой, иными словами, все значения в массиве \(d_1\) соответствуют расстоянию от \(p_1\) до домов, а в массиве \(d_2\) — от \(p_2\) до домов.

Обратите внимание, что расположения домов \(h_i\) и рассматриваемых вариантов \(p_j\) могли совпадать. Например, корректными являются расположения \(h = \{1, 0, 3, 3\}\), \(p = \{1, 1\}\), которым могли соответствовать уже перемешанные \(d_1 = \{0, 2, 1, 2\}\), \(d_2 = \{2, 2, 1, 0\}\).

Проверьте, существуют ли расположение домов \(h\) и планируемые точки \(p_1\), \(p_2\), для которых бы найденные массивы расстояний были корректными. Если такое возможно, найдите подходящее расположение домов и мест строительства.

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Описание наборов входных данных следует ниже.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^3\)) — длину массивов \(d_1\), \(d_2\).

Следующие две строки содержат по \(n\) целых чисел: массивы \(d_1\) и \(d_2\) (\(0 \le d_{i, j} \le 10^9\)) соответственно.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных выведите одну строку «NO», если ответа не существует.

Иначе выведите три строки. Первая строка должна содержать «YES». Вторая строка должна содержать \(n\) целых чисел \(h_1, h_2, \ldots, h_n\). Третья строка должна содержать два целых числа \(p_1\), \(p_2\).

Должно выполняться \(0 \le h_i, p_1, p_2 \le 2 \cdot 10^9\). Можно показать, что если существует ответ, то он существует и при заданных ограничениях.

Если решений несколько, выведите любое.

Примечание

На изображении ниже можно видеть решения из примера. Планируемые дома изображены яркими цветами: розовым и фиолетовым. Существующие дома - тусклыми.

В \(1\) наборе данных первый планируемый дом расположен в точке \(0\), второй - в точке \(10\). Существующий дом расположен в точке \(5\) и находится на расстоянии \(5\) от обеих планируемых домов.

Можно показать, что не существует решения для \(2\) набора данных.

В \(3\) наборе данных планируемые дома расположены в точках \(33\) и \(69\).

Обратите внимание, что в \(4\) тесте оба плана расположены в точке \(1\), где в то же время находится и один из существующих домов, что является корректным расположением.

F. Камушки и бусинки

геометрия Структуры данных *2900

Есть две валюты: камушки и бусинки. Изначально у вас есть \(a\) камушков, \(b\) бусинок.

Есть \(n\) дней, в каждый день можно обменивать одну валюту на другую по некоторому курсу.

В день \(i\) можно обменять \(-p_i \leq x \leq p_i\) камушков на \(-q_i \leq y \leq q_i\) бусинок, или наоборот. Разрешается не совершать обмен вовсе. При этом, если вы совершаете обмен, должно выполняться соотношение \(x \cdot q_i = -y \cdot p_i\). Разрешены дробные обмены.

За день можно совершить не более одного такого обмена. Количество камушков и бусинок должно всегда оставаться неотрицательным.

Решите независимо \(n\) задач: для каждого дня \(i\) выведите, какое максимальное количество камушков может быть у вас на конец \(i\)-го дня, если совершать обмены оптимально.

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Описание наборов входных данных следует ниже.

Первая строка набора входных данных содержит три целых числа \(n\), \(a\) и \(b\) (\(1 \le n \le 300\,000\), \(0 \le a, b \le 10^9\)) — количество дней и изначальное количество камушков и бусинок соответственно.

Вторая строка набора входных данных содержит \(n\) целых чисел: \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le 10^9\)).

Третья строка набора входных данных содержит \(n\) целых чисел: \(q_1, q_2, \ldots, q_n\) (\(1 \le q_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(300\,000\).

Выходные данные

Выведите \(n\) чисел — максимальное количество камушков в конце каждого дня.

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{\left|a - b\right|}{\max(1, \left|b\right|)} \le 10^{-6}\).

Примечание

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

В первом примере оптимальной стратегией для первого дня является не делать обмена вовсе, поскольку мы можем только уменьшить количество камушков. Для второго дня оптимальной стратегией является сначала обменять \(1\) камушек на \(2\) бусинки, что является корректным обменом, поскольку \(1 \cdot 4 = 2 \cdot 2\), после чего обменять \(2\) бусинки на \(3\) камушка.

C1. Хорошие подмассивы (простая версия)

Бинарный поиск расписания Структуры данных *1300

Это простая версия этой задачи. В этой версии нет запросов. Однако обратите внимание, что в этой версии в каждом тесте может быть несколько наборов входных данных. Вы можете делать взломы только если обе версии задачи решены.

Массив \(b\) длины \(m\) является хорошим, если \(i\)-й элемент больше либо равен \(i\) для всех \(i\). Другими словами, \(b\) хороший, если и только если \(b_i \geq i\) для всех \(i\) (\(1 \leq i \leq m\)).

Вам дан массив \(a\), состоящий из \(n\) положительных целых чисел. Найдите количество пар индексов \((l, r)\), где \(1 \le l \le r \le n\), таких, что массив \([a_l, a_{l+1}, \ldots, a_r]\) хороший.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \leq a_i \leq n\)) — массив \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество подходящих пар индексов.

Примечание

В первом примере все подмассивы \(a\) являются хорошими, поэтому все пары индексов подходят.

Во втором примере пары \((1, 1)\), \((2, 2)\) и \((3, 3)\) подходят. Однако, например, при \((l, r) = (1, 2)\), массив \(b=[1,1]\) не является хорошим, потому что \(b_2 < 2\).

C2. Хорошие подмассивы (сложная версия)

Бинарный поиск дп Структуры данных *2400

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

Массив \(b\) длины \(m\) является хорошим, если \(i\)-й элемент больше либо равен \(i\) для всех \(i\). Другими словами, \(b\) хороший, если и только если \(b_i \geq i\) для всех \(i\) (\(1 \leq i \leq m\)).

Вам дан массив \(a\), состоящий из \(n\) положительных целых чисел, а также \(q\) запросов.

В каждом запросе вам даны два целых числа \(p\) и \(x\) (\(1 \leq p,x \leq n\)). Вам нужно выполнить \(a_p := x\) (присвоить \(x\) элементу \(a_p\)). В обновленном массиве, найдите количество пар индексов \((l, r)\), где \(1 \le l \le r \le n\), таких, что массив \([a_l, a_{l+1}, \ldots, a_r]\) хороший.

Обратите внимание, что все запросы независимы то есть после каждого запроса массив \(a\) восстанавливается к изначальному состоянию.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)).

Третья строка содержит одно целое число \(q\) (\(1 \leq q \leq 2 \cdot 10^5\)) — количество запросов.

Каждая из следующих \(q\) строк содержит два целых числа \(p_j\) и \(x_j\) (\(1 \leq p_j, x_j \leq n\)) – описание \(j\)-го запроса.

Выходные данные

Для каждого запроса выведите количество подходящих пар индексов после изменения массива.

Примечание

Ниже находятся примечания к первому примеру.

В первом запросе \(a=[2,4,1,4]\). Здесь \((1,1)\), \((2,2)\), \((3,3)\), \((4,4)\), \((1,2)\) и \((3,4)\) являются подходящими парами.

Во втором запросе \(a=[2,4,3,4]\). Все подмассивы \(a\) являются хорошими.

В третьем запросе \(a=[2,1,1,4]\). Здесь \((1,1)\), \((2,2)\), \((3,3)\), \((4,4)\) и \((3,4)\) являются подходящими парами.

G. Эла на уроке танцев

Бинарный поиск Структуры данных *3500

Работники DTL любят вечеринки по выходным. Эла тоже! К сожалению, она еще не умеет танцевать. Поэтому она решила пойти на урок танцев.

В танцевальном классе \(n\) студентов, включая Элу. В финальном проекте \(n\) студентов примут участие в композиции, описанной ниже.

\(n\) студентов расположатся на положительной стороне оси \(Ox\). \(i\)-й танцор будет находиться в точке \(a_i > 0\). Некоторые танцоры будут менять положение во время танца (назовем их подвижными танцорами), а другие будут оставаться на одном месте во время композиции (назовем их неподвижными танцорами). Обозначим танцоров с помощью бинарной строки \(s\) длины \(n\): если \(s_i\) равно '1', то \(i\)-й танцор подвижный, иначе \(i\)-й танцор неподвижный. Хотя бы один танцор является подвижным.

Назовем значением положительной энергии композиции число \(d > 0\). Танцоры будут выполнять движения на основе этого значения.

Каждую минуту после начала танца подвижный танцор с наименьшей координатой \(x\) начинает движение вправо. В начале движения уровень энергии танцора будет равен значению положительной энергии композиции, то есть \(d\). Каждый раз, когда этот танцор перемещается с какой-то координаты \(y\) на координату \(y+1\), уровень его энергии будет уменьшаться на \(1\). В какой-то момент танцор может встретить другого танцора (возможно, это произойдет несколько раз), в той координате, где он окажется. Если это произойдет, то уровень энергии танцора повысится на \(1\). Танцор перестанет двигаться вправо, когда его уровень энергии достигнет \(0\), и при этом он не стоит на одной координате с каким-либо другим танцором.

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

Чтобы показать свое понимание этой композиции, Эла должна ответить на \(q\) запросов, каждый из которых состоит из двух целых чисел \(k\) и \(m\). Ответом на этот запрос является координата \(m\)-го танцора (любого типа) слева на \(k\)-й минуте после начала композиции. Другими словами, обозначим как \(x_{k, 1}, x_{k, 2}, \dots, x_{k, n}\) отсортированные координаты танцоров на \(k\)-й минуте от начала, вам нужно вывести \(x_{k, m}\).

Входные данные

Первая строка содержит три целых числа \(n\), \(d\) и \(q\) (\(1 \le n \le 10^5\); \(1 \le d \le 10^9\); \(1 \le q \le 10^5\) ) — количество танцоров, значение положительной энергии композиции и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_1 < a_2 < \dots < a_n \le 10^9\)) — координаты танцоров.

Третья строка содержит бинарную строку \(s\) длины \(n\) — показатель подвижности каждого танцора. Каждый символ равен '0' или '1', где '0' обозначает неподвижность очередного танцора, а '1' подвижного. Гарантируется, что \(s\) содержит хотя бы один символ '1'.

Далее следуют \(q\) строк, \(i\)-я из которых содержит два целых числа \(k_i\) и \(m_i\) (\(1 \le k_i \le 10^9\), \(1 \le m_i \le n\)) — очередной запрос.

Выходные данные

Для каждого из \(q\) запросов выведите ответ на задачу.

Примечание

Рассмотрим первый пример.

В первую минуту \(1\) — это самая маленькая координата среди подвижных танцоров. Энергия танцора изначально равна \(3\). Затем происходит следующее:

  • Танцор перемещается с \(1\) на \(2\). Уровень энергии снизился до \(2\).
  • Танцор перемещается с \(2\) на \(3\). Уровень энергии снизился до \(1\), а затем увеличился до \(2\), когда он встретил другого танцора в координате \(3\).
  • Танцор перемещается с \(3\) на \(4\). Уровень энергии снизился до \(1\).
  • Танцор перемещается с \(4\) на \(5\). Уровень энергии снизился до \(0\).

В конце первой минуты отсортированные координаты танцоров становятся \([3, 5, 6, 7]\), а их соответствующая подвижность равна '0111'.

На второй минуте \(5\) — самая маленькая координата среди подвижных танцоров. Энергия танцора изначально равна \(3\). Затем происходит следующее:

  • Танцор перемещается с \(5\) на \(6\). Уровень энергии снизился до \(2\), а затем увеличился до \(3\), когда он встретил другого танцора в координате \(6\).
  • Танцор перемещается с \(6\) на \(7\). Уровень энергии снизился до \(2\), а затем увеличился до \(3\), когда он встретил другого танцора в координате \(7\).
  • Танцор перемещается с \(7\) на \(8\). Уровень энергии снизился до \(2\).
  • Танцор перемещается с \(8\) на \(9\). Уровень энергии снизился до \(1\).
  • Танцор перемещается с \(9\) на \(10\). Уровень энергии снизился до \(0\).

В конце второй минуты отсортированные координаты танцоров становятся \([3, 6, 7, 10]\), а их соответствующая подвижность равна '0111'.

D. Упоротые перестановки

графы Деревья Конструктив поиск в глубину и подобное снм Структуры данных *1900

Дана перестановка \(a_1, a_2, \dots, a_n\) целых чисел от \(1\) до \(n\), и пороговое значение \(k\) такое, что \(0 \leq k \leq n\), по ним вычисляется последовательность \(b_1, b_2, \dots, b_n\) следующим образом.

Для всех \(1 \leq i \leq n\) в порядке возрастания положим \(x = a_i\).

  • Если \(x \leq k\), приравняем \(b_{x}\) последнему элементу \(a_j\) (\(1 \leq j < i\)) такому, что \(a_j > k\). Если такого элемента \(a_j\) не существует, положим \(b_{x} = n+1\).
  • Если \(x > k\), приравняем \(b_{x}\) последнему элементу \(a_j\) (\(1 \leq j < i\)) такому, что \(a_j \leq k\). Если такого элемента \(a_j\) не существует, положим \(b_{x} = 0\).

К сожалению, после построения последовательности \(b_1, b_2, \dots, b_n\), перестановка \(a_1, a_2, \dots, a_n\) и пороговое значение \(k\) потерялись.

Теперь у вас есть только последовательность \(b_1, b_2, \dots, b_n\). Ваша задача найти любую подходящую перестановку \(a_1, a_2, \dots, a_n\) и пороговое значение \(k\) которые порождают последовательность \(b_1, b_2, \dots, b_n\). Гарантируется, что существует хотя бы одна пара перестановки \(a_1, a_2, \dots, a_n\) и порогового значения \(k\), что порождают \(b_1, b_2, \dots, b_n\).

Перестановкой чисел от \(1\) до \(n\) называется последовательность длины \(n\) которая содержит все целые числа от \(1\) до \(n\) ровно один раз.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Затем следуют описания наборов входных данных.

В первой строке набора входных данных содержится целое число \(n\) (\(1 \leq n \leq 10^5\)), означающее длину перестановки \(a\).

Во второй строке содержится \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(0 \leq b_i \leq n+1\)), означающие элементы последовательности \(b\).

Гарантируется, что существует хотя бы одна пара перестановки \(a_1, a_2, \dots, a_n\) и порогового значения \(k\), что порождают \(b_1, b_2, \dots, b_n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите пороговое значение \(k\) (\(0 \leq k \leq n\)) в первой строке, и затем выведите перестановку \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq n\)) во второй строке так, что перестановку \(a_1, a_2, \dots, a_n\) и пороговое значение \(k\) порождают последовательность \(b_1, b_2, \dots, b_n\). Если существуют несколько решений, выведите любое из них.

Примечание

В первом примере перестановка \(a = [1,3,2,4]\) и пороговое значение \(k = 2\) породят \(b\) следующим образом.

  • Когда \(i = 1\), \(x = a_i = 1 \leq k\), нет такого \(a_j\) (\(1 \leq j < i\)) что \(a_j > k\). Значит, \(b_1 = n + 1 = 5\).
  • Когда \(i = 2\), \(x = a_i = 3 > k\), последний элемент \(a_j\) такой, что \(a_j \leq k\) это \(a_1\). Значит, \(b_3 = a_1 = 1\).
  • Когда \(i = 3\), \(x = a_i = 2 \leq k\), последний элемент \(a_j\) такой, что \(a_j > k\) это \(a_2\). Значит, \(b_2 = a_2 = 3\).
  • Когда \(i = 4\), \(x = a_i = 4 > k\), последний элемент \(a_j\) такой, что \(a_j \leq k\) это \(a_3\). Значит, \(b_4 = a_3 = 2\).
Получается последовательность \(b = [5,3,1,2]\).

Для второго примера перестановка \(a = [1,2,3,4,5,6]\) и пороговое значение \(k = 3\) породят \(b\) следующим образом.

  • Когда \(i = 1, 2, 3\), \(a_i \leq k\), нет такого \(a_j\) (\(1 \leq j < i\)) что \(a_j > k\). Значит, \(b_1 = b_2 = b_3 = n + 1 = 7\).
  • Когда \(i = 4, 5, 6\), \(a_i > k\), последний элемент \(a_j\) такой, что \(a_j \leq k\) это \(a_3\). Значит, \(b_4 = b_5 = b_6 = a_3 = 3\).
Получается последовательность \(b = [7,7,7,3,3,3]\).

Для третьего примера перестановка \(a = [6,5,4,3,2,1]\) и пороговое значение \(k = 3\) породят \(b\) следующим образом.

  • Когда \(i = 1, 2, 3\), \(a_i > k\), нет такого \(a_j\) (\(1 \leq j < i\)) что \(a_j \leq k\). Значит, \(b_4 = b_5 = b_6 = 0\).
  • Когда \(i = 4, 5, 6\), \(a_i \leq k\), последний элемент \(a_j\) такой, что \(a_j > k\) это \(a_3\). Значит, \(b_1 = b_2 = b_3 = a_3 = 4\).
Получается последовательность \(b = [4,4,4,0,0,0]\).

H. Упоротые палиндромы

Строки Структуры данных *3300

Ваша задача состоит в том, чтобы поддерживать очередь содержащую строчные буквы Латинского алфавита со следующими операциями:

  • «push \(c\)»: вставить букву \(c\) в конец очереди;
  • «pop»: удалить букву из начала очереди.

Изначально очередь пустая.

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

Число различных подстрок палиндромов пустой строки равняется \(0\).

Строка \(s[1..n]\) длины \(n\) является палиндромом, если \(s[i] = s[n-i+1]\) для любого \(1 \leq i \leq n\).

Строка \(s[l..r]\) является подстрокой строки \(s[1..n]\) для любого \(1 \leq l \leq r \leq n\).

Две строки \(s[1..n]\) и \(t[1..m]\) различные, если выполняется как минимум одно из условий.

  • \(n \neq m\);
  • \(s[i] \neq t[i]\) для некоторого \(1 \leq i \leq \min\{n,m\}\).
Входные данные

В первой строке содержится целое число \(q\) (\(1 \leq q \leq 10^6\)), означающее число операций.

Далее следуют \(q\) строк. Каждая строка содержит одну из операций.

  • «push \(c\)»: вставить \(c\) в конец очереди, где \(c\) это строчная буква Латинского алфавита;
  • «pop»: удалить букву из начала очереди.

Гарантируется, что операция «pop» не будет применяться к пустой очереди.

Выходные данные

После каждой операции, выведите количество различных подстрок палиндромов в строке, представленной в очереди.

Примечание

Пусть \(s_k\) это строка находящаяся в очереди после \(k\)-й операции, и пусть \(c_k\) будет число различных подстрок палиндромов строки \(s_k\). Следующая таблица иллюстрирует пример.

\(k\)\(s_k\)\(c_k\)
\(1\)\(a\)\(1\)
\(2\)\(\textsf{empty}\)\(0\)
\(3\)\(a\)\(1\)
\(4\)\(aa\)\(2\)
\(5\)\(aab\)\(3\)
\(6\)\(aabb\)\(4\)
\(7\)\(aabba\)\(5\)
\(8\)\(aabbaa\)\(6\)
\(9\)\(abbaa\)\(5\)
\(10\)\(bbaa\)\(4\)
\(11\)\(baa\)\(3\)
\(12\)\(baab\)\(4\)

Стоит заметить, что

  • После \(2\)-й операции, строка пустая и у нее нет подстрок. Значит ответ \(0\);
  • После \(8\)-й операции, строка «\(aabbaa\)». У нее \(6\) различных подстрок палиндромов «\(a\)», «\(aa\)», «\(aabbaa\)», «\(abba\)», «\(b\)», and «\(bb\)».

D. Сбросить k ребер

Бинарный поиск графы Деревья жадные алгоритмы поиск в глубину и подобное Структуры данных *1900

Задано корневое дерево, состоящее из \(n\) вершин. Вершины пронумерованы от \(1\) до \(n\), корень — это вершина \(1\).

Вы можете совершить следующую операцию не более \(k\) раз:

  • выбрать ребро \((v, u)\) дерева такое, что \(v\) является родителем \(u\);
  • удалить ребро \((v, u)\);
  • добавить ребро \((1, u)\) (т. е. сделать \(u\) с его поддеревом ребенком корня).

Высотой дерева называют максимальную глубину среди всех его вершин, а глубина вершины — это количество ребер на пути от корня до нее. Например, глубина вершины \(1\) равна \(0\), так как она — корень, а глубина всех ее детей равна \(1\).

Какую минимальную высоту дерева можно получить?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\); \(0 \le k \le n - 1\)) — количество вершин в дереве и наибольшее количество операций, которые вы можете совершить.

Во второй строке записаны \(n-1\) целых чисел \(p_2, p_3, \dots, p_n\) (\(1 \le p_i < i\)) — родитель \(i\)-й вершины. Вершина \(1\) — корень.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

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

F. Дизайн клавиатуры

битмаски дп Строки строковые суфф. структуры Структуры данных *2600

У Монокарпа есть словарь из \(n\) слов, состоящих из первых \(12\) букв латинского алфавита. Слова пронумерованы от \(1\) до \(n\). Во всех парах соседних букв в слове буквы различны. Каждому слову \(i\) Монокарп сопоставил целое число \(c_i\) — как часто он использует это слово.

Монокарп хочет выбрать такой дизайн клавиатуры, чтобы он помог ему проще печатать некоторые слова. Клавиатуру можно описать, как последовательность из \(12\) первых букв латинского алфавита, где каждая буква от a до l встречается ровно один раз.

Слово можно легко напечатать на клавиатуре, если для каждой пары соседних символов в слове эти символы на клавиатуре тоже соседние. Оптимальность клавиатуры — это сумма \(c_i\) по всем словам \(i\), которые могут быть легко на ней напечатаны.

Помогите Монокарпу создать дизайн клавиатуры с максимальной оптимальностью.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 1000\)) — количество слов.

Затем следуют \(n\) строк. В \(i\)-й из них записаны целое число \(c_i\) (\(1 \le c_i \le 10^5\)) и строка \(s_i\) (\(2 \le |s_i| \le 2000\)), означающее \(i\)-е слово. Каждый символ в \(s_i\) — это один из \(12\) первых букв латинского алфавита. Все буквы строчные. Для каждого \(j \in [1, |s_i| - 1]\), \(j\)-й символ в \(s_i\) отличается от \((j+1)\)-го.

Дополнительное ограничение на входные данные: \(\sum \limits_{i=1}^{n} |s_i| \le 2000\).

Выходные данные

Выведите последовательность из \(12\) первых букв латинского алфавита, где каждая буква от a до l встречается ровно один раз, определяющую оптимальную клавиатуру. Если ответов несколько, выведите любой из них.

C. Увеличения на отрезке

жадные алгоритмы Структуры данных *1800

Поликарп — начинающий программист. Сейчас он исследует программу своего друга. Он уже обнаружил там функцию rangeIncrement(l, r), которая прибавляет единицу к каждому элементу некоторого массива a для всех индексов на отрезке [l, r]. Иными словами, эта функция делает следующее:


function rangeIncrement(l, r)
for i := l .. r do
a[i] = a[i] + 1

Поликарпу известно состояние массива a после серии вызовов этой функции. Он хочет определить минимальное количество вызовов функции, которые приведут к такому результату. Кроме того, он хочет понять какие именно вызовы функции нужны в таком случае. Гарантируется, что искомое количество вызовов не превосходит 105.

До вызовов функции rangeIncrement(l, r) все элементы массива равны нулям.

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 105) — длина массива a[1... n].

Вторая строка содержит его целочисленные элементы, записанные через пробел, a[1], a[2], ..., a[n] (0 ≤ a[i] ≤ 105) после некоторой серии вызовов функции rangeIncrement(l, r).

Гарантируется, что хотя бы один элемент массива отличен от 0. Гарантируется, что ответ содержит не более 105 вызовов функции rangeIncrement(l, r).

Выходные данные

В первую строку выведите t — наименьшее количество вызовов функции rangeIncrement(l, r), которые приведут к массиву из входных данных. Гарантируется, что это число окажется не более 105.

Далее выведите t строк — описания вызовов функции по одному в строке. Каждая строка должна содержать два целых числа li, ri (1 ≤ li ≤ ri ≤ n) — аргументы i-го вызова rangeIncrement(l, r). Вызовы функции могут быть осуществлены в любом порядке.

Если решений несколько, разрешается вывести любое.

Примечание

В первом примере требуется вызов для всего массива и четыре дополнительных вызова:

  • один для отрезка [2,2] (т.е. второго элемента массива),
  • три для отрезка [5,5] (т.е. пятого элемента массива).

D. Карты знаний

Конструктив Структуры данных *1500

Пак Чанек, известный ученый, изобрел карточную головоломку, используя свои знания. В головоломке вам дается поле с \(n\) строками и \(m\) столбцами. Пусть \((r, c)\) обозначает ячейку в \(r\)-й строке и \(c\)-м столбце.

Изначально в ячейке \((1, 1)\) стопкой лежат \(k\) карт. На каждой карте написано целое число от \(1\) до \(k\). А именно, на \(i\)сверху карте в стопке в ячейке \((1, 1)\) написано число \(a_i\). Известно, что не существует двух карт с одинаковыми числами. Другими словами, числа, написанные на картах, представляют собой перестановку целых чисел от \(1\) до \(k\). Все остальные ячейки пусты.

Вам нужно переместить все \(k\) карт в ячейку \((n, m)\), чтобы составить другую стопку карт. Пусть \(b_i\) — число, написанное на \(i\)сверху карте в стопке в ячейке \((n, m)\). Вы должны составить стопку в ячейке \((n, m)\) таким образом, чтобы \(b_i = i\) для всех \(1 \leq i \leq k\).

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

  • Каждая ячейка, отличная от \((1,1)\) и \((n,m)\), должна всегда содержать не более одной карты.
  • Вы не можете перемещать карту в ячейку \((1,1)\).
  • Вы не можете перемещать карту из ячейки \((n,m)\).

По заданным значениям \(n\), \(m\), \(k\) и массиву \(a\), определите, разрешима ли головоломка.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\)) — количество наборов входных данных. Следующие строки содержат описание наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(3 \leq n, m \leq 10^6\), \(nm \leq 10^6\), \(1 \leq k \leq 10^5\)) — размеры поля и количество карт.

Вторая строка набора содержит \(k\) целых чисел \(a_1, a_2, \ldots, a_k\) — массив \(a\), содержащий числа, написанные на картах. Значения \(a\) представляют собой перестановку целых чисел от \(1\) до \(k\).

Гарантируется, что сумма \(nm\) и сумма \(k\) по всем наборам входных данных не превышают \(10^6\) и \(10^5\) соответственно.

Выходные данные

Для каждого набора входных данных выведите «YA» (без кавычек), если головоломка имеет решение, и «TIDAK» (без кавычек) иначе, что означает «да» и «нет» соответственно в индонезийском языке.

Вы можете выводить «YA» и «TIDAK» в любом регистре (например, строки «tiDAk», «tidak» и «Tidak» будут восприняты как отрицательный ответ).

Примечание

В первом наборе входных данных головоломка может быть решена следующим образом:

  • Переместить карту с написанной на ней \(3\) из ячейки \((1, 1)\) в ячейку \((1, 2)\), затем в \((1, 3)\).
  • Переместить карту с написанной на ней \(6\) из ячейки \((1, 1)\) в ячейку \((2, 1)\), затем в \((3, 1)\), затем в \((3, 2)\), затем в \((3, 3)\).
  • Переместить карту с написанной на ней \(4\) из ячейки \((1, 1)\) в ячейку \((1, 2)\).
  • Переместить карту с написанной на ней \(1\) из ячейки \((1, 1)\) в ячейку \((2, 1)\), затем в \((2, 2)\), затем в \((2, 3)\).
  • Переместить карту с написанной на ней \(2\) из ячейки \((1, 1)\) в ячейку \((2, 1)\), затем в \((2, 2)\).
  • Переместить карту с написанной на ней \(5\) из ячейки \((1, 1)\) в ячейку \((2, 1)\), затем в \((3, 1)\), затем в \((3, 2)\), затем в \((3, 3)\).
  • Переместить карту с написанной на ней \(2\) из ячейки \((2, 2)\) в ячейку \((2, 1)\).
  • Переместить карту с написанной на ней \(4\) из ячейки \((1, 2)\) в ячейку \((2, 2)\), затем в \((3, 2)\), затем в \((3, 3)\).
  • Переместить карту с написанной на ней \(3\) из ячейки \((1, 3)\) в ячейку \((1, 2)\), затем в \((2, 2)\), затем в \((3, 2)\), затем в \((3, 3)\).
  • Переместить карту с написанной на ней \(2\) из ячейки \((2, 1)\) в ячейку \((3, 1)\), затем в \((3, 2)\), затем в \((3, 3)\).
  • Переместить карту с написанной на ней \(1\) из ячейки \((2, 3)\) в ячейку \((3, 3)\).

Анимированная иллюстрация процесса, описанного выше, выглядит следующим образом:

E. Подвешенные сердца

Деревья дп жадные алгоритмы Конструктив поиск в глубину и подобное Структуры данных *1800

У Пака Чанека есть \(n\) пустых карточек в форме сердца. Карточка \(1\) прикреплена непосредственно к стене, остальные же карточки подвешены ровно к одной другой карточке верёвочкой. А именно, карточка \(i\) (\(i > 1\)) подвешена к карточке \(p_i\) (\(p_i < i\)).

Пак Чанек должен написать на каждой карточке одно целое число. Для этого он выберет произвольную перестановку \(a\) чисел \([1, 2, \dots, n]\), и на карточке \(i\) запишет число \(a_i\).

После этого Пак Чанек должен выполнить следующую операцию \(n\) раз, поддерживая при этом последовательность \(s\) (изначально пустую):

  1. Выбрать такую карточку \(x\), что к ней не подвешена ни одна другая карточка.
  2. Добавить число, записанное на карте \(x\), в конец последовательности \(s\).
  3. Если \(x \neq 1\) и число на карточке \(p_x\) больше, чем число на карточке \(x\), заменить число на карточке \(p_x\) на число на карточке \(x\).
  4. Удалить карточку \(x\).

После этого у Пака Чанека будет последовательность \(s\) из \(n\) элементов. Какова максимальная длина наибольшей неубывающей подпоследовательности\(^\dagger\) \(s\) в конце, если Пак Чанек выполняет все шаги оптимально?

\(^\dagger\) Последовательность \(b\) называется подпоследовательностью последовательности \(c\) если \(b\) может быть получена из \(c\) удалением некоторого (возможно нулевого) количества элементов. Например, \([3,1]\) — подпоследовательность \([3,2,1]\), \([4,3,1]\) и \([3,1]\), но не \([1,3,3,7]\) и не \([3,10,4]\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — количество карточек.

Вторая строка содержит \(n - 1\) целое число \(p_2, p_3, \dots, p_n\) (\(1 \le p_i < i\)) описывающая, к какой карточке подвешена каждая карточка.

Выходные данные

Выведите одно целое число — максимальную длину наибольшей неубывающей подпоследовательности \(s\) в конце, если Пак Чанек сделает все шаги оптимально.

Примечание

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

Пак Чанек может выбрать перестановку \(a = [1, 5, 4, 3, 2, 6]\).

Пусть \(w_i\) — число на карточке \(i\). Изначально \(w_i = a_i\).

Пак Чанек может выполнять следующие операции по порядку:

  1. Выбрать карточку \(5\). Добавить \(w_5 = 2\) в конец \(s\). Так как \(w_4 > w_5\), значение \(w_4\) становится равным \(2\). Удаляем карточку \(5\). После этой операции \(s = [2]\).
  2. Выбрать карточку \(6\). Добавить \(w_6 = 6\) в конец \(s\). Так как \(w_2 \leq w_6\), значение \(w_2\) остается неизменным. Удаляем карточку \(6\). После этой операции \(s = [2, 6]\).
  3. Выбрать карточку \(4\). Добавить \(w_4 = 2\) в конец \(s\). Так как \(w_1 \leq w_4\), значение \(w_1\) остается неизменным. Удаляем карточку \(4\). После этой операции \(s = [2, 6, 2]\).
  4. Выбрать карточку \(3\). Добавить \(w_3 = 4\) в конец \(s\). Так как \(w_2 > w_3\), значение \(w_2\) становится равным \(4\). Удаляем карточку \(3\). После этой операции \(s = [2, 6, 2, 4]\).
  5. Выбрать карточку \(2\). Добавить \(w_2 = 4\) в конец \(s\). Так как \(w_1 \leq w_2\), значение \(w_1\) is left unchanged. Удаляем карточку \(2\). После этой операции \(s = [2, 6, 2, 4, 4]\).
  6. Выбрать карточку \(1\). Добавить \(w_1 = 1\) в конец \(s\). Удаляем карточку \(1\). После этой операции \(s = [2, 6, 2, 4, 4, 1]\).

Одна из наибольших неубывающих подпоследовательностей \(s = [2, 6, 2, 4, 4, 1]\) это \([2, 2, 4, 4]\). Таким образом, длина наибольшей неубывающей подпоследовательности \(s\) равна \(4\). Можно доказать, что это действительно максимально возможная длина.

H. MEX и манипуляции с деревом

Деревья Структуры данных *3300

Для корневого дерева определим значение вершины \(u\) в дереве рекурсивно как MEX\(^\dagger\) значений её детей. Обратите внимание, что это только дети, а не все её потомки. В частности, значение листа равно \(0\).

У Пака Чанека есть корневое дерево, которое изначально содержит только одну вершину с индексом \(1\), являющуюся корнем. Пак Чанек будет исполнять \(q\) запросов. В \(i\)-м запросе Паку Чанеку задано целое число \(x_i\). Паку Чанеку нужно добавить новую вершину с индексом \(i+1\) в качестве ребенка вершины \(x_i\). После добавления новой вершины Пак Чанек должен пересчитать значения всех вершин и сообщить сумму значений всех вершин в текущем дереве.

\(^\dagger\) MEX (minimum excluded) массива это наименьшее неотрицательное целое число, которого нет в массиве. Например, MEX массива \([0,1,1,2,6,7]\) равен \(3\), а MEX \([6,9]\) равен \(0\).

Входные данные

Первая строка входных данных содержит целое число \(q\) (\(1 \le q \le 3 \cdot 10^5\)) — количество запросов.

Каждая из следующих \(q\) строк содержит целое число \(x_i\) (\(1 \leq x_i \leq i\)) — описание \(i\)-го запроса.

Выходные данные

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

Примечание

В первом примере после \(6\)-го запроса дерево примет следующий вид.

  • Вершина \(7\) — лист, поэтому её значение равно \(0\).
  • Вершина \(6\) — лист, поэтому её значение равно \(0\).
  • Вершина \(5\) имеет единственного ребенка со значением \(0\), поэтому её значение равно \(1\).
  • Вершина \(4\) — лист, поэтому её значение равно \(0\).
  • Вершина \(3\) имеет единственного ребенка со значением \(0\), поэтому её значение равно \(1\).
  • Вершина \(2\) имеет детей со значениями \(0\) и \(1\), поэтому её значение равно \(2\).
  • Вершина \(1\) имеет детей со значениями \(1\) и \(2\), поэтому её значение равно \(0\).

Сумма значений всех вершин равна \(0+0+1+0+1+2+0=4\).

I. Хрустальные шары

геометрия графы дп разделяй и властвуй разделяй и властвуй Структуры данных теория чисел *3500

В мире Compfestnesia Пак Чанек нашел секретное подземелье. Внутри него находится сундук с сокровищами, окруженный \(n\) статуями, расположенными по кругу. Статуи пронумерованы от \(0\) до \(n-1\), причем статуя \(i\) находится слева от статуи \(i+1\), а статуя \(n-1\) — слева от статуи \(0\).

Пак Чанек заметил, что каждая статуя держит хрустальный шар с целым числом от \(0\) до \(m-1\) включительно. В хрустальном шаре статуи \(i\) содержится число \(a_i\).

В подземелье есть инструкция, согласно которой, чтобы открыть сундук с сокровищами, все целые числа в хрустальных шарах должны быть равны \(0\). Для этого Паку Чанеку дается целое число \(k\), и он может выполнить ноль или более операций. За одну операцию Пак Чанек делает следующее:

  1. Он выберет ровно \(k\) последовательных статуй. Другими словами, выберет статуи \(p, (p+1) \bmod n, (p+2) \bmod n, (p+3) \bmod n, \ldots, (p+k-1) \bmod n\) для некоторого выбранного индекса \(p\).
  2. Выполнит одно из следующих действий:
    • Для каждой выбранной статуи заменит её значение \(a_i\) на \((a_i+1) \bmod m\).
    • Для каждой выбранной статуи заменит её значение \(a_i\) на \((a_i-1) \bmod m\).

Помогите Паку Чанеку найти минимально возможное количество операций, чтобы открыть сундук с сокровищами.

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \leq n,m \leq 10^6\), \(nm \leq 2 \cdot 10^6\), \(1 \leq k < n\)) — количество статуй, верхнее ограничение на значения чисел в хрустальных шарах и количество статуй, которые можно изменять за одну операцию.

Вторая строка содержит \(n\) целых чисел \(a_0,a_1,\ldots,a_{n-1}\) (\(0 \leq a_i < m\)) — целые числа в хрустальных шарах.

Выходные данные

Если возможно выполнить ноль или более операций так, чтобы стало \(a_0=a_1=\ldots=a_{n-1}=0\), выведите минимальное требуемое количество операций. В противном случае выведите \(-1\).

Примечание

В первом примере Пак Чанек может выполнять следующие операции:

  1. Выполнить операцию \(a_i := (a_i-1) \bmod m\) \(3\) раза для статуй \(1\), \(2\) и \(3\). Теперь \(a=[8,7,1,2,0]\).
  2. Выполнить операцию \(a_i := (a_i-1) \bmod m\) \(1\) раз для статуй \(3\), \(4\) и \(0\). Теперь \(a=[7,7,1,1,8]\).
  3. Выполнить операцию \(a_i := (a_i+1) \bmod m\) \(2\) раза для статуй \(4\), \(0\) и \(1\). Теперь \(a=[0,0,1,1,1]\).
  4. Выполнить операцию \(a_i := (a_i-1) \bmod m\) \(1\) раз для статуй \(2\), \(3\) и \(4\). Теперь \(a=[0,0,0,0,0]\).

F. Разноцветные отрезки

Бинарный поиск математика сортировки Структуры данных *2000

У Дмитрия есть \(n\) разноцветных отрезков на координатной прямой \(Ox\). Каждый отрезок характеризуется тремя целыми числами \(l_i\), \(r_i\) и \(c_i\) (\(1 \le l_i \le r_i \le 10^9, 1 \le c_i \le n\)), где \(l_i\) и \(r_i\) — координаты концов \(i\)-го отрезка, а \(c_i\) — его цвет.

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

Расстояние между двумя отрезками — это минимальное из расстояний между точкой первого отрезка и точкой второго отрезка. В частности, если отрезки пересекаются, то расстояние между ними равно \(0\).

Например, у Дмитрия есть \(5\) отрезков:

  • Первый отрезок пересекается со вторым (и это отрезки разных цветов), поэтому ответы для них равны \(0\).
  • Для \(3\)-го отрезка ближайший к нему отрезок другого цвета — это \(2\)-й, расстояние до которого равно \(2\).
  • Для \(4\)-го отрезка ближайший к нему отрезок другого цвета — это \(5\)-й, расстояние до которого равно \(1\).
  • \(5\)-й отрезок лежит внутри \(2\)-го (и это отрезки разных цветов), поэтому ответы для них равны \(0\).
Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество отрезков.

Следующие \(n\) строк содержат описания отрезков. Каждый отрезок описывается тремя целыми числами \(l_i\), \(r_i\) и \(c_i\) (\(1 \le l_i \le r_i \le 10^9, 1 \le c_i \le n\)) — координаты левого и правого концов \(i\)-го отрезка, а также цвет этого отрезка. Гарантируется, что есть хотя бы \(2\) отрезка разного цвета.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(n\) целых чисел, где \(i\)-е число равно расстоянию от \(i\)-го отрезка до ближайшего отрезка другого цвета.

Примечание

В первом наборе входных данных первого примера есть только один отрезок цвета \(2\), а все остальные отрезки имеют цвет \(1\). Поэтому для отрезков цвета \(1\) ответ равен расстоянию до \(3\)-го отрезка, а для \(3\)-го ответ равен минимальному из расстояний до отрезков цвета \(1\).

Во втором наборе входных данных первого примера есть только \(2\) отрезка, и для них обоих ответ равен расстоянию между ними.

В третьем наборе входных данных первого примера каждый отрезок пересекается хотя бы одним своим концом с отрезком другого цвета, поэтому все ответы равны \(0\).

Четвёртый набор входных данных первого примера разобран в условии.

В пятом наборе входных данных первого примера один отрезок полностью лежит внутри другого, и для них обоих ответ равен \(0\).

В шестом наборе входных данных первого примера все отрезки являются точками разного цвета.

F. Пересечение и объединение

дп матрицы Структуры данных Теория вероятностей *2300

Вам даны \(n\) отрезков на координатной прямой. \(i\)-й отрезок — это \([l_i, r_i]\). Обозначим множество всех целочисленных точек, принадлежащих \(i\)-му отрезку, за \(S_i\).

Пусть \(A \cup B\) — объединение множеств \(A\) и \(B\), \(A \cap B\) — пересечение множеств \(A\) и \(B\), а \(A \oplus B\) — симметрическая разность \(A\) и \(B\) (множество, в которые входят все элементы \(A\) и все элементы \(B\), кроме тех, которые встречаются в обоих множествах).

Пусть \([\mathbin{op}_1, \mathbin{op}_2, \dots, \mathbin{op}_{n-1}]\) — массив, где каждый элемент — либо \(\cup\), либо \(\oplus\), либо \(\cap\). По всем \(3^{n-1}\) способам выбрать этот массив посчитайте сумму следующих значений:

\(\)|(((S_1\ \mathbin{op}_1\ S_2)\ \mathbin{op}_2\ S_3)\ \mathbin{op}_3\ S_4)\ \dots\ \mathbin{op}_{n-1}\ S_n|\(\)

В этом выражении \(|S|\) означает размер множества \(S\).

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)).

Затем следуют \(n\) строк. В \(i\)-й из них заданы два целых числа \(l_i\) и \(r_i\) (\(0 \le l_i \le r_i \le 3 \cdot 10^5\)).

Выходные данные

Выведите одно целое число — сумму \(|(((S_1\ \mathbin{op}_1\ S_2)\ \mathbin{op}_2\ S_3)\ \mathbin{op}_3\ S_4)\ \dots\ \mathbin{op}_{n-1}\ S_n|\) по всем возможным способам выбрать \([\mathbin{op}_1, \mathbin{op}_2, \dots, \mathbin{op}_{n-1}]\). Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

G. Антифибоначчиевый разрез

битмаски дп Комбинаторика Конструктив математика Структуры данных хэши *3000

Обратите внимание на нестандартное ограничение памяти.

Введем последовательность строк Фибоначчи следующим образом: \(f_0\) — строка 0, \(f_1\) — строка 1, \(f_i\) строится по формуле \(f_{i-1} + f_{i-2}\) при \(i>1\) (\(+\) обозначает конкатенацию строк). Например, \(f_2\)10, \(f_3\)101, \(f_4\)10110.

Для строки \(s\) обозначим за \(g(s)\) количество способов разрезать эту строку на строки, из которых ни одна не является строкой Фибоначчи. Например, если \(s\)10110101, \(g(s) = 3\), так как существуют три способа разрезать строку:

  • 101101 \(+\) 01;
  • 1011 \(+\) 0101;
  • 1011 \(+\) 01 \(+\) 01.

Вам дана последовательность строк \(s_1, s_2, \dots, s_n\). Посчитайте \(g(s_1), g(s_1 + s_2), \dots, g(s_1 + s_2 + \ldots + s_n)\). Так как эти значения могут быть очень большими, выведите их по модулю \(998244353\).

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^3\)).

Затем следуют \(n\) строк. В \(i\)-й из них задана \(s_i\) (\(1 \le |s_i| \le 10^3\)), состоящая из символов 0 и/или 1.

Выходные данные

Выведите \(n\) целых чисел, \(i\)-е из которых равно \(g(s_1 + s_2 + \ldots + s_i) \bmod 998244353\).

F. Предпоследняя

Структуры данных Теория вероятностей хэши *2800

У вас есть массив \(a\), состоящий из \(n\) положительных целых чисел, и вам нужно обработать \(q\) запросов двух типов:

  • \(1\) \(i\) \(x\): заменить \(a_{i}\) на \(x\);
  • \(2\) \(l\) \(r\) \(k\): проверить, кратно ли числу \(k\) количество вхождений каждого положительного целого числа в подмассив \(a_{l}, a_{l+1}, \ldots a_{r}\) (смотрите пример для лучшего понимания).
Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n , q \le 3 \cdot 10^5\)), длину массива \(a\) и количество запросов.

Следующая строка содержит \(n\) целых чисел \(a_{1}, a_{2}, \ldots a_{n}\) (\(1 \le a_{i} \le 10^9\)) — элементы \(a\).

Каждая из следующих \(q\) строк описывает запрос. Он имеет одну из следующих форм:

  • \(1\) \(i\) \(x\), (\(1 \le i \le n\) , \(1 \le x \le 10^9\)), или
  • \(2\) \(l\) \(r\) \(k\), (\(1 \le l \le r \le n\) , \(1 \le k \le n\)).
Выходные данные

Для каждого запроса второго типа если ответ на запрос да, выведите «YES», иначе выведите «NO».

Примечание

В первом запросе запрашиваемый подмассив равен \([1234, 2, 3, 3, 2, 1]\), и очевидно, что количество вхождений \(1\) не делится на \(k = 2\). Так что ответ «NO».

В третьем запросе запрашиваемый подмассив равен \([1, 2, 3, 3, 2, 1]\), и видно, что количество вхождений каждого целого числа в этом подмассиве делится на \(k = 2\). Поэтому ответ «YES».

В шестом запросе запрошенный подмассив равен \([1, 2, 3, 3, 2, 1, 1, 2, 3]\), и видно, что количество вхождений каждого целого числа в этом подмассиве кратно \(k = 3\). Так что ответ «YES».

G. Подготовка к олимпиаде

Бинарный поиск геометрия дп Потоки реализация сортировки Структуры данных *3500

Антон решил подготовиться к очередной олимпиаде. Чтобы Антону было интереснее, Илья подготовил для него \(n\) задач. Сдать \(i\)-ю задачу можно только в первые \(d_{i}\) дней, причем сдавать несколько задач в один и тот же день нельзя. Илья оценил полезность \(i\)-й задачи как \(r_{i}\), и разделил задачи на три темы, тема \(i\)-й задачи равна \(type_{i}\).

Антон хочет решить ровно \(a\) задач на первую тему, ровно \(b\) на вторую тему и ровно \(c\) задач на третью тему (и каждая из этих задач должна быть решена не позже своего дедлайна). Скажите Антону, сможет ли он это сделать, и если сможет, то выведите максимальную суммарную полезность задач, которые он решит.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержатся четыре целых числа \(n, a, b, c\) (\(1 \le n \le 10^5\), \(0 \le a, b, c \le n\)).

В каждой из следующих \(n\) строк содержатся три целых числа \(r_i, type_i, d_i\) (\(0 \le r_i \le 10^{9}\), \(1 \le type_i \le 3\), \(1 \le d_i \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число: \(-1\), если решить нужный набор задач невозможно, и максимальную полезность решенных задач в противном случае.

Примечание

В первом наборе входных данных выгодно решить \(2\)-ю и \(4\)-ю задачи.

Во втором наборе входных данных ответа не существует.

В третьем наборе входных данных оптимально решить \(2\)-ю, \(3\)-ю и \(4\)-ю задачи.

В последнем наборе входных данных оптимально решить \(1\)-ю, \(2\)-ю и \(4\)-ю задачи.

D. Очередная задача

Бинарный поиск битмаски Конструктив Структуры данных *1900

Вам дан массив \(a\) из \(n\) целых чисел \(a_1, a_2, a_3, \ldots, a_n\).

Вы должны ответить на \(q\) независимых запросов, каждый из которых состоит из двух целых чисел \(l\) и \(r\).

  • Рассмотрим подмассив \(a[l:r]\) \(=\) \([a_l, a_{l+1}, \ldots, a_r]\). Вы можете применить следующую операцию к подмассиву любое количество раз (возможно, нулевое).
    1. Выберите два целых числа \(L\), \(R\) таких, что \(l \le L \le R \le r\) и \(R - L + 1\) является нечетным.
    2. Замените каждый элемент в подмассиве от \(L\) до \(R\) на XOR элементов в подмассиве \([L, R]\).
  • Ответом на запрос является минимальное количество операций, необходимых для того, чтобы все элементы подмассива \(a[l:r]\) стали равны \(0\), или \(-1\), если невозможно сделать их все равными \(0\).

Более подробную информацию об операции XOR можно найти здесь.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) \((1 \le n, q \le 2 \cdot 10^5)\)  — длину массива \(a\) и количество запросов.

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((0 \le a_i \lt 2^{30})\)  — элементы массива \(a\).

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

Выходные данные

Для каждого запроса выведите одно целое число  — ответ на этот запрос.

Примечание

В первом запросе, \(l = 3, r = 4\), подмассив = \([3, 3]\). Мы можем применять операцию только к подмассивам длины \(1\), что не изменит массив; следовательно, невозможно сделать все элементы равными \(0\).

Во втором запросе, \(l = 4, r = 6\), подмассив = \([3, 1, 2]\). Мы можем выбрать весь подмассив \((L = 4, R = 6)\) и заменить все элементы на их XOR \((3 \oplus 1 \oplus 2) = 0\), получив подмассив \([0, 0, 0]\).

В пятом запрос, \(l = 1, r = 6\), подмассив = \([3, 0, 3, 3, 1, 2]\). Мы можем выполнить следующие операции:

  1. Выбираем \(L = 4, R = 6\), делая подмассив \([3, 0, 3, 0, 0, 0]\).
  2. Выбираем \(L = 1, R = 5\), делая подмассив \([0, 0, 0, 0, 0, 0]\).

C. Префиксы с нулевой суммой

дп жадные алгоритмы Перебор реализация Структуры данных *1600

Красота массива \(v_1,v_2,\ldots,v_n\) равняется количеству индексов \(i\) (\(1 \le i \le n\)), таких что \(v_1+v_2+\ldots+v_i = 0\).

У вас есть массив \(a_1,a_2,\ldots,a_n\) длины \(n\). Вы можете применить к нему следующую операцию сколько угодно раз:

  • выбрать индекс \(i\) (\(1 \le i \le n\)), такой что \(a_i=0\);
  • после этого заменить \(a_i\) на произвольное целое число.

Какой максимальной красоты массив \(a\) вы можете получить?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано одно число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина массива \(a\).

Во второй строке даны \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(-10^9 \le a_i \le 10^9\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число: максимальную красоту массива \(a\) после применения к нему операций.

Примечание

В первом наборе входных данных вы можете заменить \(a_2\) на \(-2\) за одну операцию. После этого массив \(a\) станет равен \([2,-2,1,-1,0]\) и будет иметь красоту \(3\):

  • \(a_1+a_2=2-2=0\);
  • \(a_1+a_2+a_3+a_4=2-2+1-1=0\);
  • \(a_1+a_2+a_3+a_4+a_5=2-2+1-1+0=0\).

Во втором наборе входных данных вы можете заменить \(a_3\) на \(-2\,000\,000\,000\), чтобы получить массив красоты \(1\).

В третьем наборе входных данных вы можете не делать операции.

E. Очередная задача на подсчёт массивов

Бинарный поиск Деревья дп математика Потоки разделяй и властвуй Структуры данных *2300

Позиция первого максимума на отрезке \([l; r]\) массива \(x = [x_1, x_2, \ldots, x_n]\) это наименьшее целое число \(i\), такое что \(l \le i \le r\) и \(x_i = \max(x_l, x_{l+1}, \ldots, x_r)\).

Вам дан массив \(a = [a_1, a_2, \ldots, a_n]\) длины \(n\). Найдите количество массивов \(b = [b_1, b_2, \ldots, b_n]\) длины \(n\), удовлетворяющих следующим требованиям:

  • \(1 \le b_i \le m\) для всех \(1 \le i \le n\);
  • для всех пар \(1 \le l \le r \le n\), позиция первого максимума на отрезке \([l; r]\) массива \(b\) равна позиции первого максимума на отрезке \([l; r]\) массива \(a\).

Так как это количество может быть очень большим, выведите его по модулю \(10^9+7\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке даны два числа \(n\) и \(m\) (\(2 \le n,m \le 2 \cdot 10^5\), \(n \cdot m \le 10^6\)).

Во второй строке даны \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le m\)) — массив \(a\).

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно число: количество массивов \(b\), удовлетворяющих требованиям выше, по модулю \(10^9+7\).

Примечание

В первом наборе входных данных следующие \(8\) массивов удовлетворяют требованиям из условия:

  • \([1,2,1]\);
  • \([1,2,2]\);
  • \([1,3,1]\);
  • \([1,3,2]\);
  • \([1,3,3]\);
  • \([2,3,1]\);
  • \([2,3,2]\);
  • \([2,3,3]\).

Во втором наборе входных данных следующие \(5\) массивов удовлетворяют требованиям из условия:

  • \([1,1,1,1]\);
  • \([2,1,1,1]\);
  • \([2,2,1,1]\);
  • \([2,2,2,1]\);
  • \([2,2,2,2]\).

C. Игра с числами

Бинарный поиск жадные алгоритмы игры реализация Структуры данных *1400

Алиса и Боб играют в игру. У них есть массив положительных целых чисел \(a\) размера \(n\).

Перед началом игры Алиса выбирает целое число \(k \ge 0\). Игра длится \(k\) ходов, номера ходов нумеруются от \(1\) до \(k\). На \(i\)-м ходу Алиса должна удалить из массива элемент, который меньше либо равен \(k - i + 1\). После этого, если массив не пустой, Боб должен прибавить к некоторому элементу массива \(k - i + 1\). Обратите внимание, что и действие Алисы, и следующее за ним действие Боба — это две части одного и того же хода. Если Алиса не может удалить элемент на каком-то ходу — она проигрывает. Если \(k\)-й ход закончился, а Алиса еще не проиграла, то она выигрывает.

Ваша задача — определить максимальное значение \(k\), при котором Алиса может выиграть при оптимальной игре обоих игроков. Боб играет против Алисы, поэтому он пытается, если это возможно, заставить ее проиграть.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 100\)) — размер массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное значение \(k\), при котором Алиса может выиграть при оптимальной игре обоих игроков.

F. Расстояние до пути

Деревья поиск в глубину и подобное Структуры данных *2800

Вам задано дерево, состоящее из \(n\) вершин. Первоначально в каждой вершине записано число \(0\).

Вам нужно обработать \(m\) запросов двух видов:

  1. Вам задан номер вершины \(v\). Выведите значение в данной вершине \(v\).
  2. Вам заданы номера вершин \(u\) и \(v\), и значения \(k\) и \(d\) (\(d \le 20\)). Вам нужно прибавить \(k\) к значению каждой вершины, расстояние от которой до пути из \(u\) в \(v\) не превосходит \(d\).

Расстояние между двумя вершинами \(x\) и \(y\) равно количеству ребер на пути из \(x\) в \(y\). Например, расстояние от \(x\) до самой \(x\) равно \(0\).

Расстояние от вершины \(v\) до некоторого пути из \(x\) в \(y\) равно минимуму из расстояний от \(v\) до любой вершины на пути из \(x\) в \(y\).

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

В следующих \(n - 1\) строках заданы ребра дерева — по одному в строке. В каждой строке заданы два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\); \(u \neq v\)) — соответствующее ребро дерева. Гарантируется, что заданные ребра образуют дерево.

В следующей строке задано одно целое число \(m\) (\(1 \le m \le 2 \cdot 10^5\)) — количество запросов.

В следующих \(m\) строках заданы сами запросы — по одному в строке. Каждый запрос имеет один из следующих типов:

  • \(1\) \(v\) (\(1 \le v \le n\)) — запрос первого типа;
  • \(2\) \(u\) \(v\) \(k\) \(d\) (\(1 \le u, v \le n\); \(1 \le k \le 1000\); \(0 \le d \le 20\)) — запрос второго типа.

Дополнительное ограничение на входные данные: среди запросов есть хотя бы один запрос первого типа.

Выходные данные

Для каждого запроса первого типа выведите текущее значение в заданной вершине.

Примечание

Дерево из первого примера:

Описания некоторых запросов:
  • «\(2\) \(4\) \(5\) \(10\) \(2\)»: попадающие под прибавление вершины — это \(\{4, 2, 5, 1, 3\}\);
  • «\(2\) \(1\) \(1\) \(10\) \(20\)» и «\(2\) \(6\) \(6\) \(10\) \(20\)»: все вершины попадают под прибавление, так как расстояние до \(1\) (\(6\)) меньше \(20\) у любой вершины;
  • «\(2\) \(3\) \(2\) \(10\) \(0\)»: попадающие под прибавление вершины — это \(\{3, 1, 2\}\);
  • «\(2\) \(5\) \(2\) \(10\) \(1\)»: попадающие под прибавление вершины — это \(\{5, 2, 4, 1\}\).

F. Gnomes of Might and Magic

графы кратчайшие пути реализация Структуры данных *3000

Вася играет в популярную игру Gnomes of Might and Magic.

В этой игре Вася управляет королевством гномов, состоящим из нескольких замков, соединенных двусторонними дорогами. Сеть дорог королевства имеет специальный вид. В королевстве есть m главных замков: a1, a2, ... , am, которые образуют Путь Добра. Этот путь состоит из дорог между замками ai, ai + 1 (1 ≤ i < m), а так же дороги между am и a1. Никаких других дорог между замками Пути Добра нет.

Кроме того, для каждой пары соседних замков Пути Добра u и v существует ровно один Обход Зла — путь по дорогам королевства, ведущий из первого замка (u) во второй (v) и не имеющий с Путем Добра общих вершин, кроме вершин u и v. Известно, что никаких других дорог и замков в королевстве нет, то есть каждая дорога и каждый замок лежит либо на Пути Добра, либо на Обходе Зла (замки могут лежать и там, и там). Кроме того, никакие два Обхода Зла не имеют общих замков, отличных от замков Пути Добра.

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

Пусть Миссия Смерти должна попасть из замка s в замок t. Тогда она будет двигаться из замка s к замку t, уничтожая всех очень плохих гномов, находящихся на дорогах пути, по которому она следует. Вася настолько крут, что его Миссия Смерти может уничтожить любое число гномов на своем пути. Однако, Вася очень добрый, поэтому всегда выбирает такой путь между замками s и t, следуя которому придется уничтожить наименьшее число гномов. Если таких путей несколько то среди них Вася выбирает путь, содержащий наименьшее число дорог. Если и таких путей несколько, то среди них Вася выбирает лексикографически минимальный.

Помогите Васе, промоделируйте жизнь королевства в игре Gnomes of Might and Magic.

Под путем понимается последовательность замков такая, что каждая пара соседних замков пути соединена дорогой. При этом путь x1, x2, ... , xp лексикографически меньше пути y1, y2, ... , yq, если либо p < q и x1 = y1, x2 = y2, ... , xp = yp, либо существует такое число r (r < p, r < q), что x1 = y1, x2 = y2, ... , xr = yr и xr + 1 < yr + 1.

Входные данные

В первой строке находятся два целых числа n и m (3 ≤ m ≤ n ≤ 100000) — количество замков в королевстве и количество замков на Пути Добра, соответственно.

Во второй строке находится m целых чисел — номера замков Пути Добра (замки нумеруются от 1 до n) в порядке следования по Пути, начиная с некоторого замка. Все замки Пути Добра различны.

Каждая из следующих m строк описывает один Обход Зла. Сначала в строке записано целое число ki (3 ≤ ki ≤ 100000) — количество замков на соответствующем Обходе Зла (с учетом двух замков, находящихся на пути добра), затем следует ki целых чисел — номера замков в порядке следования по данному Обходу. Все замки в одном Обходе Зла различны. Гарантируется, что первый и последний замки Обхода находятся на Пути Добра, а первые замки в Обходах Зла образуют Путь Добра и представлены в том же порядке, что и Путь во второй строке.

В следующей строке находится целое число q (1 ≤ q ≤ 100000) — количество событий в жизни королевства. Каждая из следующих q строк описывает одно событие. Событие описывается символом cj и двумя номерами замков sj и tj (символ и номера замков разделены единичным пробелом). Если символ cj равен «+» (плюс), то это означает, что на дороге между замками sj и tj встал (возможно, не первый) очень плохой гном. Если cj равен «?» (вопрос), то Вася направил Миссию Смерти из замка sj в замок tj. Гарантируется, что при запросе «+» дорога между замками sj и tj существует. События даны в хронологическом порядке, начиная с самого раннего. Изначально очень плохих гномов на дорогах нет.

Все числа во всех строках разделены единичными пробелами. Гарантируется, что все заданные Обходы Зла и Путь Добра соответствуют ограничениям, описанным в условии задачи.

Выходные данные

Для каждого запроса «?» необходимо вывести единственное число на отдельной строчке — количество очень плохих гномов, уничтоженных соответствующей Миссией Смерти. Ответы на запросы нужно выводить в хронологическом порядке.

Примечание

В примере после первых 4 запросов существует только один путь из замка 1 в замок 2, не содержащий дорог с очень плохими гномами: 1 6 3 5 2.

После того, как гном встал на дорогу (2, 5), следующая Миссия Смерти движется по пути 1 2 и уничтожает гнома, находившегося на дороге (1, 2). Следующая Миссия смерти идет по этому же пути, уже свободному от гномов.

После того, как еще один гном встал на дорогу (1, 2), следующая Миссия Смерти идет по пути 1 2 и уничтожает этого гнома.

E. Скобочная стоимость

Бинарный поиск дп жадные алгоритмы разделяй и властвуй Строки Структуры данных *2400

Деймон Таргариен решил перестать быть похожим на персонажа Metin2. Он превратил себя в прекраснейшую вещь — скобочную последовательность.

Для последовательности скобок мы можем выполнять два вида операций:

  • Выберите одну из её подстрок\(^\dagger\) и циклически сдвиньте её вправо. Например, после циклического сдвига вправо «(())» станет «)(()»;
  • Вставьте любую скобку, открывающую «(» или закрывающую «)», в любом месте последовательности.

Мы определяем стоимость скобочной последовательности как минимальное количество таких операций, чтобы сделать её правильной\(^\ddagger\).

Для заданной скобочной последовательности \(s\) длины \(n\) найдите сумму стоимостей всех \(\frac{n(n+1)}{2}\) её непустых подстрок. Обратите внимание, что для каждой подстроки мы вычисляем стоимость независимо.

\(^\dagger\) Строка \(a\) является подстрокой \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца.

\(^\ddagger\) Последовательность скобок называется правильной, если её можно превратить в правильное математическое выражение, добавив символы \(+\) и \(1\). Например, последовательности «(())()», «()» и «(()(()))» правильные, в то время как «)(», «(()» и «(()))(» не являются правильными.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину скобочной последовательности.

Вторая строка каждого набора входных данных содержит строку \(s\), состоящую только из символов '(' и ')', длины \(n\) — скобочную последовательность.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — сумму стоимостей всех подстрок \(s\).

Примечание

В первом наборе входных данных есть единственная подстрока «)». Её стоимость \(1\), потому что мы можем вставить «(» в начало этой подстроки и получить строку «()», то есть сбалансированную строку.

Во втором наборе входных данных стоимость каждой подстроки длины один равна \(1\). Стоимость подстроки «)(» равна \(1\), потому что мы можем циклически сдвинуть ее вправо и получить строку «()». Стоимость строк « )()» и «()(» равна \(1\), потому что достаточно вставить по одной скобке в каждую из них. Стоимость подстроки «)()(» равна \(1\), потому что мы можем циклически сдвинуть её вправо и получить строку «()()». Таким образом, есть \(4 + 2 + 2 + 1 = 9\) подстрока стоимостью \(1\) и \(1\) подстрока из стоимостью \(0\). Таким образом, сумма стоимостей равна \(9\).

В третьем наборе входных данных:

  • «(», стоимость равна \(1\);
  • «()», стоимость равна \(0\);
  • «())», стоимость равна \(1\);
  • «)», стоимость равна \(1\);
  • «))», стоимость равна \(2\);
  • «)», стоимость равна \(1\).

Таким образом, сумма стоимостей равна \(6\).

H. BinaryStringForces

дп Конструктив Структуры данных *3500

Вам дана бинарная строка \(s\) длины \(n\). Определим максимальную подстроку как подстроку, которую нельзя расширить, сохраняя при этом все элементы равными. Например, в строке \(11000111\) есть три максимальные подстроки: \(11\), \(000\) и \(111\).

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

  • Если \(a \ge b\), то заменить \(b\) выбранных нулей на \(b\) единиц.
  • Если \(a < b\), то заменить \(a\) выбранных единиц на \(a\) нулей.

Например, для \(1110000\) мы превратим в \(0000000\), для \(0011\) мы превратим в \(1111\). Мы называем строку хорошей, если ее можно превратить в \(1111...1111\) с помощью применения вышеупомянутой операции произвольное количество раз (возможно, ноль). Найдите количество хороших подстрок среди всех \(\frac{n(n+1)}{2}\) непустых подстрок \(s\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину строки \(s\).

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого теста выведите одно целое число — количество хороших подстрок.

Примечание

Определим подстроку от индекса \(l\) до индекса \(r\) как \([l, r]\).

Для первого теста хорошими подстроками являются:

  • \([1,1]\),
  • \([1,2]\),
  • \([3,6]\),
  • \([4,5]\),
  • \([4,6]\),
  • \([5,5]\),
  • \([5,6]\),
  • \([6,6]\).

Во втором наборе входных данных все подстроки хорошие, кроме \([2,2]\).

В третьем наборе входных данных все подстроки хорошие.

F. Приличное разделение

Конструктив Структуры данных *3000

Бинарной строкой называется строка, каждый символ которой это \(\texttt{0}\) или \(\texttt{1}\). Назовем бинарную строку приличной, если в ней поровну символов \(\texttt{0}\) и \(\texttt{1}\).

Изначально у вас есть бесконечная бинарная строка \(t\), все символы которой равны \(\texttt{0}\). Вам дана последовательность целых чисел \(a\) из \(n\) обновлений, где \(a_i\) означает, что символ на позиции \(a_i\) будет изменен на противоположный (\(\texttt{0} \leftrightarrow \texttt{1}\)). Вам нужно поддерживать и изменять после каждого обновления множество \(S\) непересекающихся отрезков таких, что

  • для каждого отрезка \([l,r]\) строка \(t_l \dots t_r\) является приличной бинарной строкой, и
  • для каждого индекса \(i\) такого, что \(t_i = \texttt{1}\), существует отрезок \([l,r]\) в \(S\) такой, что \(l \leq i \leq r\).

Вам нужно выводить только отрезки, которые вы удаляете или добавляете в множество \(S\) после каждого обновления. В вашем ответе добавлений и удалений в \(S\) должно быть не более чем \(\mathbf{10^6}\).

Формально, пусть \(S_i\) — множество отрезков после \(i\)-го обновления, где \(S_0 = \varnothing\) (пустое множество). Определим \(X_i\) как множество отрезков, удаленных из множества после \(i\)-го обновления, и \(Y_i\) как множество отрезков, добавленных в множество после \(i\)-го обновления. Тогда для каждого \(1 \leq i \leq n\) выполняется \(S_i = (S_{i - 1} \setminus X_i) \cup Y_i\). Для каждого \(1 \leq i \leq n\) должно выполняться следующее:

  • \(\forall a,b \in S_i, (a \neq b) \rightarrow (a \cap b = \varnothing)\);
  • \(X_i \subseteq S_{i - 1}\);
  • \((S_{i-1} \setminus X_i) \cap Y_i = \varnothing\);
  • \(\displaystyle\sum_{i = 1}^n {(|X_i| + |Y_i|)} \leq 10^6\).
Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество обновлений.

Каждая из следующих \(n\) строк содержит одно целое число \(a_i\) (\(1 \leq a_i \leq 2 \cdot 10^5\)) — номер символа, к которому применяется \(i\)-е обновление.

Выходные данные

После \(i\)-го обновления сначала одно целое число \(x_i\) — количество отрезков, которое нужно удалить из \(S\) после обновления \(i\).

В каждой из следующих \(x_i\) строк выведите два целых числа \(l\) и \(r\) (\(1 \leq l < r \leq 10^6\)), определяющие отрезок \([l,r]\), который должен быть удален из \(S\). Каждый из этих отрезков должен быть уникальным и содержаться в \(S\).обозначающее

В следующей строке выведите одно целое число \(y_i\) — количество отрезков, которое нужно добавить в \(S\) после обновления \(i\).

В каждой из следующих \(y_i\) строк выведите два целых числа \(l\) и \(r\) (\(1 \leq l < r \leq 10^6\)), определяющие отрезок \([l,r]\), который должен быть добавлен в \(S\). Каждый из этих отрезков должен быть уникальным и не содержаться в \(S\).

Общее количество добавлений и удалений после всех обновлений не должно превосходить \(\mathbf{10^6}\).

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

Можно показать, что ответ всегда существует при данных ограничениях.

Примечание

В примере вывода приведены дополнительные переводы строк для ясности, вам не обязательно их выводить.

После первого обновления множество индексов, в которых \(a_i = 1\), это \(\{1\}\). Отрезок \([1, 2]\) добавлен, поэтому \(S_1 = \{[1, 2]\}\), в нем один \(\texttt{0}\) и одна \(\texttt{1}\).

После второго обновления множество индексов, в которых \(a_i = 1\), это \(\{1, 6\}\). Отрезок \([5, 6]\) добавлен, поэтому \(S_2 = \{[1, 2], [5, 6]\}\), в каждом из них один \(\texttt{0}\) и одна \(\texttt{1}\).

После третьего обновления множество индексов, в которых \(a_i = 1\), это \(\{1, 5, 6\}\). Отрезок \([5, 6]\) удален, а отрезки \([4, 5]\) и \([6, 7]\) добавлены, поэтому \(S_3 = \{[1, 2], [4, 5], [6, 7]\}\), в каждом из них один \(\texttt{0}\) и одна \(\texttt{1}\).

После четвертого обновления множество индексов, в которых \(a_i = 1\), это \(\{1, 6\}\). Отрезок \([4, 5]\) удален, поэтому \(S_4 = \{[1, 2], [6, 7]\}\), в каждом из которых один \(\texttt{0}\) и одна \(\texttt{1}\).

После пятого обновления множество индексов, в которых \(a_i = 1\), это \(\{1\}\). Отрезок \([6, 7]\) удален, поэтому \(S_5 = \{[1, 2]\}\), в этом отрезке один \(\texttt{0}\) и одна \(\texttt{1}\).

F. Всевозможные цифры

Бинарный поиск жадные алгоритмы математика Структуры данных теория чисел *1800

На доске написано положительное число \(x\) длины \(n\) в системе счисления с основанием \(p\) (\(2 \le p \le 10^9\)). Число \(x\) задано в виде последовательности \(a_1, a_2, \dots, a_n\) (\(0 \le a_i < p\)) — цифры числа \(x\) в порядке слева направо (от наиболее значащих к наименее).

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

За одну операцию он может:

  • взять любое число \(x\), написанное на доске, увеличить его на \(1\), и выписать на доску новое значение \(x + 1\).

Например, \(p=5\) и \(x=234_5\).

  • Изначально на доске присутствуют цифры \(2\), \(3\) и \(4\);
  • Дмитрий увеличивает число \(234_5\) на \(1\) и записывает число \(240_5\). На доске присутствуют цифры \(0, 2, 3, 4\);
  • Дмитрий увеличивает число \(240_5\) на \(1\) и записывает число \(241_5\). Теперь на доске присутствуют все цифры от \(0\) до \(4\).

Ваша задача — определить, за какое минимальное количество операций можно получить на доске все цифры от \(0\) до \(p-1\) хотя бы по одному разу.

Входные данные

В первой строке входных данных дано единственное целое число \(t\) (\(1 \le t \le 2 \cdot 10^3\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит два целых числа \(n\) (\(1 \le n \le 100\)) и \(p\) (\(2 \le p \le 10^9\)) — длина числа и основание системы счисления.

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i < p\)) — цифры числа \(x\) в системе счисления с основанием \(p\)

Гарантируется, что число \(x\) не содержит ведущих нулей (то есть, \(a_1>0\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, за которое Дмитрий сможет получить на доске все цифры от \(0\) до \(p-1\).

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

G. Восстанови перестановку

Бинарный поиск жадные алгоритмы Конструктив математика Структуры данных *1900

Последовательность из \(n\) чисел называется перестановкой, если она содержит в себе все числа от \(1\) до \(n\) ровно по одному разу. Например, последовательности [\(3, 1, 4, 2\)], [\(1\)] и [\(2,1\)] являются перестановками, а [\(1,2,1\)], [\(0,1\)] и [\(1,3,4\)] — нет.

Для перестановки \(p\) чётной длины \(n\) можно получить массив \(b\) длины \(\frac{n}{2}\) такой, что:

  • \(b_i = \max(p_{2i - 1}, p_{2i})\) для \(1 \le i \le \frac{n}{2}\)

Например, если \(p\) = [\(2, 4, 3, 1, 5, 6\)], то:

  • \(b_1 = \max(p_1, p_2) = \max(2, 4) = 4\)
  • \(b_2 = \max(p_3, p_4) = \max(3,1)=3\)
  • \(b_3 = \max(p_5, p_6) = \max(5,6) = 6\)
Итого получим \(b\) = \([4, 3, 6]\).

Для заданного массива \(b\) найдите лексикографически минимальную перестановку \(p\) такую, что из неё можно получить заданный массив \(b\).

Если \(b\) = [\(4,3,6\)], то лексикографически минимальная перестановка, из которой можно его получить, это \(p\) = [\(1,4,2,3,5,6\)], так как:

  • \(b_1 = \max(p_1, p_2) = \max(1, 4) = 4\)
  • \(b_2 = \max(p_3, p_4) = \max(2, 3) = 3\)
  • \(b_3 = \max(p_5, p_6) = \max(5, 6) = 6\)

Перестановка \(x_1, x_2, \dots, x_n\) лексикографически меньше перестановки \(y_1, y_2 \dots, y_n\), если и только если существует такое \(i\) (\(1 \le i \le n\)), что \(x_1=y_1, x_2=y_2, \dots, x_{i-1}=y_{i-1}\) и \(x_i<y_i\).

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных записано одно целое чётное число \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Вo второй строке каждого набора входных данных записано ровно \(\frac{n}{2}\) целых чисел \(b_i\) (\(1 \le b_i \le n\)) — элементы массива \(b\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке:

  • лексикографически минимальную перестановку \(p\) такую, что из неё можно получить массив \(b\);
  • или число -1, если искомой перестановки не существует.
Примечание

Первый набор входных данных разобран в условии задачи.

E. Археология

Деревья поиск в глубину и подобное Структуры данных *3100

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

Всего было раскопано n деревень. Некоторые пары деревень были соединены дорогами. По дорогам можно было двигаться в обоих направлениях. Всего было ровно n - 1 дорог, и из любой деревни можно было добраться в любую другую.

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

В каждый момент времени использовались только те дороги, которые принадлежали какому-либо кратчайшему пути между двумя существующими в данный момент деревнями. Другими словами, использовалось наименьшее подмножество дорог так, чтобы из любой существующей деревни можно было добраться до любой другой существующей. Обратите внимание, что за всю историю острова существовало ровно n - 1 дорог, найденных исследователями, а других дорог никогда не было.

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

Вам будет предоставлена вся история существования племен. Ваша задача — определить суммарную длину используемых дорог в некоторые из моментов времени.

Входные данные

В первой строке дано целое число n (1 ≤ n ≤ 105) — количество деревень. В последующих n - 1 строках описаны дороги. i-я из этих строк содержит три целых числа ai, bi и ci (1 ≤ ai, bi ≤ n, ai ≠ bi, 1 ≤ ci ≤ 109, 1 ≤ i < n) — номера деревень, которые соединяет i-я дорога и ее длина. Числа в строках записаны через пробел.

В следующей строке дано целое число q (1 ≤ q ≤ 105) — количество запросов. Далее идут q запросов по одному в строке, упорядоченные по времени. Каждый запрос имеет один из трех типов:

  • «+ x» — деревня с номером x возрождается (1 ≤ x ≤ n).
  • «- x» — деревня с номером x уничтожается (1 ≤ x ≤ n).
  • «?» — в этот момент времени археологи хотят знать суммарную длину используемых дорог.

Гарантируется, что запросы не противоречат друг другу, то есть не будет запросов на уничтожение несуществующих деревень или возрождение уже существующих. Гарантируется, что имеется хотя бы один запрос типа «?». Также гарантируется, что по заданным дорогам из любой деревни можно добраться в любую другую.

Считается, что в начальный момент времени ни одной деревни не существует.

Выходные данные

На каждый запрос типа «?» выведите суммарную длину используемых дорог в отдельной строке. Ответы за запросы должны быть выведены в том порядке, в котором запросы перечислены во входных данных.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

C. Преимущество

реализация сортировки Структуры данных *800

В соревновании участвуют \(n\) участников, причем участник \(i\) имеет силу \(s_i\).

Каждый участник хочет узнать, какое преимущество он имеет перед лучшим участником соревнования помимо него самого. Другими словами, каждый участник \(i\) хочет знать разность между \(s_i\) и \(s_j\), где \(j\) — сильнейший участник соревнования, не считая \(i\). Обратите внимание, что разность может быть отрицательной.

Поэтому они просят вас о помощи! Для каждого \(i\) (\(1 \leq i \leq n\)) выведите разность между \(s_i\) и максимальной силой участника, отличного от \(i\).

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов. Далее следуют их описания.

Первая строка каждого набора содержит целое число \(n\) (\(2 \leq n \leq 2\cdot10^5\)) — длину массива.

Следующая строка содержит \(n\) положительных целых чисел \(s_1\), \(s_2\), ..., \(s_n\) (\(1 \leq s_i \leq 10^9\)) — силы участников.

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2\cdot10^5\).

Выходные данные

Для каждого набора выведите \(n\) целых чисел, разделенных пробелами. Для каждого \(i\) (\(1 \leq i \leq n\)) выведите разность между \(s_i\) и максимальной силой любого другого участника.

Примечание

Для первого примера:

  • Первый участник имеет силу \(4\), а максимальная сила среди остальных участников соревнования равна \(7\), поэтому ответ для первого участника равен: \(4 - 7 = -3\).
  • Второй участник имеет силу \(7\), а максимальная сила среди остальных участников соревнования равна \(5\), поэтому ответ для второго участника: \(7 - 5 = 2\).
  • Третий участник имеет силу \(3\), а максимальная сила среди остальных участников соревнования равна \(7\), поэтому ответ для третьего участника: \(3 - 7 = -4\).
  • Четвертый участник имеет силу \(5\), а максимальная сила среди остальных участников соревнования равна \(7\), поэтому ответ для четвертого участника: \(5 - 7 = -2\).

E. Бинарные инверсии

жадные алгоритмы математика Структуры данных *1100

Вам дан бинарный массив\(^{\dagger}\) длины \(n\). Вам можете выполнить над ним следующую операцию не более одного раза. Операция заключается в следующем — вы можете выбрать любой элемент и инвертировать его: превратить \(0\) в \(1\) или наоборот.

Какое максимальное количество инверсий \(^{\ddagger}\) может иметь массив после выполнения не более одной операции?

\(^\dagger\) Бинарный массив — это массив, состоящий только из нулей и единиц.

\(^\ddagger\) Количество инверсий в массиве — это количество пар индексов \(i,j\) таких, что \(i<j\) и \(a_i > a_j\).

Входные данные

Входные данные состоят из нескольких наборов. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных в тесте. Далее следуют их описания.

Первая строка каждого набора содержит целое число \(n\) (\(1 \leq n \leq 2\cdot10^5\)) — длину массива.

Следующая строка содержит \(n\) целых положительных чисел \(a_1\), \(a_2\),..., \(a_n\) (\(0 \leq a_i \leq 1\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot10^5\).

Выходные данные

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

Примечание

В первом примере инверсии изначально формируются парами индексов (\(1, 2\)), (\(1, 4\)), (\(3, 4\)), что в сумме составляет \(3\), что уже является максимально возможным значением.

Во втором примере инверсии изначально образованы парами индексов (\(2, 3\)), (\(2, 4\)), (\(2, 6\)), (\(5, 6\)), в сумме четыре. Но, применив операцию над первым элементом, массив становится \({1, 1, 0, 0, 1, 0}\), где инверсии уже образованы парами индексов (\(1, 3\)), (\(1, 4\)), (\(1, 6\)), (\(2, 3\)), (\(2, 4\)), (\(2, 6\)), (\(5, 6\)), что в сумме составляет \(7\) инверсий, что является максимально возможным.

F. Хорошие пары

Бинарный поиск дп Структуры данных *2600

Вам дан массив \(a\) из \(n\) целых чисел, а также целое число \(k\).

Пара индексов \((l,r)\) называется хорошей, если существует последовательность индексов \(i_1, i_2, \dots, i_m\) такая, что

  • \(i_1=l\) и \(i_m=r\);
  • \(i_j < i_{j+1}\) для всех \(1 \leq j < m\); а также
  • \(|a_{i_j}-a_{i_{j+1}}| \leq k\) для всех \(1 \leq j < m\).

Найдите количество хороших пар \((l,r)\) (\(1 \leq l \leq r \leq n\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 5 \cdot 10^5\); \(0 \leq k \leq 10^5\)) — длину массива \(a\) и целое число \(k\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \leq a_i \leq 10^5\)) — массив \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите число хороших пар.

Примечание

В первом примере хорошие пары равны \((1,1)\), \((1,2)\), \((1,3)\), \((2,2)\), \((2,3)\) и \((3,3)\).

Во втором примере хорошие пары равны \((1,1)\), \((1,3)\), \((1,4)\), \((2,2)\), \((2,3)\), \((2,4)\), \((3,3)\), \((3,4)\) и \((4,4)\). Пара \((1,4)\) является хорошей, так как существует последовательность индексов \(1, 3, 4\), удовлетворяющая всем ограничениям.

B. Испепеление

Бинарный поиск математика Перебор реализация сортировки Структуры данных *1200

Для уничтожения человечества, Ассоциация Монстров отправила \(n\) монстров на Землю. \(i\)-й монстр имеет здоровье \(h_i\) и силу \(p_i\).

С его одной атакой, настоящей спиральной испепеляющей пушкой, Генос может нанести \(k\) урона всем живым монстрам. Другими словами, Генос может уменьшить здоровье всех монстров на \(k\) (если \(k > 0\)) одной атакой.

Однако после каждой атаки Геноса монстры продвигаются вперед. Совместными усилиями они уменьшают урон от атаки Геноса на силу \(^\dagger\)самого слабого монстра \(^\ddagger\)оставшегося в живых. Иными словами, минимальное значение \(p_i\) по всем живым в текущий момент монстрам вычитается из \(k\) после каждой атаки.

\(^\dagger\)Самый слабый монстр — это тот, у кого наименьшая сила.

\(^\ddagger\)Монстр жив, если его здоровье строго больше \(0\).

Удастся ли Геносу убить всех монстров?

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Описания данных следуют далее.

Первая строка каждого набора входных данных содержит два целых числа, \(n\) и \(k\) (\(1 \le n, k \le 10^5\)) — количество монстров и начальный урон от атаки Геноса. Затем следуют две строки, каждая из которых содержит \(n\) целых чисел, описывающих массивы \(h\) и \(p\) (\(1 \le h_i, p_i \le 10^9\)).

Гарантируется, что сумма \(n\)по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ — «YES» (без кавычек) если Генос может убить всех монстров и «NO» в противном случае.

Примечание

В первом примере, после первой атаки Геноса, \(h\) и \(k\) станут:

  • \(h: [11,0,6,2,3,0]\)
  • \(k: 7-1 = 6\)
После второй атаки:
  • \(h: [5,0,0,0,0,0]\)
  • \(k: 6-2 = 4\)
После третьей атаки:
  • \(h: [1,0,0,0,0,0]\)
  • \(k: 4-2 = 2\)
После четвертой атаки:
  • \(h: [0,0,0,0,0,0]\)
Поскольку Генос может убить всех монстров, ответ YES.

F. Запросы к ребрам

графы Деревья дп поиск в глубину и подобное снм Структуры данных *3000

Вам дан неориентированных, связный граф из \(n\) вершин и \(m\) ребер. Все вершины \(u\) графа удовлетворяют следующему условию:

  • Пусть \(S_u\) это множество вершин принадлежащих длиннейшему простому циклу начинающемуся и заканчивающемуся в \(u\).
  • Пусть \(C_u\) это объединение множеств вершин всех простых циклов начинающихся и заканчивающихся в \(u\).
  • \(S_u = C_u\).

Вы должны ответить на \(q\) запросов.

Для каждого запроса вам будет дана вершина \(a\) и вершина \(b\). Для всех ребер принадлежащих любому простому пути из \(a\) в \(b\), посчитайте число ребер таких, что если вы удалите их, \(a\) и \(b\) останутся достижимы друг из друга.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le m \le \min\)(\(2 \cdot 10^5\), \((n \cdot (n-1))/2\))) — число вершин и ребер графа, соответственно.

Следующие \(m\) строк содержат пары целых чисел \(u\) и \(v\) (\(1 \le\) (\(u\), \(v\)) \(\le n\), \(u \neq v\)) — описывающие ребра, означающие \(u\) что \(v\) соединены друг с другом.

Гарантируется, что между одной парой вершин проведено не более одного ребра и данный граф связен.

В следующей строке содержится одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

Затем \(q\) следующих строк содержат запросы. Каждая из них содержит два целых числа \(a\) и \(b\) (\(1 \le\) \(a\), \(b\) \(\le n\)).

Выходные данные

Для каждого запроса выведите одно целое число — ответ на запрос.

Примечание

Граф в первом примере:

Первый запрос это \((1, 4)\). Тут всего \(5\) ребер принадлежат любому простому пути из \(1\) в \(4\). Ребра \((3, 4), (4, 5), (5, 3)\) будут посчитаны как ответ на запрос.

Четвертый запрос \((2, 8)\). Тут только один простой путь из \(2\) в \(8\), причем ни одно ребро не будет посчитано в ответ.

Пятый запрос \((7, 10)\). Тут всего \(4\) ребра принадлежат любому простому пути из \(7\) в \(10\), все они будут посчитаны в ответе.

H. Дореми и краски 2

Структуры данных *3400

У Дореми \(n\) ведерок с краской, они могут быть представлены в виде массива \(a\) длины \(n\). Ведерко \(i\) содержит краску цвета \(a_i\). Изначально \(a_i=i\).

У Дореми есть \(m\) отрезков \([l_i,r_i]\) (\(1 \le l_i \le r_i \le n\)). Каждый отрезок описывает одну операцию. \(i\)-я операция выполняется следующим образом:

  • Для всех \(j\) таких, что \(l_i < j \leq r_i\), присвоить \(a_j := a_{l_i}\).

Кроме этого у Дореми есть целое число \(k\). Для каждого целого числа \(x\) от \(0\) до \(m-1\) Дореми хочет знать, сколько различных цветов будет в массиве красок, если выполнить операции \(x \bmod m +1, (x+1) \bmod m + 1, \ldots, (x+k-1) \bmod m +1\). Можете ей помочь вычислить эти значения? Обратите внимание, для каждого \(x\) отдельно мы начинаем с изначального массива и выполняем только данные \(k\) операций в данном порядке.

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(1\le n,m\le 2\cdot 10^5\), \(1 \le k \le m\))  — длину массива \(a\), количество операций, а также число, которое есть у Дореми.

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

Выходные данные

Выведите \(m\) целых чисел. \((x+1)\)-е из этих чисел должно быть равно итоговому количеству различных цветов, если к изначальному массиву применить операции \(x \bmod m +1, (x+1) \bmod m + 1, \ldots, (x+k-1) \bmod m +1\).

Примечание

Рисунок ниже показывает массив, получающийся при значениях \(x=0,1,2\), соответственно.

L. Project Manager

Перебор реализация Структуры данных *2400

There are \(n\) employees at Bersoft company, numbered from \(1\) to \(n\). Each employee works on some days of the week and rests on the other days. You are given the lists of working days of the week for each employee.

There are regular days and holidays. On regular days, only those employees work that have the current day of the week on their list. On holidays, no one works. You are provided with a list of days that are holidays. The days are numbered from \(1\) onwards, day \(1\) is Monday.

The company receives \(k\) project offers they have to complete. The projects are numbered from \(1\) to \(k\) in the order of decreasing priority.

Each project consists of multiple parts, where the \(i\)-th part must be completed by the \(a_i\)-th employee. The parts must be completed in order (i. e. the \((i+1)\)-st part can only be started when the \(i\)-th part is completed). Each part takes the corresponding employee a day to complete.

The projects can be worked on simultaneously. However, one employee can complete a part of only one project during a single day. If they have a choice of what project to complete a part on, they always go for the project with the highest priority (the lowest index).

For each project, output the day that project will be completed on.

Input

The first line contains three integers \(n, m\) and \(k\) (\(1 \le n, m, k \le 2 \cdot 10^5\)) — the number of employees, the number of holidays and the number of projects.

The \(i\)-th of the next \(n\) lines contains the list of working days of the \(i\)-th employee. First, a single integer \(t\) (\(1 \le t \le 7\)) — the number of working days. Then \(t\) days of the week in the increasing order. The possible days are: "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday".

The next line contains \(m\) integers \(h_1, h_2, \dots, h_m\) (\(1 \le h_1 < h_2 < \dots < h_m \le 10^9\)) — the list of holidays.

The \(j\)-th of the next \(k\) lines contains a description of the \(j\)-th project. It starts with an integer \(p\) (\(1 \le p \le 2 \cdot 10^5\)) — the number of parts in the project. Then \(p\) integers \(a_1, a_2, \dots, a_p\) (\(1 \le a_x \le n\)) follow, where \(p_i\) is the index of the employee that must complete the \(i\)-th part.

The total number of parts in all projects doesn't exceed \(2 \cdot 10^5\).

Output

Print \(k\) integers — the \(j\)-th value should be equal to the day the \(j\)-th project is completed on.

E. Декомпозиция

Бинарный поиск дп Перебор разделяй и властвуй Структуры данных *2300

Для последовательности целых чисел \([x_1, x_2, \dots, x_k]\) обозначим декомпозицию следующим образом:

Будем обрабатывать последовательность слева направо, поддерживая список ее подпоследовательностей. Когда мы обрабатываем элемент \(x_i\), мы приписываем его в конец первой подпоследовательности в списке, для которой побитовое И последнего ее элемента и \(x_i\) больше \(0\). Если такой подпоследовательности в списке нет, создадим новую подпоследовательность с единственным элементом \(x_i\) и запишем ее в конец списка подпоследовательностей.

Например, рассмотрим декомпозицию последовательности \([1, 3, 2, 0, 1, 3, 2, 1]\):

  • обрабатываем элемент \(1\), список подпоследовательностей пуст. Ни к одной подпоследовательности нельзя приписать \(1\), поэтому мы создаем новую подпоследовательность \([1]\);
  • обрабатываем элемент \(3\), список подпоследовательностей — \([[1]]\). Так как побитовое И \(3\) и \(1\) равно \(1\), элемент добавляется в первую подпоследовательность;
  • обрабатываем элемент \(2\), список подпоследовательностей — \([[1, 3]]\). Так как побитовое И \(2\) и \(3\) равно \(2\), элемент добавляется в первую подпоследовательность;
  • обрабатываем элемент \(0\), список подпоследовательностей — \([[1, 3, 2]]\). Ни к одной подпоследовательности нельзя приписать \(0\), поэтому мы создаем новую подпоследовательность \([0]\);
  • обрабатываем элемент \(1\), список подпоследовательностей — \([[1, 3, 2], [0]]\). Ни к одной подпоследовательности нельзя приписать \(1\), поэтому мы создаем новую подпоследовательность \([1]\);
  • обрабатываем элемент \(3\), список подпоследовательностей — \([[1, 3, 2], [0], [1]]\). Так как побитовое И \(3\) и \(2\) равно \(2\), элемент добавляется в первую подпоследовательность;
  • обрабатываем элемент \(2\), список подпоследовательностей — \([[1, 3, 2, 3], [0], [1]]\). Так как побитовое И \(2\) и \(3\) равно \(2\), элемент добавляется в первую подпоследовательность;
  • обрабатываем элемент \(1\), список подпоследовательностей — \([[1, 3, 2, 3, 2], [0], [1]]\). Элемент \(1\) нельзя приписать ни к одной из первых двух подпоследовательностей, но можно приписать к третьей.

В результате получается список подпоследовательностей \([[1, 3, 2, 3, 2], [0], [1, 1]]\).

Пусть \(f([x_1, x_2, \dots, x_k])\) — количество подпоследовательностей, на которое декомпозируется последовательность \([x_1, x_2, \dots, x_k]\).

А теперь — сама задача.

Вам дана последовательность \([a_1, a_2, \dots, a_n]\), в которой каждый элемент — это целое число от \(0\) до \(3\). Пусть \(a[i..j]\) — это последовательность \([a_i, a_{i+1}, \dots, a_j]\). Вы должны посчитать \(\sum \limits_{i=1}^n \sum \limits_{j=i}^n f(a[i..j])\).

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 3\)).

Выходные данные

Выведите одно целое число, равное \(\sum \limits_{i=1}^n \sum \limits_{j=i}^n f(a[i..j])\).

B. Башни из кубиков

жадные алгоритмы сортировки Структуры данных *800

Даны \(n\) башен из кубиков, пронумерованных от \(1\) до \(n\). В \(i\)-й башне \(a_i\) кубиков.

За один ход можно переложить один кубик с \(i\)-й башни на \(j\)-ю, но только если \(a_i > a_j\). Такой ход увеличивает \(a_j\) на \(1\) и уменьшает \(a_i\) на \(1\). Вы можете сделать сколько угодно ходов (возможно, ноль).

Какое наибольшее количество кубиков можно получить на башне \(1\) после ходов?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество башен.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — количество кубиков в каждой башне.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных вы можете переместить кубик с башни \(2\) на башню \(1\), сделав количества кубиков равными \([2, 1, 3]\). Затем переместить кубик с башни \(3\) на башню \(1\), сделав количества кубиков равными \([3, 1, 2]\). Башня \(1\) высотой \(3\) кубика, и нельзя получить больше.

Во втором наборе входных данных можно переместить кубик с любой из башен \(2\) или \(3\) на башню \(1\) так, чтобы в ней стало \(2\) кубика.

В третьем наборе входных данных можно \(500000000\) раз переместить кубик с башни \(2\) на башню \(1\). После этого количества кубиков станут \([500000001, 500000000]\).

C. Посчитайте бинарные строки

дп Структуры данных *2100

Дано целое число \(n\). Вы должны посчитать количество бинарных (состоящих из символов 0 и/или 1) строк \(s\), удовлетворяющих следующим условиям.

Для каждой пары целых чисел \((i, j)\), в которой \(1 \le i \le j \le n\), дано целое число \(a_{i,j}\). Оно соответствует следующему ограничению на строку \(s_i s_{i+1} s_{i+2} \dots s_j\):

  • если \(a_{i,j} = 1\), все символы в строке \(s_i s_{i+1} s_{i+2} \dots s_j\) должны быть одинаковыми;
  • если \(a_{i,j} = 2\), в подстроке \(s_i s_{i+1} s_{i+2} \dots s_j\) должна быть хотя бы одна пара различных символов;
  • если \(a_{i,j} = 0\), на подстроку \(s_i s_{i+1} s_{i+2} \dots s_j\) нет ограничений.

Посчитайте количество бинарных строк \(s\) длины \(n\), удовлетворяющих данным условиям. Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 100\)).

Затем следуют \(n\) строк. В \(i\)-й из них задано \(n-i+1\) целых чисел \(a_{i,i}, a_{i,i+1}, a_{i,i+2}, \dots, a_{i,n}\) (\(0 \le a_{i,j} \le 2\)).

Выходные данные

Выведите одно целое число — количество строк, удовлетворяющих ограничениям задачи, взятое по модулю \(998244353\).

Примечание

В первом примере ограничениям соответствуют строки 001, 010, 011, 100, 101, 110.

Во втором примере ограничениям соответствуют строки 001, 110.

F. Два поддерева

Деревья Структуры данных *3100

Вам дано корневое дерево, состоящее из \(n\) вершин. Корень находится в вершине \(1\). В каждой вершине записано некоторое число: в \(i\)-й вершине — \(val_i\).

Вы должны обработать \(q\) запросов к дереву, \(i\)-й запрос задается двумя вершинами \(u_i\) и \(v_i\). Для ответа на запрос нужно рассмотреть все вершины \(w\), которые лежат в поддереве \(u_i\) или \(v_i\) (если вершина лежит в обоих поддеревьях, она учитывается дважды). Нужно выписать все числа на вершинах в этой паре поддеревьев и найти то из них, которое встречается наибольшее количество раз (если таких несколько — минимальное из них).

Входные данные

В первой строке записано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве. Во второй строке записаны \(n\) целых чисел \(val_1, val_2, \dots, val_n\) (\(1 \le val_i \le 2 \cdot 10^5\)) — числа, записанные в вершинах.

Затем идет \(n - 1\) строка, в каждой записаны по два числа \(x\) и \(y\) (\(1 \le x, y \le n\)), представляющие ребро между вершинами \(x\) и \(y\). Данные ребра составляют дерево.

В следующей строке записано одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов, которые требуется обработать.

Затем идут \(q\) строк, в \(i\)-й из них записаны два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\)) — корни поддеревьев в \(i\)-м запросе.

Выходные данные

Для каждого запроса выведите ответ на него — целое число, которое встречается наибольшее количество раз в паре поддеревьев из запроса (если таких чисел несколько — минимальное из них).

Примечание

В \(1\)-м запросе пара поддеревьев содержит вершины \([2, 4, 7, 8]\), на которых записаны числа \(\{1, 2, 2, 4\}\). Число \(2\) встречается дважды, все остальные — не более одного раза, поэтому ответ на запрос — \(2\).

Во \(2\)-м запросе пара поддеревьев содержит вершины \([3, 5, 6, 7, 7, 8, 8]\), на которых записаны числа \(\{3, 3, 3, 2, 2, 4, 4\}\). Число \(3\) встречается наибольшее количество раз.

В \(4\)-м запросе пара поддеревьев содержит вершины \([1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8]\), на которых записаны числа \(\{2, 2, 1, 1, 3, 3, 2, 2, 3, 3, 3, 3, 2, 2, 4, 4\}\). Чаще всего встречаются числа \(2\) и \(3\), минимальное из них — \(2\).

D. Косия и игра

графы игры Конструктив Паросочетания поиск в глубину и подобное Потоки реализация снм Структуры данных *2000

Косия и Махиру играют в игру с тремя массивами \(a\), \(b\) и \(c\) длины \(n\). Каждый элемент \(a\), \(b\) и \(c\) — целое число от \(1\) до \(n\) включительно.

Игра состоит из \(n\) раундов. В \(i\)-м раунде они делают следующие ходы:

  • Пусть \(S\) — мультимножество \(\{a_i, b_i, c_i\}\).
  • Косия удаляет один из элементов \(S\) по своему выбору.
  • Затем Махиру выбирает одно из двух оставшихся в \(S\) чисел.

Пусть \(d_i\) — число, выбранное Махиру в \(i\)-м раунде. Если \(d\) является перестановкой\(^\dagger\), Косия выигрывает. Иначе выигрывает Махиру.

Сейчас выбраны только массивы \(a\) и \(b\). Являясь ярым поклонником Косии, вы хотите выбрать массив \(c\) так, чтобы Косия выиграла. Вычислите количество таких \(c\) по модулю \(998\,244\,353\).

Обратите внимание, что Косия и Махиру играют оптимально.

\(^\dagger\) Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq {10}^5\)) — размеры массивов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq n\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \leq b_i \leq n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \({10}^5\).

Выходные данные

Выведите одно целое число — количество массивов \(c\), при которых выигрывает Косия, по модулю \(998\,244\,353\).

Примечание

В первом примере есть \(6\) массивов \(c\), при которых выигрывает Косия: \([1, 2, 3]\), \([1, 3, 2]\), \([2, 2, 3]\), \([2, 3, 2]\), \([3, 2, 3]\), \([3, 3, 2]\).

Во втором примере можно показать, что нет массивов \(c\), при которых выигрывает Косия.

D. Хоссам и дерево (под-)палиндромов

Деревья дп Перебор поиск в глубину и подобное Строки Структуры данных *2100

У Хоссама есть невзвешенное дерево \(G\), в вершинах которого записаны буквы.

Через \(s(v, \, u)\) Хоссам обозначает строку, которая получается при написании всех букв на единственном простом пути из вершины \(v\) в вершину \(u\) в дереве \(G\).

Строка \(a\) является подпоследовательностью строки \(s\), если \(a\) может быть получена из \(s\) путем удаления нескольких символов (возможно, ни одного). Например, «dores», «cf» и «for» являются подпоследовательностями «codeforces», а «decor» и «fork» не являются.

Палиндромом называется строка, читающаяся одинаково слева направо и справа налево. Например, «abacaba» — палиндром, а «abac» — нет.

Под-палиндромом строки \(s\) Хоссам называет подпоследовательность \(s\), являющуюся палиндромом. Например, «k», «abba» и «abhba» являются под-палиндромом строки «abhbka», а «abka» и «cat» — нет.

Максимальным под-палиндромом строки \(s\) Хоссам называет под-палиндром \(s\), имеющий максимальную длину среди всех под-палиндромов \(s\). Например, у строки «abhbka» есть только один максимальный под-палиндром — «abhba». Но может быть и так, что у строки несколько максимальных под-палиндромов: у строки «abcd» целых \(4\) максимальных под-палиндрома.

Хоссам просит вас найти длину самого длинного максимального под-палиндрома среди всех \(s(v, \, u)\) в заданном дереве \(G\).

Еще раз обращаем Ваше внимание на то, что под-палиндром — это подпоследовательность, а не подстрока.

Входные данные

В первой строке входного файла задано одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных.

В первой строке каждого набора входных данных задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^3\)) — количество вершин в дереве.

Во второй строке задана строка \(s\) длины \(n\), \(i\)-й символ которой задает букву, которая записана в вершине дерева с номером \(i\). Гарантируется, что все символы этой строке — маленькие буквы латинского алфавита.

Далее идут \(n - 1\) строк, описывающие ребра в дереве. Каждое ребро задаётся двумя целыми числами \(v\) и \(u\) (\(1 \le v, \, u \le n\), \(v \neq u\)). Эти два числа означают, что в дереве есть ребро \((v, \, u)\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма по всем \(n\) не превышает \(2 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных выведите одно число — длину самого длинного максимального под-палиндрома среди всех \(s(v, \, u)\).

Примечание

В первом примере искомым подпалиндромом может быть «aaa», символы которого расположены в вершинах \(1, \, 3, \, 5\) или «aca», символы которого расположены в вершинах \(1, \, 4, \, 5\).

Дерево из первого примера.

Во втором примере единственным искомым палиндромом является «bacab», символы которого расположены в вершинах \(4, \, 2, \, 1, \, 5, \, 9\).

Дерево из второго примера.

F. Хоссам и минимум на отрезке

Бинарный поиск битмаски Деревья Строки Структуры данных Теория вероятностей хэши *2500

Хоссам дал вам последовательность целых чисел \(a_1, \, a_2, \, \dots, \, a_n\) длины \(n\). Кроме того, он последовательно дает вам \(q\) запросов вида \((l, \, r)\). Для каждого запроса он хочет знать среди чисел \(a_l, \, a_{l + 1}, \, \dots, \, a_r\) такое минимальное число, что оно встречается в заданном отрезке последовательности нечетное количество раз.

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

Входные данные

В первой строке входных данных задано единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина последовательности.

Во второй строке входных данных задана последовательность из \(n\) целых чисел \(a_1, \, a_2, \, \dots, \, a_n\) (\(1 \le a_i \le 10^9\)).

В третьей строке задано целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

Затем следуют \(q\) строк, в каждой из которой задано два целых числа \(a\) и \(b\) (\(0 \le a, \, b \le 2 \cdot 10^9\)) — числа, с помощью которых кодируются границы запроса.

Пусть \(\mathrm{ans}_i\) ответ на \(i\)-й запрос, и \(\mathrm{ans}_0\) равен нулю. Тогда \(\)l_i = a_i \oplus \mathrm{ans}_{i - 1},\(\) \(\)r_i = b_i \oplus \mathrm{ans}_{i - 1},\(\) где \(l_i, \, r_i\) параметры \(i\)-го запроса и \(\oplus\) означает битовое исключающие или. Гарантируется, что \(1 \le l \le r \le n\).

Выходные данные

Для каждого запроса выведите минимальное число, которое встречается на заданном отрезке последовательности нечетное количество раз.

Если такого числа не существует, выведите \(0\).

Примечание

В данном примере

\(\)l_1 = 1, \, r_1 = 2,\(\) \(\)l_2 = 1, \, r_2 = 3,\(\) \(\)l_3 = 2, \, r_3 = 4,\(\) \(\)l_4 = 1, \, r_4 = 4,\(\) \(\)l_5 = 2, \, r_5 = 2,\(\) \(\)l_6 = 1, \, r_6 = 5.\(\)

F1. Фокусник и свиньи (простая версия)

Перебор реализация Структуры данных *2400

Это простая версия задачи. Единственное различие между двумя версиями  — это ограничения на \(n\) и \(x\). Вы можете делать взломы, только если обе версии задачи решены.

Little09 давно интересуется магией, и как же ему повезло, что он встречает фокусника! Фокусник выполнит \(n\) операций, каждая из которых является одной из следующих трех:

  • \(1\ x\): Создать свинью с \(x\) очками здоровья.
  • \(2\ x\): Уменьшить очки здоровья всех живых свиней на \(x\).
  • \(3\): Повторить все предыдущие операции. Формально, предполагая, что это \(i\)-я операция в последовательности операций, выполните по очереди первые \(i-1\) операций (включая операции «Повторить»).

Свинья умирает, когда ее очки здоровья становятся меньше или равны \(0\).

Little09 хочет знать, сколько живых свиней осталось после всех операций. Пожалуйста, выведите ответ по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1\leq n\leq 2\cdot 10^5\))  — количество операций.

Каждая из следующих \(n\) строк содержит операцию, заданную в форме, описанной в условии задачи. Гарантируется, что \(1\leq x\leq 2\cdot 10^5\) в операциях первых двух типов.

Выходные данные

Выведите одно целое число  — количество живых свиней после всех операций, по модулю \(998\,244\,353\).

Примечание

В первом примере операции эквивалентны повторению следующего четыре раза: создать свинью с \(8\) очками здоровья, а затем уменьшить очки здоровья всех живых свиней на \(3\). Легко видеть, что в конце остаются две живые свиньи с \(2\) и \(5\) очками здоровья.

F2. Фокусник и свиньи (сложная версия)

Бинарный поиск Перебор реализация Структуры данных *2700

Это сложная версия задачи. Единственное различие между двумя версиями  — это ограничения на \(n\) и \(x\). Вы можете делать взломы, только если обе версии задачи решены.

Little09 давно интересуется магией, и как же ему повезло, что он встречает фокусника! Фокусник выполнит \(n\) операций, каждая из которых является одной из следующих трех:

  • \(1\ x\): Создать свинью с \(x\) очками здоровья.
  • \(2\ x\): Уменьшить очки здоровья всех живых свиней на \(x\).
  • \(3\): Повторить все предыдущие операции. Формально, предполагая, что это \(i\)-я операция в последовательности операций, выполните по очереди первые \(i-1\) операций (включая операции «Повторить»).

Свинья умирает, когда ее очки здоровья становятся меньше или равны \(0\).

Little09 хочет знать, сколько живых свиней осталось после всех операций. Пожалуйста, выведите ответ по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1\leq n\leq 8\cdot 10^5\))  — количество операций.

Каждая из следующих \(n\) строк содержит операцию, заданную в форме, описанной в условии задачи. Гарантируется, что \(1\leq x\leq 10^9\) в операциях первых двух типов.

Выходные данные

Выведите одно целое число  — количество живых свиней после всех операций, по модулю \(998\,244\,353\).

Примечание

В первом примере операции эквивалентны повторению следующего четыре раза: создать свинью с \(8\) очками здоровья, а затем уменьшить очки здоровья всех живых свиней на \(3\). Легко видеть, что в конце остаются две живые свиньи с \(2\) и \(5\) очками здоровья.

G. Покрытие отрезками

Деревья дп Комбинаторика Конструктив Перебор Структуры данных *3200

ChthollyNotaSeniorious дает DataStructures числовую ось с \(m\) различными отрезками на ней. Пусть \(f(l,r)\)  — количество способов выбрать четное число отрезков так, чтобы их объединение было равно \([l,r]\), а \(g(l,r)\)  — количество способов выбрать нечетное число отрезков так, чтобы их объединение было равно \([l,r]\).

ChthollyNotaSeniorious задал DataStructures \(q\) вопросов. В каждом вопросе ChthollyNotaSeniorious дает DataStructures два числа \(l, r\), и хочет, чтобы вы помогли ему найти значение \(f(l,r)-g(l,r)\) по модулю \(998\,244\,353\), чтобы он не подвел ее.

Входные данные

Первая строка ввода содержит два целых числа \(m\) (\(1 \leq m \leq 2 \cdot 10^5\)) и \(q\) (\(1 \leq q \leq 2 \cdot 10^5\))  — количество отрезков и запросов, соответственно.

\(i\)-я из следующих \(m\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(1 \leq x_i < y_i \leq 10^9\)), обозначающие отрезок \([x_i, y_i]\).

Гарантируется, что все отрезки попарно различны. Более формально, не существует двух чисел \(i, j\) при \(1 \le i < j \le m\) таких, что \(x_i = x_j\) и \(y_i = y_j\).

\(i\)-я из следующих \(q\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i < r_i \leq 10^9\)), описывающие запрос.

Выходные данные

Для каждого запроса выведите одно целое число  — \(f(l_i,r_i)-g(l_i,r_i)\) по модулю \(998\,244\,353\).

Примечание

В первом запросе мы должны найти \(f(1, 4) - g(1, 4)\). Единственное подмножество отрезков с объединением \([1, 4]\) это \(\{[1, 3], [2, 4]\}\), поэтому \(f(1, 4) = 1, g(1, 4) = 0\).

Во втором запросе нам нужно найти \(f(1, 5) - g(1, 5)\). Единственными подмножествами отрезков с объединением \([1, 5]\) являются \(\{[1, 3], [2, 4], [3, 5]\}\) и \(\{[1, 3], [3, 5]\}\), поэтому \(f(1, 5) = 1, g(1, 5) = 1\).

E. Crossing the Railways

дп Структуры данных *3500

Isona is in a train station. This station has two platforms, and between them there are \(m\) parallel railways that can be viewed as infinite straight lines. Each railway is identified with an integer from \(1\) to \(m\), railway \(1\) being the closest to the first platform and railway \(m\) being the farthest. There is a \(1\) meter distance between consecutive railways, as well as between each platform and its closest railway.

Isona is standing on the inner border of the first platform, when she realizes that she forgot to validate her ticket! There is a validating machine on the second platform, exactly opposite her current position (thus, the distance between Isona and the validating machine is \(m + 1\) meters). There are only \(s\) seconds left to validate the ticket and the bridge designated to cross the railways is too far from the validating machine. Therefore, Isona (who is very brave and a little bit careless) will cross the railways running in a straight line perpendicular to the railways themselves. Isona can only run forward (not backward) and she can stay still. When she runs at maximum speed, she needs \(v\) seconds to traverse \(1\) meter. She can run at any speed less than or equal to her maximum speed.

There is only one problem: \(n\) trains are programmed to transit through the railways. The \(i\)-th train will use the railway \(r_i\). It will start crossing the straight line between Isona and the validating machine \(a_i\) seconds from now and it will end \(b_i\) seconds from now. Of course, Isona cannot cross a railway when a train is passing. Formally, for every \(i = 1, \, 2, \, \dots, \, n\), Isona is not allowed to be on railway \(r_i\) at any time \(t\) with \(a_i < t < b_i\) (but she is allowed to cross at times \(a_i\) or \(b_i\)).

The following picture summarizes the situation. In the picture there are \(m = 4\) railways and two trains are visible; the train going through railway \(3\) is currently crossing the line between Isona and the validating machine.

Isona is a really good runner, but she gets tired every time she has to change her running speed. What is the minimum number of speed changes she has to perform to get to the validating machine on the other platform within \(s\) seconds from now? Note that at the beginning Isona is not running. She can start to run anytime. The instant she starts to run (i.e. her speed becomes positive) is not counted as a speed change.

Input

The first line of the input contains four integers \(n\), \(m\), \(s\), \(v\) (\(1 \leq n \leq 500\), \(1 \leq m \leq 10\), \(1 \leq s, v \leq 10^9\)) — the number of trains, the number of railways, the maximum time in seconds Isona can spend crossing the railways, and the number of seconds she needs to traverse \(1\) meter at maximum speed.

Each of the next \(n\) lines contains three integers \(a_i\), \(b_i\), \(r_i\) (\(1 \leq a_i < b_i \leq 10^9\), \(1 \leq r_i \leq m\)) — the start and end times of the \(i\)-th train crossing the straight line between Isona and the validating machine, and the railway it will be using.

It is guaranteed that, for any two trains \(i\) and \(j\) that go through the same railway (i.e. \(r_i = r_j\)), there is at least \(1\) second between them (that is, either \(a_j \ge b_i + 1\) or \(a_i \ge b_j + 1\)).

Output

Print the minimum number of speed changes Isona has to perform to get to the validating machine in time. If this is impossible, print \(-1\).

Note

In the first sample, if Isona starts running at time \(t=0\) at maximum speed (\(1\) m/s), she will cross each railway just when a train is about to traverse it, and she will arrive at the other platform at time \(4 = s - 1\) without changing speed.

In the second sample, a possible solution with \(2\) speed changes is the following: for the first \(2\) seconds Isona goes at maximum speed (\(0.5\) m/s), then she slows down to \(0.25\) m/s for \(4\) seconds until she reaches the second railway. At that point, she goes at maximum speed again until she reaches the other platform.

In the third sample, Isona can wait \(2\) seconds before starting running. She then runs for \(5\) seconds at maximum speed (\(0.5\) m/s). After that, she waits for \(1\) second not running (or running at \(0\) m/s), and finally she runs again at maximum speed for the last \(5\) seconds. Overall, she changes speed twice.

F. Немота массива

битмаски Деревья разделяй и властвуй Строки Структуры данных *2400

Дан массив \(a\), состоящий из \(n\) неотрицательных целых чисел.

Немотой подмассива \(a_l, a_{l+1}, \ldots, a_r\) (для произвольных \(l \leq r\)) назовем величину \(\)\max(a_l, a_{l+1}, \ldots, a_r) \oplus (a_l \oplus a_{l+1} \oplus \ldots \oplus a_r),\(\) где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — максимальную немоту среди всех подмассивов данного массива.

Примечание

В первом наборе входных данных рассмотрим подмассив \([3, 4, 5]\). В нем максимальное значение равно \(5\). Значит, его немота равна \(3 \oplus 4 \oplus 5 \oplus 5\) = \(7\). Это максимально возможное значение немоты по всем подмассивам.

Во втором наборе входных данных подмассив \([47, 52]\) обеспечивает наибольшее значение немоты.

C. Наименьшая префиксная сумма

жадные алгоритмы Структуры данных *1600

У Балтика, известного шахматиста, а также математика, есть массив \(a_1,a_2, \ldots, a_n\), и он хочет выполнить следующую операцию несколько (возможно, \(0\)) раз:

  • Выбрать индекс \(i\) (\(1 \leq i \leq n\));
  • умножить \(a_i\) на \(-1\), то есть присвоить \(a_i := -a_i\).

Любимое число Балтика равно \(m\), поэтому он хочет, чтобы значение \(a_1 + a_2 + \cdots + a_m\) было наименьшим среди всех непустых префиксных сумм. Формально, для всех \(k = 1,2,\ldots, n\) должно выполняться \(\)a_1 + a_2 + \cdots + a_k \geq a_1 + a_2 + \cdots + a_m.\(\)

Обратите внимание, что может существовать несколько наименьших префиксных сумм, и необходимо только, чтобы \(a_1 + a_2 + \cdots + a_m\) была одной из них.

Помогите Балтику найти минимальное количество операций, необходимое, чтобы сумма \(a_1 + a_2 + \cdots + a_m\) стала наименьшей префиксной суммой. Можно показать, что необходимая последовательность операций всегда существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq m \leq n \leq 2\cdot 10^5\)) — размер массива и его любимое число.

Вторая строка содержит \(n\) целых чисел \(a_1,a_2, \ldots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)) — сам массив.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально необходимое число операций.

Примечание

В первом примере можно выполнить операцию \(a_4 := -a_4\). Массив становится равным \([-1,-2,-3,4]\), а префиксные суммы \([a_1, \ a_1+a_2, \ a_1+a_2+a_3, \ a_1+a_2+a_3+a_4]\) становятся равными \([-1,-3,-6,-2]\). Поэтому \(a_1 + a_2 + a_3=-6\) является наименьшей из всех префиксных сумм.

Во втором примере можно выполнить операцию \(a_3 := -a_3\). Массив становится равным \([1,2,-3,4]\), префиксные суммы равны \([1,3,0,4]\).

В третьем и четвертом примерах \(a_1 + a_2 + \cdots + a_m\) уже является наименьшей префиксной суммой, нет необходимости выполнять операции.

В пятом примере одна из подходящих последовательностей операций следующая:

  • \(a_3 := -a_3\),
  • \(a_2 := -a_2\),
  • \(a_5 := -a_5\).

Массив становится равным \([-2,-3,5,-5,20]\), его префиксные суммы равны \([-2,-5,0,-5,15]\). Обратите внимание, что и \(a_1+a_2=-5\), и \(a_1+a_2+a_3+a_4=-5\) — минимальные префиксные суммы (и это корректное решение).

D. Борис и его восхитительная прическа

дп жадные алгоритмы Конструктив снм сортировки Структуры данных *1700

Борис думает, что шахматы это скучная игра, поэтому он ушел со своего турнира пораньше. Он пошел в парикмахерскую, ведь его прическа была немного неаккуратная.

В настоящий момент его волосы можно описать массивом \(a_1,a_2,\ldots, a_n\), где \(a_i\) — высота волоса на позиции \(i\). Его желаемая прическа описывается массивом \(b_1,b_2,\ldots, b_n\) аналогично.

У парикмахера есть \(m\) бритв. Каждая бритва имеет некоторый размер и может быть использована не более одного раза. За одну операцию парикмахер может выбрать одну бритву и обрезать с помощью нее отрезок волос Бориса. Формально, операция выглядит следующим образом:

  • Выбрать ранее неиспользованную бритву, пусть ее размер равен \(x\);
  • Выбрать отрезок \([l,r]\) (\(1\leq l \leq r \leq n\));
  • Присвоить \(a_i := \min (a_i,x)\) для всех \(l\leq i \leq r\).

Обратите внимание, что некоторые бритвы могут иметь одинаковый размер. Парикмахер может выбирать размер \(x\) максимум столько раз, сколько у него есть бритв размера \(x\).

Парикмахер может выполнить сколько угодно операций, не используя одну бритву дважды. Необходимо, чтобы в конце выполнялось \(a_i = b_i\) для всех \(1 \leq i \leq n\). Он не обязан использовать все бритвы.

Определите, может ли парикмахер сделать необходимую Борису стрижку.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 20\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит положительное целое число \(n\) (\(3\leq n\leq 2\cdot 10^5\)) — длину массивов \(a\) и \(b\).

Вторая строка содержит \(n\) положительных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — описание текущих волос Бориса.

Третья строка содержит \(n\) положительных целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq 10^9\)) — описание необходимой стрижки.

Четвертая строка содержит положительное целое число \(m\) (\(1 \leq m \leq 2\cdot 10^5\)) — количество бритв.

Пятая строка содержит \(m\) положительных целых чисел \(x_1,x_2, \ldots, x_m\) (\(1 \leq x_i \leq 10^9\)) — размеры бритв.

Гарантируется, что сумма значений \(n\) и сумма значений \(m\) по всем наборам входных данных не превосходят \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если парикмахер может выполнить необходимую стрижку, и «NO» иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом примере волосы Бориса изначально равны \([3,3,3]\). Опишем последовательность из \(2\) операций, которые может выполнить парикмахер:

  • Использовать бритву размера \(1\) на отрезке \([2,2]\); волосы становятся \([3,1,3]\).
  • Использовать бритву размера \(2\) на отрезке \([1,3]\); волосы становятся \([2,1,2]\), что и требуется.

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

В четвертом примере нельзя обрезать волосы так, чтобы их длина увеличилась, и \([1,1,1]\) превратился в \([1,1,2]\).

E. Джоске и полный граф

Бинарный поиск математика Перебор Структуры данных теория чисел *2400

Джоске в подарок от дедушки получил огромный неориентированный взвешенный полный\(^\dagger\) граф \(G\), который содержит \(10^{18}\) вершин. Особенность подарка в том, что вес ребра между различными вершинами \(u\) и \(v\) равен \(\gcd(u, v)^\ddagger\). Джоске решил поэкспериментировать и сделать новый граф \(G'\). Для этого он выбирает два целых числа \(l \le r\), и оставляет только такие вершины \(v\), что \(l \le v \le r\), а также оставляет только ребра между оставшимися вершинами.

Теперь Джоске интересуется, сколько различных весов ребер в графе \(G'\). Так как граф получился огромный, он просит вашей помощи.

\(^\dagger\) Полным графом называется простой неориентированный граф, в котором каждая пара различных вершин смежна.

\(^\ddagger\) \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(l\), \(r\) (\(1 \le l \le r \le 10^{18}\), \(l \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите единственное число — количество различных весов среди оставшихся ребер.

Примечание
Графа \(G'\) для первого набора входных данных.

На рисунке видно, что в графе \(2\) различных веса ребер.

В пятом наборе входных данных остается лишь одна вершина, из которой не исходит ни одного ребра, поэтому ответ — \(0\).

F. Три стула

битмаски дп Комбинаторика Перебор сортировки Структуры данных теория чисел *2300

Как-то раз Кира нашел \(n\) друзей из Морио и решил собрать их за одним столом, чтобы провести мирный разговор. Рост друга \(i\) равен \(a_i\). Так получилось, что рост каждого из друзей уникален.

Но вот незадача, в доме Киры всего \(3\) стула, и всех друзей усадить явно не удастся! Поэтому Кира должен позвать только \(3\) друзей.

Но все не так просто! Если рост самого низкого и самого высокого из приглашенных друзей не взаимно просты, то друзья будут подшучивать друг над другом, что сильно разозлит Киру.

Кира заинтересовался, сколько есть способов позвать \(3\) друзей так, чтобы они не стали подшучивать друг над другом? Два способа считаются различными, если существует такой друг, что он приглашен в одном случае, и не приглашен в другом.

Формально, если Кира позовет друзей с номерами \(i\), \(j\) и \(k\), то должно выполняться \(\gcd(\min(a_i, a_j, a_k), \max(a_i, a_j, a_k)) = 1\), где \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Кира не очень силен в информатике, поэтому просит вас посчитать количество различных способов позвать друзей.

Входные данные

В первой строке записано число \(n\) (\(3 \le n \le 3\cdot10^5\)) — количество друзей Киры.

В следующей строке записано \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 3\cdot10^5\)) — рост друзей Киры.

Выходные данные

В единственной строке выведите количество способов позвать друзей.

Примечание

В первом примере подходит одна способ — позвать друзей \(1\), \(2\) и \(3\). Здесь \(1 < 2 < 3\), и числа \(1\) и \(3\) взаимно просты.

E. Сжатие прямоугольников

Бинарный поиск жадные алгоритмы Перебор реализация Структуры данных *2300

Перед вами прямоугольная таблица высоты \(2\) и ширины \(10^9\), состоящая из единичных клеток. На таблице расположено \(n\) прямоугольников, причём границы прямоугольников проходят по границам клеток. \(i\)-й прямоугольник покрывает все клетки в строках с \(u_i\) по \(d_i\) включительно и столбцах с \(l_i\) по \(r_i\) включительно (\(1 \le u_i \le d_i \le 2\); \(1 \le l_i \le r_i \le 10^9\)). Данные прямоугольники могут произвольным образом пересекаться, вкладываться и совпадать.

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

Требуется, чтобы никакие два (неудаленных) прямоугольника после замены не имели общих клеток, а суммарная площадь, покрытая новыми прямоугольниками, была как можно больше.

Рисунок для первого набора входных данных. Сверху изображены данные прямоугольники, снизу — изменённые. Прямоугольник номер \(4\) был удалён.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество прямоугольников.

Каждая из следующих \(n\) строк содержит четыре целых числа \(u_i, l_i, d_i, r_i\) (\(1 \le u_i \le d_i \le 2\); \(1 \le l_i \le r_i \le 10^9\)) — координаты клеток, находящихся в левом верхнем и правом нижнем углу прямоугольника соответственно.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных сначала выведите целое число \(s\) — максимальную возможную площадь, покрытую новыми прямоугольниками. Далее в \(n\) строках выведите ваше решение для покрытия такой площади.

В \(i\)-й из этих строк выведите четыре целых числа \(u'_i, l'_i, d'_i, r'_i\). Если вы удаляете \(i\)-й прямоугольник, выведите \(u'_i = l'_i = d'_i = r'_i = 0\). Иначе эти числа обозначают новые координаты клеток в левом верхнем и правом нижнем углу \(i\)-го прямоугольника соответственно. Они должны удовлетворять следующим неравенствам: \(u_i \le u'_i \le d'_i \le d_i\); \(l_i \le l'_i \le r'_i \le r_i\).

Если существует несколько решений, выведите любое из них.

Примечание

На рисунке в условии задачи изображен первый набор входных данных.

E. Игра года

математика Перебор Структуры данных теория чисел *2300

Монокарп и Поликарп играют в компьютерную игру. В этой игре есть \(n\) боссов, пронумерованных от \(1\) до \(n\).

Они будут сражаться с каждым боссом по следующему алгоритму:

  • Монокарп делает \(k\) попыток убить босса;
  • Поликарп делает \(k\) попыток убить босса;
  • Монокарп делает \(k\) попыток убить босса;
  • Поликарп делает \(k\) попыток убить босса;
  • ...

Монокарп убивает \(i\)-го босса со своей \(a_i\)-й попытки. Поликарп убивает \(i\)-го босса со своей \(b_i\)-й попытки. Когда один из них убивает \(i\)-го босса, они переходят к \((i+1)\)-му боссу. Счетчики количества попыток сбрасываются для них обоих. Когда один из них убивает \(n\)-го босса, игра заканчивается.

Найдите все такие значения \(k\) от \(1\) до \(n\), что Монокарп убивает всех боссов.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество боссов.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — номер попытки, на которой Монокарп убивает каждого босса.

В третьей строке записаны \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le n\)) — номер попытки, на которой Поликарп убивает каждого босса.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите две строки. В первой строке должно быть записано одно целое число \(\mathit{cnt}\) — количество таких значений \(k\) от \(1\) до \(n\), что Монокарп убьет всех боссов в первой строке. Во второй строке выведите \(\mathit{cnt}\) различных целых чисел — сами значения \(k\).

Примечание

Рассмотрим последний набор входных данных примера.

Пусть \(k = 1\). Сначала Монокарп делает одну попытку убить первого босса. Она успешная, так как \(a_1 = 1\). Затем Монокарп делает одну попытку убить второго босса. Она неуспешная, так как \(a_2 > 1\). Тогда Поликарп делает попытку. Она также неуспешная, так как \(b_2 > 1\). Затем Монокарп делает еще попытку. Она все еще неуспешная, так как \(a_2 > 2\). Это продолжается до тех пор, пока Поликарп наконец не убьет босса со своей третьей попытки. Монокарп не убил этого босса, поэтому \(k = 1\) — это не ответ.

Пусть \(k = 2\). Монокарп все еще убивает первого босса с первой попытки. Затем делает две неуспешные попытки на второго босса. Затем Поликарп делает две неуспешные попытки. Затем Монокарп делает еще две попытки и убивает босса со своей четвертой попытки. Третий босс похож на второго. Сначала две неуспешные попытки от Монокарпа. Затем две неуспешные попытки от Поликарпа. Затем у Монокарпа есть еще две попытки, но уже его первая успешная, так как \(a_3 = 3\). Четвертый босс также убит Монокарпом. Поэтому \(k = 2\) — это ответ.

G. Радиус взвешенного дерева

Деревья разделяй и властвуй реализация Структуры данных *2800

Вам задано дерево из \(n\) вершин и \(n - 1\) ребра. Первоначальный вес \(i\)-й вершины равен \(a_i\).

Назовем расстоянием \(d_v(u)\) от вершины \(v\) до вершины \(u\) количество ребер на пути из \(v\) в \(u\). Заметим, что \(d_v(u) = d_u(v)\) и \(d_v(v) = 0\).

Назовем взвешенным расстоянием \(w_v(u)\) от \(v\) до \(u\) значение \(w_v(u) = d_v(u) + a_u\). Заметим, что \(w_v(v) = a_v\) и \(w_v(u) \neq w_u(v)\), если \(a_u \neq a_v\).

Аналогично обычному расстоянию, назовем эксцентриситетом \(e(v)\) вершины \(v\) наибольшее взвешенное расстояние от \(v\) до какой-либо вершины (включая саму \(v\)), или \(e(v) = \max\limits_{1 \le u \le n}{w_v(u)}\).

Наконец, назовем радиусом \(r\) дерева наименьший из эксцентриситетов его вершин, или \(r = \min\limits_{1 \le v \le n}{e(v)}\).

Вам нужно обработать \(m\) запросов следующего вида:

  • \(v_j\) \(x_j\) — присвоить \(a_{v_j} = x_j\).

После обработки каждого запроса выведите радиус \(r\) текущего дерева.

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

Во второй строке заданы \(n\) целых чисел \(a_1, \dots, a_n\) (\(0 \le a_i \le 10^6\)) — первоначальные веса вершин.

В следующих \(n - 1\) строках заданы ребра дерева. В \(i\)-й строке заданы два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\); \(u_i \neq v_i\)) — соответствующее ребро. Заданные ребра образуют дерево.

В следующей строке задано одно целое число \(m\) (\(1 \le m \le 10^5\)) — количество запросов.

В следующих \(m\) строках заданы сами запросы — по одному в строке. В \(j\)-м запросе заданы два целых числа \(v_j\) и \(x_j\) (\(1 \le v_j \le n\); \(0 \le x_j \le 10^6\)) — вершина и ее новый вес.

Выходные данные

Выведите \(m\) целых чисел — радиус \(r\) дерева после обработки каждого запроса.

Примечание

После первого запроса дерево выглядит следующим образом:

Цветом на изображении отмечена вершина с наименьшим \(e(v)\), соответственно \(r = e(4) = 7\). Эксцентриситеты других вершин равны: \(e(1) = 8\), \(e(2) = 9\), \(e(3) = 9\), \(e(5) = 8\), \(e(6) = 8\).

Дерево после второго запроса:

Радиус \(r = e(1) = 4\).

После третьего запроса радиус \(r = e(2) = 5\):

C. Монстры (сложная версия)

жадные алгоритмы Структуры данных *2200

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

В компьютерной игре вы сражаетесь против \(n\) монстров. Монстр с номером \(i\) имеет \(a_i\) единиц здоровья, где \(a_i\) — целое число. Монстр жив, пока имеет хотя бы \(1\) единицу здоровья.

Вы можете использовать заклинания двух типов:

  1. Нанести \(1\) единицу урона любому живому монстру на ваш выбор.
  2. Нанести \(1\) единицу урона всем живым монстрам. Если хотя бы один монстр умирает (оказывается с \(0\) единицами здоровья) в результате этого действия — повторить его (и продолжать повторять, пока хотя бы один монстр умирает после каждого применения).

При нанесении \(1\) единицы урона здоровье монстра уменьшается на \(1\).

Заклинания типа 1 могут быть использованы сколько угодно раз, а заклинание типа 2 — не более одного раза за игру.

Для каждого \(k = 1, 2, \ldots, n\) ответьте на следующий вопрос. Пусть в игре присутствуют только первые \(k\) монстров, с номерами \(1, 2, \ldots, k\). Какое наименьшее число раз вам нужно применить заклинания типа 1, чтобы убить всех \(k\) монстров?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — число монстров.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — число единиц здоровья у монстров.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел. \(k\)-е из этих чисел должно быть равно наименьшему числу раз, которое нужно применить заклинания типа 1, чтобы убить всех \(k\) монстров, если в игре присутствуют только монстры с номерами \(1, 2, \ldots, k\).

Примечание

В первом наборе входных данных при \(k = n\) начальные значения здоровья у монстров равны \([3, 1, 2]\). Достаточно применить заклинание типа 2:

  • Здоровья монстров становятся равны \([2, 0, 1]\). Так как монстр номер \(2\) умер, заклинание повторяется.
  • Здоровья монстров становятся равны \([1, 0, 0]\). Так как монстр номер \(3\) умер, заклинание повторяется.
  • Здоровья монстров становятся равны \([0, 0, 0]\). Так как монстр номер \(1\) умер, заклинание повторяется.
  • Здоровья монстров становятся равны \([0, 0, 0]\).

Так как можно обойтись вообще без заклинаний типа 1, ответ равен \(0\).

Во втором наборе входных данных при \(k = n\) начальные значения здоровья у монстров равны \([4, 1, 5, 4, 1, 1]\). Одной из оптимальных является следующая последовательность действий:

  • Используя заклинание типа 1, нанести \(1\) единицу урона монстру номер \(1\). Здоровья монстров становятся равны \([3, 1, 5, 4, 1, 1]\).
  • Используя заклинание типа 1, нанести \(1\) единицу урона монстру номер \(4\). Здоровья монстров становятся равны \([3, 1, 5, 3, 1, 1]\).
  • Используя заклинание типа 1, снова нанести \(1\) единицу урона монстру номер \(4\). Здоровья монстров становятся равны \([3, 1, 5, 2, 1, 1]\).
  • Использовать заклинание типа 2:
    • Здоровья монстров становятся равны \([2, 0, 4, 1, 0, 0]\). Так как монстры номер \(2\), \(5\) и \(6\) умерли, заклинание повторяется.
    • Здоровья монстров становятся равны \([1, 0, 3, 0, 0, 0]\). Так как монстр номер \(4\) умер, заклинание повторяется.
    • Здоровья монстров становятся равны \([0, 0, 2, 0, 0, 0]\). Так как монстр номер \(1\) умер, заклинание повторяется.
    • Здоровья монстров становятся равны \([0, 0, 1, 0, 0, 0]\).
  • Используя заклинание типа 1, нанести \(1\) единицу урона монстру номер \(3\). Здоровья монстров становятся равны \([0, 0, 0, 0, 0, 0]\).

Всего заклинания типа 1 были применены \(4\) раза. Можно показать, что это наименьшее возможное число.

G. Раскраска дерева

Деревья Перебор Структуры данных *3000

Задано реберно-взвешенное дерево из \(n\) вершин, каждое ребро которого окрашено в некоторый цвет. Каждая вершина дерева может быть заблокирована или разблокирована. Изначально все вершины разблокированы.

Простой путь — это путь в графе, который не имеет повторяющихся вершин. Длина пути определяется как сумма весов всех ребер на пути.

Путь называется хорошим, если это простой путь, состоящий из ребер одного цвета \(c\), все ребра цвета \(c\) в дереве лежат на этом пути, и каждая вершина пути разблокирована.

Вам нужно обрабатывать запросы \(2\)-х типов:

  1. заблокировать вершину,
  2. разблокировать вершину.

После каждого запроса выведите максимальную длину среди всех хороших путей. Если не существует хорошего пути, выведите \(0\).

Входные данные

Первая строка содержит два целых числа \(n\), \(q\) (\(1 \leq n,q \leq 2\cdot 10^5\)) — количество вершин и количество запросов.

Затем следуют \(n-1\) строка, каждая из которых содержит четыре целых числа \(u\), \(v\), \(w\) и \(c\) (\(1 \leq u,v,w,c \leq n\); \(u \not = v\)), обозначающие взвешенное ребро, соединяющее вершины \(u\) и \(v\) с весом \(w\) и цветом \(c\). Гарантируется, что эти ребра образуют дерево.

Затем следуют \(q\) строк, каждая из которых содержит два целых числа \(p\) и \(x\) (\(p = 0\) или \(p = 1\), \(1\leq x\leq n\)), обозначающие запрос:

  1. Если \(p = 0\), заблокируйте вершину \(x\). Гарантируется, что она не заблокирована в это время.
  2. Если \(p = 1\), разблокируйте вершину \(x\). Гарантируется, что она заблокирована в это время.
Выходные данные

Для каждого запроса выведите максимальную длину хорошего пути. Если не существует хорошего пути, выведите \(0\).

H. Разбалловка Codeforces

Бинарный поиск геометрия дп Структуры данных *3300

Вы участвуете в раунде Codeforces с \(n\) задачами.

На решение каждой задачи вы тратите ровно одну минуту, время на отправку решения можно не учитывать. В каждый момент времени вы можете решать не более одной задачи. Раунд начинается в момент времени \(0\), поэтому свою первую посылку вы можете сделать в момент времени \(t \ge 1\) минут. Когда вы отправляете решение, вы всегда правильно решаете задачу.

Получаемые баллы за \(i\)-ю задачу могут быть описаны тремя целыми числами \(k_i\), \(b_i\) и \(a_i\). Если вы решите эту задачу по прошествии \(t\) минут, вы получите \(\max(b_i - k_i \cdot t,a_i)\) баллов.

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

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество задач.

Далее следуют \(n\) строк, \(i\)-я из которых содержит три целых числа \(k_i\), \(b_i\), \(a_i\) (\(1\le k_i,b_i,a_i\le 10^9\); \(a_i < b_i\)), которые означают, что вы получите \(\max(b_i - k_i \cdot t,a_i)\) баллов, если решите эту \(i\)-ю задачу на \(t\)-й минуте.

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

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

Примечание

Во втором наборе входных данных баллы всех задач на каждой минуте перечислены ниже.

Время\(1\)\(2\)\(3\)\(4\)\(5\)\(6\)
Задача \(1\)\(7\)\(6\)\(5\)\(\color{red}{4}\)\(3\)\(2\)
Задача \(2\)\(\color{red}{20}\)\(11\)\(4\)\(4\)\(4\)\(4\)
Задача \(3\)\(12\)\(10\)\(\color{red}{8}\)\(6\)\(4\)\(3\)
Задача \(4\)\(9\)\(5\)\(1\)\(1\)\(\color{red}{1}\)\(1\)
Задача \(5\)\(17\)\(\color{red}{15}\)\(13\)\(11\)\(9\)\(7\)
Задача \(6\)\(5\)\(5\)\(5\)\(5\)\(5\)\(\color{red}{5}\)

Красным цветом показан один из оптимальных порядков решения задач, который дает \(53\) балла.

I. Охота за сокровищами

разделяй и властвуй Структуры данных *3400

Определим значение красоты последовательности \(b_1,b_2,\ldots,b_c\) как максимальное значение \(\sum\limits_{i=1}^{q}b_i + \sum\limits_{i=s}^{t}b_i\), где \(q\), \(s\), \(t\) являются целыми числами и \(s > q\) или \(t\leq q\). Обратите внимание, что \(b_i = 0\), когда \(i<1\) или \(i>c\), \(\sum\limits_{i=s}^{t}b_i = 0\), когда \(s>t\).

Например, если \(b = [-1,-2,-3]\), у нас может быть \(q = 0\), \(s = 3\), \(t = 2\), поэтому значение красоты равно \(0 + 0 = 0\). А если \(b = [-1,2,-3]\) и \(q = s = t = 2\), то значение красоты будет равно \(1 + 2 = 3\).

Вам дана последовательность \(a\) длины \(n\), определите сумму красоты всех непустых подотрезков \(a_l,a_{l+1},\ldots,a_r\) (\(1\leq l\leq r\leq n\)) последовательности \(a\).

Выведите ответ по модулю \(998\,244\,353\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит целое число \(T\) (\(1 \le T \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора выходных данных содержит целое число \(n\) (\(1\le n\le 10^6\)) — длина \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(-10^6 \leq a_i \leq 10^6\)) — заданная последовательность.

Гарантируется, что сумма \(n\) не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите строку, содержащую одно целое число — ответ по модулю \(998\,244\,353\).

Примечание

Во втором наборе входных данных для подпоследовательности \([-26,43,-41,34,13]\), когда \(q=5\), \(s=2\), \(t=5\), \(\sum\limits_{i=1}^{q}b_i + \sum\limits_{i=s}^{t}b_i = 23 + 49 = 72\).

В третьем наборе входных данных имеется только одна непустая последовательная подпоследовательность \([74]\). Когда \(q=1\), \(s=1\), \(t=1\), \(\sum\limits_{i=1}^{q}b_i + \sum\limits_{i=s}^{t}b_i = 148\).

E. Сумма больше нуля

дп поиск в глубину и подобное Структуры данных *2200

Вам дан массив \(a_1, a_2, \ldots, a_n\) из \(n\) целых чисел. Рассмотрим набор отрезков \(S\), удовлетворяющий следующим условиям.

  • Каждый элемент \(S\) должен иметь вид \([x, y]\), где \(x\) и \(y\) — целые числа от \(1\) до \(n\) включительно, и \(x \leq y\).
  • Никакие два отрезка в \(S\) не пересекаются друг с другом. Два отрезка \([a, b]\) и \([c, d]\) пересекаются тогда и только тогда, когда существует такое целое число \(x\), что \(a \leq x \leq b\) и \(c \leq x \leq d\).
  • Для каждого \([x, y]\) в \(S\) выполняется \(a_x+a_{x+1}+ \ldots +a_y \geq 0\).

Длина отрезка \([x, y]\) определяется как \(y-x+1\). \(f(S)\) определяется как сумма длин всех отрезков в \(S\). Формально, \(f(S) = \sum_{[x, y] \in S} (y - x + 1)\). Обратите внимание, что если \(S\) пусто, то \(f(S)\) равно \(0\).

Каково максимальное значение \(f(S)\) среди всех возможных \(S\)?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)).

Во второй строке содержится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)).

Выходные данные

Выведите одно целое число — максимальное \(f(S)\) среди всех возможных \(S\).

Примечание

В первом примере \(S=\{[1, 2], [4, 5]\}\) может являться \(S\), так как \(a_1+a_2=0\) и \(a_4+a_5=1\). \(S=\{[1, 4]\}\) также допустимо.

Поскольку не существует ни одного \(S\), удовлетворяющего условию \(f(S) > 4\), ответ — \(4\).

Во втором примере \(S=\{[1, 9]\}\) — единственное множество, которое удовлетворяет \(f(S)=9\). Поскольку все возможные \(S\) удовлетворяют \(f(S) \leq 9\), ответ — \(9\).

В третьем примере \(S\) может быть только пустым множеством, поэтому ответ — \(0\).

D. Матрёшки

жадные алгоритмы сортировки Структуры данных *1200

Матрёшка — деревянная игрушка в виде расписной куклы, внутрь которой можно вложить подобную ей куклу меньшего размера.

Набор матрёшек содержит одну или более матрёшку, их размеры составляют подряд идущие положительные целые числа. Таким образом, набор матрёшек описывается двумя числами: \(s\) — размером минимальной матрёшки в наборе и \(m\) — количеством матрёшек в наборе. Иными словами, набор содержит матрёшки размеров \(s, s + 1, \dots, s + m - 1\) для некоторых целых \(s\) и \(m\) (\(s,m > 0\)).

У вас было несколько наборов матрёшек. Недавно вы обнаружили, что кто-то смешал все ваши наборы в один и записал последовательность размеров кукол — целые числа \(a_1, a_2, \dots, a_n\).

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

Например, если заданная последовательность имеет вид \(a=[2, 2, 3, 4, 3, 1]\). Изначально могло быть всего \(2\) набора:

  • первый набор, состоящий из \(4\)-х матрешек с размерами \([1, 2, 3, 4]\);
  • второй набор, состоящий из \(2\)-x матрешек с размерами \([2, 3]\).

По заданной последовательности размеров матрёшек \(a_1, a_2, \dots, a_n\) определите минимальное количество наборов матрёшек, которые могут эту последовательность составлять.

Каждый набор используется полностью, то используются все его матрёшки. Каждый элемент заданной последовательности должен соответствовать ровно одной кукле из какого-то набора.

Входные данные

В первой строке входных данных дано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — суммарное количество матрёшек, которые были во всех наборах.

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\))  — размеры матрёшек.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных теста не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(k\) — минимально возможное количество наборов, чтобы составить заданную последовательность.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных все матрёшки могли быть частью одного набора с минимальным размером матрёшки \(s=7\).

В третьем наборе входных данных каждая матрешка представляет собой отдельный набор.

F. Range Update Point Query

Бинарный поиск Перебор Структуры данных *1500

Дан массив \(a_1, a_2, \dots, a_n\), вам нужно обработать суммарно \(q\) запросов и обновлений следующих типов:

  • \(1\) \(l\) \(r\) — для каждого индекса \(i\) такого, что \(l \leq i \leq r\), заменить значение \(a_i\) на сумму цифр в \(a_i\).
  • \(2\) \(x\) — вывести \(a_x\).
Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — размер массива и количество запросов соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Следующие \(q\) строк каждого набора входных данных содержат запросы следующих видов:

  • \(1\) \(l\) \(r\) (\(1 \leq l \leq r \leq n\)) — означает, что для каждого индекса \(i\) такого, что \(l \leq i \leq r\), вам следует заменить значение \(a_i\) на сумму его цифр.
  • \(2\) \(x\) (\(1 \leq x \leq n\)) — означает, что вы должны вывести \(a_x\).

Гарантируется, что существует хотя бы один запрос второго типа.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Сумма \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответы на запросы второго типа, в том порядке, в котором они заданы в тесте.

Примечание

В первом наборе входных данных происходят следующие изменения:

  • Изначально \(a = [1, 420, 69, 1434, 2023]\).
  • Операция применяется с \(l=2\), \(r=3\), получаем \([1, \color{red}{6}, \color{red}{15}, 1434, 2023]\).
  • Запрошены значения с \(x=2\), \(x=3\), и \(x=4\), выводим \(6\), \(15\), и \(1434\).
  • Операция применяется с \(l=2\), \(r=5\), получаем \([1, \color{red}{6}, \color{red}{6}, \color{red}{12}, \color{red}{7}]\).
  • Запрошены значения с \(x=1\), \(x=3\), и \(x=5\), выводим \(1\), \(6\), и \(7\).

D. Перестановки с неподвижным префиксом

Бинарный поиск битмаски математика сортировки Структуры данных хэши *1700

Заданы \(n\) перестановок \(a_1, a_2, \dots, a_n\), каждая длины \(m\). Напомним, что перестановка длины \(m\) — это последовательность из \(m\) различных целых чисел от \(1\) до \(m\).

Назовем красотой перестановки \(p_1, p_2, \dots, p_m\) наибольшее такое \(k\), что \(p_1 = 1, p_2 = 2, \dots, p_k = k\). Если \(p_1 \neq 1\), то красота равна \(0\).

Произведение двух перестановок \(p \cdot q\) — это такая перестановка \(r\), что \(r_j = q_{p_j}\).

Для каждого \(i\) от \(1\) до \(n\) выведите наибольшую красоту перестановки \(a_i \cdot a_j\) по всем \(j\) от \(1\) до \(n\) (возможно, \(i = j\)).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 5 \cdot 10^4\); \(1 \le m \le 10\)) — количество перестановок и длина каждой перестановки.

В \(i\)-й из следующих \(n\) строк записана перестановка \(a_i\) — \(m\) различных чисел от \(1\) до \(m\).

Сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^4\).

Выходные данные

На каждый набор входных данных выведите \(n\) целых чисел. \(i\)-е значение должно быть равно наибольшей красоте перестановки \(a_i \cdot a_j\) по всем \(j\) (\(1 \le j \le n\)).

C. Даша и поиски

Конструктив Структуры данных *1200

Как вы знаете, девочка Даша постоянно что-то ищет. На этот раз ей дали перестановку, и она хочет найти такой её подотрезок, что ни один из элементов на его концах не является ни минимумом, ни максимумом всего подотрезка. Более формально, вас просят найти такие числа \(l\) и \(r\) \((1 \leq l \leq r \leq n)\), что \(a_l \neq \min(a_l, a_{l + 1}, \ldots, a_r)\), \(a_l \neq \max(a_l, a_{l + 1}, \ldots, a_r)\) и \(a_r \neq \min(a_l, a_{l + 1}, \ldots, a_r)\), \(a_r \neq \max(a_l, a_{l + 1}, \ldots, a_r)\).

Перестановкой длины \(n\) называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (\(2\) встречается дважды в массиве) и \([1,3,4]\) тоже не является перестановкой (\(n=3\), но \(4\) присутствует в массиве).

Помогите Даше найти такой подотрезок, либо скажите, что такого подотрезка не существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Для каждого набора входных данных в первой строке содержится одно целое число одно число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длина перестановки.

Вторая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)) — элементы перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(-1\), если искомого подотрезка не существует.

Иначе, выведите два индекса \(l, r\), такие что \([a_{l}, a_{l + 1}, \ldots, a_{r}]\) удовлетворяет всем условиям.

Если существует несколько решений, то выведите любое из них.

Примечание

В первом и четвертом наборе входных данных можно показать, что искомых отрезков нет.

Во втором наборе входных данных подотрезок \([1, 4]\) удовлетворяет всем условиям, потому что \(\max(a_1, a_2, a_3, a_4) = 4, \min(a_1, a_2, a_3, a_4) = 1\), и как мы видим, все условия выполняются .

В третьем наборе входных данных подотрезок \([2, 6]\) также удовлетворяет всем описанным условиям.

E. Велепин и маркетинг

Бинарный поиск дп жадные алгоритмы сортировки Структуры данных *2600

Знаменитый писатель Велепин очень продуктивный. Совсем недавно он подписал контракт с известным изданием и теперь ему нужно написать \(k_i\) книг за \(i\)-й год. Для него это вообще не проблема, он может сколько угодно писать о самураях, космосе, пустоте, насекомых и оборотнях.

У него есть \(n\) постоянных читателей, каждый из которых в \(i\)-й год прочитает одну из \(k_i\) книг, выпущенных Велепиным. Читатели очень любят обсуждать книги, поэтому \(j\)-й из них будет доволен в течение года, если такую же книгу, как он, прочитают как минимум \(a_j\) человек (включая его самого).

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

Входные данные

В первой строке дано одно целое число \(n\) \((2 \le n \le 3 \cdot 10^5)\) — количество постоянных читателей Велепина.

Во второй строке дано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1 \le a_i \le n)\) — количество необходимых читателей той же книги для счастья \(i\)-го человека.

В третьей строке дано одно целое число \(q\) \((1 \le q \le 3 \cdot 10^5)\) — количество лет, которые нужно проанализировать.

В каждой из следующих \(q\) строк дано по одному целому числу \(k_j\) \((2 \le k_j \le n)\) — количество книг, которые Велепин должен написать в \(j\)-й год.

Выходные данные

Выведите \(q\) строк, в каждой из них ровно одно число — максимальное количество человек, которые могут быть довольны в \(j\)-й год, если Велепин выпустит \(k_j\) книг.

Примечание

В первом примере в первый год оптимальным является разделение \(1, 2, 2, 2, 2\) (первую книгу читает первый человек, а все остальные вторую). Во второй год оптимальным решением является \(1, 2, 2, 3, 3\) (первую книгу читает первый человек, вторую книгу читает второй и третий человек, а все остальные третью книгу). В третий год оптимальным будет разбиение \(1, 2, 3, 4, 2\). Соответственно количество довольных людей по годам будет — \(5, 5, 3\).

Во втором примере в первый год оптимальным является разделение \(1, 1, 1, 1, 1, 2\), тогда будут довольны все кроме \(6\)-го человека. Во второй год оптимальным разделением является \(1, 1, 1, 1, 2, 3\), тогда будут довольны все кроме \(5\)-го и \(6\)-го человека.

F. Ребрендинг

Перебор разделяй и властвуй реализация Структуры данных *2600

Костя и Женя - создатели группы «Бумага» - после выпуска легендарного альбома решили создать новое музыкальное объединение «Дневные грузчики», для этого им нужно найти двух новых людей.

Они пригласили на кастинг \(n\) человек. Кастинг продлится \(q\) дней. В \(i\)-й из дней Костя и Женя хотят найти двух человек на отрезке с \(l_i\) по \(r_i\), которые больше всего подходят их объединению. Так как «Дневные грузчики» занимаются современным искусством,  музыкальные навыки им не важны и они смотрят лишь на внешние признаки: им хочется, чтобы разница роста двух людей была как можно меньше.

Помогите им, и для каждого дня укажите минимальную разницу роста людей с кастинга на данном отрезке!

Входные данные

В первой строке вам дано два целых числа \(n\) и \(q\) (\(2 \leq n \leq 3 \cdot 10^5, 1 \leq q \leq 10^6\)) — количество людей, которые пришли на кастинг, а также количество дней кастинга.

Во второй строке вам даны \(n\) целых чисел \(a_1, a_2, a_3, \ldots, a_n\) (\(1 \leq a_i \leq n\)) — рост каждого из кандидатов.

Также гарантируется, что все \(a_i\) различны.

В следующих \(q\) строках даны по два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i < r_i \leq n\)) — отрезок людей в \(i\)-й день кастинга.

Выходные данные

Выведите \(q\) строк. В \(i\)-й строке должна быть минимальная разница роста между двумя кандидатами на отрезке в \(i\)-й день кастинга.

Примечание

В первом примере минимальная разность на отрезке \([1, 2]\) составляет \(2\), на отрезке \([2, 3]\)\(1\), на отрезке \([1, 3]\) также \(1\).

В третьем примере минимальную разность на отрезке \([4, 6]\) составляют числа \(3\) и \(5\) (\(5 - 3 = 2\)). На отрезке \([1, 2]\) минимальную разность имеют числа \(2\) и \(6\) (\(6 - 2 = 4\)). На отрезке \([3, 6]\) минимальную разность имеют числа \(1\) и \(3\) (\(3 - 1 = 2\)). На отрезке \([1, 3]\) минимальную разность образуют числа \(1\) и \(2\) (\(2 - 1 = 1\)).

E. Разметка дерева расстояниями

Деревья дп жадные алгоритмы реализация Структуры данных хэши *2400

Вам задано невзвешенное дерево из \(n\) вершин, пронумерованных от \(1\) до \(n\), и список из \(n-1\) целого числа \(a_1, a_2, \ldots, a_{n-1}\). Дерево — это связный неориентированный граф без циклов. Вы можете использовать каждый элемент списка, чтобы пометить одну из вершин дерева. Никакая вершина не должна быть помечена дважды. Вы можете пометить единственную оставшуюся непомеченной вершину любым целым числом.

Вершина \(x\) называется хорошей, если можно так пометить вершины, чтобы для каждой вершины \(i\) ее метка была равна расстоянию между \(x\) и \(i\). Расстояние между двумя вершинами \(s\) и \(t\) на дереве — это минимальное количество ребер на пути, который начинается в вершине \(s\) и заканчивается в вершине \(t\).

Найдите все хорошие вершины.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2\le n\le 2\cdot 10^5\)) — число вершин в дереве.

Вторая строка содержит \(n - 1\) целое число \(a_1,a_2,\ldots,a_{n-1}\) (\(0\le a_i < n\)) — заданный список.

Затем следуют \(n−1\) строк. Каждая из них содержит два целых числа \(u\) и \(v\) (\(1\le u,v\le n\)), обозначающие ребро между вершинами \(u\) и \(v\). Гарантируется, что ребра образуют дерево.

Выходные данные

В первой строке выведите количество хороших вершин.

Во второй строке выведите номера всех хороших вершин в порядке возрастания.

Примечание

На рисунке ниже показано дерево для первого примера:

На рисунке ниже показаны две возможные разметки, такие что \(2\) — хорошая вершина (слева) и \(4\) — хорошая вершина (справа).

Квадрат под каждой вершиной означает ее метку. Черные квадраты содержат числа, которые были в данном списке, а единственный белый квадрат содержит единственное число, которого не было в данном списке.

Во втором примере единственной хорошей вершиной является вершина \(3\).

В третьем примере хороших вершин нет.

C. Дегустация чая

Бинарный поиск реализация Структуры данных *1500

Производитель чая рашил организовать огромную церемонию дегустации чая. \(n\) дегустаторов будут пробовать \(n\) сортов чая. И сорта чая, и дегустаторы пронумерованы от \(1\) до \(n\). Производитель подготовил \(a_i\) миллилитров \(i\)-го сорта чая. \(j\)-й дегустатор способен выпить \(b_j\) миллилитров чая за раз.

Дегустация будет происходить по этапам. На первом этапе \(i\)-й дегустатор попробует \(i\)-й сорт чая. \(i\)-й дегустатор выпивает \(\min(a_i, b_i)\) чая (сколько доступно \(i\)-го сорта чая и сколько \(i\)-й дегустатор способен выпить). \(a_i\) также уменьшается на это количество.

Затем все дегустаторы переходят к предыдущему сорту чая. Тогда на втором этапе \(i\)-й дегустатор пробует \((i-1)\)-й сорт чая. \(i\)-й дегустатор выпивает \(\min(a_{i-1}, b_i)\) чая. \(1\)-й дегустатор заканчивает дегустацию.

На третьем этапе \(i\)-й дегустатор пробует \((i-2)\)-й сорт чая. \(2\)-й дегустатор заканчивает дегустацию. Это продолжается, пока все дегустаторы не закончат дегустацию.

Рассмотрим процесс дегустации для \(n = 3\), \(a = [10, 20, 15]\), \(b = [9, 8, 6]\). В левом столбце записаны текущие количества каждого сорта чая. В правом столбце записаны текущие выпитые количества чая для каждого дегустатора. Стрелка указывает, какой дегустатор пьет каждый чай на текущем шаге. Число на стрелке — это количество — минимум из того, сколько доступно сорта чая, и того, сколько может выпить дегустатор.

Для каждого дегустатора выведите, сколько миллилитров чая он/она суммарно выпьет.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество сортов чая и количество дегустаторов.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — количество каждого сорта чая.

В третьей строке записаны \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^9\)) — количество чая, которое каждый дегустатор может выпить за раз.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

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

Примечание

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

  • \(a = [1, 12, 9]\), \(\mathit{ans} = [9, 8, 6]\)
  • \(a = [0, 6, 9]\), \(\mathit{ans} = [9, 9, 12]\)
  • \(a = [0, 6, 9]\), \(\mathit{ans} = [9, 9, 12]\)

Во втором наборе входных данных единственный дегустатор выпьет \(\min(5, 7)\) миллилитров чая единственного сорта.

Здесь предоставлены оставшиеся количества каждого сорта чая после каждого этапа и количество выпитого каждым дегустатором чая для третьего набора входных данных:

  • \(a = [10, 4, 3, 3]\), \(\mathit{ans} = [3, 4, 2, 1]\);
  • \(a = [6, 2, 2, 3]\), \(\mathit{ans} = [3, 8, 4, 2]\);
  • \(a = [4, 1, 2, 3]\), \(\mathit{ans} = [3, 8, 6, 3]\);
  • \(a = [3, 1, 2, 3]\), \(\mathit{ans} = [3, 8, 6, 4]\).

Здесь предоставлены оставшиеся количества каждого сорта чая после каждого этапа и количество выпитого каждым дегустатором чая для четвертого набора входных данных:

  • \(a = [999999999, 999999999, 0]\), \(\mathit{ans} = [1, 1, 1000000000]\);
  • \(a = [999999998, 0, 0]\), \(\mathit{ans} = [1, 2, 1999999999]\);
  • \(a = [0, 0, 0]\), \(\mathit{ans} = [1, 2, 2999999997]\).

E. Взрывы?

Бинарный поиск дп жадные алгоритмы математика Структуры данных *2200

Вы играете в очередную компьютерную игру, где вы убиваете монстров с помощью магических заклинаний. Поле состоит из \(n\) клеток, расположенных в ряд и пронумерованных от \(1\) по \(n\). Первоначально, в \(i\)-й клетке находится \(i\)-й монстер с \(h_i\) единиц здоровья.

У вас есть базовое заклинание, которое стоит \(1\) MP и наносит \(1\) урона выбранному вами монстру. Вы можете использовать его любое количество раз. Также у вас есть свиток с заклинанием «Взрыв», которое вы можете использовать только один раз. Вы хотите закончить убийство монстров с помощью взрыва, а потому вы сначала используете базовое заклинание несколько раз (возможно, ни разу), а потом используете один «Взрыв».

Как же работает заклинание «Взрыв»? Во-первых, вы выбираете мощность заклинания: если вы вольете в него \(x\) MP, «Взрыв» нанесет \(x\) урона. Во-вторых, вы выбираете монстра \(i\), который будет целью заклинания. Вот что происходит дальше:

  • если его текущее здоровье \(h_i > x\), то он остается живым со здоровьем, пониженным на \(x\);
  • если \(h_i \le x\), то \(i\)-й монстр умирает и взрывается, нанося \(h_i - 1\) урона монстрам в соседних клетках \(i - 1\) и \(i + 1\), если эти клетки есть и монстры в них еще живы;
  • если урона, нанесенного взрывом, достаточно, чтобы убить монстра \(i - 1\) (или \(i + 1\)), т. е. текущее \(h_{i - 1} \le h_i - 1\) (или \(h_{i + 1} \le h_i - 1\)), то этот монстр также взрывается, нанося \(h_{i-1} - 1\) (или \(h_{i+1} - 1\)) урона своим соседям, которые также могут взорваться, если умрут, и так далее.

Ваша задача — убить всех оставшихся монстров с помощью этих «цепных» взрывов, а потому вам может понадобиться базовое заклинание, чтобы уменьшить \(h_i\) некоторых монстров, а может, даже убить их заранее (монстры умирают, когда их текущее здоровье \(h_i\) становится меньше или равно нулю). Заметим, что монстры не перемещаются между клетками, а потому, например, монстры \(i\) и \(i + 2\) никогда не станут соседними.

Какое наименьшее суммарное MP вам нужно, чтобы уничтожить монстров описанным выше способом? Общее MP считается как сумма количества использований базового заклинания и выбранной мощности \(x\) заклинания «Взрыв».

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество клеток на поле, или же количество монстров.

Во второй строке каждого набора заданы \(n\) целых чисел \(h_1, h_2, \dots, h_n\) (\(1 \le h_i \le 10^6\)) — первоначальное здоровье монстров.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных вы можете, например, использовать базовое заклинание на монстрах \(1\) и \(2\) (один раз на каждого), чтобы уничтожить их. После этого вы кастуете «Взрыв» мощности \(x = 1\) на монстра \(3\), чтобы убить его. Суммарное MP равно \(2 + 1 = 3\).

Во втором наборе, выгодно скастовать базовое заклинание \(4\) раза на монстра \(1\) и убить его. После этого, вы кастуете «Взрыв» мощности \(x = 2\) на монстра \(3\). Он умирает и взрывается с силой \(1\), чем убивает монстров \(2\) и \(4\). Суммарное MP равно \(4 + 2 = 6\).

В третьем наборе, вы кастуете «Взрыв» силы \(15\) на монстра \(3\). Взрыв \(3\)-го монстра (силы \(14\)) убивает монстров \(2\) и \(4\). Взрыв монстра \(2\) (силы \(9\)), в свою очередь, убивает монстра \(1\).

D. Максимальный подмассив

дп жадные алгоритмы Структуры данных *2000

Задан массив \(a_1, a_2, \dots, a_n\), состоящий из \(n\) целых чисел. Также дано два целых числа \(k\) и \(x\).

Вы должны выполнить следующую операцию ровно один раз: прибавить \(x\) к элементам на ровно \(k\) различных позициях и вычесть \(x\) на всех остальных.

Например, если \(a = [2, -1, 2, 3]\), \(k = 1\), \(x = 2\), и мы выбрали увеличить первый элемент, тогда после применения операции \(a = [4, -3, 0, 1]\).

Пусть \(f(a)\) — максимальная сумма подмассива из \(a\). Подмассив массива \(a\) — это последовательная часть массива \(a\), другими словами массив \(a_i, a_{i + 1}, \dots, a_j\) для некоторых \(1 \le i \le j \le n\). Пустой подмассив тоже рассматривается, его сумма равна \(0\).

Пусть массив \(a'\) будет массивом \(a\) после применения вышеупомянутой операции. Примените операцию таким образом, чтобы \(f(a')\) было максимально возможным, и выведите максимально возможное значение \(f(a')\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(k\) и \(x\) (\(1 \le n \le 2 \cdot 10^5\); \(0 \le k \le \min(20, n)\); \(-10^9 \le x \le 10^9\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — максимально возможное значение \(f(a')\).

D. Li Hua и дерево

Деревья дп Перебор поиск в глубину и подобное реализация Структуры данных *1900

У Li Hua есть дерево с \(n\) вершинами и \(n-1\) ребром. Корнем дерева является вершина \(1\). Каждая вершина \(i\) имеет важность \(a_i\). Обозначим размер поддерева как количество вершин в нем, а важность как сумму важности вершин в нем. Обозначим тяжелым сыном нелистовой вершины сына с наибольшим размером поддерева. Если таких вершин несколько, то тяжёлым сыном будет та, у которой индекс минимален.

Li Hua хочет выполнить \(m\) операций:

  • «1 \(x\)» (\(1\leq x \leq n\)) — вычислить важность поддерева, корнем которого является \(x\).
  • «2 \(x\)» (\(2\leq x \leq n\)) — повернуть тяжёлого сына поддерева \(x\) вверх. Формально, обозначим как \(son_x\) тяжелого сына \(x\), \(fa_x\) как отца \(x\). Он хочет удалить ребро между \(x\) и \(fa_x\) и добавить ребро между \(son_x\) и \(fa_x\). Гарантируется, что \(x\) не является корнем, но не гарантируется, что \(x\) не является листом. Если \(x\) является листом, проигнорируйте эту операцию.

Предположим, что вы Li Hua. Пожалуйста, решите эту задачу.

Входные данные

Первая строка содержит 2 целых числа \(n,m\) (\(2\le n\le 10^{5},1\le m\le 10^{5}\)) — количество вершин в дереве и количество операций.

Вторая строка содержит \(n\) целых чисел \(a_{1},a_{2},\ldots ,a_{n}\) (\(-10^{9}\le a_{i}\le 10^{9}\)) — важность каждой вершины.

Следующие \(n-1\) строк содержат рёбра дерева. В \(i\)-й строке записаны два целых числа \(u_i\) и \(v_i\) (\(1\le u_i,v_i\le n\), \(u_i\ne v_i\)) — соответствующее ребро. Данные рёбра образуют дерево.

Следующие \(m\) строк содержат операции — по одной операции в строке. \(j\)-я операция содержит два целых числа \(t_{j},x_{j}\) (\(t_{j}\in \{1,2\}\), \(1 \leq x_{j} \leq n\), \(x_{j}\neq 1\) если \(t_j = 2\)) — \(j\)-я операция.

Выходные данные

Для каждого запроса вида «1 \(x\)» выведите ответ в отдельной строке.

Примечание

В первом примере:

Начальное дерево показано на следующем рисунке:

Важность поддерева \(6\) равна \(a_6+a_7=2\).

После поворота тяжелого сына вершины \(3\) (которым является \(6\)) вверх, дерево будет выглядеть следующим образом:

Важность поддерева \(6\) равна \(a_6+a_3+a_7=3\).

Важность поддерева \(2\) - \(a_2+a_4+a_5=3\).

E. Li Hua и массив

математика Перебор снм Структуры данных теория чисел *2300

Li Hua хочет решить задачу о \(\varphi\) — функции Эйлера. Напомним, что \(\varphi(x)=\sum\limits_{i=1}^x[\gcd(i,x)=1]\).\(^{\dagger,\ddagger}\)

У него есть последовательность \(a_1,a_2,\cdots,a_n\) и он хочет выполнить \(m\) операций:

  • «1 \(l\) \(r\)» (\(1\le l\le r\le n\)) — для каждого \(x\in[l,r]\), изменить \(a_x\) на \(\varphi(a_x)\).
  • «2 \(l\) \(r\)» (\(1\le l\le r\le n\)) — найдите минимальное количество изменений, необходимое для того, чтобы стало верно \(a_l=a_{l+1}=\cdots=a_r\). За одно изменение он выбирает один \(x\in[l,r]\) и изменяет \(a_x\) на \(\varphi(a_x)\).

Каждая операция второго типа является независимой, то есть массив не изменяется.

Предположим, что вы Li Hua. Пожалуйста, решите эту задачу.

\(^\dagger\) \(\gcd(x,y)\) обозначает наибольший общий делитель (НОД) целых чисел \(x\) и \(y\).

\(^\ddagger\) Выражение \([\textrm{cond}]\) равно \(1\), если условие \(\textrm{cond}\) верно, и \(0\) в противном случае.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1\le n,m\le 10^{5}\)) — количество элементов в массиве и количество операций для обработки, соответственно.

Вторая строка содержит \(n\) целых чисел \(a_{1},a_{2},\cdots ,a_{n}\) (\(1\le a_{i}\le 5\cdot 10^{6}\)) — элементы массива.

Далее идут \(m\) строк, каждая строка содержит три целых числа \(t_{i},l_{i},r_{i}\) (\(t_i\in\{1,2\},1\le l_i\le r_i\le n\)) — \(i\)-я операция.

Выходные данные

Для каждого запроса вида «2 \(l\) \(r\)» выведите ответ в отдельной строке.

Примечание

Обозначим \(\varphi^k(x)=\begin{cases}x,&k=0\\\varphi(\varphi^{k-1}(x)),&k > 0\end{cases}\).

Сначала \(a=[8,1,6,3,7]\).

Чтобы сделать верным выражение \(a_1=a_2=a_3=a_4=a_5\), мы можем изменить \(a\) на \(a'=[\varphi^3(8),\varphi^0(1),\varphi^2(6),\varphi^2(3),\varphi^3(7)]=[1,1,1,1,1]\), используя \(3+0+2+2+3=10\) изменений.

Чтобы сделать \(a_3=a_4\), мы можем изменить \(a\) на \(a'=[\varphi^0(8),\varphi^0(1),\varphi^1(6),\varphi^1(3),\varphi^0(7)]=[8,1,2,2,7]\), используя \(0+0+1+1+0=2\) изменения.

После «1 \(1\) \(3\)», \(a\) меняется на \(a=[\varphi^1(8),\varphi^1(1),\varphi^1(6),\varphi^0(3),\varphi^0(7)]=[4,1,2,3,7]\).

Чтобы сделать \(a_3=a_4\), мы можем изменить \(a\) на \(a'=[\varphi^0(4),\varphi^0(1),\varphi^0(2),\varphi^1(3),\varphi^0(7)]=[4,1,2,2,7]\), используя \(0+0+0+1+0=1\) изменение.

F. Li Hua и путь

Деревья поиск в глубину и подобное разделяй и властвуй снм Структуры данных *3000

У Li Hua есть дерево из \(n\) вершин и \(n-1\) рёбер. Вершины пронумерованы от \(1\) до \(n\).

Пара вершин \((u,v)\) (\(u < v\)) считается милой, если ровно одно из следующих двух утверждений истинно:

  • \(u\) является вершиной с минимальным индексом среди всех вершин на пути \((u,v)\).
  • \(v\) — вершина с максимальным индексом среди всех вершин на пути \((u,v)\).

Будет выполнено \(m\) операций. В каждой операции Li Hua выбирает целое число \(k_j\), затем вставляет в дерево вершину с номером \(n+j\), соединяющуюся с вершиной номер \(k_j\).

Он хочет подсчитать количество милых пар вершин до операций и после каждой операции.

Предположим, что вы Li Hua. Пожалуйста, решите эту задачу.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2\le n\le 2\cdot 10^5\)) — количество вершин в дереве.

Следующие \(n-1\) строк содержат ребра дерева. В \(i\)-й строке записаны два целых числа \(u_i\) и \(v_i\) (\(1\le u_i,v_i\le n\); \(u_i\ne v_i\)) — соответствующее ребро. Данные рёбра образуют дерево.

Следующая строка содержит одно целое число \(m\) (\(1\le m\le 2\cdot 10^5\)) — количество операций.

Следующие \(m\) строк содержат операции — по одной операции в строке. В \(j\)-й операции содержится одно целое число \(k_j\) (\(1\le k_j < n+j\)) — вершина.

Выходные данные

Выведите \(m+1\) целых чисел — количество милых пар вершин до операций и после каждой операции.

Примечание

Начальное дерево показано на следующем рисунке:

Существует \(11\) милых пар — \((1,5),(2,3),(2,4),(2,6),(2,7),(3,4),(3,6),(3,7),(4,5),(5,7),(6,7)\).

Аналогично, мы можем посчитать милые пары после каждой операции, и результатами будут \(15\) и \(19\).

B. Три семёрки

жадные алгоритмы Перебор реализация Структуры данных *1000

Лотерея «Три Семёрки» проводилась \(m\) дней. В день \(i\) в лотерее участвовали \(n_i\) людей с номерами \(a_{i, 1}, \ldots, a_{i, n_i}\).

Известно, что в каждый из \(m\) дней из участников лотереи выбирался ровно один победитель. Победителю лотереи в день \(i\) запрещено участвовать в лотерее в дни с номерами от \(i+1\) до \(m\).

К сожалению, информация о победителях лотереи была утеряна. Вам нужно восстановить любой возможный список победителей лотереи в дни с номерами от \(1\) до \(m\) или определить, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 50\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(m\) (\(1 \le m \le 50\,000\)) — количество дней, в которые проводилась лотерея.

Далее для каждого \(i\) от \(1\) до \(m\) находится блок данных из двух строк.

В первой строке каждого блока находится одно целое число \(n_i\) (\(1 \le n_i \le 50\,000\)) — количество участников лотереи в день \(i\).

Во второй строке блока находятся числа \(a_{i, 1}, \ldots, a_{i, n_i}\) (\(1 \le a_{i, j} \le 50\,000\)) — номера участников лотереи в день \(i\). Гарантируется, что все числа \(a_{i, 1}, \ldots, a_{i, n_i}\) попарно различны.

Гарантируется, что сумма значений \(n_i\) по всем блокам всех наборов входных данных не превосходит \(50\,000\).

Выходные данные

Для каждого набора входных данных, если решения не существует, выведите одно целое число \(-1\).

Иначе выведите \(m\) целых чисел \(p_1, p_2, \ldots, p_m\) (\(1 \le p_i \le 50\,000\)) — номера победителей лотереи в дни с \(1\) по \(m\). Если существует несколько корректных решений, выведите любое из них.

Примечание

В первом наборе входных данных один из подходящих ответов \([8, 2, 1]\), так как участник с номером \(8\) участвовал в день \(1\), но не участвовал в дни \(2\) и \(3\); участник с номером \(2\) участвовал в день \(2\), но не участвовал в день \(3\); а участник с номером \(1\) участвовал в день \(3\). Обратите внимание, что это не единственный возможный ответ, например, \([8, 9, 4]\) также является верным ответом.

Во втором наборе входных данных оба участника лотереи участвовали в обоих днях лотереи, значит любой возможный победитель лотереи в день \(1\) обязательно участвовал в день \(2\), значит подходящего ответа не существует.

В третьем наборе входных данных в дни \(2\), \(3\) и \(4\) участвовал только один участник, а в день \(1\) единственный участник, не участвовавший в лотерее в днях \(2, 3, 4\) — это участник \(2\). Значит \([2, 1, 4, 3]\) — единственно верный ответ.

A. Прямой эфир

жадные алгоритмы математика реализация Структуры данных *800

На Codeforces поле «Прямой эфир» показывает последние \(n\) постов, в которых были обновления.

Изначально там находятся посты \(1, 2, \ldots, n\) (в таком порядке сверху вниз). Также есть бесконечно много постов, которые не находятся в поле, пронумерованных целыми числами \(n + 1, n + 2, \ldots\).

Когда обновление происходит в посте \(p\):

  • Если пост находится в поле «Прямой эфир», он перемещается со своей позиции на самую верхнюю.
  • Иначе он добавляется в поле на самую верхнюю позицию, а пост на самой нижней позиции удаляется из поля «Прямой эфир».

Вы знаете, что следующие \(m\) обновлений произойдут в постах \(p_1, p_2, \ldots, p_m\) (\(n + 1 \leq p_i \leq n + m\)) в моменты времени \(1, 2, \ldots, m\). Обратите внимание, что обновления происходят только с постами имеющими номер \(\geq n + 1\).

Для каждого поста \(i\) (\(1 \leq i \leq n\)) найдите минимальный момент времени, когда он будет удален из поля «Прямой эфир», или скажите, что он не будет удален.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Описания наборов входных данных следуют.

Первая строка описания каждого набора входных данных содержит два целых числа \(n\), \(m\) (\(1 \leq n, m \leq 5 \cdot 10^4\)) — размер поля «Прямой эфир» и количество действий.

В следующей строке находятся \(m\) целых чисел \(p_1, p_2, \ldots, p_m\) (\(n + 1 \leq p_i \leq n + m\)).

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходят \(5 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(t_1, t_2, \ldots, t_n\), где \(t_i=-1\), если пост \(i\) не будет удален, иначе \(t_i\) равняется первому моменту времени, когда пост \(i\) будет удален (\(1 \leq t_i \leq m\)).

Примечание

В первом наборе входных данных единственный пост \(1\) будет удален в момент времени \(1\) и будет заменен на пост \(2\).

Во втором наборе входных данных поле «Прямой эфир» будет (в порядке сверху вниз):

  1. Перед моментом времени \(1\): \([1, 2, 3]\), после момента времени \(1\): \([5, 1, 2]\). Пост \(3\) был удален.
  2. Перед моментом времени \(2\): \([5, 1, 2]\), после момента времени \(2\): \([4, 5, 1]\). Пост \(2\) был удален.

Пост \(1\) не будет удален.

Во третьем наборе входных данных поле «Прямой эфир» будет (в порядке сверху вниз):

  1. Перед моментом времени \(1\): \([1, 2, 3, 4]\), после момента времени \(1\): \([5, 1, 2, 3]\). Пост \(4\) был удален.
  2. Перед моментом времени \(2\): \([5, 1, 2, 3]\), после момента времени \(2\): \([9, 5, 1, 2]\). Пост \(3\) был удален.
  3. Перед моментом времени \(3\): \([9, 5, 1, 2]\), после момента времени \(3\): \([9, 5, 1, 2]\). Ничего не изменилось.
  4. Перед моментом времени \(4\): \([9, 5, 1, 2]\), после момента времени \(4\): \([5, 9, 1, 2]\). Поменялся только порядок постов.
  5. Перед моментом времени \(5\): \([5, 9, 1, 2]\), после момента времени \(5\): \([7, 5, 9, 1]\). Пост \(2\) был удален.

Пост \(1\) не будет удален.

D2. Горячий запуск (сложная версия)

дп Структуры данных *2100

Это сложная версия задачи. Единственное различие между версиями заключается в ограничениях на \(t\), \(n\), \(k\).

У вас есть компьютер с двумя CPU. Также есть \(k\) программ, пронумерованных целыми числами от \(1\) до \(k\), которые вы можете исполнять на компьютере, каждую только на одном CPU.

\(i\)-я программа (\(1 \le i \le k\)) занимает \(cold_i\) секунд, чтобы быть исполненной на любом CPU. Однако, если последняя программа, которая исполнялась на этом CPU была также программа \(i\), исполнение занимает \(hot_i\) секунд (\(hot_i \le cold_i\)). Обратите внимание, что это выполняется, только если мы исполнили программу \(i\) несколько раз последовательно на этом CPU  — если мы исполняем программу \(i\), потому другую программу, потом программу \(i\), время исполнения программы во второй раз займет \(cold_i\) секунд.

Вам дана последовательность \(a_1, a_2, \ldots, a_n\) длины \(n\), состоящая из целых чисел от \(1\) до \(k\). Вам нужно исполнить на компьютере программы \(a_1, a_2, \ldots, a_n\) в этом порядке. Для всех \(2 \le i \le n\), вы не можете начать исполнять программу \(a_i\), пока программа \(a_{i - 1}\) не завершилась.

Найдите минимальное количество времени нужное, чтобы исполнить все программы \(a_1, a_2, \ldots, a_n\) в таком порядке.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Описания наборов входных данных следуют.

В первой строке описания каждого набора входных данных находится два целых числа \(n\), \(k\) (\(1 \le n, k \le 3 \cdot 10^5\)).

Во второй строке описания каждого набора входных данных находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le k\)).

В третьей строке каждого набора входных данных находится \(k\) целых чисел \(cold_1, cold_2, \ldots, cold_k\) (\(1 \le cold_i \le 10^9\)).

В четвертой строке каждого набора входных данных находится \(k\) целых чисел \(hot_1, hot_2, \ldots, hot_k\) (\(1 \le hot_i \le cold_i\)).

Гарантируется, что сумма \(n\) и сумма \(k\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное время, необходимое чтобы исполнить все программы в данном порядке.

Примечание

В первом наборе входных данных мы можем сделать следующее:

  • Исполнить программу \(a_1 = 1\) на CPU \(1\). Это займет \(cold_1 = 3\) секунды.
  • Исполнить программу \(a_2 = 2\) на CPU \(2\). Это займет \(cold_2 = 2\) секунды.
  • Исполнить программу \(a_3 = 2\) на CPU \(2\). Последняя программа, которая была исполнена на этом CPU была тоже программа \(2\), поэтому это займет \(hot_2 = 1\) секунду.

Суммарно нам потребуется \(3 + 2 + 1 = 6\) секунд, чтобы исполнить все программы. Можно показать, что это оптимальное время.

Во втором наборе входных данных мы можем сделать следующее:

  • Исполнить программу \(a_1 = 1\) на CPU \(1\). Это займет \(cold_1 = 5\) секунд.
  • Исполнить программу \(a_2 = 2\) на CPU \(2\). Это займет \(cold_2 = 3\) секунды.
  • Исполнить программу \(a_3 = 1\) на CPU \(1\). Последняя программа, которая была исполнена на этом CPU была тоже программа \(1\), поэтому это займет \(hot_1 = 2\) секунды.
  • Исполнить программу \(a_4 = 2\) on CPU \(2\). Последняя программа, которая была исполнена на этом CPU была тоже программа \(2\), поэтому это займет \(hot_2 = 1\) секунду.

Суммарно нам потребуется \(5 + 3 + 2 + 1 = 11\) секунд, чтобы исполнить все программы. Можно показать, что это оптимальное время.

C. Полоска

реализация Структуры данных *1200

Однажды Вася взял бумажную полоску из n клеток (высота полоски равна 1 клетке) и в каждой клетке написал целое число, возможно отрицательное. Ему стало интересно, сколько есть способов разрезать полоску на две части так, что сумма чисел в одной части равна сумме чисел в другой части, и в каждой части содержится целое положительное число клеток. Помогите Васе решить эту задачу.

Входные данные

В первой строке входных данных содержится целое число n (1 ≤ n ≤ 105) — количество клеток в полоске. Во второй строке содержится n чисел, разделенных пробелами — числа, записанные в клетках полоски. Эти числа целые и не превосходят по модулю 10000.

Выходные данные

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

C1. Усиление героев (простая версия)

жадные алгоритмы Структуры данных *1000

Это простая версия задачи. Она отличается от сложной только ограничениями на \(n\) и \(t\).

Есть колода из \(n\) карт, каждая из которых характеризуется своей силой. Бывают карты двух видов:

  • карта героя, сила такой карты всегда равна \(0\);
  • карта бонуса, сила такой карты всегда положительна.

Вы можете делать с колодой следующее:

  • взять карту сверху колоды;
  • если эта карта является картой бонуса, вы можете положить её на верх своей колоды с бонусами либо в сброс;
  • если эта карта является картой героя, то к его силе прибавляется сила верхней карты из вашей колоды с бонусами (если она не пуста), после этого герой добавляется к вашей армии, а использованный бонус уходит в сброс.

Ваша задача с помощью таких действий собрать армию с наибольшей суммарной силой.

Входные данные

Первая строка входных данных содержит единственное число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 5000\)) — количество карт в колоде.

Вторая строка каждого набора содержит \(n\) целых чисел \(s_1, s_2, \dots, s_n\) (\(0 \le s_i \le 10^9\)) — силы карт в порядке сверху вниз.

Гарантируется, что сумма всех значений \(n\) не превосходит \(5000\).

Выходные данные

Выведите \(t\) чисел, каждое из которых является ответом на соответствующий набор входных данных — максимальную возможную суммарную силу армии, которой можно добиться.

Примечание

В первом примере можно взять бонусы \(1\) и \(2\). Обе карты героев получат по \(3\) к силе. Если взять все бонусы, один из них останется неиспользованным.

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

В четвёртом примере можно взять бонусы \(1\), \(2\), \(3\), \(5\) и пропустить бонус \(6\), тогда герой \(4\) будет усилен бонусом \(3\) на \(5\), а герой \(7\) бонусом \(5\) на \(4\). \(4+5=9\).

C2. Усиление героев (сложная версия)

жадные алгоритмы Структуры данных *1100

Это сложная версия задачи. Она отличается от простой только ограничениями на \(n\) и \(t\).

Есть колода из \(n\) карт, каждая из которых характеризуется своей силой. Бывают карты двух видов:

  • карта героя, сила такой карты всегда равна \(0\);
  • карта бонуса, сила такой карты всегда положительна.

Вы можете делать с колодой следующее:

  • взять карту сверху колоды;
  • если эта карта является картой бонуса, вы можете положить её на верх своей колоды с бонусами либо в сброс;
  • если эта карта является картой героя, то к его силе прибавляется сила верхней карты из вашей колоды с бонусами (если она не пуста), после этого герой добавляется к вашей армии, а использованный бонус уходит в сброс.

Ваша задача с помощью таких действий собрать армию с наибольшей суммарной силой.

Входные данные

Первая строка входных данных содержит единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество карт в колоде.

Вторая строка каждого набора содержит \(n\) целых чисел \(s_1, s_2, \dots, s_n\) (\(0 \le s_i \le 10^9\)) — силы карт в порядке сверху вниз.

Гарантируется, что сумма всех значений \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) чисел, каждое из которых является ответом на соответствующий набор входных данных — максимальную возможную суммарную силу армии, которой можно добиться.

Примечание

В первом примере можно взять бонусы \(1\) и \(2\). Обе карты героев получат по \(3\) к силе. Если взять все бонусы, один из них останется неиспользованным.

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

В четвёртом примере можно взять бонусы \(1\), \(2\), \(3\), \(5\) и пропустить бонус \(6\), тогда герой \(4\) будет усилен бонусом \(3\) на \(5\), а герой \(7\) бонусом \(5\) на \(4\). \(4+5=9\).

D. Удали два символа

жадные алгоритмы Строки Структуры данных хэши *1200

У Дмитрия есть строка \(s\), состоящая из строчных латинских букв.

Дмитрий решил удалить два подряд идущих символа из строки \(s\) и вам интересно, какое количество различных строк может получиться после такой операции.

Например, у Дмитрия есть строка «aaabcc». Вы можете получить следующие различные строки: «abcc»(при удалении первых двух или второго и третьего символов), «aacc»(при удалении третьего и четвёртого символов),«aaac»(при удалении четвертого и пятого символов) и «aaab»(при удалении последних двух).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Далее следуют описания входных данных.

Первая строка описания каждого набора входных данных содержит целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)).

Вторая строка описания каждого набора входных данных содержит строку \(s\) длины \(n\), состоящую из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

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

Примечание

Первый пример разобран в условии.

В третьем примере получатся следующие строки: «cdef», «adef», «abef», «abcf», «abcd».

В седьмом примере при любом удалении получится строка «aba».

B. Покупка подарков

жадные алгоритмы сортировки Структуры данных *1800

У маленького Саши есть две подруги, которых он хочет порадовать подарками на Восьмое марта. Для этого он отправился в самый большой торговый центр в городе.

В торговом центре есть \(n\) отделов, в каждом из которых находятся ровно два магазина. Для удобства пронумеруем отделы целыми числами от \(1\) до \(n\). Известно, что подарки в первом магазине \(i\)-го отдела стоят \(a_i\) рублей, а во втором магазине \(i\)-го отдела — \(b_i\) рублей.

Войдя в торговый центр, Саша посетит каждый из \(n\) отделов торгового центра, причем в каждом отделе он зайдет ровно в один магазин. Когда Саша попадет в \(i\)-й отдел, он выполнит ровно одно из двух действий:

  1. Купить подарок первой подруге, потратив на это \(a_i\) рублей.
  2. Купить подарок второй подруге, потратив на это \(b_i\) рублей.

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

Более формально: пусть \(m_1\) — максимальная цена подарка, купленного первой подруге, а \(m_2\) — максимальная цена подарка, купленного второй подруге. Саша хочет выбрать подарки таким образом, чтобы минимизировать величину \(\lvert m_1 - m_2 \rvert\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 500\,000\)) — количество отделов в торговом центре.

Каждая из следующих \(n\) строк каждого набора входных данных содержит два целых числа \(a_i\) и \(b_i\) (\(0 \le a_i, b_i \le 10^9\)) — цены подарков в первом и втором магазине \(i\)-го отдела, соответственно.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(500\,000\).

Выходные данные

Выведите одно целое число — минимальную разность цен самых дорогих подарков, купленных подругам.

Примечание

В первом наборе входных данных у Саши есть два возможных варианта действий: купить подарок первой подруге в первом отделе, а второй подруге — во втором отделе, или наоборот. В первом случае \(m_1 = m_2 = 1\), а во втором случае — \(m_1 = m_2 = 2\). В обоих случаях ответ равен \(0\). Во втором наборе входных данных можно купить подарки для первой подруги в \(2\)-м, \(4\)-м и \(5\)-м отделах, а для второй подруги — в \(1\)-м и \(3\)-м отделах. Таким образом, \(m_1 = \max(2, 4, 2) = 4\), \(m_2 = \max(5, 3) = 5\). Ответ равен \(\lvert 4 - 5 \rvert = 1\).

C. Музыкальный фестиваль

Бинарный поиск дп жадные алгоритмы сортировки Структуры данных *1900

Мальчик Витя очень любит слушать музыку. Он пристально следит за обновлениями своих любимых групп, поэтому знает, что в эту пятницу должны быть выпущены \(n\) альбомов, \(i\)-й из которых содержит \(k_i\) треков. Разумеется, Витя, как самый преданный фанат, уже послушал все треки, которые должны выйти в ближайшее время, и знает, что в \(i\)-м альбоме крутость \(j\)-го трека равна \(a_{i,j}\).

У Вити есть подруга Маша, которую он очень хочет пригласить на фестиваль, где выступают его любимые группы. Однако для того, чтобы подруга согласилась, она должна сначала оценить вышедшие новинки. Витя знает, что, если Маша послушает трек, который был круче всех прошлых, она получит 1 единицу впечатления. К сожалению, альбомы можно слушать только целиком, не меняя песни в них местами.

Помогите Вите найти такой порядок альбомов, чтобы впечатление Маши оказалось как можно больше, и она точно сходила вместе с ним на фестиваль.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число t (\(1 \le t \le 200\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора дано единственное целое число \(n\) (\(1 \le n \le 200\,000\)) — количество альбомов.

Далее следуют описания альбомов. Каждое описание альбома состоит из двух строк:

В первой строке дано единственное целое число \(k_i\) (\(1 \le k_i \le 200\,000\)) — количество треков в \(i\)-м альбоме.

В следующей строке даны \(k_i\) целых чисел \(a_{i, 1},\ a_{i, 2},\ a_{i, 3},\ \ldots,\ a_{i, k_i}\) (\(1 \le a_{i,j} \le 200\,000\)) — крутость треков в \(i\)-м альбоме.

Обозначим за \(\sum k_i\) сумму по всем \(k_i\). Гарантируется, что \(\sum k_i \le 200\,000\).

Выходные данные

Для каждого тестового набора выведите единственное число — максимальное впечатление, которое может может получить Маша.

Примечание

В первом тестовом примере оптимальным порядком является прослушивание 4-го, 2-го, 3-го и 1-го альбомов. В таком случае Маша послушает треки в следующем порядке: 1; 7; 8, 6; 4, 9, 4, 6, 8 и получит 4 единицы впечатления. Во втором тестовом примере необходимо сначала прослушать 1-й, потом 4-й и в любом порядке 2-й и 3-й. В таком случае Маша получит максимальное впечатление, причём за каждую песню в 1-м и 4-м альбомах и ничего за 2-й и 3-й.

D. Путь домой

Бинарный поиск графы дп жадные алгоритмы кратчайшие пути сортировки Структуры данных *2100

Известный фокусник Боря Будини путешествовал по стране \(X\), которая состоит из \(n\) городов. Однако случилось несчастье, и его обокрали в городе номер \(1\). Теперь Будини предстоит нелегкий путь домой в город \(n\).

Добираться он собирается самолетами. Всего в стране есть \(m\) авиарейсов, \(i\)-й летит из города \(a_i\) в город \(b_i\) и стоит \(s_i\) монет. Обратите внимание, что \(i\)-й рейс односторонний, то есть не может использоваться, чтобы добраться из города \(b_i\) в город \(a_i\). Чтобы им воспользоваться, Боря должен быть в городе \(a_i\) и иметь на руках хотя бы \(s_i\) монет (которые он потратит на перелет).

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

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 80\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных содержит три целых числа \(n\), \(m\) и \(p\) (\(2 \le n \le 800\), \(1 \le m \le 3000\), \(0 \le p \le 10^9\)) — количество городов, количество авиарейсов и изначальное количество монет.

Во второй строке каждого набора входных даны \(n\) целых чисел \(w_1, w_2, \ldots, w_n\) \((1 \le w_i \le 10^9)\) — прибыль от представлений.

В следующих \(m\) строках даны по три целых числа \(a_i\), \(b_i\) и \(s_i\) (\(1 \le a_i, b_i \le n\), \(1 \le s_i \le 10^9\)) — начальный и конечный город, а также стоимость \(i\)-го авиарейса.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(800\), а также, что сумма \(m\) по всем наборам входных данных не превосходит \(10000\).

Выходные данные

Для каждого теста выведите единственное целое число — минимальное количество представлений, которое придется организовать Боре, чтобы добраться до дома, или \(-1\), если это сделать невозможно.

Примечание

В первом примере Боре оптимально сделать \(4\) представления в первом городе, имея в итоге \(2 + 7 \cdot 4 = 30\) рублей, а потом пройтись по маршруту \(1-3-2-4\), потратив \(6+8+11=25\) рублей.

Во втором примере Боре оптимально сделать \(15\) представлений в первом городе, полететь в \(3\) город, сделать там \(9\) представлений, и далее отправиться в \(4\) город.

E. Цены на бензин

Деревья разделяй и властвуй снм Структуры данных хэши *3000

Берляндия — это огромная страна, состоящая из \(n\) городов. Дорожную сеть Берляндии можно представить в виде корневого дерева, то есть всего в стране \(n - 1\) дорога, и от любого города можно добраться до любого другого ровно по одному пути, если не посещать никакой город дважды. Для удобства представления страны, для каждого города \(i\) зафиксирован город \(p_i\), равный первому городу, в который надо ехать из города \(i\), чтобы добраться до города \(1\). Иными словами, город \(p_i\) равен предку города \(i\), если дерево подвесить за город \(1\).

В каждом городе Берляндии работает по одной заправке. У заправок особое ценообразование, и для каждой заправки зафиксирован диапазон цен, за которые там готовы продавать бензин. Заправка в городе с номером \(i\) готова продавать бензин по любой цене от \(l_i\) до \(r_i\) включительно.

Король Берляндии — примерный семьянин, и в течение \(m\) лет каждый год у него рождалось по двое сыновей. Дети короля с раннего детства участвуют в государственных делах, и в конце каждого года они проверяют честность цен на бензин. С самого рождения дети короля, которые рождены в год \(i\), отвечают за проверку цен на бензин на путях от города \(a_i\) до города \(b_i\) и от города \(c_i\) до города \(d_i\) соответственно.

Проверка происходит следующим образом: оба ребенка одновременно начинают путь от городов \(a_i\) и \(c_i\) соответственно. Первый сын короля, рождённый в год \(i\), двигается по пути от города \(a_i\) до города \(b_i\), а второй — от города \(c_i\) до города \(d_i\). Дети проверяют, что цена на бензин в городе \(a_i\) совпадает с ценой на бензин в городе \(c_i\). Далее они проверяют, что цена на бензин во втором городе на пути от \(a_i\) до \(b_i\) совпадает с ценой во втором городе на пути от \(c_i\) до \(d_i\). Далее они повторяют то же самое для пары третьих городов на их путях и так далее. В конце они проверяют, что цена на бензин в городе \(b_i\) совпадает с ценой на бензин в городе \(d_i\). Гарантируется, что длина пути от города \(a_i\) до города \(b_i\) совпадает с длиной пути от города \(c_i\) до города \(d_i\).

Заправки должны строго подчиняться законам, а поэтому все проверки цен на бензин не должны выявлять нарушений. Помогите заправкам Берляндии выяснить, сколькими способами они могут выставлять цены на бензин в течение \(m\) лет. Другими словами, для каждого \(i\) от \(1\) до \(m\) посчитайте, сколькими способами можно выставить цены на бензин во всех заправках, чтобы после рождения первых \(i\) пар детей короля, все их проверки не выявили нарушений, а на любой заправке цена находилась в допустимом диапазоне цен. Так как число таких способов может быть большим, посчитайте ответ по модулю \(10^9 + 7\).

Входные данные

В первой строке дано единственное целое число \(n\) (\(1 \le n \le 200\,000\)) — число городов в Берляндии.

Во второй строке даны \((n - 1)\) чисел \(p_2,\ p_3,\ p_4,\ \ldots,\ p_n\) (\(1 \le p_i \le n\)), где \(p_i\) обозначает номер следующего города на пути из города \(i\) в город \(1\).

В каждой из следующих строк даны по два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i < 10^9+7\)), задающие допустимый диапазон цен на заправке номер \(i\).

В следующей строке дано единственное целое число \(m\) (\(1 \le m \le 200\,000\)) — количество лет, в течение которых у короля рождалось по два сына.

В каждой из следующих \(m\) строк даны по четыре целых числа \(a_i\), \(b_i\), \(c_i\) и \(d_i\) (\(1 \le a_i, b_i, c_i, d_i \le n\)), задающие два пути, на которых будут проверять цены на бензин дети короля, рождённые в год \(i\). Гарантируется, что длина пути между городами \(a_i\) и \(b_i\) равна длине пути между городами \(c_i\) и \(d_i\).

Выходные данные

В \(m\) строках выведите по одному числу. Число в \(i\)-й строке должно равняться числу способов выставить цены на бензин во всех городах, чтобы дети короля, рождённые в годы до \(i\)-го включительно не выявили нарушений в проверках. Числа выводите по модулю \(10^9 + 7\).

Примечание

Рассмотрим первый пример.

После рождения первых двух сыновей цены в городах \(1\) и \(2\) должны быть равны. Всего существует 2 способа выбрать одинаковую цену на бензин для городов \(1\) и \(2\), чтобы она входила в допустимый диапазон цен для этих городов. Значит, всего способов выставить цены на бензин: \(2 \cdot 3 \cdot 3 \cdot 1 = 18\).

Вторая пара сыновей будет проверять цены на путях \(1 - 2\) и \(2 - 1\). Значит, цены на бензин в городах \(1\) и \(2\) должны совпадать, что уже выполняется. Поэтому после рождения второй пары сыновей ответ никак не изменился.

Третья пара сыновей будет проверять цены на путях \(3 - 1 - 2 - 4\) и \(4 - 2 - 1 - 3\). Тогда цена не бензин в городе \(3\) должна быть равна цене в городе \(4\), и цена в городе \(1\) должна быть равна цене в городе \(2\). Цены в городах \(1\) и \(2\) уже одинаковые. Для городов \(3\) и \(4\) существует 2 способа выбрать одинаковую цену на бензин, чтобы она входила в допустимый диапазон цен для этих городов. Значит, всего способов выставить цены на бензин: \(2 \cdot 2 \cdot 1 = 4\). Четвертая пара сыновей будет проверять цены на путях \(3 - 1 - 2 - 4\) и \(3 - 1 - 2 - 5\). Это означает, что цены в городах \(4\) и \(5\) должны быть равны, и так как цены в городах \(3\) и \(4\) уже совпадают, то в городах \(3\), \(4\) и \(5\) должна быть одинаковая цена на бензин. Цена на бензин в городе \(3\) должна быть не больше 3, а цена на бензин в городе \(5\) должна быть не меньше 4. Значит, после рождения четвёртой пары сыновей не существует способов выставить цены на бензин так, чтобы все проверки выполнялись и цены находились в необходимых диапазонах.

G. Задачечка на подстрочечки

Строки строковые суфф. структуры Структуры данных *3400

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

Для этого он взял строку \(t\) и набор из \(n\) строк \(s_1\), \(s_2\), \(s_3\), ..., \(s_n\). У Филиппа есть \(m\) запросов, в \(i\)-м из них Филипп хочет взять подстроку строки \(t\) с \(l_i\)-го по \(r_i\)-й символ, и посчитать число её подстрок, которые совпадают с какой-то строкой из набора. Более формально, Филипп хочет посчитать число пар позиций \(a\), \(b\), таких что \(l_i \le a \le b \le r_i\), и подстрока строки \(t\) с \(a\)-го по \(b\)-й символ совпадает с некоторой строкой \(s_j\) из набора.

Подстрокой строки \(t\) с \(a\)-го по \(b\)-й символ называется строка, полученная из \(t\) путём удаления \(a - 1\) символа из начала и \(|t| - b\) символами из конца, где \(|t|\) обозначает длину строки \(t\).

Филипп уже решил эту задачу, а сможете ли вы?

Входные данные

В первой строке два целых положительных числа \(n\) и \(m\) (\(1 \le n, m \le 500\,000\)) — число строк в наборе и количество запросов.

Во второй строке дана единственная строка \(t\), состоящая из строчных букв английского алфавита (\(1 \le |t| \le 5 \cdot 10^6\)).

В следующих \(n\) строках описываются строки из набора. В \(i\)-й из них дана единственная строка \(s_i\), состоящая из строчных букв английского алфавита. Обозначим за \(S\) суммарную длину всех строк из набора. Гарантируется, что \(S \le 10^6\), а так же что все строки \(s_i\) различны.

В следующих строках вводятся запросы. В \(i\)-й из них даны два целых положительных числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le |t|\)) — левая и правая граница подстроки \(t\) из \(i\)-го запроса.

Выходные данные

В единственной строке выведите \(m\) целых чисел, \(i\)-е из них должно быть равно ответу на \(i\)-й запрос.

Примечание

В первом примере в первом запросе требуется у всей строки посчитать число подстрок, которые входят в набор. Со строкой «aba» совпадают подстроки \([1, 3]\) и \([4, 6]\). Со строкой «a» совпадают подстроки \([1, 1]\), \([3, 3]\), \([5, 5]\), \([7, 7]\). Со строкой «ac» совпадает подстрока \([3, 4]\). Всего получается, что 7 подстрок строки «abacaba» совпадают со строками из набора.

Во втором запросе от исходной строки берется подстрока с 1 по 3 позицию, это строка «aba». В неё строка «aba» входит 1 раз, строка «a» входит 2 раза и строка «ac» не входит ни одного раза как подстрока. В третьем запросе от исходной строки берется подстрока с 2 по 7 позицию, это строка «bacaba». В неё строка «aba» входит 1 раз, строка «a» входит 3 раза и строка «ac» входит 1 раз как подстрока.

G. Управление потоком

реализация снм Структуры данных *3500

У Раджа есть одна физическая сетевая линия, которая соединяет его офис с интернетом. Пропускная способность этой линии составляет \(b\) байт в миллисекунду.

Есть \(n\) пользователей, которые хотели бы использовать эту сетевую линию для передачи некоторых данных. \(i\)-й из них будет использовать линию начиная с миллисекунды \(s_i\) и до миллисекунды \(f_i\) включительно. Изначально он установит свою скорость передачи данных в значение \(d_i\). Это означает, что он будет использовать скорость передачи данных, равную \(d_i\), в течение миллисекунды \(s_i\), а затем она будет меняться в соответствии с процедурой, описанной ниже.

Контроль за соблюдением пропускной способности линии происходит следующим образом. Предположим, что есть \(m\) пользователей, пытающихся передать какие-то данные по заданной сетевой линии в течение миллисекунды \(x\). Обозначим за \(t_i\) скорость передачи данных у \(i\)-м из этих \(m\) пользователей в начале данной миллисекунды. Все \(t_i\) являются целыми неотрицательными значениями.

  • Если \(m = 0\), то есть в течение этой миллисекунды нет пользователей, пытающихся передать данные, ничего не происходит.
  • Если сумма всех \(t_i\) меньше или равна \(b\), то каждый активный пользователь успешно завершает свою передачу данных (\(i\)-й активный пользователь передаёт \(t_i\) байт). После этого скорость передачи данных каждого активного пользователя увеличивается на \(1\), то есть каждое \(t_i\) увеличивается на \(1\).
  • Если сумма всех \(t_i\) больше, чем \(b\), то возникает перегрузка линии и в эту миллисекунду вообще никому не удаётся передать данные. В таком случае каждое значение \(t_i\) уменьшается вдвое, то есть каждое \(t_i\) заменяется на \(\lfloor \frac{t_i}{2} \rfloor\).

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

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(b\) (\(1 \leq n \leq 2 \cdot 10^5\), \(1 \leq b \leq 10^9\)) — количество пользователей, которые будут использовать линию и пропускная способность линии соответственно.

Каждая из следующих \(n\) строк содержит три целых числа \(s_i\), \(f_i\) и \(d_i\) (\(1 \leq s_i \leq f_i \leq 10^9\), \(1 \leq d_i \leq 10^9\)), обозначающих что \(i\)-й пользователь будет пытаться передавать данные каждую миллисекунду между \(s_i\) и \(f_i\) включительно, и начальная скорость передачи данных \(i\)-го пользователя.

Выходные данные

Выведите одно целое число — общее количество байтов, которое все пользователи успешно передадут.

Примечание

Рассмотрим первый пример.

  • Миллисекунда \(1\): Пользователь \(1\) передает \(2\) байта.
  • Миллисекунда \(2\): Пользователь \(1\) передает \(3\) байта.
  • Миллисекунда \(3\): Возникает перегрузка, и никто не передает данные.
  • Миллисекунда \(4\): Пользователь \(1\) передает \(2\) байта.
  • Миллисекунда \(5\): Пользователь \(1\) передает \(3\) байта.

Во втором примере в каждую миллисекунду с \(7\)-й по \(11\)-ю включительно возникает перегрузка, и единственный пользователь уменьшает свою скорость вдвое. Однако он не успевает достаточно снизить скорость до отключения.

Рассмотрим третий пример.

  • Миллисекунда \(1\): Пользователь \(1\) передает \(1\) байт.
  • Миллисекунда \(2\): Пользователь \(1\) передает \(2\) байта.
  • Миллисекунда \(3\): Пользователь \(1\) передает \(3\) байта.
  • Миллисекунда \(4\): Пользователь \(1\) передает \(4\) байта.
  • Миллисекунда \(5\): Пользователь \(1\) передает \(5\) байтов.
  • Миллисекунда \(6\): Пользователь \(1\) передает \(6\) байтов.
  • Миллисекунда \(7\): Возникает перегрузка, и никто не передает данные.
  • Миллисекунда \(8\): Пользователь \(1\) передает \(3\) байта. Пользователь \(2\) передает \(3\) байта.
  • Миллисекунда \(9\): Возникает перегрузка, и никто не передает данные.
  • Миллисекунда \(10\): Пользователь \(1\) передает \(2\) байта. Пользователь \(2\) передает \(2\) байта.
  • Миллисекунда \(11\): Пользователь \(1\) передает \(3\) байта. Пользователь \(2\) передает \(3\) байта.
  • Миллисекунда \(12\): Возникает перегрузка, и никто не передает данные.
  • Миллисекунда \(13\): Пользователь \(2\) передает \(2\) байта.
  • Миллисекунда \(14\): Пользователь \(2\) передает \(3\) байта.
  • Миллисекунда \(15\): Пользователь \(2\) передает \(4\) байта.
  • Миллисекунда \(16\): Пользователь \(2\) передает \(5\) байтов.
  • Миллисекунда \(17\): Пользователь \(2\) передает \(6\) байтов.
  • Миллисекунда \(18\): Возникает перегрузка, и никто не передает данные.
  • Миллисекунда \(19\): Пользователь \(2\) передает \(3\) байта.
  • Миллисекунда \(20\): Пользователь \(2\) передает \(4\) байта.

C. Места для селфи

Бинарный поиск геометрия математика Структуры данных *1400

Вселенная представляет собой координатную плоскость. На ней проложено \(n\) космических трасс, каждая из которых представляет собой прямую \(y=kx\), проходящую через начало координат \((0, 0)\). Также там есть \(m\) астероидных поясов, которые представляют собой параболы ветвями вверх, их можно представить как графики функций \(y=ax^2+bx+c\), где \(a > 0\).

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке содержится одно число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора даны \(2\) целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^5\)) — количество прямых и парабол соответственно.

Далее в \(n\) строках содержится по одному целому числу \(k\) (\(|k| \le 10^8\)) — коэффициенты уравнений прямых \(y=kx\), описывающих прямые. Прямые могут совпадать, \(k\) может быть равно \(0\).

Далее в \(m\) строках содержится по \(3\) целых числа \(a\), \(b\) и \(c\) (\(a, |b|, |c| \le 10^8\), \(a > 0\)) — коэффициенты уравнений парабол \(ax^2+bx+c\). Параболы могут совпадать.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(10^5\) и сумма \(m\) по всем наборам также не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ для каждой параболы в данном порядке. Если в данном наборе есть прямая, не пересекающаяся с данной параболой и не касающаяся ее, выведите сначала в отдельной строке слово «YES», а далее в отдельной строке число \(k\) — коэффициент этой прямой. Если таких прямых несколько, выведите любую из них. Если же искомой прямой нет, выведите одно слово «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Пустые строки в выводе в примере даны только для наглядности, вам их выводить необязательно (но можно).

Примечание

В первом наборе входных данных обе параболы не пересекаются с единственной данной прямой \(y=1\cdot x\), поэтому ответом будет два числа \(1\).

Во втором наборе прямая \(y=x\) и парабола \(2x^2+5x+1\) пересекаются, а также прямая \(y=4x\) и парабола \(x^2+2x+1\) касаются, поэтому эти пары не удовлетворяют условию. Значит, для первой параболы ответом будет \(1\) (\(y=1x\)), а для второй параболы — \(4\).

В третьем тестовом наборе прямая и парабола пересекаются, поэтому ответ — «NO».

E. Максимумов должно быть много

Деревья дп Перебор поиск в глубину и подобное Структуры данных *2300

Дано дерево (связный граф без циклов). В каждой вершине дерева записано число. Назовём характеристикой \(\mathrm{MAD}\) (maximum double) дерева максимальное число, которое встречается в вершинах этого дерева хотя бы \(2\) раза. Если же никакое число не встречается в дереве больше одного раза, то положим \(\mathrm{MAD}=0\).

Заметим, что если удалить ребро из дерева, то оно распадётся на два дерева. Вычислим \(\mathrm{MAD}\) в каждом из деревьев и возьмем максимум из этих двух значений. Полученный результат назовем значением удаленного ребра.

Для каждого ребра найдите его значение. Обратите внимание, что мы в действительности не удаляем ребра из дерева, и каждое значение должно быть вычислено независимо.

Входные данные

В первой строке находится одно целое число \(n\) (\(2 \le n \le 10^5\)) — количество вершин в дереве.

Далее в \(n - 1\) строке находятся по два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\)) — концы рёбер дерева. Гарантируется, что данные ребра образуют дерево.

В последней строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — числа, записанные в вершинах.

Выходные данные

Для каждого ребра в порядке ввода выведите одно число — максимум из \(\mathrm{MAD}\) двух деревьев, получающихся после удаления из начального дерева данного ребра.

Примечание

В первом примере после удаления ребра \((1, 2)\) ни в одном из получившихся поддеревьев никакое число не будет повторяться \(2\) раза, поэтому ответ равен \(\max(0, 0)=0\).

После удаления ребра \((2, 3)\) в бо́льшем поддереве будет два раза повторяться \(1\) и два раза повторяться \(2\), поэтому \(\mathrm{MAD}\) этого дерева будет равен \(2\).

После удаления ребра \((2, 4)\) в бо́льшем поддереве будет повторяться только число \(1\), а во втором будет только одно число, поэтому ответом будет \(1\).

Во втором примере, если ребро \(1 \leftrightarrow 4\) не удалено, то в одном из поддеревьев будет две \(1\), поэтому ответ — \(1\). А если удалено ребро \(1 \leftrightarrow 4\), то в обоих поддеревьях нет повторяющихся значений, поэтому ответом будет \(0\).

E. Мастер деревьев

Деревья Перебор поиск в глубину и подобное Структуры данных *2200

Вам дано дерево с \(n\) взвешенными вершинами, пронумерованными от \(1\) до \(n\). Корнем дерева является \(1\). Родитель вершины \(i\) — вершина \(p_i\), а вес вершины \(i\) — число \(a_i\). Для удобства определим \(p_1=0\).

Для двух вершин \(x\) и \(y\) одинаковой глубины\(^\dagger\), определим \(f(x,y)\) следующим образом:

  • Инициализируем \(\mathrm{ans}=0\).
  • Пока \(x\) и \(y\) не \(0\):
    • \(\mathrm{ans}\leftarrow \mathrm{ans}+a_x\cdot a_y\);
    • \(x\leftarrow p_x\);
    • \(y\leftarrow p_y\).
  • \(f(x,y)\) равно значению \(\mathrm{ans}\).

Вам предстоит обработать \(q\) запросов. В \(i\)-м запросе вам даны два целых числа \(x_i\) и \(y_i\), и вам нужно вычислить \(f(x_i,y_i)\).

\(^\dagger\) Глубина вершины \(v\) — это количество ребер на единственном простом пути от корня дерева до вершины \(v\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2 \le n \le 10^5\); \(1 \le q \le 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^5\)).

Третья строка содержит \(n-1\) целое число \(p_2, \ldots, p_n\) (\(1 \le p_i < i\)).

Каждая из следующих \(q\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(1\le x_i,y_i\le n\)). Гарантируется, что \(x_i\) и \(y_i\) имеют одинаковую глубину.

Выходные данные

Выведите \(q\) строк, \(i\)-я строка содержит одно целое число — значение \(f(x_i,y_i)\).

Примечание

Рассмотрим первый пример.

В первом запросе ответ – \(a_4\cdot a_5+a_3\cdot a_3+a_2\cdot a_2+a_1\cdot a_1=3+4+25+1=33\).

Во втором запросе ответ – \(a_6\cdot a_6+a_2\cdot a_2+a_1\cdot a_1=1+25+1=27\).

D. Нечётные запросы

реализация Структуры данных *900

У вас есть массив \(a_1, a_2, \dots, a_n\). Ответьте на \(q\) таких запросов:

  • Если сделать каждый элемент подотрезка массива \(a_l, a_{l+1}, \dots, a_r\) равным \(k\), будет ли сумма всего массива нечетной?

Обратите внимание, что запросы независимы и не влияют на будущие запросы.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит \(2\) целых числа \(n\) и \(q\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le q \le 2 \cdot 10^5\)) — длина массива и количество запросов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 10^9\)) — массив \(a\).

Следующие \(q\) строк содержат по \(3\) целых числа \(l,r,k\) (\(1 \le l \le r \le n\); \(1 \le k \le 10^9\)) — запросы.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\) и сумма \(q\) не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите «YES», если сумма всего массива будет нечетной, и «NO» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Для первого набора входных данных:

  • Если элементы на подотрезке \((2, 3)\) сделать равными \(3\), то массив станет равняться \(\{2, 3, 3, 3, 2\}\), сумма будет равна \(2+3+3+3+2 = 13\), что нечетно, поэтому ответ будет «YES».
  • Если элементы на подотрезке \((2, 3)\) сделать равными \(4\), то массив станет равняться \(\{2, 4, 4, 3, 2\}\), сумма будет равна \(2+4+4+3+2 = 15\), что нечетно, поэтому ответ будет «YES».
  • Если элементы на подотрезке \((1, 5)\) сделать равными \(5\), то массив станет равняться \(\{5, 5, 5, 5, 5\}\), сумма будет равна \(5+5+5+5+5 = 25\), что нечетно, поэтому ответ будет «YES».
  • Если элементы на подотрезке \((1, 4)\) сделать равными \(9\), то массив станет равняться \(\{9, 9, 9, 9, 2\}\), сумма будет равна \(9+9+9+9+2 = 38\), что четно, поэтому ответ будет «NO».
  • Если элементы на подотрезке \((2, 4)\) сделать равными \(3\), то массив станет равняться \(\{2, 3, 3, 3, 2\}\), сумма будет равна \(2+3+3+3+2 = 13\), что нечетно, поэтому ответ будет «YES».

G1. Последовательное сложение (простая версия)

дп жадные алгоритмы Перебор реализация сортировки Структуры данных *1100

Единственное различие между двумя версиями в том, что в этой версии ограничения ниже.

Изначально массив \(a\) содержит только число \(1\). Вы можете выполнить несколько операций, чтобы изменить массив. За одну операцию можно выбрать некоторую подпоследовательность \(^{\dagger}\) из \(a\) и вставить на любую позицию в \(a\) элемент, равный сумме всех элементов подпоследовательности.

Вам дан массив \(c\). Проверьте, можно ли получить из массива \(a\) массив \(c\), выполнив некоторое количество (возможно, 0) операций над исходным массивом.

\(^{\dagger}\) Последовательность \(b\) является подпоследовательностью последовательности \(a\), если \(b\) может быть получена из \(a\) удалением нескольких (возможно, нуля, но не всех) элементов. Другими словами, операция выглядит так: выберем \(k\) (\(1 \leq k \leq |a|\)) различных индексов \(i_1, i_2, \dots, i_k\) и вставим в любое место \(a\) новый элемент со значением, равным \(a_{i_1} + a_{i_2} + \dots + a_{i_k}\).

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 5000\)) — длину массива \(c\).

Вторая строка каждого набора входных данных содержит \(n\) разделенных пробелами целых чисел \(c_i\) (\(1 \leq c_i \leq 5000\)) — массив \(c\), который вам нужно получить из массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5000\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если такая последовательность операций существует, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Для первого набора входных данных исходный массив \(a\) уже равен \([1]\), поэтому ответ «YES».

Для второго набора входных данных после выполнения любого количества операций длина массива \(a\) станет хотя бы два, а в начальном массиве элемента \(2\) нет, поэтому получить массив \([2]\) невозможно, и ответ будет «NO».

Для третьего набора входных данных мы можем выполнить следующие операции, чтобы получить массив \(c\):

  • Первоначально, \(a = [1]\).
  • Выбрав подпоследовательность \([1]\) и вставив \(1\) в массив, \(a\) станет равным \([1, 1]\).
  • Выбрав подпоследовательность \([1, 1]\) и вставив \(1+1=2\) в середину массива, \(a\) станет равным \([1, 2, 1]\).
  • Выбрав подпоследовательность \([1, 2]\) и вставив \(1+2=3\) после первой \(1\) массива, \(a\) станет равным \([1, 3, 2, 1]\).
  • Выбрав подпоследовательность \([1, 3, 1]\) и вставив \(1+3+1=5\) в начало массива, \(a\) станет равным \([5, 1, 3, 2, 1]\) (именно такой массив нам нужно было получить).

D. Петя, Petya, Petr и палиндромы

Бинарный поиск Перебор Структуры данных *2100

У мальчика Пети и его друга, робота Petya++, есть общий друг — киборг Petr#. Иногда Petr# заходит к ребятам на чай и рассказывает интересные задачи.

Сегодня Petr# рассказал следующую задачу.

Палиндромом называется последовательность, которая одинаково читается как слева направо, так и справа налево. Например, \([38, 12, 8, 12, 38]\), \([1]\) и \([3, 8, 8, 3]\) — палиндромы.

Назовем палиндромностью последовательности \(a_1, a_2, \dots, a_n\) минимальное количество чисел, которое необходимо заменить, чтобы эта последовательность стала палиндромом. Например, палиндромность последовательности \([38, 12, 8, 38, 38]\) равна \(1\), поскольку достаточно лишь заменить число \(38\) на четвертой позиции на число \(12\). А палиндромность последовательности \([3, 3, 5, 5, 5]\) равна двум, так как можно заменить тройки на первых двух позициях на пятерки, и полученная последовательность \([5, 5, 5, 5, 5]\) станет палиндромом.

Дана последовательность \(a\) длины \(n\). Также дано некоторое нечетное число \(k\). Необходимо найти суммарную палиндромность всех подмассивов длины \(k\), то есть сумму по значениям палиндромности последовательностей \(a_i, a_{i+1}, \dots, a_{i+k-1}\) для всех \(i\) от \(1\) до \(n-k+1\).

Ребята быстро справились с задачей Petr#. А Вы сможете?

Входные данные

В первой строке входных данных находится два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le k \le n\), \(k\) нечетное) — длина последовательности и длина подстрок, для которых надо вычислять палиндромность.

Во второй строке входных данных находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)) — сама последовательность.

Выходные данные

Выведите одно целое число — суммарную палиндромность всех подмассивов длины \(k\).

Примечание

В первом примере палиндромность подмассива \([1, 2, 8, 2, 5]\) равна \(1\), палиндромность подмассива \([2, 8, 2, 5, 2]\) также равна \(1\), палиндромность подмассива \([8, 2, 5, 2, 8]\) равна \(0\), а палиндромность подмассива \([2, 5, 2, 8, 6]\) равна \(2\). Итого суммарная палиндромность равна \(1+1+0+2 = 4\).

Во втором примере единственный подмассив длины \(9\) совпадает со всем массивом, а его палиндромность равна \(0\), поэтому ответ также равен \(0\).

F. Путешествие по Берляндии

Бинарный поиск графы жадные алгоритмы реализация Структуры данных *2500

В Берляндии \(n\) городов, расположенных по кругу и пронумерованных от \(1\) до \(n\) по часовой стрелке.

Мы хотим объехать всю Берляндию, начав в каком-то городе, посетив все остальные города и вернувшись в стартовый город. К сожалению, ехать мы можем только по Берляндской Кольцевой Автодороге, соединяющей все \(n\) городов. Проектировал дорогу очень титулованный и респектабельный министр, поэтому она односторонняя — по ней можно ехать только по часовой стрелке, то есть только из города \(i\) в город \((i \bmod n) + 1\) (т.е. из \(1\) в \(2\), из \(2\) в \(3\), ..., из \(n\) в \(1\)).

Бензобак машины вмещает до \(k\) литров бензина. На пути \(i\)-го города в следующий машина расходует \(a_i\) литров бензина.

В каждом городе есть заправка; литр бензина на заправке в \(i\)-м городе стоит \(b_i\) бурлей. Заправляться между городами нельзя; если бензин закончился между городами, то такая поездка считается незавершенной.

Для каждого города посчитайте минимальную стоимость путешествия, если оно должно начаться и закончиться в нем.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(3 \le n \le 2 \cdot 10^5\); \(1 \le k \le 10^9\)) — количество городов и объем бензобака, соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le k\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 2\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

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

E. Монстры

графы жадные алгоритмы Перебор поиск в глубину и подобное снм Структуры данных *2100

Вам дан неориентированный граф с \(n\) вершинами и \(m\) ребрами. Изначально для каждой вершины \(i\) существует монстр с опасностью \(a_{i}\) в этой вершине. Вы можете победить монстра с опасностью \(a_{i}\) тогда и только тогда, когда вы уже победили как минимум \(a_{i}\) других монстров.

Вы хотите победить всех монстров. Сначала вы выбираете некоторую вершину \(s\) и побеждаете монстра в этой вершине (поскольку вы еще не побеждали монстров, \(a_{s}\) должно быть равно \(0\)). Затем вы можете перемещаться в соседние вершины. Если вы хотите переместиться из вершины \(u\) в вершину \(v\), то должно выполняться следующее: либо монстр в вершине \(v\) уже побежден ранее, либо вы можете победить его сейчас. Во втором случае вы побеждаете монстра в вершине \(v\) и достигаете вершины \(v\). Вы можете проходить вершины и ребра любое количество раз.

Определите, сможете ли вы победить всех монстров или нет.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_{1}, a_{2}, \ldots, a_{n}\) (\(0 \le a_{i} \le n\)).

Следующие \(m\) строк содержат по два целых числа \(u\), \(v\) (\(1 \le u, v \le n\)), описывающих ребро между вершинами \(u\) и \(v\). Гарантируется, что в графе нет кратных ребер и петель.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого наборов входных данных выведите «YES», если вы можете победить всех монстров, и «NO» иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных мы можем начать с вершины \(3\), победить монстра в ней, затем перейти в вершины \(2\), \(1\) в этом порядке, победив монстров в них. Затем вернуться к вершине \(3\) и пойти к вершине \(4\), победив в ней монстра.

В третьем наборе входных данных нет пути к вершине \(4\), если мы начинаем с вершины \(1\). Также нет пути к вершинам \(1\), \(2\), \(3\), если мы начнем с вершины \(4\).

F. M-дерево

Деревья математика сортировки Структуры данных *2800

Корневое дерево называется хорошим, если каждая вершина дерева либо является листом (вершиной без детей), либо имеет ровно \(m\) детей.

Пусть на хорошем дереве на каждом листе \(u\) записано положительное целое число \(c_{u}\). Мы определяем значение листа как \(c_{u} + \mathrm{dep}_{u}\), где \(\mathrm{dep}_{u}\) — количество ребер на пути от вершины \(u\) до корня (также известное как глубина \(u\)). Ценность хорошего дерева — это максимальное значение всех его листьев.

Вам дан массив из \(n\) целых чисел \(a_{1}, a_{2}, \ldots, a_{n}\), которые должны быть записаны на листьях. Вам нужно построить хорошее дерево из \(n\) листьев и записать целые числа из массива \(a\) во все листья. Формально, вы должны выбрать для каждого листа \(u\) индекс \(b_{u}\), где \(b\) — перестановка длины \(n\), означающая, что целое число, записанное на листе \(u\), равно \(c_u = a_{b_{u}}\). При этих ограничениях вам необходимо минимизировать ценность хорошего дерева.

У вас есть \(q\) запросов. Каждый запрос задается парой целых чисел \(x\) и \(y\) и меняет \(a_{x}\) на \(y\), после чего вы должны вывести минимальное значение хорошего дерева для заданного массива \(a\).

Перестановкой длины \(n\) называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — это перестановка, но \([1,2,2]\) не является перестановкой (\(2\) встречается в массиве дважды), также как и \([1,3,4]\) не является перестановкой (\(n=3\), но в массиве есть элемент равный \(4\)).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит три целых числа \(n\), \(m\) и \(q\) (\(1\le n,q \le 2 \cdot 10^5\), \(2\le m \le 2\cdot 10^5\), \(n \equiv 1 \pmod {m - 1}\)) — количество листьев, константа \(m\) и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_{1},a_{2}, \ldots, a_{n}\) (\(1 \le a_{i} \le n\)) — исходный массив.

В следующих \(q\) строках описываются запросы изменения. Каждая строка содержит два целых числа \(x\) и \(y\) (\(1\le x,y\le n\)), представляющих запрос, изменяющий \(a_{x}\) на \(y\).

Гарантируется, что сумма \(n\) и сумма \(q\) не превосходят \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел, \(i\)-е из которых — минимальная ценность дерева после \(i\)-го изменения.

Примечание

В первом наборе входных данных после первого запроса текущий массив \(a\) равен \([4,3,4,4,5]\). Мы можем построить такое хорошее дерево:

Первое число внутри вершины — это ее номер (в этой задаче номер вершины не имеет значения, но помогает понять рисунок). Если вершина является листом, то второе число внутри вершины — это число, написанное на ней.

Заметим, что \(\mathrm{dep}_{3}=\mathrm{dep}_{4}=1,\mathrm{dep}_{5}=\mathrm{dep}_{6}=\mathrm{dep}_{7}=2\), и ценность дерева, которая является максимальным значением по всем листьям, равна \(5+1=6\). Значения листьев \(5\), \(6\) и \(7\) также равны \(6\). Можно показать, что это дерево имеет минимальную ценность среди всех допустимых деревьев.

G2. Влад и правильные пути (сложная версия)

Бинарный поиск дп Комбинаторика математика Структуры данных *2200

Это сложная версия задачи, она отличается от простой только ограничениями на \(n\) и \(k\).

Влад нашёл ряд из \(n\) плиток и число \(k\). Плитки пронумерованы слева направо и \(i\)-я плитка имеет цвет \(c_i\). Немного подумав, он решил, что с этим делать.

Вы можете начать с любой плитки и прыгать на любое количество плиток вправо, формируя при этом путь \(p\). Назовём путь \(p\) длины \(m\) правильным, если верно:

  • \(p\) разбивается на блоки длины ровно \(k\), то есть \(m\) делится на \(k\) без остатка;
  • \(c_{p_1} = c_{p_2} = \ldots = c_{p_k}\);
  • \(c_{p_{k+1}} = c_{p_{k+2}} = \ldots = c_{p_{2k}}\);
  • \(\ldots\)
  • \(c_{p_{m-k+1}} = c_{p_{m-k+2}} = \ldots = c_{p_{m}}\);

Ваша задача найти количество правильных путей максимальной длины. Так как это число может оказаться слишком большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Первая строка входных данных содержит единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 5000\)) — количество плиток в ряду и длину блока.

Вторая строка каждого набора содержит \(n\) целых чисел \(c_1, c_2, c_3, \dots, c_n\) (\(1 \le c_i \le n\)) — цвета плиток.

Гарантируется, что сумма \(n^2\) по всем наборам не превосходит \(25 \cdot 10^6\).

Выходные данные

Выведите \(t\) чисел, каждое из которых является ответом на соответствующий набор входных данных — количество правильных путей максимальной длины по модулю \(10^9 + 7\).

Примечание

В первом примере невозможно составить правильный путь, длины больше \(0\).

Во втором примере нас интересуют следующие пути:

  • \(1 \rightarrow 3 \rightarrow 4 \rightarrow 5\)
  • \(2 \rightarrow 4 \rightarrow 5 \rightarrow 7\)
  • \(1 \rightarrow 3 \rightarrow 5 \rightarrow 7\)
  • \(1 \rightarrow 3 \rightarrow 4 \rightarrow 7\)

В третьем примере подходит любой путь длины \(8\).

D. Балансировка пушек

Бинарный поиск математика Перебор Структуры данных *2500

Вы получили работу в игровой студии, которая разработала и поддерживает онлайн шутер, и ваша первая по-настоящему большая работа — это помочь в балансировке оружия. В игре есть \(n\) пушек: у \(i\)-й пушки есть целочисленная скорость стрельбы \(f_i\) и целочисленный урон от одного выстрела \(d_i\). Таким образом, общая огневая мощь \(i\)-й пушки равна \(p_i = f_i \cdot d_i\).

Для начала, вам дали задачу изменить значения \(d_i\) некоторых пушек таким образом, чтобы новые значения \(d_i\) оставались целыми и огневая мощь всего оружия оказалась сбалансирована. Вам дали число \(k\), и сказали, что оружие сбалансировано, если \(\max\limits_{1 \le i \le n}{p_i} - \min\limits_{1 \le i \le n}{p_i} \le k\).

Так как игроки не любят больших изменений, вам нужно изменить значения \(d_i\) у наименьшего возможного количества пушек. Чему равно наименьшее количество пушек, у которых вы должны изменить урон, чтобы сделать игру сбалансированной?

Заметьте, что новые значения \(d_i\) должны быть целыми и строго больше \(0\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(k\) (\(2 \le n \le 3000\); \(0 \le k \le 1500\)) — количество пушек в игре и максимально возможный разрыв между самой сильной и самой слабой пушкой.

Во второй строке заданы \(n\) целых чисел \(f_1, f_2, \dots, f_n\) (\(1 \le f_i \le 2000\)), где \(f_i\) равно скорости стрельбы \(i\)-й пушки.

В третьей строке заданы \(n\) целых чисел \(d_1, d_2, \dots, d_n\) (\(1 \le d_i \le 10^9\)), где \(d_i\) равно урону от одного выстрела \(i\)-й пушки.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(3000\).

Выходные данные

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

Заметим, что новые значения \(d_i\) должны быть целыми и больше \(0\).

Примечание

В первом наборе входных данных вы можете выставить \(d_1 = 2\) и \(d_2 = 4\). Вы получите массив \(d = [2, 4, 1, 2]\) и общую огневую мощь \(p = [12, 12, 13, 14]\). Пушки сбалансированы, так как \(14 - 12 \le 2\).

Во втором наборе вы должны изменить урон \(d_i\) всех трех пушек. Например, вы можете сделать \(d = [5151, 5100, 5050]\).

В третьем наборе все оружие уже сбалансировано, и вам не нужно ничего менять.

E. Фишки на цепочке

дп матрицы Структуры данных *2300

Дан неориентированный граф из \(n\) вершин и \(n-1\) ребер. Вес \(i\)-го ребра равен \(a_i\); это ребро соединяет вершины \(i\) и \(i+1\).

Изначально в каждой вершине расположена фишка. Число, написанное на фишке в \(i\)-й вершине, равно \(i\).

За одну операцию можно выбрать фишку (если в какой-то вершине находится несколько фишек, то можно выбрать любую, но только одну) и передвинуть ее по ребру. Стоимость такой операции равна весу ребра.

Стоимостью графа назовем минимальную стоимость такой последовательности операций, что:

  • после того, как все операции произведены, в каждой вершине ровно одна фишка, и число на каждой фишке не равно номеру вершины, в которой она находится.

Вы должны обработать \(q\) запросов:

  • \(k\) \(x\) — изменить вес \(k\)-го ребра (соединяющего вершины \(k\) и \(k+1\)) на \(x\).

После каждого запроса выведите стоимость графа. Обратите внимание, что на самом деле вы не перемещаете фишки, только считаете стоимость графа; при каждом подсчете фишки расположены в исходных позициях.

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Во второй строке заданы \(n-1\) чисел \(a_1, a_2, \dots, a_{n-1}\) (\(1 \le a_i \le 10^9\)).

В третьей строке задано одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)).

Затем следуют \(q\) строк. В \(i\)-й из них заданы два целых числа \(k\) и \(x\) (\(1 \le k \le n-1\); \(1 \le x \le 10^9\)) для \(i\)-го запроса.

Выходные данные

На каждый запрос выведите одно целое число — стоимость графа после выполнения запроса.

A. Почти возрастающая подпоследовательность

Бинарный поиск жадные алгоритмы Структуры данных *1500

Последовательность называется почти возрастающей, если она не содержит трех идущих подряд элементов \(x, y, z\) таких, что \(x\ge y\ge z\).

Вам дан массив \(a_1, a_2, \dots, a_n\) и \(q\) запросов.

Каждый запрос состоит из двух целых чисел \(1\le l\le r\le n\). Для каждого запроса найдите длину самой длинной почти возрастающей подпоследовательности подмассива \(a_l, a_{l+1}, \dots, a_r\).

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

Входные данные

Первая строка ввода содержит два целых числа \(n\) и \(q\) (\(1 \leq n, q \leq 200\,000\)) — длину массива \(a\) и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^9\))  — значения массива \(a\).

Каждая из следующих \(q\) строк содержит описание запроса. Каждая строка содержит два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq n\)) — запрос, относящийся к подмассиву \(a_l, a_{l+1}, \dots, a_r\).

Выходные данные

Для каждого из \(q\) запросов выведите строку, содержащую длину самой длинной почти возрастающей подпоследовательности подмассива \(a_l, a_{l+1}, \dots, a_r\).

Примечание

В первом запросе подмассив состоит из элементов \(a_1, a_2, a_3 = [1,2,4]\). Весь подмассив является почти возрастающим, поэтому ответ равен \(3\).

Во втором запросе подмассив состоит из элементов \(a_1, a_2, a_3,a_4 = [1,2,4,3]\). Весь подмассив является почти возрастающим, потому что нет трех подряд идущих элементов таких, что \(x \geq y \geq z\). Таким образом, ответ равен \(4\).

В третьем запросе подмассив состоит из элементов \(a_2, a_3, a_4, a_5 = [2, 4, 3, 3]\). Весь подмассив не является почти возрастающим, потому что последние три элемента удовлетворяют условию \(4 \geq 3 \geq 3\). Почти возрастающую подпоследовательность длиной \(3\) можно найти (например, взяв элементы \(a_2,a_3,a_5 = [2,4,3]\)). Таким образом, ответ равен \(3\).

D. Миша и яблоки

дп Перебор Структуры данных *2800

Школьник Миша устал заниматься спортивным программированием, и поэтому решил все бросить и уйти в магический лес торговать магическими яблоками.

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

Процесс покупки устроен следующим образом: всего есть \(n\) лавок, пронумерованных целыми числами от \(1\) до \(n\), и \(m\) видов магических яблок, пронумерованных целыми числами от \(1\) до \(m\). В каждой лавке продается какое-то множество видов яблок. Даня посещает все лавки в порядке возрастания номера, начиная с первой. Заходя в лавку он покупает по одному магическому яблоку каждого вида, который в этой лавке продается, и кладет их к себе в рюкзак.

Однако, магические яблоки не были бы магическими, если бы с ними было все в порядке. Дело в том, что когда два яблока одного типа оказываются вместе в рюкзаке, все яблоки в нем магическим образом исчезают. Важно, что исчезновение происходит уже после того, как Даня положил яблоки в рюкзак и покинул лавку.

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 2 \cdot 10^5\)) — количество лавок и видов яблок.

Каждая из следующих \(n\) строк описывает ассортимент очередного прилавка в формате, описанном ниже.

Каждая строка начинается с целого числа \(k_i\) (\(0 \le k_i \le 2 \cdot 10^5\)). За ней следуют \(k_i\) различных целых чисел \(a_{ij}\) (\(1 \le a_{ij} \le m\)) — виды яблок, продаваемых в \(i\)-й лавке. Если \(k_i = 0\), то Даня не помнит какой ассортимент был в этой лавке, и множество видов яблок может быть каким угодно (в том числе и пустым).

Гарантируется, по что сумма всех \(k_i\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\) и сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных Даня помнит про все лавки, поэтому процесс будет детерминированным. В первой лавке он возьмет два яблока, и еще два во второй, но после того как он положит их в рюкзак, они исчезнут. Поэтому в конце останется только \(2\) яблока, которые он возьмет в третьей лавке.

Во втором наборе входных данных, если в третьей лавке будет пусто, то после посещения четвертой лавки все яблоки исчезнут. В любом другом случае яблоки исчезнут после третьей лавки, и в четвертой Даня сможет взять одно яблоко, поэтому ответ \(1\).

В третьем наборе входных данных, в первой лавке могут продаваться все виды яблок, а во второй лавке может ничего не продаваться. Тогда в конце останутся все \(5\) яблок.

F. Тяп-ляп, кряк, в релиз!

дп Структуры данных *3500

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

В девизе компании указаны четыре главных принципа — a (Тяп), b (Ляп), c (Кряк), d (Релиз). Поэтому вы рассматриваете строки длины \(n\), состоящие из указанных четырех букв латинского алфавита. Неупорядоченные пары букв «ab», «bc», «cd» и «da» в этом девизе соседние, поэтому будем называть такие пары символов хорошими. Итак, если вам дана строка \(s\) длины \(n\), и известно, что неупорядоченная пара символов \(\{ x, y \}\) хорошая, то со строкой можно совершить одну из указанных операций:

  • если \(s_n = x\), то разрешается заменить этот символ на \(y\),
  • если существует такое \(1 \le i < n\), что \(s_i = x\) и \(s_{i+1} = \ldots = s_n = y\), то разрешается заменить \(i\)-й символ строки на \(y\), а все последующие — на \(x\).

Например, строку bacdd можно заменить на одну из строк bacda, bacdc или badcc, а строку aac можно заменить на aab или aad.

Непустую последовательность операций для строки \(s\) будем называть корректной, если выполняются следующие два условия:

  1. после совершения всех операций снова получится строка \(s\),
  2. никакая строка, кроме \(s\), в ходе совершения операций не возникнет более одного раза. При этом строка \(s\) должна возникнуть ровно два раза — перед началом выполнения операций и после выполнения всех операций.

Теперь мы готовы перейти к условию задачи! У вас есть множество строк, которое изначально пусто. Далее \(q\) раз в множество добавится очередная строка \(t_i\), либо строка \(t_i\) удаляется из множества. После каждого запроса требуется вывести минимальный и максимальный размер корректной последовательности операций, в ходе которой каждое слово возникает хотя бы один раз. Выбор начальной строки \(s\) остается за вами.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n \le 20\), \(1 \le q \le 100\,000\)) — длина рассматриваемых строк и количество запросов изменения множества строк.

Каждая из следующих \(q\) строк содержит строку \(t_i\) (\(\lvert t_i \rvert = n\)). Все строки состоят из символов «a», «b», «c» и «d». Если до этого запроса строка \(t_i\) не находилась в множестве, то она добавляется в него, а иначе она удаляется из множества.

Выходные данные

Для каждого из \(q\) запросов выведите два целых числа — минимальный и максимальный размер корректной последовательности операций, в ходе которой каждое слово из множества возникает хотя бы один раз.

Если не существует ни одной последовательности операций, удовлетворяющей условию задачи, выведите одно число \(-1\).

Примечание

Рассмотрим первый пример.

  • После первого запроса множество строк равно \(\{\)aa\(\}\), минимальная последовательность действий имеет следующий вид: aa, ab, aa. В качестве максимальной последовательности действий подходит aa, ab, ba, bb, bc, cb, cc, cd, dc, dd, da, ad, aa.
  • После второго запроса множество строк равно \(\{\)aa, ac\(\}\). Минимальная и максимальная последовательности действий: aa, ab, ac, ad, aa.
  • После третьего запроса множество строк равно \(\{\)aa, ac, dd\(\}\). Не существует последовательности действий, которая подходит под условие, поэтому следует вывести \(-1\).
  • После четвертого запроса множество строк равно \(\{\)aa, dd\(\}\). Минимальная и максимальная последовательности действий таковы: aa, ab, ba, bb, bc, cb, cc, cd, dc, dd, da, ad, aa.

C. Оптимальная сумма

жадные алгоритмы Структуры данных *2000

Перед Вами вновь задача на массивы. Вам задан массив a состоящий из n целых чисел a1, a2, ..., an, а также целое положительное число len. Введем две характеристики для заданного массива.

  • Рассмотрим произвольный отрезок массива длины len, начинающийся в позиции i. Величину , назовем модульной суммой на выбранном отрезке. Другими словами, модульная сумма — это сумма чисел на выбранном отрезке длины len, взятая по модулю.
  • Величину назовем оптимальной суммой массива. Другими словами, оптимальная сумма массива — это максимальная из модульных сумм на всевозможных отрезках массива длины len.

В задаче от Вас требуется посчитать оптимальную сумму заданного массива a. Однако, прежде чем производить вычисления, Вам разрешено произвести не более k последовательных операций с этим массивом следующего вида: за одну операцию разрешается взять произвольное число массива ai и умножить его на -1. Другими словами, не более k раз разрешается взять произвольное число массива ai и заменить его на  - ai. Каждое число массива разрешается выбирать произвольное количество раз.

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

Входные данные

В первой строке заданы два целых числа n, len (1 ≤ len ≤ n ≤ 105) — количество элементов в массиве и длина выбираемого подотрезка массива, соответственно.

Во второй строке задана последовательность из n целых чисел a1, a2, ..., an (|ai| ≤ 109) — исходный массив.

В третьей строке задано единственное целое число k (0 ≤ k ≤ n) — допустимое количество операций.

Все числа в строках разделены ровно одним пробелом.

Выходные данные

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

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

G1. Магические тройки (простая версия)

математика Перебор Структуры данных теория чисел *1700

Это простая версия задачи. Единственное отличие в том, что в этой версии \(a_i \le 10^6\).

Для данной последовательности целых чисел \(a\) длины \(n\), тройка \((i, j, k)\) называется магической, если

  • \(1 \le i, j, k \le n\).
  • \(i\), \(j\), \(k\) — попарно различны.
  • существует некоторое целое положительное число \(b\), такое что \(a_i \cdot b = a_j\), а \(a_j \cdot b = a_k\).

Коля получил в подарок последовательность целых чисел \(a\), и теперь хочет посчитать количество магических троек для нее. Помогите ему в этом!

Обратите внимание, что нет ограничений на порядок чисел \(i\), \(j\) и \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит единственное целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — длина последовательности.

Вторая строка содержит \(n\) чисел \(a_1, a_2, a_3, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — элементы последовательности \(a\).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество магических троек для последовательности \(a\).

Примечание

В первом примере существует \(6\) магических троек для последовательности \(a\) — \((2, 3, 5)\), \((2, 5, 3)\), \((3, 2, 5)\), \((3, 5, 2)\), \((5, 2, 3)\), \((5, 3, 2)\).

Во втором примере существует единственная магическая тройка для последовательности \(a\) — \((2, 1, 3)\).

G2. Магические тройки (сложная версия)

математика Перебор Структуры данных теория чисел *2200

Это сложная версия задачи. Единственное отличие в том, что в этой версии \(a_i \le 10^9\).

Для данной последовательности целых чисел \(a\) длины \(n\), тройка \((i, j, k)\) называется магической, если

  • \(1 \le i, j, k \le n\).
  • \(i\), \(j\), \(k\) — попарно различны.
  • существует некоторое целое положительное число \(b\), такое что \(a_i \cdot b = a_j\), а \(a_j \cdot b = a_k\).

Коля получил в подарок последовательность целых чисел \(a\), и теперь хочет посчитать количество магических троек для нее. Помогите ему в этом!

Обратите внимание, что нет ограничений на порядок чисел \(i\), \(j\) и \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит единственное целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — длина последовательности.

Вторая строка содержит \(n\) чисел \(a_1, a_2, a_3, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы последовательности \(a\).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество магических троек для последовательности \(a\).

Примечание

В первом примере существует \(6\) магических троек для последовательности \(a\) — \((2, 3, 5)\), \((2, 5, 3)\), \((3, 2, 5)\), \((3, 5, 2)\), \((5, 2, 3)\), \((5, 3, 2)\).

Во втором примере существует единственная магическая тройка для последовательности \(a\) — \((2, 1, 3)\).

C. LuoTianyi и XOR-дерево

Деревья дп жадные алгоритмы поиск в глубину и подобное снм Структуры данных *2500

LuoTianyi дала вам дерево со значениями в вершинах, корнем этого дерева является вершина \(1\).

За одну операцию вы можете изменить значение в любой вершине на любое неотрицательное целое число.

Вам нужно найти минимальное количество операций, которые нужно сделать, чтобы побитовое исключающее ИЛИ на любом пути от корня до листа\(^{\dagger}\) было равно нулю.

\(^{\dagger}\)Листом в корневом дереве называется вершина, которая имеет ровно одного соседа, и при этом не является корнем.

Входные данные

Первая строка содержит единственное целое число \(n\) (\(2 \le n \le 10^5\)) — количество вершин в дереве.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)), где \(i\)-е число равно значению в \(i\)-й вершине.

Следующие \(n−1\) строка описывают рёбра дерева. \(i\)-я строка содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i,v_i \le n, u_i \neq v_i\)) — вершины, соединённые ребром дерева. Гарантируется, что данные рёбра образуют дерево.

Выходные данные

Выведите единственное целое число — минимальное количество операций.

Примечание

Дерево из первого примера:

Если мы поменяем значение в вершине \(2\) на \(3\), значение в вершине \(5\) на \(4\), значение в вершине \(6\) на \(6\), то дерево станет подходящим.

Побитовое исключающее ИЛИ от корня до листа \(2\) будет равно \(3 \oplus 3=0\).

Побитовое исключающее ИЛИ от корня до листа \(5\) будет равно \(4 \oplus 7 \oplus 3=0\).

Побитовое исключающее ИЛИ от корня до листа \(6\) будет равно \(6 \oplus 5 \oplus 3=0\).

Дерево из второго примера:

Если мы поменяем значение в вершине \(2\) на \(4\), значение в вершине \(3\) на \(27\), значение в вершине \(6\) на \(20\), то дерево станет подходящим.

Побитовое исключающее ИЛИ от корня до листа \(6\) будет равно \(20 \oplus 19 \oplus 7=0\).

Побитовое исключающее ИЛИ от корня до листа \(8\) будет равно \(11 \oplus 27 \oplus 4 \oplus 19 \oplus 7=0\).

Побитовое исключающее ИЛИ от корня до листа \(4\) будет равно \(16 \oplus 4 \oplus 19 \oplus 7=0\).

Побитовое исключающее ИЛИ от корня до листа \(7\) будет равно \(16 \oplus 4 \oplus 19 \oplus 7=0\).

В третьем примере единственным листом является вершина \(4\), и побитовое исключающее ИЛИ на пути до неё равно \(1 \oplus 2 \oplus 1 \oplus 2 = 0\), поэтому нам не нужно изменять значения.

В четвёртом примере мы можем изменить значение в вершине \(1\) на \(5\), а значение в вершине \(4\) на \(0\).

Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

D. LuoTianyi и функция

Структуры данных *3000

LuoTianyi дала вам массив \(a\) из \(n\) целых чисел, нумерация начинается с \(1\).

Определим \(g(i,j)\) следующим образом:

  • \(g(i,j)\) равно наибольшему целому числу \(x\), которое удовлетворяет условию \(\{a_p:i\le p\le j\}\subseteq\{a_q:x\le q\le j\}\), при \(i \le j\);
  • \(g(i,j)=0\) при \(i>j\).

Есть \(q\) запросов. В каждом запросе вам даны четыре целых числа \(l,r,x,y\). Вам нужно посчитать \(\sum\limits_{i=l}^{r}\sum\limits_{j=x}^{y}g(i,j)\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1\le n,q\le 10^6\)) — длина массива \(a\) и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\le a_i\le n\)) — элементы массива \(a\).

Следующие \(q\) строк описывают запросы. \(i\)-я строка содержит четыре целых числа \(l,r,x,y\) (\(1\le l\le r\le n, 1\le x\le y\le n\)) — числа в \(i\)-м запросе.

Выходные данные

Выведите \(q\) строк, где \(i\)-я строка содержит одно целое число — ответ на \(i\)-й запрос.

Примечание

В первом примере:

Для первого запроса ответ равен \(g(1,4)+g(1,5)=3+3=6\).

\(x=1,2,3\) могут удовлетворять условию \(\{a_p:1\le p\le 4\}\subseteq\{a_q:x\le q\le 4\}\), \(3\) является наибольшим числом, поэтому \(g(1,4)=3\).

Для второго запроса ответ равен \(g(2,3)+g(3,3)=3+3=6\).

Для третьего запроса ответ равен \(0\), потому что все \(i > j\) и \(g(i,j)=0\).

Для четвёртого запроса ответ равен \(g(6,6)=6\).

Во втором примере:

Для второго запроса ответ равен \(g(2,3)=2\).

Для четвёртого запроса ответ равен \(g(1,4)+g(1,5)=2+2=4\).

E. LuoTianyi и Картридж

Деревья Структуры данных *3500

LuoTianyi смотрит аниме Made in Abyss. Она считает, что создание Картриджа является очень интересным занятием. Чтобы более четко описать процесс создания Картриджа, она абстрагируется от исходной задачи и даёт вам следующую.

Вам дано дерево \(T\), состоящее из \(n\) вершин. Каждая вершина имеет значения \(a_i\) и \(b_i\), а каждое ребро имеет значения \(c_j\) и \(d_j\).

Теперь вам нужно построить дерево \(T'\) следующим образом:

  • Сначала выберите \(p\) вершин из \(T\) (\(p\) — число, выбранное вами самостоятельно) в качестве множества вершин \(S'\) в \(T'\);
  • Затем последовательно выберите \(p-1\) ребро из \(T\) по одному (нельзя выбирать одно ребро более одного раза);
  • Пусть вы выбрали \(j\)-е ребро, и оно соединяет вершины \(x_j\) и \(y_j\) и имеет значения \((c_j,d_j)\). Тогда вы можете выбрать две вершины \(u\) и \(v\) в \(S'\), для которых ребро \((x_j,y_j)\) лежит на простом пути из \(u\) в \(v\) в \(T\), и соединить \(u\) и \(v\) в \(T'\) ребром со значениями \((c_j,d_j)\) (\(u\) и \(v\) не должны содержаться в одной компоненте связности ранее в \(T'\)).
Дерево с тремя вершинами, \(\min(A,C)=1,B+D=7\), стоимость равна \(7\).
Выбрали вершины \(2\) и \(3\) как \(S'\), использовали ребро \((1,2)\) с \(c_j = 2\) и \(d_j = 1\), чтобы соединить эти вершины, теперь \(\min(A,C)=2,B+D=4\), стоимость равна \(8\).

Пусть \(A\) — минимум из значений \(a_i\) в \(T'\), и \(C\) — минимум из значений \(c_i\) в \(T'\). Пусть \(B\) — сумма значений \(b_i\) в \(T'\), и \(D\) — сумма значений \(d_i\) в \(T'\). Определим \(\min(A, C) \cdot (B + D)\) как стоимость \(T'\). Вам нужно найти максимально возможную стоимость \(T'\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(3\le n \le 2\cdot 10^5\)) — количество вершин в дереве \(T\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1\le a_i\le 2\cdot 10^5\)), где \(i\)-е целое число обозначает значение \(a_i\) у \(i\)-й вершины.

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1\le b_i\le 2\cdot 10^5\)), где \(i\)-е целое число обозначает значение \(b_i\) у \(i\)-й вершины.

Далее следует \(n-1\) строка, \(j\)-я из которых содержит четыре целых числа \(x_j,y_j,c_j,d_j\) (\(1\le x_j,y_j\le n,1\le c_j,d_j\le 2\cdot 10^5\)), представляющих ребро \((x_j,y_j)\) и его значения \(c_j\) и \(d_j\) соответственно. Гарантируется, что рёбра образуют дерево.

Выходные данные

Выведите единственное целое число — максимальное возможную стоимость \(T'\).

Примечание

Дерево из первого примера изображено в условии.

Дерево из второго примера изображено ниже:

\(A = 1, B = 18, C = 1, D = 17\), поэтому стоимость равна \(\min(1,1) \cdot (18 + 17) = 35\).

E. Walk the Runway

битмаски графы дп Перебор реализация сортировки Структуры данных *2400

Тур состоит из \(m\) идентичных подиумных шоу в разных городах. Всего есть \(n\) моделей, которые хотят участвовать в туре, пронумерованных от \(1\) до \(n\). У людей в разных городах разные взгляды на индустрию моды, поэтому они оценивают моделей по-разному. В частности, люди в городе \(i\) оценивают модель \(j\) рейтингом \(r_{i, j}\).

Из желающих моделей вы выберете \(k\) моделей и некоторый их порядок, пусть эти модели в этом порядке имеют номера \(j_1, j_2, \dots, j_k\). В каждом городе на подиум выйдут эти \(k\) моделей в данном порядке. Чтобы сделать шоу захватывающим, в каждом городе рейтинги моделей должны строго возрастать в порядке их выхода на подиум. Более формально, для любого города \(i\) и индекса \(t\) (\(2 \leq t \leq k\)), рейтинги должны удовлетворять условию \(r_{i,j_{t - 1}} < r_{i,j_t}\).

В конце концов, индустрия моды сфокусирована на деньгах, поэтому выбрав модель \(j\) для участия в туре, вы получите \(p_j\) прибыли. Вычислите, какую максимальную прибыль вы можете получить при правильном выборе моделей и порядка их выступления, при условии соблюдения всех ограничений.

Входные данные

Первая строка содержит два целых числа \(m\) и \(n\) (\(1 \leq m \leq 500\), \(1 \leq n \leq 5000\)) — число шоу и число моделей, желающих участвовать, соответственно.

Вторая строка содержит \(n\) целых чисел \(p_j\) (\(1 \leq p_j \leq 10^9\)) — прибыль от приглашения \(j\)-й модели в тур.

В каждой из следующих \(m\) строк содержится \(n\) целых чисел. Строка под номером \(i\) содержит \(n\) целых чисел \(r_{i, j}\) (\(1 \leq r_{i, j} \leq n\)) — рейтинги моделей в городе \(i\).

Выходные данные

Выведите одно целое число — максимальную суммарную прибыль.

Примечание

В первом примере в тур приглашены \(3\) модели. Шоу состоит из моделей в следующем порядке \([1, 3, 4]\).

Соответственные рейтинги в городах:

  • Город \(1\)\([ 1, 3, 4 ]\).
  • Город \(2\)\([ 1, 2, 3 ]\).
  • Город \(3\)\([ 2, 4, 5 ]\).

Видно, что рейтинги моделей в каждом городе возрастают. Суммарная прибыль равна \(10 + 10 + 10 = 30\). Можно доказать, что невозможно достичь большей прибыли.

Во втором примере мы можем пригласить в тур пятую модель, откуда получаем общую прибыль \(50\). Можно доказать, что невозможно достичь большей прибыли.

В третьем примере мы приглашаем в тур единственную модель, откуда получаем прибыль \(1\,000\,000\,000\).

В четвертом примере мы можем пригласить всех моделей и шоу будет состоять из моделей в следующем порядке \([ 5, 4, 3, 2, 1 ]\). Тогда общая прибыль будет равна \(5 \cdot 1\,000\,000\,000 = 5\,000\,000\,000\).

B2. Сортировка подотрезков (сложная версия)

Бинарный поиск дп жадные алгоритмы Структуры данных *2400

Единственная разница между простой и сложной версиями состоит в ограничениях на \(t\) и \(n\).

Вам задан массив \(a\), состоящий из \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\).

Определим стоимость массива \(p_1, p_2, \ldots p_k\) как минимальное количество времени, необходимое для сортировки этого массива с использованием произвольного количества операций сортировки диапазона. В каждой операции сортировки диапазона вы будете делать следующее:

  • Выберите два целых числа \(l\) и \(r\) (\(1 \le l < r \le k\)).
  • Отсортируйте подмассив \(p_l, p_{l + 1}, \ldots, p_r\) за \(r - l\) секунд.

Пожалуйста, посчитайте сумму стоимостей по всем подмассивам массива \(a\).

Подмассив массива определяется как непрерывная последовательность элементов массива.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных состоит из \(n\) целых чисел \(a_1,a_2,\ldots, a_n\) (\(1\le a_i\le 10^9\)). Гарантируется, что все элементы \(a\) попарно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите сумму стоимостей по всем подмассивам массива \(a\).

Примечание

В первом наборе входных данных:

  • Подмассив \([6]\) уже отсортирован, поэтому его стоимость равна \(0\).
  • Подмассив \([4]\) уже отсортирован, поэтому его стоимость равна \(0\).
  • Подмассив \([6, 4]\) можно отсортировать за одну операцию, выбрав \(l = 1\) и \(r = 2\). Его стоимость равна \(1\).
Сумма стоимостей по всем подмассивам данного массива равна \(0 + 0 + 1 = 1\).

Во втором наборе входных данных:

  • Подмассив \([3]\) уже отсортирован, поэтому его стоимость равна \(0\).
  • Подмассив \([10]\) уже отсортирован, поэтому его стоимость равна \(0\).
  • Подмассив \([6]\) уже отсортирован, поэтому его стоимость равна \(0\).
  • Подмассив \([3, 10]\) уже отсортирован, поэтому его стоимость равна \(0\).
  • Подмассив \([10, 6]\) можно отсортировать за одну операцию, выбрав \(l = 1\) и \(r = 2\). Его стоимость равна \(2 - 1 = 1\).
  • Подмассив \([3, 10, 6]\) можно отсортировать за одну операцию, выбрав \(l = 2\) и \(r = 3\). Его стоимость равна \(3 - 2 = 1\).
Сумма стоимостей по всем подмассивам данного массива равна \(0 + 0 + 0 + 0 + 1 + 1 = 2\).

C. Разбиение на палиндромы

Бинарный поиск дп Перебор Строки Структуры данных хэши *2600

Подстрокой называется непрерывный и непустой подотрезок букв из данной строки, без изменения порядка.

Чётным палиндромом называется строка, которая читается одинаково как слева направо, так и справа налево, и имеет чётную длину. Например, строки «zz», «abba», «abccba» являются чётными палиндромами, а строки «codeforces», «reality», «aba», «c» не являются.

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

Дана строка \(s\), состоящая из \(n\) строчных латинских букв. Подсчитайте количество красивых подстрок в \(s\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Затем следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5\cdot 10^5\)).

Вторая строка каждого набора входных данных содержит строку \(s\). Строка \(s\) состоит только из строчных латинских букв и имеет длину \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество красивых подстрок.

Примечание

В первом наборе входных данных красивыми подстроками являются «abaaba», «baab», «aa».

В последнем наборе входных данных красивыми подстроками являются «aa» (подсчитано дважды), «abba», «bb», «bbaa», «abbaaa».

D. Два центроида

Деревья жадные алгоритмы поиск в глубину и подобное Структуры данных *2800

Вам задано дерево (неориентированный связный ациклический граф), изначально содержащее только вершину \(1\). Будет несколько запросов к данному дереву. В \(i\)-м запросе появится вершина \(i + 1\), соединенная с вершиной \(p_i\) (\(1 \le p_i \le i\)).

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

Вершина называется центроидом, если ее удаление разбивает дерево на поддеревья с не более чем \(\lfloor \frac{n}{2} \rfloor\) вершин в каждом, где \(n\) — число вершин дерева. Например, центроид следующего дерева равен \(3\), потому что самое большое поддерево после удаления центроида имеет \(2\) вершины.

В следующем дереве вершины \(1\) и \(2\) являются центроидами.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 5 \cdot 10^{5}\)) — количество вершин конечного дерева.

Вторая строка каждого набора входных данных содержит \(n - 1\) целое число \(p_1, p_2, \ldots, p_{n - 1}\) (\(1 \le p_i \le i\)) — индекс вершины, которая связана с вершиной \(i + 1\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^{5}\).

Выходные данные

Для каждого набора входных данных выведите \(n - 1\) целое число. \(i\)-е число является ответом на \(i\)-й запрос — наименьшее количество операций, необходимых для того, чтобы текущее дерево имело два центроида.

Мы можем показать, что ответ всегда существует.

Примечание

На картинках ниже показан четвертый набор входных данных.

После третьего запроса:

В дереве уже есть вершины \(2\) и \(3\) в качестве центроидов, поэтому никаких операций не требуется.

После четвертого запроса:

Добавление вершины \(x\) к дереву делает вершины \(2\) и \(3\) центроидами. Нужна только одна операция.

После пятого запроса:

Добавление к дереву вершин \(x\) и \(y\) делает вершины \(5\) и \(2\) центроидами. Нужны две операции.

После шестого запроса:

Добавление к дереву вершин \(x\), \(y\) и \(z\) делает вершины \(5\) и \(2\) центроидами. Необходимо три операции.

F. Последовательные перестановки

жадные алгоритмы Конструктив Структуры данных *3500

Вам дана перестановка \(a_1,a_2,\ldots,a_n\) первых \(n\) натуральных чисел. Подмассив \([l,r]\) называется последовательным, если его можно переупорядочить так, чтобы он стал последовательностью последовательных целых чисел, или, более формально, если \(\)\max(a_l,a_{l+1},\ldots,a_r)-\min(a_l,a_{l+1},\ldots,a_r)=r-l\(\) Для каждого \(k\) в диапазоне \([0,n]\) выведите максимальное количество последовательных подмассивов массива \(a\) среди всех способов перестановки последних \(n-k\) элементов массива \(a\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 2\cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)). Гарантируется, что заданные числа образуют перестановку длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n+1\) целое число в качестве ответов для каждого \(k\) в диапазоне \([0,n]\).

Примечание

В первом наборе входных данных перестановки ответов для каждого \(k\): \([1,2,3,4,5]\), \([5,4,3,2,1]\), \([5,2,3,4,1]\), \([5,2,1,3,4]\), \([5,2,1,4,3]\), \([5,2,1,4,3]\).

Во втором наборе входных данных перестановки ответов для каждого \(k\): \([1,2,3,4]\), \([2,1,3,4]\), \([2,1,3,4]\) , \([2,1,4,3]\), \([2,1,4,3]\).

G. Пирамида из банок

дп математика реализация Структуры данных *1600

На ярмарке есть огромная пирамида из консервных банок с \(2023\) рядами, пронумерованными в стандартном порядке, как показано на рисунке.

Если вначале попасть в банку с номером \(9^2\), то упадут все банки, покрашенные в красный цвет на рисунке выше.

Вы бросаете мяч в пирамиду, и он попадает в одну банку с номером \(n^2\). Это приводит к тому, что все банки, которые находятся над этой банкой, падают (то есть банка \(n^2\) падает, затем падают банки, непосредственно находящиеся над \(n^2\), затем банки, непосредственно находящиеся над этими банками, и так далее). Например, на рисунке выше показаны банки, которые упадут, если попасть в банку \(9^2\).

Какова сумма номеров всех банок, которые упадут? Напомним, что \(n^2 = n \times n\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^6\)) — это означает, что банка, в которую вы попали, имеет номер \(n^2\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — сумму номеров всех банок, которые упадут.

Примечание

Первый набор входных данных изображен в условии. Сумма номеров, которые упадут, равна \(\)1^2 + 2^2 + 3^2 + 5^2 + 6^2 + 9^2 = 1 + 4 + 9 + 25 + 36 + 81 = 156.\(\)

Во втором наборе входных данных упадет только банка с номером \(1^2\), поэтому ответ равен \(1^2=1\).

В третьем наборе входных данных упадут банки с номерами \(1^2\) и \(2^2\), поэтому ответ равен \(1^2+2^2=1+4=5\).

В четвертом наборе входных данных упадут банки с номерами \(1^2\) и \(3^2\), поэтому ответ равен \(1^2+3^2=1+9=10\).

В пятом наборе входных данных упадут банки с номерами \(1^2\), \(2^2\) и \(4^2\), поэтому ответ равен \(1^2+2^2+4^2=1+4+16=21\).

E. Сортировка по-хулигански

математика Структуры данных *3500

Для перестановки \(p\) длины \(n\) мы определяем хулиганский обмен следующим образом:

  • Пусть \(i\) — индекс наибольшего элемента \(p_i\) такого, что \(p_i \neq i\).
  • Пусть \(j\) — индекс самого маленького элемента \(p_j\), такого, что \(i < j\).
  • Поменяйте местами \(p_i\) и \(p_j\).

Мы определяем \(f(p)\) как количество хулиганских обменов, которые нужно выполнить, пока \(p\) не станет отсортированной. Обратите внимание, что если \(p\) является тождественной перестановкой, то \(f(p)=0\).

Вам даны \(n\) и перестановка \(p\) длины \(n\). Вам нужно обработать следующие \(q\) обновлений.

В каждом обновлении вам даются два целых числа \(x\) и \(y\). Нужно поменять местами \(p_x\) и \(p_y\) и затем найти значение \(f(p)\).

Обратите внимание, что обновления сохраняются. Изменения, внесенные в перестановку \(p\), будут применяться при обработке будущих обновлений.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(q\) (\(2 \le n \le 5 \cdot 10^5\), \(1 \le q \le 5 \cdot 10^4\)) — длину перестановки и количество обновлений.

Вторая строка содержит \(n\) целых \(p_1,p_2,\ldots,p_n\) (\(1 \leq p_i \leq n\)) — перестановку \(p\). Все элементы \(p\) различны.

В \(i\)-й из следующих \(q\) строк ввода содержатся два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i < y_i \le n\)), описывающие \(i\)-е обновление.

Выходные данные

После каждого обновления выведите \(f(p)\).

Примечание

После первого обновления мы имеем \(f(p)=5\). \(5\) хулиганских обменов изображены ниже:

  • \([\mathbf{1}, 2, \mathbf{8}, 5, 3, 4, 7, 6]\),
  • \([1, 2, \mathbf{3}, 5, \mathbf{8}, 4, 7, 6]\),
  • \([1, 2, 3, 5, \mathbf{4}, \mathbf{8}, 7, 6]\),
  • \([1, 2, 3, 5, 4, \mathbf{6}, 7, \mathbf{8}]\),
  • \([1, 2, 3, \mathbf{4}, \mathbf{5}, 6, 7, 8]\).

F. Третья благодать

дп Структуры данных *3200

Даны \(n\) отрезков и \(m\) точек на числовой прямой. \(i\)-й отрезок имеет границы \([l_i,r_i]\), а \(i\)-я точка находится на координате \(i\) и имеет коэффициент \(p_i\).

Изначально все точки неактивны. Вам нужно выбрать подмножество из \(m\) точек для активации. Для каждого из \(n\) интервалов мы определяем его стоимость как:

  • \(0\), если в интервале нет активированных точек;
  • коэффициент активированной точки с наибольшей координатой внутри интервала в противном случае.

Ваша задача — максимизировать сумму стоимостей всех интервалов, выбирая, какие точки активировать.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Затем следует описание наборов.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 10^6, 1 \le m \le 10^6\)) — количество интервалов и количество точек.

Следующие \(n\) строк каждого набора содержат два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le m\)) — концы \(i\)-го интервала.

Следующая строка каждого набора содержит \(m\) целых чисел \(p_1,p_2,\ldots,p_m\) (\(0 \le p_i \le 10^9\)) — коэффициенты точек.

Гарантируется, что сумма \(n\) не превышает \(10^6\), а сумма \(m\) не превышает \(10^6\).

Выходные данные

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

Примечание

В первом примере мы можем активировать точки \(1\) и \(8\). Сумма стоимостей всех интервалов будет \(78+30=108\).

Во втором примере мы не будем активировать ни одной точки. Сумма стоимостей всех интервалов будет \(0\).

F. Ира и фламенко

Комбинаторика Конструктив математика реализация сортировки Структуры данных *1700

Ира очень любит испанский танец фламенко. Она решила основать собственную танцевальную студию и нашла \(n\) учеников, \(i\)-й из которых имеет уровень \(a_i\).

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

  • в танце участвуют ровно \(m\) учеников;
  • уровни всех танцоров попарно различны;
  • уровни любых двух танцоров отличаются строго меньше чем на \(m\).

Например, если \(m = 3\) и \(a = [4, 2, 2, 3, 6]\), следующие танцы являются великолепными (красным цветом выделены ученики, участвующие в танце): \([\color{red}{4}, 2, \color{red}{2}, \color{red}{3}, 6]\), \([\color{red}{4}, \color{red}{2}, 2, \color{red}{3}, 6]\). В то же время танцы \([\color{red}{4}, 2, 2, \color{red}{3}, 6]\), \([4, \color{red}{2}, \color{red}{2}, \color{red}{3}, 6]\), \([\color{red}{4}, 2, 2, \color{red}{3}, \color{red}{6}]\) не являются великолепными.

В танце \([\color{red}{4}, 2, 2, \color{red}{3}, 6]\) участвуют \(2\) ученика, хотя \(m = 3\).

В танце \([4, \color{red}{2}, \color{red}{2}, \color{red}{3}, 6]\) участвуют ученики с уровнями \(2\) и \(2\), хотя уровни всех танцоров должны быть попарно различны.

В танце \([\color{red}{4}, 2, 2, \color{red}{3}, \color{red}{6}]\) участвуют ученики с уровнями \(3\) и \(6\), но \(|3 - 6| = 3\), хотя \(m = 3\).

Помогите Ире посчитать количество великолепных танцев, которые она может поставить. Так как это число может быть очень большим, посчитайте его по модулю \(10^9 + 7\). Два танца считаются различными, если различны наборы учеников, участвующих в них.

Входные данные

В первой строке дано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целые числа \(n\) и \(m\) (\(1 \le m \le n \le 2 \cdot 10^5\)) — количество учеников Иры и количество танцоров в великолепном танце.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — уровни учеников.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — количество великолепных танцев по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных Ира может поставить только такие великолепные танцы: \([\color{red}{8}, 10, 10, \color{red}{9}, \color{red}{6}, 11, \color{red}{7}]\), \([\color{red}{8}, \color{red}{10}, 10, \color{red}{9}, 6, 11, \color{red}{7}]\), \([\color{red}{8}, 10, \color{red}{10}, \color{red}{9}, 6, 11, \color{red}{7}]\), \([\color{red}{8}, 10, \color{red}{10}, \color{red}{9}, 6, \color{red}{11}, 7]\), \([\color{red}{8}, \color{red}{10}, 10, \color{red}{9}, 6, \color{red}{11}, 7]\).

Второй набор входных данных разобран в условии.

D. Опрос на уроке

жадные алгоритмы Перебор реализация сортировки Структуры данных *1900

На урок истории к Зинаиде Викторовне пришло \(n\) учеников. На дом было задано \(m\) тем, но у учеников было мало времени для подготовки, поэтому \(i\)-й ученик выучил только темы с \(l_i\) по \(r_i\) включительно.

В начале урока каждый ученик держит свою руку на уровне \(0\). Учительница хочет спросить какие-то темы. Происходит это так:

  • Учительница спрашивает тему \(k\).
  • Если ученик выучил тему \(k\), то он поднимает руку на \(1\), а иначе опускает на \(1\).
Каждую тему Зинаида Викторовна может спросить не более одного раза.

Определите, какая максимальная разность высот самой высокой и самой низкой руки может быть после опроса.

Обратите внимание, рука ученика может опускаться ниже \(0\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 10^5, 1 \le m \le 10^9\)) — количество учеников и количество тем соответственно.

В следующих \(n\) строках каждого набора содержится по два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le m\)), обозначающих границы отрезка тем, которые выучил \(i\)-й ученик.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных Зинаида Викторовна может спросить темы \(5, 6, 7, 8\). Тогда рука \(2\)-го ученика будет на высоте \(4\), а \(4\)-го — на высоте \(-2\), то есть разность будет равна \(6\).

Во втором наборе можно спросить темы \(1\) и \(3\). Тогда рука \(1\)-го ученика будет на высоте \(2\), а \(3\)-го ученика — на высоте \(-2\). Значит, разность будет равна \(4\).

В третьем наборе разница высот между самой высокой и низкой рукой будет \(0\) при любом наборе спрашиваемых тем.

В пятом наборе можно спросить все темы. Тогда разность высот рук \(1\)-го и \(3\)-го учеников будет равняться \(12\).

E. MEX НОК

Бинарный поиск математика реализация Структуры данных теория чисел *2300

Вам дан массив \(a\) длины \(n\). Назовем целое положительное число \(x\) хорошим, если нельзя найти такой подотрезок\(^{\dagger}\) массива, что наименьшее общее кратное всех элементов на нём равно \(x\).

Вам требуется найти наименьшее хорошее число.

Подотрезком \(^{\dagger}\) массива \(a\) называется набор элементов \(a_l, a_{l + 1}, \ldots, a_r\) для некоторых \(1 \le l \le r \le n\). Будем обозначать такой подотрезок \([l, r]\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное число \(n\) (\(1 \leq n \leq 3 \cdot 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots , a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных выведите единственное целое число — наименьшее хорошее число.

Примечание

В первом наборе входных данных, \(4\) — хорошее число, при этом оно является наименьшим, так как числа \(1,2,3\) встречаются в массиве, а значит, есть подотрезки массива длины \(1\) с наименьшими общими кратными \(1,2,3\). При этом нельзя найти подотрезок массива с наименьшим общим кратным равным \(4\).

Во втором наборе входных данных, \(7\) — хорошее число. При этом числа \(1,2,3,4,5\) встречаются в массиве явно, а число \(6\) является наименьшим общим кратных подотрезков \([2, 3]\) и \([1, 3]\).

В третьем наборе входных данных, \(1\) — хорошее число, так как наименьшие общие кратные для чисел на отрезках \([1, 1], [1, 2], [2, 2]\), соответственно, равны \(2,6,3\).

F. Разбор на двоих

Бинарный поиск жадные алгоритмы реализация Структуры данных *2400

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

В соревновании было \(n\) задач. Задачи пронумерованы от \(1\) до \(n\). Разбор \(i\)-й задачи занимает \(a_i\) минут. Монокарп и Поликарп планируют разобрать ровно \(k\) из них.

Разбор проходит следующим образом. Перед ними лежит весь проблемсет из \(n\) задач. Они убирают \(n - k\) из них, не изменяя порядок оставшихся \(k\) задач. Затем Монокарп забирает себе какой-то префикс из этих \(k\) задач (возможно, пустой или все задачи). Поликарп забирает себе оставшийся суффикс. После этого они идут в разные комнаты и проводят разборы для своих задач параллельно. Так что разбор занимает столько времени, сколько занимает более долгий из этих двух.

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

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 3 \cdot 10^5\)) — количество задач во всем проблемсете и количество задач, для которых Монокарп и Поликарп планируют провести разбор.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — время, которое занимает каждый разбор.

Сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

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

D. Прогулка по скобкам

жадные алгоритмы Строки Структуры данных *2100

Дана строка \(s\) длины \(n\), состоящая из символов '(' и ')'. Вы идете по этой строке. Вы начинаете с первого символа \(s\) и хотите сделать последовательность шагов так, чтобы закончить на \(n\)-м символе. За один шаг вы можете переместиться на один символ влево (если вы стоите не на первом символе) или на один символ вправо (если вы стоите не на последнем символе). Вы не можете оставаться на одном и том же месте, однако вы можете посетить любой символ, включая первый и последний, любое количество раз.

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

Правильная скобочная последовательность — это последовательность скобок, которая может быть преобразована в правильное арифметическое выражение путем добавления символов '1' и '+' между исходными символами последовательности. Например, последовательности скобок «()()», «(())» являются правильными ( итоговыми выражениями являются: «(1)+(1)», «((1+1)+1)»), а последовательности «)(» и «(» не являются правильными.

Один возможный корректный путь по \(s=\mathtt{(())()))}\). Красная точка указывает на ваше текущее положение, а красная строка — на записанную вами строку. Обратите внимание, что итоговая красная строка — это правильная скобочная последовательность.

Вам даны \(q\) запросов. Каждый запрос меняет значение символа с '(' на ')' или наоборот. После каждого изменения определите, является ли данная строка проходимой.

Запросы сохраняются, то есть эффект от каждого запроса распространяется на последующие запросы.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2\cdot 10^5\)) — размер строки и количество запросов, соответственно.

Вторая строка ввода содержит строку \(s\) длины \(n\), состоящую из символов '(' и ')' — начальная строка.

Каждая из следующих \(q\) строк содержит одно целое число \(i\) (\(1\le i \le n\)) — индекс символа, который нужно изменить в данном запросе.

Выходные данные

Для каждого запроса выведите «YES», если строка проходима после этого запроса, и «NO» в противном случае.

Вы можете выводить ответ в любом регистре (верхнем или нижнем). Например, строки «YEs», «Yes», «Yes» и «YES» будут распознаны как положительные ответы.

Примечание

В первом примере:

  • После первого запроса строка имеет вид (())()()(). Эта строка является правильной скобочной последовательностью, поэтому ее можно пройти, просто перемещаясь вправо.
  • После второго запроса строка имеет вид (())()))(). Если вы сдвинетесь один раз вправо, затем влево, затем пройдете вправо до конца строки, вы получите строку (((()(())())(), которая является правильной скобочной последовательностью.
  • После третьего запроса строка имеет вид ()))())())(). Мы можем показать, что эта строка не является проходимой.
Во втором примере, строки после запросов равны ()) и ()(, ни одна из которых не является проходимой.

D. Сортировка шаров

дп сортировки Структуры данных *2100

У вас есть \(n\) разноцветных шаров, расположенных в ряд. Шары покрашены в \(n\) различных цветов, пронумерованных от \(1\) до \(n\). Цвет \(i\)-го слева шара равен \(c_i\). Вы хотите переупорядочить шары так, чтобы \(i\)-й слева шар имел цвет \(i\). Для этого вы можете использовать \(k \ge 1\) одинаковых шаров цвета \(0\).

Из-за странных свойств шаров их можно переупорядочивать только используя следующие операции:

  1. Поместить шар цвета \(0\) на любую позицию в ряду (между любыми двумя соседними шарами, перед первым шаром или после последнего шара), не меняя порядок остальных шаров. Эту операцию можно использовать не более \(k\) раз, так как у вас есть всего \(k\) шаров цвета \(0\).
  2. Выбрать любой шар ненулевого цвета, такой, что хотя бы один из соседних с ним шаров имеет цвет \(0\), и переместить этот шар (ненулевого цвета) на любую позицию в ряду (между любыми двумя соседними шарами, перед первым шаром или после последнего шара), не меняя порядок остальных шаров. Эту операцию можно использовать сколько угодно раз, но за каждое её использование вы должны заплатить \(1\) монету.

Вы можете применять эти операции в любом порядке. После того, как вы закончите применять операции, все шары цвета \(0\) магическим образом исчезнут из ряда. После этого в ряду останутся только \(n\) шаров ненулевых цветов.

Какое наименьшее количество монет вам нужно потратить на операции второго типа, чтобы после исчезновения всех шаров нулевого цвета \(i\)-й слева шар имел цвет \(i\) для всех \(i\) от \(1\) до \(n\)? Можно показать, что при данных ограничениях это всегда можно сделать.

Решите задачу для всех \(k\) от \(1\) до \(n\).

Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

В первой строке задано одно целое число \(n\) (\(1 \le n \le 500\)) — количество шаров в ряду.

Во второй строке заданы \(n\) различных целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le n\)) — цвета шаров в ряду.

Гарантируется, что сумма \(n\) по всем тестам не превышает \(500\).

Выходные данные

Для каждого набора входных данных выведите \(n\) чисел: \(i\)-е (\(1 \le i \le n\)) из них должно быть равно наименьшему количеству монет, которого достаточно для требуемого переупорядочивания шаров при \(k = i\).

Примечание

В первом наборе входных данных есть \(n = 6\) шаров. Цвета шаров слева направо равны \([\, 2, 3, 1, 4, 6, 5 \,]\).

Пусть \(k = 1\). Один из способов переставить шары в требуемом порядке за \(3\) монеты:

\([\, 2, 3, 1, 4, 6, 5 \,]\) \(\xrightarrow{\, 1 \,}\) \([\, 2, 3, 1, 4, \color{red}{0}, 6, 5 \,]\) \(\xrightarrow{\, 2 \,}\) \([\, 2, 3, \color{blue}{4}, 1, 0, 6, 5 \,]\) \(\xrightarrow{\, 2 \,}\) \([\, \color{blue}{1}, 2, 3, 4, 0, 6, 5 \,]\) \(\xrightarrow{\, 2\,}\) \([\, 1, 2, 3, 4, 0, 5, \color{blue}{6} \,]\)

Число над стрелкой обозначает тип операции. Красным выделены шары, вставленные в операциях первого типа, синим — шары, передвинутые в операциях второго типа.

Можно показать, что для \(k = 1\) невозможно расставить шары в правильном порядке, потратив меньше \(3\) монет.

Пусть \(k = 2\). Один из способов переставить шары в требуемом порядке за \(2\) монеты:

\([\, 2, 3, 1, 4, 6, 5 \,]\) \(\xrightarrow{\, 1 \,}\) \([\, 2, 3, 1, 4, 6, \color{red}{0}, 5\,]\) \(\xrightarrow{\, 2 \,}\) \([\, 2, 3, 1, 4, 0, 5, \color{blue}{6}\,]\) \(\xrightarrow{\, 1 \,}\) \([\, 2, 3, \color{red}{0}, 1, 4, 0, 5, 6 \,]\) \(\xrightarrow{\, 2 \,}\) \([\, \color{blue}{1}, 2, 3, 0, 4, 0, 5, 6\,]\)

Эта последовательность операций является корректной и для \(k\), больших \(2\).

Можно показать, что для \(k\) от \(2\) до \(6\) невозможно расставить шары в правильном порядке, потратив меньше \(2\) монет.

Во втором запросе шары уже стоят в правильном порядке, поэтому ответы для всех \(k\) равны \(0\).

E. Блокировка символов

реализация Структуры данных хэши *1600

Дано две строки равной длины \(s_1\) и \(s_2\), состоящие из строчных букв латинского алфавита, и натуральное число \(t\).

Вам необходимо ответить на \(q\) запросов, пронумерованных от \(1\) до \(q\). \(i\)-й запрос приходит в \(i\)-ю секунду времени. Каждый запрос одного из трёх типов:

  • заблокировать символы на позиции \(pos\) (индексация с \(1\)) в обеих строках на \(t\) секунд;
  • поменять местами два не заблокированных символа;
  • сказать, равны ли на момент запроса две строки без учёта заблокированных символов.

Заметьте, в запросах второго типа местами могут менять как символы, принадлежащие одной строке, так и символ из \(s_1\) с символом из \(s_2\).

Входные данные

В первой строке входных данных содержится одно целое число \(T\) (\(1 \le T \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов.

В первой строке набора содержится строка \(s_1\), состоящая из строчных букв латинского алфавита (длины не более \(2 \cdot 10^5\)).

Во второй строке набора содержится строка \(s_2\), состоящая из строчных букв латинского алфавита (длины не более \(2 \cdot 10^5\)).

Строки имеют равную длину.

В третьей строке набора содержатся два натуральных числа \(t\) и \(q\) (\(1 \le t, q \le 2 \cdot 10^5\)). Число \(t\) означает количество секунд, на которые блокируется символ. Число \(q\) соответствует количеству запросов.

В каждой из следующих \(q\) строк набора содержатся сами запросы — по одному в строке. Каждый запрос одного из трёх типов:

  • «\(1\ \ \ pos\)» — заблокировать символы на позиции \(pos\) в обеих строках на \(t\) секунд;
  • «\(2\ \ \ 1/\;\!2\ \ \ pos_1\ \ \ 1/\;\!2\ \ \ pos_2\)» — поменять местами два не заблокированных символа. Второе число в запросе указывает номер строки, из которой берётся первый символ для обмена. Третье число в запросе указывает позицию в строке этого символа. Четвёртое число в запросе указывает номер строки, из которой берётся второй символ для обмена. Пятое число в запросе указывает позицию в строке этого символа;
  • «\(3\)» — запрос равенства двух строк без учёта заблокированных символов.

Для запросов первого типа гарантируется, что на момент запроса символы на позиции \(pos\) не заблокированы.

Для запросов второго типа гарантируется, что меняющиеся местами символы не заблокированы.

Все значения \(pos, pos_1, pos_2\) лежат в диапазоне от \(1\) до длин строк.

Сумма значений \(q\) по всем наборам входных данных, а также суммарная длина строк \(s_1\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса третьего типа выведите «YES», если на момент запроса строки \(s_1\) и \(s_2\) равны без учёта заблокированных символов, «NO» — иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Давайте посмотрим на строки \(s_1\) и \(s_2\) после каждого из \(q\) запросов. Будем обозначать красным цветом заблокированные символы.

Первый пример входных данных:

(\(codeforces\), \(codeblocks\)) \(\rightarrow\) (\(codeforces\), \(codeblocks\)) \(\rightarrow\) (\(code\color{red}{f}orces\), \(code\color{red}{b}locks\)) \(\rightarrow\) (\(code\color{red}{fo}rces\), \(code\color{red}{bl}ocks\)) \(\rightarrow\) (\(code\color{red}{for}ces\), \(code\color{red}{blo}cks\)) \(\rightarrow\) (\(code\color{red}{for}c\color{red}{e}s\), \(code\color{red}{blo}c\color{red}{k}s\)) \(\rightarrow\) (\(code\color{red}{for}c\color{red}{e}s\), \(code\color{red}{blo}c\color{red}{k}s\)) \(\rightarrow\) (\(codef\color{red}{or}c\color{red}{e}s\), \(codeb\color{red}{lo}c\color{red}{k}s\))

Второй пример входных данных:

(\(cool\), \(club\)) \(\rightarrow\) (\(cuol\), \(clob\)) \(\rightarrow\) (\(cuol\), \(cbol\)) \(\rightarrow\) (\(c\color{red}{u}ol\), \(c\color{red}{b}ol\)) \(\rightarrow\) (\(c\color{red}{u}ol\), \(c\color{red}{b}ol\)) \(\rightarrow\) (\(cuol\), \(cbol\))

D. Пары отрезков

жадные алгоритмы сортировки Структуры данных *2000

Два отрезка \([l_1, r_1]\) и \([l_2, r_2]\) пересекаются, если существует хотя бы одно число \(x\), такое, что \(l_1 \le x \le r_1\) и \(l_2 \le x \le r_2\).

Массив отрезков \([[l_1, r_1], [l_2, r_2], \dots, [l_k, r_k]]\) называется красивым, если \(k\) четно, и его можно разбить на \(\frac{k}{2}\) пар таким образом, что:

  • каждый элемент массива принадлежит ровно одной паре;
  • отрезки в каждой паре пересекаются между собой;
  • отрезки из разных пар не пересекаются.

Например, массив \([[2, 4], [9, 12], [2, 4], [7, 7], [10, 13], [6, 8]]\) является красивым, так как его можно разбить на \(3\) пары следующим образом:

  • первый элемент массива (отрезок \([2, 4]\)) и третий элемент массива (отрезок \([2, 4]\));
  • второй элемент массива (отрезок \([9, 12]\)) и пятый элемент массива (отрезок \([10, 13]\));
  • четвертый элемент массива (отрезок \([7, 7]\)) и шестой элемент массива (отрезок \([6, 8]\)).

Как видно, отрезки в каждой паре пересекаются, а отрезки из разных пар не пересекаются.

Дан массив из \(n\) отрезков \([[l_1, r_1], [l_2, r_2], \dots, [l_n, r_n]]\). Вам нужно удалить минимально возможное количество элементов из этого массива, чтобы получившийся массив был красивым.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2000\)) — количество отрезков в массиве. Затем следуют \(n\) строк, \(i\)-я из которых содержит два целых числа \(l_i\) и \(r_i\) (\(0 \le l_i \le r_i \le 10^9\)), обозначающих \(i\)-й отрезок.

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(2000\).

Выходные данные

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

Примечание

В первом наборе входных данных достаточно удалить \(5\)-й элемент массива отрезков. Тогда получится массив \([[2, 4], [9, 12], [2, 4], [7, 7], [10, 13], [6, 8]]\), который является красивым.

Во втором наборе входных данных можно удалить \(1\)-й, \(3\)-й и \(4\)-й элементы массива. Тогда получится массив \([[2, 8], [5, 6]]\), который является красивым.

В третьем наборе входных данных необходимо удалить весь массив.

E. Заполни матрицу

жадные алгоритмы математика Структуры данных *2200

Дана квадратная матрица, состоящая из \(n\) строк и \(n\) столбцов ячеек, оба пронумерованы от \(1\) до \(n\). Ячейки раскрашены в белый или черный цвет. Ячейки с \(1\) до \(a_i\) черные, а ячейки с \(a_i+1\) до \(n\) белые, в \(i\)-м столбце.

Вы хотите разместить \(m\) целых чисел в матрице, от \(1\) до \(m\). Есть два правила:

  • в каждой клетке должно быть не больше одного числа;
  • в черных клетках не должно быть чисел.

Красота матрицы — это количество таких \(j\), что \(j+1\) написано в той же строке, в следующем столбце от \(j\) (в соседней справа ячейке).

Чему равна максимальная красота матрицы?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер матрицы.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le n\)) — количество черных клеток в каждом столбце.

В третьей строке записано одно целое число \(m\) (\(0 \le m \le \sum \limits_{i=1}^n n - a_i\)) — количество чисел, которые требуется разместить в матрице. Обратите внимание, что это число может не поместиться в 32-битный целый тип данных.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — максимальную красоту матрицы после того, как вы разместите в ней все \(m\) целых чисел. Обратите внимание, что дается не больше чисел, чем белых клеток в матрице, так что ответ всегда существует.

E. Тенцинг и треугольник

геометрия дп жадные алгоритмы математика Структуры данных *2300

На двумерной плоскости имеется \(n\) попарно различных точек и прямая \(x+y=k\). Точка \(i\) находится в точке \((x_i,y_i)\). Все точки имеют неотрицательные координаты и находятся строго под прямой. Другими словами, \(0 \leq x_i,y_i, x_i+y_i < k\).

Тенцинг хочет стереть все точки. Он может выполнить следующие две операции:

  1. Нарисовать треугольник: Тенцинг выберет два неотрицательных целых числа \(a\), \(b\), которые удовлетворяют условию \(a+b<k\), тогда все точки внутри треугольника, образованного прямыми \(x=a\), \(y=b\) и \(x+y=k\) будут стерты. Можно показать, что этот треугольник является равнобедренным прямоугольным треугольником. Пусть длины сторон треугольника равны \(l\), \(l\) и \(\sqrt 2 l\) соответственно. Тогда стоимость этой операции равна \(l \cdot A\).

    Синяя область следующего рисунка описывает треугольник с \(a=1,b=1\) со стоимостью \(=1\cdot A\).

  2. Стереть определенную точку: Тенцинг выбирает целое число \(i\), которое удовлетворяет условию \(1 \leq i \leq n\) и стирает точку \(i\). Стоимость этой операции равна \(c_i\).

Помогите Тенцингу найти минимальную стоимость стирания всех точек.

Входные данные

Первая строка содержит три целых числа \(n\), \(k\) и \(A\) (\(1\leq n,k\leq 2\cdot 10^5\), \(1\leq A\leq 10^4\)) — количество точек, коэффициент, описывающий гипотенузу треугольника и коэффициент, описывающий стоимость построения треугольника.

В следующих \(n\) строках входных данных \(i\)-я строка содержит три целых числа \(x_i,y_i,c_i\) (\(0\leq x_i,y_i,x_i+y_i< k\), \(1\leq c_i\leq 10^4\)) — координаты \(i\)-й точки и стоимость ее стирания с помощью второй операции. Гарантируется, что координаты попарно различны.

Выходные данные

Выведите одно целое число –минимальную стоимость стирания всех точек.

Примечание

Рисунок первого примера:

Тенцинг выполняет следующие операции:

  1. построить треугольник с \(a=3,b=2\), стоимость \(=1\cdot A=1\).
  2. стереть первую точку, стоимость \(=1\).
  3. стереть вторую точку, стоимость \(=1\).
  4. стереть третью точку, стоимость \(=1\).

Рисунок для второго примера:

E. Слежка за отрезками

Бинарный поиск Перебор Структуры данных *1600

У вас есть массив \(a\), состоящий из \(n\) нулей. Также, вам дан набор из \(m\) необязательно различных отрезков. Каждый отрезок задается двумя числами \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) и представляет собой подмассив \(a_{l_i}, a_{l_i+1}, \dots, a_{r_i}\) массива \(a\).

Назовём отрезок \(l_i, r_i\) красивым, если количество единиц на этом отрезке строго больше, чем количество нулей. Например, если \(a = [1, 0, 1, 0, 1]\), тогда отрезок \([1, 5]\) является красивым (количество единиц равно \(3\), количество нулей равно \(2\)), но отрезок \([3, 4]\) не является красивым (количество единиц равно \(1\), количество нулей равно \(1\)).

У вас также есть \(q\) изменений. Каждое изменение задано числом \(1 \le x \le n\), это означает, что вы должны присвоить элементу \(a_x\) значение \(1\).

Вы должны найти первое изменение, после которого хотя бы один из \(m\) заданных отрезков становится красивым, или сообщить, что ни один из них не является красивым после применения всех \(q\) изменений.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le m \le n \le 10^5\)) — размер массива \(a\) и количество отрезков соответственно.

Далее следует \(m\) строк, состоящих из двух чисел \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — границы отрезков.

В следующей строке дано целое число \(q\) (\(1 \le q \le n\)) — количество измений.

В следующих \(q\) строках содержится по одному целому числу \(x\) (\(1 \le x \le n\)) — индекс элемента массива, который нужно приравнять к \(1\). Гарантируется, что все индексы в запросах различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — наименьший номер изменения, после которого хотя бы один из отрезков окажется красивым, или \(-1\), если ни один отрезок не станет красивым.

Примечание

В первом примере, после первых двух изменений не будет красивых отрезков, а после третьего изменения на отрезке \([1; 5]\) будет 3 единицы и 2 нуля, получается ответ 3.

Во втором примере у нас не будет красивых отрезков.

F1. Метрополитен в Омске (простая версия)

графы Деревья дп жадные алгоритмы математика поиск в глубину и подобное Структуры данных *1800

Это простая версия задачи. Единственное отличие между простой и сложной версией состоит в том, что в этой версии для всех вопросов \(u = 1\).

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

Для развития метрополитена и привлечения жителей в Омске используется следующая система. Каждая станция имеет свой вес \(x \in \{-1, 1\}\). Если станция имеет вес \(-1\), то при посещении станции с жителя Омска взимается плата в \(1\) бурль. Если же вес станции равен \(1\), то житель Омска вознаграждается \(1\)-м бурлем.

Пока что есть только одна станция с номером \(1\) и весом \(x = 1\). Каждый день происходит одно из следующих событий:

  • К станции с номером \(v_i\) присоединяется новая станция с весом \(x\), и ей присваивается номер, на единицу больший количества уже существующих станций.
  • Лёша, живущий в Омске, задаётся вопросом: существует ли подотрезок\(\dagger\) (возможно, пустой) пути между вершинами \(u\) и \(v\) такой, что, проехав по нему, можно заработать ровно \(k\) бурлей (если \(k < 0\), то это означает, что на проезд придётся потратить \(k\) бурлей). Иначе говоря, Лёшу интересует, существует ли такой подотрезок пути, что сумма весов вершин в нем равна \(k\). Обратите внимание, что подотрезок может быть пустым, и тогда сумма равна \(0\).

Вы являетесь другом Лёши, поэтому Ваша задача — ответить на вопросы Лёши.

\(\dagger\)Подотрезок — непрерывная последовательность элементов.

Входные данные

В первой строке находится число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных дано число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество событий.

Далее следует \(n\) строк, описывающих события. В \(i\)-й строке возможен один из вариантов:

  • Сначала идёт символ «+» (без кавычек), затем два числа \(v_i\) и \(x_i\) (\(x_i \in \{-1, 1\}\), также гарантируется, что вершина с номером \(v_i\) существует). В этом случае к станции с номером \(v_i\) присоединяется новая станция с весом \(x_i\).
  • Сначала идёт символ «?» (без кавычек), а затем три числа \(u_i\), \(v_i\) и \(k_i\) (\(-n \le k_i \le n\)). Гарантируется, что вершины с номерами \(u_i\) и \(v_i\) существуют. В этом случае необходимо определить, существует ли подотрезок (возможно, пустой) пути между станциями \(u_i\) и \(v_i\) с суммой весов ровно \(k_i\). В этой версии задачи гарантируется, что \(u_i = 1\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого вопроса Лёши выведите «Yes» (без кавычек), если описанный в условии подотрезок существует, иначе выведите «No» (без кавычек).

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

Пояснение к первому примеру.

Ответ на второй вопрос «Yes», так как существует путь \(1\).

В четвертом вопросе мы можем снова выбрать путь \(1\).

В пятом запросе ответ «Yes», так как есть путь \(1-3\).

В шестом запросе мы можем выбрать пустой путь, так как сумма весов на нем равна \(0\).

Нетрудно показать, что нет путей, удовлетворяющих первому и третьему запросу.

F2. Метрополитен в Омске (сложная версия)

Деревья дп математика поиск в глубину и подобное разделяй и властвуй Структуры данных *2300

Это сложная версия задачи. Единственное отличие между простой и сложной версией состоит в том, что в этой версии \(u\) может принимать любые возможные значения.

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

Для развития метрополитена и привлечения жителей в Омске используется следующая система. Каждая станция имеет свой вес \(x \in \{-1, 1\}\). Если станция имеет вес \(-1\), то при посещении станции с жителя Омска взимается плата в \(1\) бурль. Если же вес станции равен \(1\), то житель Омска вознаграждается \(1\)-м бурлем.

Пока что есть только одна станция с номером \(1\) и весом \(x = 1\). Каждый день происходит одно из следующих событий:

  • К станции с номером \(v_i\) присоединяется новая станция с весом \(x\), и ей присваивается номер, на единицу больший количества уже существующих станций.
  • Лёша, живущий в Омске, задаётся вопросом: существует ли подотрезок\(\dagger\) (возможно, пустой) пути между вершинами \(u\) и \(v\) такой, что, проехав по нему, можно заработать ровно \(k\) бурлей (если \(k < 0\), то это означает, что на проезд придётся потратить \(k\) бурлей). Иначе говоря, Лёшу интересует, существует ли такой подотрезок пути, что сумма весов вершин в нем равна \(k\). Обратите внимание, что подотрезок может быть пустым, и тогда сумма равна \(0\).

Вы являетесь другом Лёши, поэтому Ваша задача — ответить на вопросы Лёши.

\(\dagger\)Подотрезок — непрерывная последовательность элементов.

Входные данные

В первой строке находится число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных дано число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество событий.

Далее следует \(n\) строк, описывающих события. В \(i\)-й строке возможен один из вариантов:

  • Сначала идёт символ «+» (без кавычек), затем два числа \(v_i\) и \(x_i\) (\(x_i \in \{-1, 1\}\), также гарантируется, что вершина с номером \(v_i\) существует). В этом случае к станции с номером \(v_i\) присоединяется новая станция с весом \(x_i\).
  • Сначала идёт символ «?» (без кавычек), а затем три числа \(u_i\), \(v_i\) и \(k_i\) (\(-n \le k_i \le n\)). Гарантируется, что вершины с номерами \(u_i\) и \(v_i\) существуют. В этом случае необходимо определить, существует ли подотрезок (возможно, пустой) пути между станциями \(u_i\) и \(v_i\) с суммой весов ровно \(k_i\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого вопроса Лёши выведите «Yes» (без кавычек), если описанный в условии подотрезок существует, иначе выведите «No» (без кавычек).

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

Пояснение к первому примеру.

Ответ на второй вопрос «Yes», так как существует путь \(1\).

В четвертом вопросе мы можем снова выбрать путь \(1\).

В пятом запросе ответ «Yes», так как есть путь \(1-3\).

В шестом запросе мы можем выбрать пустой путь, так как сумма весов на нем равна \(0\).

Нетрудно показать, что нет путей, удовлетворяющих первому и третьему запросу.

F2. Перестановка минимальной стоимости (сложная версия)

Бинарный поиск жадные алгоритмы Конструктив математика сортировки Структуры данных *2800

Единственное отличие между этой задачей и простой версией — в ограничениях на \(t\) и \(n\).

Вам дан массив из \(n\) положительных целых чисел \(a_1,\dots,a_n\), а также целое (возможно, отрицательное) число \(c\).

Среди всех возможных перестановок \(b_1,\dots,b_n\) массива \(a_1,\dots,a_n\), рассмотрим минимально возможное значение \(\)\sum_{i=1}^{n-1} |b_{i+1}-b_i-c|.\(\) Найдите лексикографически наименьшую перестановку \(b\) массива \(a\), на которой достигается этот минимум.

Последовательность \(x\) лексикографически меньше последовательности \(y\), если и только если выполняется один из следующих пунктов:

  • \(x\) — префикс \(y\), но \(x \ne y\);
  • в первой позиции, где \(x\) и \(y\) различны, в последовательности \(x\) находится элемент, меньший соответствующего элемента \(y\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа: \(n\) и \(c\) (\(1 \le n \le 2 \cdot 10^5\), \(-10^9 \le c \le 10^9\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,\dots,a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(b_1,\dots,b_n\), задающих лексикографически наименьшую перестановку \(a\), на которой достигается минимум \(\sum\limits_{i=1}^{n-1} |b_{i+1}-b_i-c|\).

Примечание

В первом наборе входных данных можно доказать, что минимальное значение \(\sum\limits_{i=1}^{n-1} |b_{i+1}-b_i-c|\) равно \(27\), а перестановка \(b = [9,3,1,4,5,1]\) является лексикографически наименьшей перестановкой \(a\), на которой достигается этот минимум: \(|3-9-(-7)|+|1-3-(-7)|+|4-1-(-7)|+|5-4-(-7)|+|1-5-(-7)| = 1+5+10+8+3 = 27\).

Во втором наборе входных данных минимально возможное значение \(\sum\limits_{i=1}^{n-1} |b_{i+1}-b_i-c|\) равно \(0\), при этом \(b = [1,3,5]\) является лексикографически наименьшей перестановкой \(a\), на которой достигается этот минимум.

В третьем наборе входных данных существует всего одна перестановка \(b\).

G. Дерево с весами

битмаски Деревья Конструктив математика матрицы поиск в глубину и подобное реализация Структуры данных теория чисел *3000

Дано дерево на \(n\) вершинах, пронумерованных числами \(1,2,\dots,n\). \(i\)-е ребро соединяет вершины \(u_i\) и \(v_i\) и имеет некоторый неизвестный целый положительный вес \(w_i\). Вам также известны расстояния \(d_i\) между вершинами \(i\) и \(i+1\) для всех \(1 \le i \le n-1\) (это расстояние равно сумме весов рёбер на простом пути между вершинами дерева \(i\) и \(i+1\)).

Найдите вес каждого ребра. Если существует несколько решений, выведите любое из них. Если не существует весов \(w_i\), согласующихся со всеми данными, выведите одно целое число \(-1\).

Входные данные

Первая строка содержит целое число \(n\) (\(2 \le n \le 10^5\)).

В \(i\)-й из следующих \(n-1\) строк содержатся по два числа: \(u_i\) и \(v_i\) (\(1 \le u_i,v_i \le n\), \(u_i \ne v_i\)).

В последней строке содержится \(n-1\) целых чисел \(d_1,\dots,d_{n-1}\) (\(1 \le d_i \le 10^{12}\)).

Гарантируется, что заданные ребра образуют дерево.

Выходные данные

Если решения не существует, выведите одно целое число \(-1\). В противном случае выведите \(n-1\) строку, содержащую веса \(w_1,\dots,w_{n-1}\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере дерево выглядит следующим образом:

Во втором примере вес \(w_2\) не может быть равен \(0\), поскольку должен быть целым положительным числом. Поэтому решения нет.

В третьем примере дерево выглядит следующим образом:

H. Циклы, кратные трём

дп Комбинаторика математика снм Структуры данных *3400

Дана последовательность \(a_1,\dots,a_n\) длины \(n\), изначально все её элементы — пустые. Над последовательностью совершают \(n\) обновлений, в каждом из которых один из элементов \(a\) становится некоторым числом, таким образом, что после всех обновлений \(a\) становится перестановкой \(1,2,\dots,n\).

После каждого обновления найдите число способов (по модулю \(998\,244\,353\)) заполнить остающиеся пустые места в \(a\) так, чтобы \(a\) стала перестановкой \(1,2,\dots,n\), причём длины всех циклов в \(a\) стали кратны \(3\).

Перестановкой \(1,2,\dots,n\) является последовательность длины \(n\), состоящая из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Циклом в перестановке \(a\) называется последовательность попарно различных чисел \((i_1,\dots,i_k)\), такая что \(i_2 = a_{i_1},i_3 = a_{i_2},\dots,i_k = a_{i_{k-1}},i_1 = a_{i_k}\). Длина этого цикла равна числу \(k\), которое кратно \(3\), если и только если \(k \equiv 0 \pmod 3\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(3 \le n \le 3 \cdot 10^5\), \(n \equiv 0 \pmod 3\)).

В \(i\)-й из следующих \(n\) строк содержатся по два числа \(x_i\) и \(y_i\), что значит, что \(i\)-е обновление делает \(a_{x_i}\) равным \(y_i\).

Гарантируется, что \(x_1,\dots,x_n\) и \(y_1,\dots,y_n\) являются перестановками \(1,2,\dots,n\), т. е. \(a\) становится перестановкой \(1,2,\dots,n\) после всех обновлений.

Выходные данные

Выведите \(n\) строк: число способов (по модулю \(998\,244\,353\)) после \(1,2,\dots,n\) обновлений.

Примечание

В первом примере, скажем, после \(3\)-го обновления есть \(3\) способа заполнить последовательность \(a = [4,\_,2,5,\_,\_]\):

  • \([4,1,2,5,6,3]\): имеем один цикл \((1\,4\,5\,6\,3\,2)\) длины \(6\).
  • \([4,6,2,5,1,3]\): имеем два цикла \((1\,4\,5)\) и \((2\,6\,3)\), с длинами \(3\) и \(3\).
  • \([4,6,2,5,3,1]\): имеем один цикл \((1\,4\,5\,3\,2\,6)\) длины \(6\).

Во втором примере первое же обновление создаёт цикл длины \(1\), так что нет ни одного способа сделать так, чтобы длины всех циклов были кратны \(3\).

D. Рейтинговая система

Бинарный поиск дп жадные алгоритмы математика Перебор снм Структуры данных *1800

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

Изначально рейтинг игрока равен \(0\). Он будет участвовать в \(n\) матчах; после \(i\)-го матча рейтинг изменяется на \(a_i\) (рейтинг увеличивается на \(a_i\), если \(a_i\) положительное, или уменьшается на \(|a_i|\), если отрицательное. В последовательности \(a\) нет нулей).

В системе есть дополнительное правило: для заданного целого числа \(k\), если рейтинг игрока достиг значения \(k\), он никогда не опустится ниже него. Формально, если рейтинг игрока хотя бы \(k\), а изменение рейтинга должно сделать его меньше \(k\), то рейтинг снизится ровно до \(k\).

Ваша задача состоит в том, чтобы определить значение \(k\) таким образом, чтобы рейтинг игрока после всех \(n\) матчей был максимально возможным (среди всех возможных целочисленных значений \(k\)). Если существует несколько возможных ответов, выведите любой из них.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество матчей.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\); \(a_i \ne 0\)) — изменение рейтинга после \(i\)-го матча.

Сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(m\) (\(-10^{18} \le m \le 10^{18}\)) — такое значение \(k\), при котором рейтинг игрока будет максимально возможным. Можно показать, что существует хотя бы одно такое значение, которое удовлетворяет ограничениям \(-10^{18} \le m \le 10^{18}\).

Примечание

В первом примере, если \(k=3\), то рейтинг изменяется следующим образом: \(0 \rightarrow 3 \rightarrow 3 \rightarrow 4 \rightarrow 6\).

Во втором примере, если \(k=0\), то рейтинг изменяется следующим образом: \(0 \rightarrow 0 \rightarrow 0 \rightarrow 0\).

В третьем примере, если \(k=25\), то рейтинг изменяется следующим образом: \(0 \rightarrow 4 \rightarrow 6\).

В четвертом примере, если \(k=6\), то рейтинг изменяется следующим образом: \(0 \rightarrow 5 \rightarrow 6 \rightarrow 6 \rightarrow 8 \rightarrow 7 \rightarrow 6 \rightarrow 8\).

C. Рудольф и очередное соревнование

дп жадные алгоритмы Конструктив сортировки Структуры данных *1200

Рудольф зарегистрировался на соревнование по спортивному программированию, которое пройдет по правилам ICPC. Правила подразумевают, что за каждую решенную задачу дается \(1\) балл, а также начисляется штрафное время, равное количеству минут, пройденному с начала соревнования к моменту решения задачи. В итоговой таблице выше находится участник набравший больше баллов, а при равенстве баллов выше тот, у которого меньше штрафное время.

Всего на соревнование зарегистрировалось \(n\) участников. Рудольф имеет номер \(1\). Известно, что будет предложено \(m\) задач. А длиться соревнование будет \(h\) минут.

Мощный искусственный интеллект предсказал значения \(t_{i, j}\) — количество минут, за которое \(i\)-й участник решит \(j\)-ю задачу.

Рудольф понял, что порядок решения задач повлияет на итоговый результат. Например, если \(h = 120\), а время решения задач равны [\(20, 15, 110\)], тогда если Рудольф будет решать задачи в порядке:

  • \({3, 1, 2}\), то он успеет решить только третью задачу и получит \(1\) балл и \(110\) штрафных минут.
  • \({1, 2, 3}\), то первую задачу он решит через \(20\) минут после начала, вторую через \(20+15=35\) минут, а третью не успеет. Таким образом он получит \(2\) балла и \(20+35=55\) штрафных минут.
  • \({2, 1, 3}\), то вторую задачу он решит через \(15\) минут после начала, первую через \(15+20=35\) минут, а третью не успеет. Таким образом он получит \(2\) балла и \(15+35=50\) штрафных минут.

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

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Далее следуют описания наборов.

Первая строка набора содержит три целых числа \(n, m, h\) (\(1 \le n \cdot m \le 2 \cdot 10^5, 1 \le h \le 10^6\)) — количество участников, количество задач и продолжительность соревнования, соответственно.

Далее идут \(n\) строк по \(m\) чисел \(t_{i, j}\) (\(1 \le t_{i, j} \le 10^6\)) — количество минут, за которое \(i\)-й участник решает \(j\)-ю задачу.

Сумма \(n \cdot m\) по всем наборам данным не превосходит \(2 \cdot 10^5\)

Выходные данные

Для каждого набора входных данных выведите целое число — место Рудольфа в таблице результатов, если все участники будут решать задачи в оптимальном порядке.

Примечание

В первом примере Рудольф наберет \(2\) балла и \(50\) штрафных минут. Второй участник решит только одну задачу и наберет \(1\) балл и \(90\) штрафных минут. И третий участник успеет решить все \(3\) задачи и наберет \(3\) балла и \(240\) штрафных минут. Таким образом Рудольф займет второе место.

Во втором примере оба наберут \(1\) балл и \(30\) штрафных минут. При равенстве баллов Рудольфу достается лучшая позиция, поэтому он займет первое место.

В третьем примере Рудольф единственный участник, поэтому он займет первое место.

В четвёртом примере все участники могут решить две задачи со штрафом в \(25 = 8 + (8 + 9)\), \(24 = 7 + (7 + 10)\) и \(26 = 8 + (8 + 10)\), соответственно, благодаря штрафу второй участник получит первое место, а Рудольф второе.

D. Профессор Хигасиката

жадные алгоритмы реализация снм Строки Структуры данных *1900

Джосуке устал от спокойной жизни в Мориохе. Пойдя по стопам своего племянника Дзётаро, он решает упорно учиться и стать профессором информатики. Просматривая в Интернете задачи по программированию, он наткнулся на следующую.

Пусть \(s\) — бинарная строка длины \(n\). Операция над \(s\) определяется как выбор двух различных целых чисел \(i\) и \(j\) (\(1 \leq i < j \leq n\)), и обмен местами символов \(s_i, s_j\).

Рассмотрим \(m\) строк \(t_1, t_2, \ldots, t_m\), где \(t_i\) — подстрока\(^\dagger\) из \(s\) от \(l_i\) до \(r_i\). Определим \(t(s) = t_1+t_2+\ldots+t_m\) как конкатенацию строк \(t_i\) в таком порядке.

Существует \(q\) обновлений строки. В \(i\)-м обновлении \(s_{x_i}\) инвертируется. То есть, если \(s_{x_i}=1\), то \(s_{x_i}\) становится \(0\) и наоборот. После каждого обновления найдите минимальное количество операций, которые нужно выполнить над \(s\), чтобы сделать \(t(s)\) лексикографически как можно большим\(^\ddagger\).

Обратите внимание, что на самом деле ни одна операция не применяется. Нужно найти только количество операций.

Помогите Йосуке в его мечте, решив за него эту задачу.

——————————————————————

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

\(\ddagger\) Строка \(a\) лексикографически больше строки \(b\) такой же длины тогда и только тогда, когда выполняется следующее условие:

  • в первой позиции, где \(a\) и \(b\) отличаются, в строка \(a\) стоит \(1\), а в строке \(b\) стоит \(0\).
Входные данные

Первая строка содержит три целых числа \(n\), \(m\), \(q\) (\(1 \leq n,m,q \leq 2 \cdot 10^5\)).

Вторая строка содержит бинарную строку \(s\) длины \(n\), состоящую только из цифр \(0\) и \(1\).

В \(i\)-й среди следующих \(m\) строк содержатся два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i \leq r_i \leq n\)).

В \(i\)-й среди следующих \(q\) строк содержится одно целое число \(x_i\) (\(1 \leq x_i \leq n\)).

Выходные данные

Выведите \(q\) целых чисел. В строке \(i\) выведите минимальное количество операций, которое необходимо выполнить над \(s\), чтобы получить лексикографически наибольшую возможную строку \(t(s)\) после \(i\)-го обновления.

Примечание

В первом примере:

Изначально \(t(s) = s(1,2) + s(1,2) = 0101\).

После \(1\)-го запроса, \(s\) становится \(11\) и, соответственно, \(t\) становится \(1111\). Никаких операций выполнять не нужно, так как \(t(s)\) уже является лексикографически наибольшей строкой из возможных.

После \(2\)-го запроса \(s\) становится \(01\) и, следовательно, \(t\) становится \(0101\). Необходимо выполнить операцию \(1\), поменяв местами \(s_1\) и \(s_2\). Следовательно, \(t(s)\) становится \(1010\), что является лексикографически наибольшей строкой, которую можно получить.

F. Личность босса

Бинарный поиск битмаски жадные алгоритмы математика поиск в глубину и подобное сортировки Структуры данных *2500

Во время расследования происхождения Диаволо, Джорно получает от Полнареффа секретный код. Код можно представить в виде бесконечной последовательности целых положительных чисел: \(a_1, a_2, \dots \). Джорно сразу видит закономерность, лежащую в основе кода. Первые \(n\) чисел \(a_1, a_2, \dots, a_n\) являются известными. Для \(i > n\) значение \(a_i\) равно \((a_{i-n}\ |\ a_{i-n+1})\), где \(|\) обозначает операцию побитового ИЛИ.

Части информации о Диаволо скрыты в \(q\) вопросах. Каждый вопрос связан с положительным целым числом \(v\), а ответом на него является наименьший индекс \(i\), такой, что \(a_i > v\). Если такого \(i\) не существует, то ответом будет \(-1\). Помогите Джорно ответить на вопросы!

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10\,000\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(2 \leq n \leq 2 \cdot 10^5\) , \(1 \leq q \leq 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых \(a_1,a_2,\ldots,a_n\) (\(0 \leq a_i \leq 10^9\)) — части кода, которые определяют шаблон.

В \(i\)-й из следующих \(q\) строк содержится одно целое число \(v_i\) (\(0 \leq v_i \leq 10^9\)) — вопрос, который задает Джорно.

Сумма \(n\) и \(q\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Выведите \(q\) чисел. Число \(i\) является ответом на \(i\)-й вопрос, заданный Джорно.

Примечание

В первом примере \(a = [2,1,3,3,\ldots]\).

  • Для первого вопроса, \(a_1=2\) – элемент с наименьшим индексом, больший чем \(1\).
  • Для второго вопроса, \(a_3=3\) – элемент с наименьшим индексом, больший чем \(2\).
  • Для третьего вопроса, нет индекса \(i\), такого что \(a_i > 3\).
.

B. Вика и мостик

Бинарный поиск жадные алгоритмы математика реализация сортировки Структуры данных *1200

Летом Вика любит бывать на даче. Там есть всё для отдыха: удобные качели, велосипеды и речка.

Через речку прокинут деревянный мостик, состоящий из \(n\) дощечек. Он уже довольно старый и неказистый, поэтому Вика решила его покрасить. Да и в сарае как раз нашлись банки с краской \(k\) цветов.

Покрасив каждую дощечку в один из \(k\) цветов, Вика уже хотела пойти качаться на качелях, чтобы отдохнуть от работы. Однако поняла, что дом находится на другой стороне речки, а краска ещё не полностью засохла и ходить по мостику пока нельзя.

Чтобы не портить внешний вид мостика, Вика решила, что всё же пройдёт по нему, но наступая только на дощечки одного цвета. Так как иначе небольшой слой краски на её подошве испортит дощечку другого цвета. У девушки также осталось немного краски, но её хватит на перекрашивание лишь одной дощечки мостика.

Сейчас Вика стоит на земле перед первой дощечкой. Чтобы пройти по мостику, она выберет некоторые дощечки одинакового цвета (после перекрашивания), которые имеют номера \(1 \le i_1 < i_2 < \ldots < i_m \le n\) (дощечки нумеруются с \(1\) слева направо). Тогда Вике придётся переступить \(i_1 - 1, i_2 - i_1 - 1, i_3 - i_2 - 1, \ldots, i_m - i_{m-1} - 1, n - i_m\) дощечек в результате каждого из \(m + 1\) шагов.

Так как Вика боится упасть, она не хочет делать слишком длинные шаги. Помогите ей и скажите минимально возможное максимальное количество дощечек, через которые ей придётся переступить за один шаг, если в процессе перехода по мостику она может перекрасить одну (или ноль) дощечек в другой цвет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержатся два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)) — количество дощечек в мостике и количество различных цветов краски.

Во второй строке каждого набора входных данных содержится \(n\) целых чисел \(c_1, c_2, c_3, \dots, c_n\) (\(1 \le c_i \le k\)) — цвета, в которые Вика покрасила дощечки мостика.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — минимально возможное максимальное количество дощечек, через которое придётся переступить Вике за один шаг.

Примечание

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

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

В третьем наборе входных данных Вика может перекрасить предпоследнюю дощечку в цвет \(2\) и пройти по мостику, наступая только на дощечки с номерами \(2\) и \(5\). Тогда Вике придётся переступить \(1\), \(2\) и \(1\) дощечку при каждом шаге, поэтому ответ равен \(2\).

В четвёртом наборе входных данных Вика может вовсе не перекрашивать мостик и пройти по нему, каждый раз переступая через две дощечки, идя по дощечкам цвета \(3\).

В пятом наборе входных данных Вика может вовсе не перекрашивать мостик и пройти по нему, не переступая через дощечки.

C. Копирование бинарной строки

Бинарный поиск Перебор Строки Структуры данных хэши *1600

Вам задана строка \(s\), состоящая из \(n\) символов 0 и/или 1.

Вы делаете \(m\) копий этой строки. Пусть \(i\)-я копия — это строка \(t_i\). Затем вы выполняете ровно одну операцию над каждой из копий: в \(i\)-й копии вы сортируете подстроку \([l_i; r_i]\) (подстроку, начинающуюся с \(l_i\)-го символа и заканчивающуюся \(r_i\)-м символом, обе границы включаются). Заметьте, что каждая операция затрагивает только одну копию, и каждая копия затрагивается только одной операцией.

Ваша задача — посчитать количество различных строк среди \(t_1, t_2, \ldots, t_m\). Заметьте, что изначальная строка \(s\) должна считаться только тогда, когда хотя бы одна копия остается неизменной после операции.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — длину строки \(s\) и количество копий соответственно.

Вторая строка содержит \(n\) символов 0 и/или 1 — строку \(s\).

Затем следуют \(m\) строк. В \(i\)-й из них содержатся два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — описание операции, применяемой к \(i\)-й копии.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите одно целое число — количество различных строк среди \(t_1, t_2, \ldots, t_m\).

Примечание

Рассмотрим первый тестовый пример. Копии ниже представлены в порядке операций из входных данных. Сортируемые подстроки подчеркнуты:

  1. 101100 \(\rightarrow\) 011100;
  2. 101100 \(\rightarrow\) 011100;
  3. 101100 \(\rightarrow\) 101100;
  4. 101100 \(\rightarrow\) 101100;
  5. 101100 \(\rightarrow\) 000111.

Среди \(t_1, t_2, t_3, t_4, t_5\) всего три различные строки: 000111, 011100 и 101100.

Рассмотрим второй тестовый пример:

  1. 100111 \(\rightarrow\) 100111;
  2. 100111 \(\rightarrow\) 001111;
  3. 100111 \(\rightarrow\) 001111;
  4. 100111 \(\rightarrow\) 010111.

Среди \(t_1, t_2, t_3, t_4\) всего три различные строки: 001111, 010111 и 100111.

E. Максимум справа от минимума

Бинарный поиск дп разделяй и властвуй снм Структуры данных *2300

Дана перестановка \(p\) длины \(n\) — массив, состоящий из целых чисел от \(1\) до \(n\), все различные.

Пусть \(p_{l,r}\) задает подмассив — массив, полученный при выписывании элементов с позиции \(l\) по позицию \(r\), включительно.

Пусть \(\mathit{maxpos}_{l,r}\) задает позицию максимального элемента на \(p_{l,r}\). Аналогично, пусть \(\mathit{minpos}_{l,r}\) задает позицию минимального элемента на нем.

Посчитайте количество подмассивов \(p_{l,r}\) таких, что \(\mathit{maxpos}_{l,r} > \mathit{minpos}_{l,r}\).

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 10^6\)).

Во второй строке записаны \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\)). Все \(p_i\) различны.

Выходные данные

Выведите одно целое число — количество подмассивов \(p_{l,r}\) таких, что \(\mathit{maxpos}_{l,r} > \mathit{minpos}_{l,r}\).

F. XOR-разделение

Бинарный поиск битмаски Деревья жадные алгоритмы разделяй и властвуй Структуры данных *2700

Для множества целых чисел \(S\) определим его стоимость как минимальное значение \(x \oplus y\) среди всех пар различных чисел из множества (\(\oplus\) обозначает оператор побитового исключающего ИЛИ). Если в множестве менее двух элементов, его стоимость равна \(2^{30}\).

Вам дано множество целых чисел \(\{a_1, a_2, \dots, a_n\}\). Вы должны разделить его на два множества \(S_1\) и \(S_2\) таким образом, что каждый элемент принадлежит ровно одному из этих двух множеств. Стоимость разделения — это минимум из стоимостей \(S_1\) и \(S_2\).

Найдите разделение с максимальной стоимостью.

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 200000\)) — количество элементов в множестве.

Во второй строке задано \(n\) различных целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(0 \le a_i < 2^{30}\)) — элементы множества.

Выходные данные

Выведите строку из \(n\) символов 0 и/или 1, описывающую разделение следующим образом: \(i\)-й символ строки должен быть 0, если \(a_i\) принадлежит \(S_1\), в противном случае этот символ должен быть 1.

Если существует несколько оптимальных ответов — выведите любой из них.

E. Время сериала! - 2

Бинарный поиск Структуры данных *3000

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

Есть n гномов, они заданы своими координатами на плоскости. Гномы хотят все вместе посмотреть сериал в какой-нибудь одной целочисленной точке плоскости. Для этого они выбирают точку, в которой соберутся, и одновременно начинают идти в нее. За одну секунду гном из точки с координатами (x, y) может переместиться в одну из точек: (x - 1, y), (x + 1, y), (x, y - 1), (x, y + 1). Также гномы могут пользоваться метро сколько угодно (метро перемещает гномов мгновенно). Гномы не мешают друг другу при перемещении (то есть гномы перемещаются одновременно и независимо друг от друга).

Помогите гномам, найдите минимальное время, за которое им удастся собраться в одной точке.

Входные данные

В первой строке записано два целых числа n и k (1 ≤ n ≤ 105; 0 ≤ k ≤ 105) — количество гномов и станций метро, соответственно.

В следующих n строках записаны координаты гномов. В i-й строке записаны два целых числа через пробел xi и yi (|xi|, |yi| ≤ 108) — координаты i-го гнома. Гарантируется, что все гномы находятся в различных точках.

В следующих k строках записаны координаты станций метро. В t-й строке записаны два целых числа через пробел xt и yt (|xt|, |yt| ≤ 108) — координаты t-й станции метро. Гарантируется, что все станции метро находятся в различных точках.

Выходные данные

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

G. The Morning Star

геометрия Комбинаторика математика реализация сортировки Структуры данных *1500

Компас указывает прямо на утреннюю звезду. Он может указывать только в одном из восьми направлений: четыре основных направления (N, S, E, W) или их комбинации (NW, NE, SW, SE). В противном случае, он сломается.

Направления, в которых может указывать компас.

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

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Затем следуют описания наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — количество точек.

Затем следуют \(n\) строк, каждая строка содержит два целых числа \(x_i\), \(y_i\) (\(-10^9 \leq x_i, y_i \leq 10^9\)) — координаты каждой точки.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество пар точек, которые не сломают компас.

Примечание

В первом примере, любая пара точек не сломает компас:

  • Компас находится в \((0,0)\), утренняя звезда находится в \((-1,-1)\): компас будет указывать \(\text{SW}\).
  • Компас находится в \((0,0)\), утренняя звезда находится в \((1,1)\): компас будет указывать \(\text{NE}\).
  • Компас находится в \((-1,-1)\), утренняя звезда находится в \((0,0)\): компас будет указывать \(\text{NE}\).
  • Компас находится в \((-1,-1)\), утренняя звезда находится в \((1,1)\): компас будет указывать \(\text{NE}\).
  • Компас находится в \((1,1)\), утренняя звезда находится в \((0,0)\): компас будет указывать \(\text{SW}\).
  • Компас находится в \((1,1)\), утренняя звезда находится в \((-1,-1)\): компас будет указывать \(\text{SW}\).

Во втором примере, только две пары точек не сломают компас:

  • Компас находится в \((6,9)\), утренняя звезда находится в \((10,13)\): компас будет указывать \(\text{NE}\).
  • Компас находится в \((10,13)\), утренняя звезда находится в \((6,9)\): компас будет указывать \(\text{SW}\).

G. Влад и горы

Бинарный поиск графы Деревья реализация снм сортировки Структуры данных *2000

Влад решил отправиться в путешествие в горы. Всего он планирует перемещаться по \(n\) горам, между некоторыми из которых есть дороги. Горы имеют высоты, высота \(i\)-й горы равна \(h_i\).

Если между горами \(i\) и \(j\) есть дорога, то Влад может перейти с горы \(i\) на гору \(j\), потратив при этом \(h_j - h_i\) единиц энергии. Если при переходе его энергия должна опуститься ниже нуля, он не сможет перейти с горы \(i\) на гору \(j\). Обратите внимание, что \(h_j - h_i\) может быть отрицательным и тогда энергия восстановится.

Влад хочет рассмотреть разные варианты маршрута, поэтому просит вас ответить на следующие запросы: можно ли построить какой-либо маршрут, начинающийся на горе \(a\) и заканчивающийся на горе \(b\), если изначально у него есть \(e\) единиц энергии?

Входные данные

В первой строке входных данных содержится целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов.

Первая строка набора содержит два числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le m \le \min(\frac{n\cdot(n - 1)}{2}, 2 \cdot 10^5)\)) — количество гор и дорог между ними, соответственно.

Вторая строка содержит \(n\) целых чисел \(h_1, h_2, h_3, \dots, h_n\) (\(1 \le h_i \le 10^9\)) — высоты гор.

Следующие \(m\) строк содержат по два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \ne v\)) — номера гор, которые соединяет дорога. Гарантируется, что ни одна дорога не встречается дважды.

Следующая строка содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

Следующие \(q\) строк содержат по три числа \(a\), \(b\) и \(e\) (\(1 \le a, b \le n\), \(0 \le e \le 10^9\)) — начальная и конечная горы маршрута и количество энергии, соответственно.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\). Также это гарантируется для \(m\) и \(q\).

Выходные данные

Для каждого запроса выведите «YES», если Влад может составить маршрут от горы \(a\) до горы \(b\), и «NO» в противном случае.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

В примерах ниже ответы на разные наборы данных разделены пустой строкой, вы можете её не выводить.

C. Ина с Горы

дп жадные алгоритмы математика Структуры данных *2400

Чтобы подготовить своих осьминогов «Такодачи» к правлению миром, Ниномае Ина-нис, также известная как Ина с Горы, приказала Хишимачи Суйсей бросать в них валуны. Ина просит вас, Кирю Коко, помочь выбрать, как именно бросать валуны.

В одну линию на горе Ины находятся \(n\) осьминогов, они пронумерованы \(1, 2, \ldots, n\). \(i\)-й осьминог изначально имеет здоровье, равное \(a_i\), где \(1 \leq a_i \leq k\).

Каждый валун падает на последовательных осьминогов с номерами \(l, l+1, \ldots, r\), где \(1 \leq l \leq r \leq n\). Вы можете выбрать числа \(l\) и \(r\) для каждого валуна произвольным образом.

Каждый валун уменьшает здоровье каждого осьминога, на которого он падает, на \(1\). Однако осьминоги бессмертны, поэтому как только здоровье осьминога становится равно \(0\), он немедленно восстановит свое здоровье до \(k\).

По данным значениям начального здоровья осьминогов определите минимальное количество валунов, необходимых для того, чтобы здоровье всех осьминогов стало равно \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le k \le 10^9\)) — количество осьминогов и верхняя граница значения здоровья осьминогов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le k\)) — начальные значения здоровья осьминогов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество валунов, которое необходимо бросить, чтобы значения здоровья всех осьминогов стали равными \(k\).

Примечание

В первом наборе входных данных минимальное количество бросков валуна равно \(2\):

  • Бросить первый валун между \([l,r] = [1,3]\). Тогда значения здоровья осьминогов станут \([3, 1, 3, 3]\).
  • Бросить второй валун между \([l,r] = [2,2]\). Тогда значения здоровья осьминогов станут \([3, 3, 3, 3]\).

Во втором наборе минимальное количество бросков валуна равно \(4\). Диапазоны \([l,r]\) равны \([1,7], [2, 6], [3, 5], [4, 4]\).

E. Соперничества

жадные алгоритмы Конструктив Структуры данных *3400

У Ntarsis есть массив \(a\) длины \(n\).

Мощность подотрезка \(a_l \dots a_r\) (\(1 \leq l \leq r \leq n\)) определяется следующим образом:

  • Наибольшее значение \(x\), такое что \(a_l \dots a_r\) содержит \(x\), и ни \(a_1 \dots a_{l-1}\), ни \(a_{r+1} \dots a_n\) не содержат \(x\).
  • Если такого \(x\) не существует, мощность равна \(0\).

Массив \(b\) называется соперником для \(a\), если выполняются следующие условия:

  • Длина и \(a\), и \(b\) равна \(n\).
  • Для всех \(l, r\), где \(1 \leq l \leq r \leq n\), мощность \(a_l \dots a_r\) равна мощности \(b_l \dots b_r\).
  • Элементы \(b\) являются положительными числами.

Ntarsis хочет найти соперника \(b\) для \(a\) такого, что сумма \(b_i\) (\(1 \leq i \leq n\)) будет максимальной. Помогите ему с этой задачей!

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) — допустимого соперника для \(a\) такого, что сумма \(b_1 + b_2 + \cdots + b_n\) будет максимальной.

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

Примечание

Для первого набора одним из соперников с максимальной суммой является \([2, 4, 2, 3, 3]\).

Можно показать, что \([2, 4, 2, 3, 3]\) является соперником для \([1, 4, 1, 3, 3]\).

Ниже перечислены все возможные подмассивы \(a\) и \(b\) и их соответствующие мощности:

  • Мощность \(a[1:1] = [1] = 0\), мощность \(b[1:1] = [2] = 0\).
  • Мощность \(a[1:2] = [1, 4] = 4\), мощность \(b[1:2] = [2, 4] = 4\).
  • Мощность \(a[1:3] = [1, 4, 1] = 4\), мощность \(b[1:3] = [2, 4, 2] = 4\).
  • Мощность \(a[1:4] = [1, 4, 1, 3] = 4\), мощность \(b[1:4] = [2, 4, 2, 3] = 4\).
  • Мощность \(a[1:5] = [1, 4, 1, 3, 3] = 4\), мощность \(b[1:5] = [2, 4, 2, 3, 3] = 4\).
  • Мощность \(a[2:2] = [4] = 4\), мощность \(b[2:2] = [4] = 4\).
  • Мощность \(a[2:3] = [4, 1] = 4\), мощность \(b[2:3] = [4, 2] = 4\).
  • Мощность \(a[2:4] = [4, 1, 3] = 4\), мощность \(b[2:4] = [4, 2, 3] = 4\).
  • Мощность \(a[2:5] = [4, 1, 3, 3] = 4\), мощность \(b[2:5] = [4, 2, 3, 3] = 4\).
  • Мощность \(a[3:3] = [1] = 0\), мощность \(b[3:3] = [2] = 0\).
  • Мощность \(a[3:4] = [1, 3] = 0\), мощность \(b[3:4] = [2, 3] = 0\).
  • Мощность \(a[3:5] = [1, 3, 3] = 3\), мощность \(b[3:5] = [2, 3, 3] = 3\).
  • Мощность \(a[4:4] = [3] = 0\), мощность \(b[4:4] = [3] = 0\).
  • Мощность \(a[4:5] = [3, 3] = 3\), мощность \(b[4:5] = [3, 3] = 3\).
  • Мощность \(a[5:5] = [3] = 0\), мощность \(b[5:5] = [3] = 0\).

Можно показать, что не существует соперника с большей суммой, чем \(2 + 4 + 2 + 3 + 3 = 14\).

F. Встречи панд

дп Потоки Структуры данных *3500

Красные панды приехали в город, чтобы встретиться со своими родственниками, синими пандами! Город представлен в виде числовой оси.

Панды уже запланировали свою встречу, но график постоянно меняется. Вам дано \(q\) обновлений вида x t c.

  • Если \(c < 0\), это означает, что дополнительно \(|c|\) красных панд входят на числовую ось в позиции \(x\) и времени \(t\). Затем каждую секунду они могут независимо перемещаться на одну единицу в любом направлении по числовой оси или не перемещаться вовсе.
  • Если \(c > 0\), это означает, что дополнительно \(c\) синих панд проверяют позицию \(x\) на наличие красных панд в момент времени \(t\). Если синяя панда не встречает красную панду в этом конкретном месте и времени, она сразу печально покидает числовую ось. Если красная панда есть на позиции в то время, когда синяя панда ее проверяет, они становятся друзьями и покидают числовую ось. Каждая красная панда может стать другом не более чем одной синей панды и наоборот.

Запросы представлены в порядке неубывания значений \(x\). После каждого запроса выведите максимальное количество пар друзей, которое может быть сформировано, если красные панды движутся в оптимальном порядке на основе всех событий, представленных во входных данных до этого обновления (включительно).

Движения красных панд могут меняться от обновления к обновлению.

Входные данные

Первая строка содержит \(q\) (\(1 \leq q \leq 2 \cdot 10^5\)) — количество обновлений.

\(i\)-я строка из следующих \(q\) строк содержит \(3\) целых числа \(x_i\), \(t_i\) и \(c_i\) (\(0 \leq x_i \leq 10^9\), \(0 \leq t_i \leq 10^9\), \(0 < |c_i| \leq 1000\)) — описание \(i\)-го обновления.

Гарантируется, что \(x_i\) будут представлены в порядке неубывания.

Выходные данные

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

Примечание

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

  1. \(3\) синих панды проверяют наличие красных панд на позиции \(0\) в момент времени \(6\). Нигде нет красных панд, поэтому пар друзей не возникает.
  2. \(5\) красных панд появляются на позиции \(4\) в момент времени \(2\). \(4\) из них могут переместиться на позицию \(0\) в момент времени \(6\), где \(3\) из них могут стать друзьями с \(3\) существующими синими пандами.
  3. \(6\) красных панд появляются на позиции \(7\) в момент времени \(4\). Новые синие панды не добавляются, поэтому максимальное количество пар друзей остается \(3\).
  4. \(100\) синих панд появляются на позиции \(10\) в момент времени \(5\). Ни одна красная панда не может достичь их в момент времени \(5\), поэтому новых пар друзей не создается.
  5. \(7\) синих панд появляются на позиции \(10\) в момент времени \(8\). \(6\) красных панд на позиции \(7\) в момент времени \(4\), вместе с \(1\) красной пандой на позиции \(4\) в момент времени \(2\), могут достичь \(7\) синих панд на позиции \(10\) в момент времени \(8\), добавляя \(7\) новых пар друзей. Это приводит к общему количеству пар друзей, равному \(10\).

C. Стать максимумом

Бинарный поиск дп Перебор Структуры данных *1600

Вам дан массив целых чисел \(a\) длины \(n\).

Одна операция состоит из:

  • Выбора индекса \(i\) такого, что \(1 \le i \le n - 1\) и \(a_i \le a_{i + 1}\).
  • Увеличения \(a_i\) на \(1\).

Найдите максимально возможное значение \(\max(a_1, a_2, \ldots a_n)\), которое можно получить, выполнив эту операцию не более \(k\) раз.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 1000\), \(1 \le k \le 10^{8}\)) — длина массива \(a\) и максимальное количество операций, которых можно выполнить.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le 10^{8}\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(1000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможный максимум массива после выполнения не более \(k\) операций.

Примечание

В первом наборе входных данных одной возможной оптимальной последовательностью операций является: \([\color{red}{1}, 3, 3] \rightarrow [2, \color{red}{3}, 3] \rightarrow [\color{red}{2}, 4, 3] \rightarrow [\color{red}{3}, 4, 3] \rightarrow [4, 4, 3]\).

Во втором наборе вдодных данных одной возможной оптимальной последовательностью операций является: \([1, \color{red}{3}, 4, 5, 1] \rightarrow [1, \color{red}{4}, 4, 5, 1] \rightarrow [1, 5, \color{red}{4}, 5, 1] \rightarrow [1, 5, \color{red}{5}, 5, 1] \rightarrow [1, \color{red}{5}, 6, 5, 1] \rightarrow [1, \color{red}{6}, 6, 5, 1] \rightarrow [1, 7, 6, 5, 1]\).

F. Сумма и произведение

Бинарный поиск математика Структуры данных *1600

У вас есть массив \(a\) длины \(n\).

Ваша задача — ответить на \(q\) запросов: для заданных \(x,y\) найти количество пар \(i\) и \(j\) (\(1 \le i < j \le n\)), таких что и \(a_i + a_j = x\) и \(a_i \cdot a_j = y\).

То есть для массива \([1,3,2]\) и запросов \(x=3,y=2\) ответ \(1\):

  • \(i=1\) и \(j=2\) не удовлетворяет условию, потому что \(1 + 3 = 4\) а не \(3,\) также \(1 \cdot 3=3\) а не \(2\);
  • \(i=1\) и \(j=3\) удовлетворяет условию;
  • \(i=2\) и \(j=3\) не удовлетворяет условию, потому что \(3 + 2 = 5\) а не \(3,\) также \(3 \cdot 2=6\) а не \(2\);
Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных.

Вторая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2\cdot 10^5\)) — длина массива \(a\).

Третья строка каждого набора содержит \(n\) целых чисел \(a_1,a_2,\dots,a_n\) (\(1 \le |a_i| \le 10^9\)) — массив \(a\).

Четвертая строка каждого набора содержит целое число \(q\) (\(1 \le q \le 2\cdot 10^5\)) — количество запросов.

Следующие \(q\) строк содержат по два числа \(x\) и \(y\) (\(1 \le |x|\le 2\cdot 10^9,1\le |y|\le 10^{18}\)) — запрос.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\). Также это гарантируется для суммы значений \(q\).

Выходные данные

Для каждого набора выведите \(q\) чисел в одной строке — ответы на запросы.

Примечание

Для первого набора входных данных разберем каждую пару чисел из массива отдельно:

  • пара \((a_1,a_2)\): \(a_1 + a_2 = 4\) , \(a_1 \cdot a_2 = 3\)
  • пара \((a_1,a_3)\): \(a_1 + a_3 = 3\) , \(a_1 \cdot a_3 = 2\)
  • пара \((a_2,a_3)\): \(a_2 + a_3 = 5\) , \(a_2 \cdot a_3 = 6\)
Из этого видно, что для первого запроса нам подходит пара \((a_1,a_3)\), для второго \((a_2,a_3)\), а для третьего и четвертого подходящих пар нет.

Во втором наборе входных данных все комбинации пар подходят.

D. Деревья и отрезки

дп жадные алгоритмы Перебор Структуры данных *2200

Преподаватели ЛКШ решили посадить \(n\) деревьев в ряд, причём было решено сажать только дубы и ели. Для этого они составили план, который можно представить в виде двоичной строки \(s\) длины \(n\). Если \(s_i = 0\), то \(i\)-м деревом в ряду должен быть дуб, а если \(s_i = 1\), то \(i\)-м деревом в ряду должна быть ель.

День посадки деревьев уже завтра, а послезавтра в ЛКШ приедет проверяющий. Проверяющий очень любит природу, и он оценит красоту ряда деревьев следующим образом:

  • Он вычислит \(l_0\) как максимальное количество подряд идущих дубов в ряду (максимальная подстрока из нулей в плане \(s\)). Если в ряду нет дубов, то \(l_0 = 0\).
  • Он вычислит \(l_1\) как максимальное количество подряд идущих елей в ряду (максимальная подстрока из единиц в плане \(s\)). Если в ряду нет елей, то \(l_1 = 0\).
  • Красота ряда деревьев будет равна \(a \cdot l_0 + l_1\) для некоторого \(a\) — любимого числа проверяющего.

Преподаватели знают значение параметра \(a\), но не могут сказать его вам из соображений безопасности. Они готовы сказать вам лишь то, что \(a\) является целым числом от \(1\) до \(n\).

Поскольку деревья ещё не посажены, преподаватели решили изменить вид не более чем \(k\) деревьев на противоположный (то есть изменить \(s_i\) с \(0\) на \(1\) или с \(1\) на \(0\) в плане), чтобы максимизировать красоту ряда деревьев по мнению проверяющего.

Для каждого целого \(j\) от \(1\) до \(n\) найдите независимо ответ на следующий вопрос:

  • Какой максимальной красоты ряда деревьев могут добиться преподаватели, изменив вид не более чем \(k\) деревьев, если любимое число проверяющего \(a\) равно \(j\)?
Входные данные

В первой строке дано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке даны два целых числа \(n\) и \(k\) (\(1 \le n \le 3000\), \(0 \le k \le n\)) — количество деревьев в ряду и максимальное количество изменений.

Вторая строка содержит строку \(s\) длины \(n\), состоящую из нулей и единиц — описание плана.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(3000\).

Выходные данные

Для каждого набора входных данных выведите \(n\) чисел, \(j\)-е (\(1 \le j \le n\)) из которых — максимальная красота ряда деревьев после не более, чем \(k\) изменений, если для вычисления красоты используется \(a = j\).

Примечание

В первом наборе входных данных не разрешаются изменения, поэтому всегда выполняется \(l_0 = 0\) и \(l_1 = 3\). Таким образом, вне зависимости от значения \(a\), красота ряда деревьев будет равна \(3\).

Во втором наборе входных данных для \(a \in \{1, 2\}\) преподаватели могут, например, изменить план \(s\) на \(0111\) (изменив \(s_4\)), а для \(a \in \{3, 4\}\) — на \(0010\) (изменив \(s_2\)). В таком случае, красота аллеи для каждого \(a\) вычисляется следующим образом:

  • Для \(a = 1\): \(l_0 = 1\), \(l_1 = 3\). Красота аллеи равна \(1\cdot 1 + 3 = 4\).
  • Для \(a = 2\): \(l_0 = 1\), \(l_1 = 3\). Красота аллеи равна \(2\cdot 1 + 3 = 5\).
  • Для \(a = 3\): \(l_0 = 2\), \(l_1 = 1\). Красота аллеи равна \(3\cdot 2 + 1 = 7\).
  • Для \(a = 4\): \(l_0 = 2\), \(l_1 = 1\). Красота аллеи равна \(4\cdot 2 + 1 = 9\).

Можно показать, приведённые выше изменения являются оптимальными для всех \(a\) от \(1\) до \(4\).

E1. Откаты (простая версия)

Деревья Перебор поиск в глубину и подобное Структуры данных *2500

Это простая версия задачи. Единственное отличие между простой и сложной версиями в том, что в сложной версии вы должны отвечать на запросы в режиме онлайн. Вы можете делать взломы, только если обе версии задачи решены.

У вас есть массив \(a\), изначально пустой. Вам нужно обрабатывать запросы следующих типов:

  • + \(x\) — добавить число \(x\) в конец массива \(a\).
  • - \(k\) — удалить \(k\) последних чисел из массива \(a\).
  • ! — откатить последнее действующее изменение (т. е. сделать массив \(a\) таким, каким он был до изменения). В данной задаче изменениями считаются только запросы первых двух типов (+ и -).
  • ? — найти количество различных чисел в массиве \(a\).
Входные данные

В первой строке задано одно целое число \(q\) (\(1 \leq q \leq 10^6\)) — количество запросов.

В следующих \(q\) строках даны запросы в формате, описанном выше.

Гарантируется, что

  • в запросах первого типа \(1 \le x \le 10^6\);
  • в запросах второго типа \(k \ge 1\) и \(k\) не превосходит текущей длины массива \(a\);
  • в момент запроса третьего типа есть хотя бы один запрос первого или второго типа, который можно откатить.

Также гарантируется, что количество запросов четвёртого типа не превосходит \(10^5\).

Выходные данные

Для каждого запроса четвёртого типа выведите одно целое число: количество различных элементов в массиве \(a\) в момент запроса.

Примечание

В первом тесте из условия массив \(a\) изменяется следующим образом:

  1. После первого запроса \(a=[1]\).
  2. После второго запроса \(a=[1,2]\).
  3. После третьего запроса \(a=[1,2,2]\).
  4. В момент четвёртого запроса в массиве \(a\) встречаются \(2\) различных числа: \(1\) и \(2\).
  5. После пятого запроса \(a=[1,2]\) (откатили изменение + 2).
  6. После шестого запроса \(a=[1,2,3]\).
  7. После седьмого запроса \(a=[1]\).
  8. В момент восьмого запроса массиве \(a\) состоит только из одной \(1\).
  9. После девятого запроса \(a=[1,1]\).
  10. В момент десятого запроса массиве \(a\) состоит только из двух \(1\).

Во втором тесте из условия массив \(a\) изменяется следующим образом:

  1. После первого запроса \(a=[1]\).
  2. После второго запроса \(a=[1,1\,000\,000]\).
  3. В момент третьего запроса в массиве \(a\) встречаются \(2\) различных числа: \(1\) и \(1\,000\,000\).
  4. После четвёртого запроса \(a=[1]\) (откатили изменение + 1000000).
  5. После пятого запроса \(a=[]\) (откатили изменение + 1).
  6. В момент шестого запроса в массиве \(a\) нет чисел, поэтому ответ на этот запрос равен \(0\).

E2. Откаты (сложная версия)

Деревья интерактив Структуры данных *2600

Это сложная версия задачи. Единственное отличие между простой и сложной версиями в том, что в сложной версии вы должны отвечать на запросы в режиме онлайн. Вы можете делать взломы, только если обе версии задачи решены.

У вас есть массив \(a\), изначально пустой. Вам нужно обрабатывать запросы следующих типов:

  • + \(x\) — добавить число \(x\) в конец массива \(a\).
  • - \(k\) — удалить \(k\) последних чисел из массива \(a\).
  • ! — откатить последнее действующее изменение (т. е. сделать массив \(a\) таким, каким он был до изменения). В данной задаче изменениями считаются только запросы первых двух типов (+ и -).
  • ? — найти количество различных чисел в массиве \(a\).
Входные данные

В первой строке задано одно целое число \(q\) (\(1 \leq q \leq 10^6\)) — количество запросов.

В следующих \(q\) строках даны запросы в формате, описанном выше.

Гарантируется, что

  • в запросах первого типа \(1 \le x \le 10^6\);
  • в запросах второго типа \(k \ge 1\) и \(k\) не превосходит текущей длины массива \(a\);
  • в момент запроса третьего типа есть хотя бы один запрос первого или второго типа, который можно откатить.

Также гарантируется, что количество запросов четвёртого вида (?) не превосходит \(10^5\).

Обратите внимание, что вы должны решить данную задачу в режиме онлайн. То есть вы не можете считать все входные данные заранее. Вы можете считать очередной запрос только после того как выведете ответ на предыдущий, поэтому не забывайте сбрасывать поток вывода после вывода ответа. Вы можете использовать такие функции как fflush(stdout) в C++, BufferedWriter.flush в Java или похожие после каждого вывода в программе.

Выходные данные

Для каждого запроса четвёртого типа выведите одно целое число: количество различных элементов в массиве \(a\) в момент запроса.

Примечание

В первом тесте из условия массив \(a\) изменяется следующим образом:

  1. После первого запроса \(a=[1]\).
  2. После второго запроса \(a=[1,2]\).
  3. После третьего запроса \(a=[1,2,2]\).
  4. В момент четвёртого запроса в массиве \(a\) встречаются \(2\) различных числа: \(1\) и \(2\).
  5. После пятого запроса \(a=[1,2]\) (откатили изменение + 2).
  6. После шестого запроса \(a=[1,2,3]\).
  7. После седьмого запроса \(a=[1]\).
  8. В момент восьмого запроса массиве \(a\) состоит только из одной \(1\).
  9. После девятого запроса \(a=[1,1]\).
  10. В момент десятого запроса массиве \(a\) состоит только из двух \(1\).

Во втором тесте из условия массив \(a\) изменяется следующим образом:

  1. После первого запроса \(a=[1]\).
  2. После второго запроса \(a=[1, 1\,000\,000]\).
  3. В момент третьего запроса в массиве \(a\) встречаются \(2\) различных числа: \(1\) и \(1\,000\,000\).
  4. После четвёртого запроса \(a=[1]\) (откатили изменение + 1000000).
  5. После пятого запроса \(a=[]\) (откатили изменение + 1).
  6. В момент шестого запроса в массиве \(a\) нет чисел, поэтому ответ на этот запрос равен \(0\).

D. Андрей и побег из Капиграда

Бинарный поиск дп жадные алгоритмы снм сортировки Структуры данных *1800

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

Тяголяндия представляет из себя числовую прямую, а Капиград находится в точке \(0\). По всей Тяголяндии расставлены \(n\) порталов, каждый из которых характеризуется четырьмя целыми числами \(l_i\), \(r_i\), \(a_i\) и \(b_i\) (\(1 \le l_i \le a_i \le b_i \le r_i \le 10^9\)). Обратите внимание, что отрезок \([a_i, b_i]\) содержится в отрезке \([l_i, r_i]\).

Если Андрей находится на отрезке \([l_i, r_i]\), тогда портал может его телепортировать в любую точку на отрезке \([a_i, b_i]\). У Андрея есть проездной, который позволяет ему пользоваться порталами неограниченное количество раз.

Андрей считает, что точка \(x\) находится на отрезке \([l, r]\), если выполняется неравенство \(l \le x \le r\).

У Андрея есть \(q\) вариантов откуда начать свой побег, каждый вариант характеризуется одним целом числом \(x_i\) — позицией начала побега. Он хочет убежать от Капиграда как можно дальше (в точку с максимально возможной координатой). Помогите Андрею узнать, насколько далеко от Капиграда он может убежать, начиная в каждой из \(q\) позиций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество порталов.

Каждая из следующих \(n\) строк содержит четыре целых числа \(l_i\), \(r_i\), \(a_i\) и \(b_i\) \((1 \le l_i \le a_i \le b_i \le r_i \le 10^9)\) — характеристики порталов.

Следующая строка содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество позиций.

В следующей строке задано \(q\) целых чисел \(x_1, x_2, \ldots, x_q\) (\(1 \le x_i \le 10^9\)) — позиция, откуда Андрей начнет свой побег в \(i\)-м варианте.

Гарантируется, что сумма \(n\) и сумма \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку из \(q\) целых чисел, содержащую ответы на интересующие Андрея вопросы.

Примечание

В первом наборе входных данных:

Оптимальные действия при старте из каждой позиции:

  1. Воспользуемся порталом \(1\) и телепортируемся в точку \(b_1 = 14\).
  2. Воспользуемся сначала порталом \(2\) и телепортируемся в точку \(6\), находящуюся на отрезке \([l_1, r_1] = [6, 17]\), после чего воспользуемся порталом \(1\) и телепортируемся в точку \(b_1 = 14\).
  3. Останемся в точке \(x_3=23\), не пользуясь порталами.
  4. Останемся в точке \(x_4=15\), не пользуясь порталами.
  5. Точка \(x_5=28\) не находится ни на одном отрезке, поэтому Андрей не сможет никуда телепортироваться.
  6. Точка \(x_6=18\) находится на отрезке \([l_3, r_3] = [16, 24]\), воспользуемся порталом \(3\) и телепортируемся в точку \(b_3 = 22\).

В пятом наборе входных данных:

Оптимальные действия при старте из каждой позиции:

  1. Воспользуемся сначала порталом \(1\) и телепортируемся в точку \(15\) на отрезке \([a_1, b_1] = [14, 20]\), после чего воспользуемся порталом \(2\) и телепортируемся в точку \(21\), находящуюся на отрезке \([l_4, r_4] = [21, 33]\) и на отрезке \([a_2, b_2] = [13, 24]\), после телепортируемся в точку \(b_4 = 32\).
  2. Воспользуемся сначала порталом \(6\) и телепортируемся в точку \(20\) на отрезке \([a_6, b_6] = [20, 21]\), после чего воспользуемся порталом \(2\) и телепортируемся в точку \(22\), находящуюся одновременно на отрезке \([l_4, r_4] = [21, 33]\) и на отрезке \([a_2, b_2] = [13, 24]\), после телепортируемся в точку \(b_4 = 32\).
  3. Сделаем те же самые действия что из с первой позиции.
  4. Останемся в точке \(x_4=5\), не пользуясь порталами.
  5. Точка \(8\) не находится ни на одном отрезке, поэтому Андрей не сможет никуда телепортироваться.
  6. Останемся в точке \(x_6=33\), не пользуясь порталами.
  7. Воспользуемся порталом \(5\) и телепортируемся в точку \(b_5 = 4\).
  8. Сделаем те же самые действия что и из первой позиции.

F. Телепортация в Байтландии

графы Деревья кратчайшие пути поиск в глубину и подобное разделяй и властвуй Структуры данных *3200

В Байтландии есть \(n\) городов, некоторые пары которых соединены дорогами, по которым можно ездить в обе стороны. \(i\)-я дорога характеризуется сложностью проезда по ней \(w_i\). Время проезда по дороге со сложностью \(w_i\) равняется \(\lceil\frac{w_i}{c}\rceil\) часов, где \(c\) — навык вождения водителя.

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

В некоторых городах можно посетить курсы вождения. Если провести в таком городе, изучая курсы, \(T\) часов, то навык вождения \(c\) увеличивается в \(2\) раза. Заметьте, что значение \(T\) одинаково во всех городах, и курсы можно посещать в одном и том же городе несколько раз.

Вам нужно ответить на \(q\) запросов: за какое минимальное время можно добраться из города \(a\) в город \(b\), если начать путь с навыком вождения \(c = 1\)?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(T\) (\(1 \le n \le 10^5, 1 \le T \le 10^6\)) - количество городов в Байтландии и время, которое занимает прохождение одного курса.

Каждая из следующих \(n - 1\) строк содержит три целых числа \(u_i\), \(v_i\) и \(w_i\) (\(1 \le u_i, v_i \le n, 1 \le w_i \le 10^6, u_i \neq v_i\)), которые описывают дорогу между городами \(u_i\) и \(v_i\) со сложностью \(w_i\).

Следующая строка содержит бинарную строку \(s\) длины \(n\), состоящую из символов \(0\) и \(1\). Если \(s_i = 1\) (\(1 \le i \le n\)), то в \(i\)-м городе можно пройти курсы. Если \(s_i = 0\) (\(1 \le i \le n\)), то в \(i\)-м городе нельзя пройти курсы.

Следующая строка содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов, на которые вам нужно ответить.

Каждая из следующих \(q\) строк содержит по два числа \(a_j\) и \(b_j\) (\(1 \le a_j, b_j \le n, 1 \le j \le q\)) — вершины, между которыми нужно найти минимальное время поездки в \(j\)-м запросе.

Гарантируется, что система дорог образует дерево. Гарантируется, что сумма \(n\) и сумма \(q\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных в первом запросе оптимально не проходить курсы вождения. Тогда минимальное время равно сложности дороги между городами \(1\) и \(2\), которое равно \(1\).

Во втором наборе входных данных в первом запросе оптимально вначале пройти курсы вождения за \(3\) часа в городе \(1\) один раз, а потом поехать в город \(5\). Тогда всего путь займёт \(3 + \lceil\frac{5}{2}\rceil + \lceil\frac{10}{2}\rceil = 11\) часов.

C. Игра с перестановкой

дп жадные алгоритмы игры Структуры данных *1400

Алиса и Боб играют в игру. У них есть перестановка \(p\) размера \(n\) (перестановка размера \(n\)  — это массив размера \(n\), где каждый элемент от \(1\) до \(n\) встречается ровно один раз). Также у них есть фишка, которую можно разместить на любом элементе перестановки.

Алиса и Боб делают ходы поочередно: Алиса делает первый ход, затем Боб делает второй ход, затем Алиса делает третий ход и так далее. Во время первого хода Алиса выбирает любой элемент перестановки и ставит фишку на этот элемент. Во время каждого из следующих ходов текущий игрок должен переместить фишку на элемент, который одновременно находится слева и строго меньше текущего элемента (т.е. если фишка находится на \(i\)-м элементе, она может быть перемещена на \(j\)-й элемент, если \(j < i\) и \(p_j < p_i\)). Если игрок не может сделать ход (переместить фишку в соответствии с правилами игры невозможно), этот игрок выигрывает в игре.

Скажем, что \(i\)-й элемент перестановки счастливый, если выполняется следующее условие:

  • если Алиса поставит фишку на \(i\)-й элемент во время своего первого хода, она может выиграть игру независимо от того, как играет Боб (т.е. у нее есть выигрышная стратегия).

Ваша задача — посчитайте количество счастливых элементов в перестановке.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество элементов в перестановке.

Вторая строка содержит \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\)). Все \(p_i\) различны.

Сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество счастливых элементов в перестановке.

Примечание

В первом наборе входных данных из примера \(3\)-й элемент — счастливый.

Во втором наборе входных данных из примера нет счастливых элементов.

В третьем наборе входных данных из примера \(2\)-й элемент — счастливый.

В четвертом наборе входных данных из примера \(3\)-й и \(4\)-й элемент — счастливые.

E. Редактор с быстрым перемещением

графы кратчайшие пути поиск в глубину и подобное Структуры данных *2400

Задана строка \(s\), состоящая из строчных латинских букв.

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

Вы можете совершить любое количество действий с курсором (возможно, ноль). Каждое действие должно быть одного из трех типов:

  • подвинуть курсор на одну позицию влево (если это не поместит его до первой буквы);
  • подвинуть курсор на одну позицию вправо (если это не поместит его после последней буквы);
  • пусть \(x\) — буква сразу слева от курсора, а \(y\) — буква сразу справа. Вы можете выбрать любую пару соседних букв в строке, такую, что левая буква в паре тоже \(x\), а правая тоже \(y\), и переместить курсор в позицию между этими двумя буквами.

Вы должны обработать \(m\) запросов. В каждом запросе задаются два целых числа \(f\) и \(t\), описывающих корректные позиции курсора в строке; в качестве ответа на запрос вы должны вывести минимальное количество действий, требуемое, чтобы переместить курсор из позиции \(f\) в позицию \(t\).

Входные данные

В первой строке записана строка \(s\) (\(2 \le |s| \le 5 \cdot 10^4\)), состоящая из строчных латинских букв.

Во второй строке записано одно целое число \(m\) (\(1 \le m \le 5 \cdot 10^4\)) — количество запросов.

В \(i\)-й из следующих \(m\) строк записаны два целых числа \(f\) и \(t\) (\(1 \le f, t \le |s| - 1\)) — начальная и конечная позиции курсора в \(i\)-м запросе. Позиция \(x\) означает, что курсор находится между \(x\)-й и \((x+1)\)-й буквами строки (в \(1\)-индексации).

Выходные данные

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

F. Вычисляем ПСП

геометрия математика реализация сортировки Структуры данных *2900

Заданы \(2n\) наборов \((a, b, c)\), где \(a\) и \(b\) — некоторые положительные целые числа, а \(c\) — скобка '(' или ')'. В ровно \(n\) наборах \(c = \)'(', в остальных \(n\) — \(c =\) ')'.

Требуется выбрать два положительных числа \(x\) и \(y\) (\(x > 0\) и \(y > 0\); не обязательно целые) и отсортировать наборы в порядке возрастания \(a \cdot x + b \cdot y\). Если у нескольких наборов одно и то же значение, то их можно расположить в произвольном порядке друг между другом.

Можно ли выбрать такие значения \(x\) и \(y\), что, взяв скобки \(c\) из наборов в полученном порядке, мы получим правильную скобочную последовательность?

Правильной скобочной последовательностью называется скобочная последовательность, которую можно преобразовать в корректное арифметическое выражение путем вставок между ее символами символов «1» и «+».

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1500\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 1500\)).

В \(i\)-й из следующих \(2n\) строк записаны два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^6\)) и символ \(c_i\) (\(c_i = \)'(' или \(c_i = \)')'). В ровно \(n\) наборах \(c_i = \)'(', в остальных \(n\) — \(c_i =\) ')'.

Сумма \(n\) по всем наборам входных данных не превосходит \(1500\).

Выходные данные

На каждый набор входных данных выведите «YES», если возможно выбрать такие значения \(x\) и \(y\), что, взяв скобки \(c\) из наборов в полученном порядке, мы получим правильную скобочную последовательность. Иначе выведите «NO».

Примечание

В первом наборе входных данных можно выбрать \(x = 10, y = 0.1\). Значения для наборов тогда будут \(10 \cdot 1 + 0.1 \cdot 4 = 10.4\) и \(10 \cdot 2 + 0.1 \cdot 3 = 20.3\). Тогда сначала будет первый набор, за ним второй, из чего получается скобочная последовательность «()», которая является правильной.

Во втором наборе невозможно выбрать такие положительные \(x\) и \(y\), что открывающей скобке будет присвоено значение, меньше или равное значению закрывающей скобки.

В четвертом наборе можно выбрать \(x = 0.6, y = 0.55\). Скобочная последовательность будет «(()(()))».

C. Запросы к массиву

Деревья поиск в глубину и подобное реализация Строки Структуры данных *1600

У Монокарпа был массив \(a\), состоящий из целых чисел. Изначально массив был пустым.

Монокарп выполнял три типа запросов к этому массиву:

  • выбрать число и добавить его в конец массива. Каждый раз, когда Монокарп выполнял этот запрос, он выписывал символ +;
  • удалить последний элемент из массива. Каждый раз, когда Монокарп выполнял этот запрос, он выписывал символ -. Монокарп не выполнял этот запрос, если массив был пуст;
  • проверить, отсортирован ли массив в порядке неубывания, т. е. выполняется ли \(a_1 \le a_2 \le \dots \le a_k\), где \(k\) — количество элементов в массиве на данный момент. Любой массив, содержащий меньше \(2\) элементов, считается отсортированным. Если массив отсортирован в момент запроса, Монокарп выписывал символ 1. Иначе он выписывал символ 0.

Вам задана строка \(s\), состоящая из \(q\) символов 0, 1, + и/или -. Это символы, выписанные Монокарпом, строго в том порядке, в каком он их выписывал.

Вам нужно выяснить, является ли эта строка непротиворечивой, т. е. мог ли Монокарп выполнять такие запросы, что выписанная после них строка равна строке \(s\).

Входные данные

Первая строка входных данных содержит одно число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит строку \(s\) (\(1 \le |s| \le 2 \cdot 10^5\)). Это строка состоит из символов 0, 1, + и/или -. Это символы, выписанные Монокарпом, строго в том порядке, в каком он их выписывал.

Дополнительные ограничения на входные данные:

  • для любого префикса \(s\) количество символов + не меньше количества символов -. Другими словами, если бы Монокарп выполнял описанные в условии запросы, он никогда не пытался бы удалить элемент из пустого массива;
  • сумма \(|s|\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).
Выходные данные

Для каждого набора входных данных выведите YES, если Монокарп мог выполнить такие запросы, в результате которых будет выписана строка \(s\). Иначе выведите NO.

Вы можете выводить символы в ответе в любом регистре.

Примечание

В первом наборе входных данных Монокарп мог выполнить следующие запросы:

  • добавить число \(13\);
  • добавить число \(37\);
  • проверить, что массив \([13, 37]\) отсортирован в порядке неубывания (и он действительно отсортирован).

В пятом наборе входных данных Монокарп мог выполнить следующие запросы:

  • добавить число \(3\);
  • добавить число \(2\);
  • проверить, что массив \([3, 2]\) отсортирован (он не отсортирован);
  • удалить последний элемент;
  • добавить число \(3\);
  • проверить, что массив \([3, 3]\) отсортирован (он отсортирован);
  • удалить последний элемент;
  • добавить число \(-5\);
  • проверить, что массив \([3, -5]\) отсортирован (он не отсортирован);

В остальных наборах входных данных Монокарп не мог выписать строку \(s\), выполняя свои запросы.

C. Забор в цветочном городе

Бинарный поиск реализация сортировки Структуры данных *1100

Аня живет в цветочном городе. По указу мэра города она должна построить себе забор.

Забор состоит из \(n\) досок, каждая из которых высотой \(a_i\) метров. По указу высоты досок должны не возрастать. То есть верно, что \(a_i \ge a_j\) для всех \(i < j\).

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

Например, для \(n = 5\), \(a = [5, 4, 3, 2, 1]\) забор является симметричным. Так как если уложить все доски горизонтально, то получится забор \([5, 4, 3, 2, 1]\), как на картинке.

Слева забор \([5, 4, 3, 2, 1]\), справа этот же забор, уложенный горизонтально

А для \(n = 3\), \(a = [4, 2, 1]\) забор не является симметричным. Так как если уложить все доски горизонтально, то получится забор \([3, 2, 1, 1]\), как на картинке.

Слева забор \([4, 2, 1]\), справа этот же забор, уложенный горизонтально

Помогите Ане и выясните является ли ее забор симметричным.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина забора.

Во второй строке набора содержатся \(n\) натуральных чисел \(a_1 \ge a_2 \ge a_3 \ge \dots \ge a_n\) (\(1 \le a_i \le 10^9\)) — высоты досок.

Cумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если забор симметричный, в противном случае выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом и втором наборах входных данных примера забор является симметричным.

В третьем наборе входных данных примера забор не является симметричным. Если уложить доски горизонтально, то получится забор \([3, 2, 1, 1]\).

В четвертом наборе входных данных примера забор не является симметричным. Если уложить доски горизонтально, то получится забор \([1, 1]\).

В пятом и шестом наборах входных данных примера забор является симметричным.

В седьмом наборе входных данных примера забор не является симметричным. Если уложить доски горизонтально, то получится забор \([2, 1, 1, 1, 1, 1]\).

E. Коля и кинотеатр

жадные алгоритмы Конструктив Структуры данных *1600

Недавно Коля узнал, что скоро в его городе откроется новый кинотеатр, который будет показывать новый фильм каждый день на протяжении \(n\) дней. Так, в день номер \(1 \le i \le n\), кинотеатр покажет премьеру \(i\)-го фильма. Коля узнал расписание фильмов и сопоставил каждому фильму его интересность — целую величину \(a_i\).

Однако даже самые интересные фильмы не будут казаться такими, если фильмы долго не смотреть, поэтому интересность очередного фильма снизится на \(d \cdot cnt\), где \(d\) — заранее определенная величина, а \(cnt\) — кол-во дней с последнего посещения кинотеатра. Также известно, что Коля успел посетить другой кинотеатр за день до открытия нового — в день номер \(0\). Так, если мы впервые посетим кинотеатр в день с номером \(i\), то \(cnt\) — кол-во дней с последнего посещения кинотеатра будет равно \(i\).

Так, например, если \(d = 2\), а \(a = [3, 2, 5, 4, 6]\), то посетив фильмы с номерами \(1\) и \(3\), значение \(cnt\) для дня номер \(1\) будет равно \(1 - 0 = 1\), а значение \(cnt\) для дня номер \(3\) будет равно \(3 - 1 = 2\), так суммарная интересность фильмов будет \(a_1 - d \cdot 1 + a_3 - d \cdot 2 = 3 - 2 \cdot 1 + 5 - 2 \cdot 2 = 2\).

К несчастью, у Коли есть время только на то, чтобы посетить не более \(m\) фильмов. Помогите ему составить план посещения кинотеатра так, чтобы суммарная интересность всех посещенных им фильмов была максимальна.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(d\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le m \le n\), \(1 \le d \le 10^9\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — интересность фильмов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — максимальную суммарную интересность просмотренных фильмов.

Примечание

Первый пример разобран в условии.

Во втором примере, оптимально не посещать никакие фильмы.

В третьем наборе входных данных оптимально посетить фильмы с номерами \(2\), \(3\), \(5\), \(6\), тогда суммарная интересность посещенных фильмов составит \(45 - 6 \cdot 2 + 1 - 6 \cdot 1 + 39 - 6 \cdot 2 + 11 - 6 \cdot 1 = 60\).

G. Великий Уравнитель

Бинарный поиск математика сортировки Структуры данных *2000

Тёма приобрел на радиорынке старый прибор с маленьким экраном и потёртой надписью «Великий Уравнитель» на боковой стенке.

Продавец сказал, что прибору на вход необходимо подать массив целых чисел \(a\), после чего «Великий Уравнитель» будет работать следующим образом:

  1. Отсортировать текущий массив по неубыванию и выкинуть повторяющиеся элементы, оставляя только одно вхождение каждого элемента.
  2. Если текущая длина массива равна \(1\), прибор заканчивает работу и выводит на экран единственное число массива — результат работы прибора.
  3. Прибавить к текущему массиву арифметическую прогрессию {\(n,\ n - 1,\ n - 2,\ \ldots,\ 1\)}, где \(n\) — длина текущего массива. Иными словами, к \(i\)-у элементу массива, при нумерации с нуля, прибавится \(n - i\).
  4. Перейти к первому шагу.

Чтобы протестировать работу прибора, Тёма придумал некоторый массив целых чисел \(a\), после чего захотел проделать \(q\) операций с массивом \(a\) следующего вида:

  1. Присвоить элементу \(a_i\) (\(1 \le i \le n\)) значение \(x\) (\(1 \le x \le 10^9\)).
  2. Подать на вход прибору массив \(a\) и узнать результат работы прибора, при этом во время работы прибора, массив \(a\) не изменяется.

Помогите Тёме узнать результат работы прибора после каждого запроса изменения.

Входные данные

В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов.

В первой строке набора содержится единственное число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер массива \(a\), который изначально придумал Тёма.

Во второй строке набора содержится \(n\) чисел \(a_1, a_2, a_3, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

В третьей строке набора содержится единственное число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

В каждой из следующих \(q\) строк набора содержится два целых числа \(i\) (\(1 \le i \le n\)) и \(x\) (\(1 \le x \le 10^9\)) — описания запросов.

Гарантируется, что сумма значений \(n\) и сумма значений \(q\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел — результат работы прибора после каждого запроса изменения.

Примечание

Давайте рассмотрим первый пример входных данных.

Сначала массив чисел, подаваемый на вход прибору будет равен \([6, 4, 8]\). Он будет меняться следующим образом: \(\)[6, 4, 8] \rightarrow [4, 6, 8] \rightarrow [7, 8, 9] \rightarrow [10, 10, 10] \rightarrow [10]\(\)

Затем массив чисел, подаваемый на вход прибору будет равен \([6, 10, 8]\). Он будет меняться следующим образом: \(\)[6, 10, 8] \rightarrow [6, 8, 10] \rightarrow [9, 10, 11] \rightarrow [12, 12, 12] \rightarrow [12]\(\)

Последний массив чисел, подаваемый на вход прибору будет равен \([6, 10, 1]\). Он будет меняться следующим образом: \(\)[6, 10, 1] \rightarrow [1, 6, 10] \rightarrow [4, 8, 11] \rightarrow [7, 10, 12] \rightarrow [10, 12, 13] \rightarrow [13, 14, 14] \rightarrow [13, 14] \rightarrow [15, 15] \rightarrow [15]\(\)

D. Матричный каскад

дп жадные алгоритмы Конструктив математика Перебор Структуры данных *1700

Дана матрица размера \(n \times n\), состоящая из 0 и 1. Строки матрицы пронумерованы от \(1\) до \(n\) сверху вниз, столбцы пронумерованы от \(1\) до \(n\) слева направо. Клетку на пересечении \(x\)-й строки и \(y\)-го столбца обозначим как \((x, y)\).

AquaMoon хочет превратить все элементы матрицы в 0. За один шаг она может выполнить следующую операцию:

  • выбрать произвольную клетку, пусть это \((i, j)\), затем инвертировать элемент в клетке \((i, j)\), а также инвертировать все элементы в клетках \((x, y)\), для которых \(x > i\) и \(x - i \ge \left|y - j\right|\). Инвертирование — это замена символа на противоположный: 0 на 1, 1 на 0.

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2 \le n \le 3000\)).

В \(i\)-й из следующих \(n\) строк содержится бинарная строка, состоящая только из символов 0 и 1, имеющая длину \(n\).

Гарантируется, что сумма значений \(n^2\) по всем наборам входных данных не превосходит \(9\,000\,000\).

Выходные данные

Для каждого набора входных данных выведите наименьшее необходимое число шагов.

Примечание

В первом наборе входных данных можно действовать так:

  1. выполнить операцию для клетки \((1, 3)\).

Очевидно, изначально не все элементы матрицы равны 0, так что необходима как минимум одна операция. Значит, \(1\) и есть ответ.

В втором наборе входных данных можно действовать так:

  1. выполнить операцию для клетки \((3, 3)\);
  2. выполнить операцию для клетки \((1, 1)\).

Можно показать, что невозможно превратить все элементы в 0 за \(0\) шагов или за \(1\) шаг, так что ответ равен \(2\).

E. Угадайка

битмаски Деревья игры математика сортировки Строки Структуры данных Теория вероятностей *2100

У Кэрол есть последовательность \(s\) из \(n\) неотрицательных целых чисел. Она хочет сыграть с Алисой и Бобом в «Угадайку».

Игра устроена следующим образом. Сначала Кэрол случайно выберет два целых индекса \(i_a\) и \(i_b\) из диапазона \([1, n]\) и обозначит \(a=s_{i_a}\), \(b=s_{i_b}\). Обратите внимание: \(i_a\) и \(i_b\) могут совпасть.

Затем Кэрол сообщит:

  • значение \(a\) — Алисе;
  • значение \(b\) — Бобу;
  • значение \(a \mid b\) и Алису и Бобу, где \(|\) обозначает операцию побитового ИЛИ.

Обратите внимание: Кэрол не сообщит никакой информации об \(s\) ни Алисе, ни Бобу.

Затем начинается процесс угадывания. Алиса и Боб ходят по очереди, причём первой ходит Алиса. Цель обоих игроков — выяснить, какое из утверждений верно: \(a < b\), \(a > b\), или \(a = b\).

На своём ходу игрок может сделать одно из двух:

  • сказать «Я не знаю» и передать ход другому игроку;
  • сказать «Я знаю», а затем сообщить ответ: «\(a<b\)», «\(a>b\)», или же «\(a=b\)»; после этого игра заканчивается.

Алиса и Боб слышат фразы друг друга и могут использовать их в своих рассуждениях. Оба игрока достаточно умны. Сказать «Я знаю» они могут только в том случае, если точно уверены в ответе.

Найдите математическое ожидание числа шагов в такой игре. Выведите ответ по модулю \(998\,244\,353\).

Формально, пусть \(M = 998\,244\,353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2\cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(s_1,s_2,\ldots, s_n\) (\(0 \le s_i < 2^{30}\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — ответ на задачу по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных есть всего \(4\) возможные ситуации:

  1. \(i_a=1\), \(i_b=1\), \(a=2\), \(b=2\), число шагов равно \(2\);
  2. \(i_a=1\), \(i_b=2\), \(a=2\), \(b=3\), число шагов равно \(3\);
  3. \(i_a=2\), \(i_b=1\), \(a=3\), \(b=2\), число шагов равно \(2\);
  4. \(i_a=2\), \(i_b=2\), \(a=3\), \(b=3\), число шагов равно \(3\).

Математическое ожидание числа шагов равно \(\frac{2+3+2+3}{4}=\frac{5}{2}=499122179\pmod{998244353}\).

Рассмотрим первый случай, когда \(a=2\), \(b=2\). Процесс угадывания происходит следующим образом.

На первом ходу Алиса думает так: «Я знаю, что \(a=2, a\mid b=2\). Можно сделать вывод, что \(b=0\) или \(b=2\), но какой из этих двух случаев имеет место — пока неясно». Поэтому она говорит: «Я не знаю».

На втором ходу Боб думает так: «Я знаю, что \(b=2, a\mid b=2\). Можно сделать вывод, что \(a=0\) или \(a=2\). Однако если \(a=0\), то Алиса на своём ходу уже бы сказала, что \(a<b\). Но она этого не сказала. Значит, \(a=2\)». Поэтому он говорит: «Я знаю, \(a=b\)». Игра завершается.

Во втором наборе входных данных, при \(a=0\), \(b=0\), Алиса сразу заключает, что \(a=b\). Ожидаемое число ходов равно \(1\).

F. Экзотические запросы

реализация сортировки Структуры данных *2300

AquaMoon дала RiverHamster последовательность целых чисел \(a_1,a_2,\dots,a_n\), а RiverHamster задал вам \(q\) запросов. Каждый запрос характеризуется двумя целыми числами \(l\) и \(r\).

При ответе на каждый запрос вы можете выбрать любой непрерывный отрезок последовательности и вычесть из всех его элементов одно и то же неотрицательное число. Выполнять эту операцию можно несколько (возможно, ноль) раз. Однако нельзя выбрать два пересекающихся отрезка, которые были бы не вложены друг в друга. Ваша задача — превратить в \(0\) все числа, у которых изначальное значение лежало в диапазоне \([l, r]\). Сделать это нужно за наименьшее число операций.

Обратите внимание, что запросы независимы, числа в массиве возвращаются к своим первоначальным значениям между запросами.

Формально, для каждого запроса нужно найти наименьшее \(m\), для которого существует последовательность \(\{(x_j,y_j,z_j)\}_{j=1}^{m}\), удовлетворяющая следующим условиями:

  • для любого \(1 \le j \leq m\) выполняется \(z_j \ge 0\) и \(1 \le x_j \le y_j \leq n\) (здесь \([x_j, y_j]\) представляют отрезки в последовательности);
  • для любых \(1 \le j < k \le m\) выполняется \([x_j,y_j]\subseteq[x_{k},y_{k}]\), \([x_k,y_k]\subseteq[x_{j},y_{j}]\), или \([x_j,y_j]\cap[x_{k},y_{k}]=\varnothing\);
  • для любого \(1 \le i \le n\), такого что \(l \le a_i \leq r\), выполняется \(\){\large a_i = \sum\limits_{\substack {1 \le j \le m \\ x_j \le i \le y_j}} z_j. }\(\)
Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1\le n,q\le 10^6\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)).

Каждая из следующих \(q\) строк содержит по два целых числа \(l\) и \(r\) (\(1\le l\le r\le n\)), характеризующий очередной запрос.

Выходные данные

Выведите ответ на каждый запрос на отдельной строке.

Примечание

В первом наборе входных данных рассмотрим второй запрос: \(l = 2\), \(r = 2\). Элементы, которые нужно обнулить, суть \([a_3, a_5, a_{10}] = [2, 2, 2]\). Достаточно применить последовательность операций \(\{(2, 10, 2)\}\).

В четвёртом запросе \(l = 2\), \(r = 3\). Обнулить нужно элементы \([a_3, a_4, a_5, a_7, a_{10}] = [2, 3, 2, 3, 2]\). Достаточно применить последовательность операций \(\{(1, 10, 2), (4, 4, 1), (7, 7, 1)\}\).

Во втором наборе входных данных можно заметить, что последовательность операций \(\{(1, 2, 1), (2, 3, 2)\}\) не является допустимой, потому что два используемых отрезка пересекаются, но не вложены один в другой.

F. Freak Joker Process

Бинарный поиск сортировки Структуры данных *3100

After the success of the basketball teams formed and trained by Pak Chanek last year (Basketball Together), Pak Chanek wants to measure the performance of each player that is considered as a superstar.

There are \(N\) superstar players that have been trained by Pak Chanek. At the end of the season, some calculations will be made on the performance of the \(N\) players using an international method. Each player has two values \(A_i\) and \(B_i\) where each represents the offensive and defensive value of that player.

Define \(\text{RankA}(i)\) as the offensive ranking of the \(i\)-th player, whose value is \(c+1\) with \(c\) here representing the number of \(j\) (\(1 \leq j \leq N\)) such that \(A_j>A_i\). Define \(\text{RankB}(i)\) as the defensive ranking of the \(i\)-th player, whose value is \(c+1\) with \(c\) here representing the number of \(j\) (\(1 \leq j \leq N\)) such that \(B_j>B_i\).

Define \(\text{RankOverall}(i)\) as the overall ranking of the \(i\)-th player, whose value is \(c+1\) with \(c\) here representing the number of \(j\) (\(1 \leq j \leq N\)) such that \(\text{RankA}(j)+\text{RankB}(j)<\text{RankA}(i)+\text{RankB}(i)\).

During the next \(Q\) days, exactly one event will happen on each day. Each event is one of the three following possibilities:

  • 1 k c – If \(c\) is +, then \(A_k\) increases by \(1\). If \(c\) is -, then \(A_k\) decreases by \(1\). (\(1\leq k\leq N\); \(c\) is + or -)
  • 2 k c – If \(c\) is +, then \(B_k\) increases by \(1\). If \(c\) is -, then \(B_k\) decreases by \(1\). (\(1\leq k\leq N\); \(c\) is + or -)
  • 3 k – Pak Chanek wants to know the value of \(\text{RankOverall}(k)\) at that moment. (\(1\leq k\leq N\))
Input

The first line contains a single integer \(N\) (\(1\leq N\leq10^5\)) — the number of superstar players.

The second line contains \(N\) integers \(A_1, A_2, A_3 \ldots, A_N\) (\(1 \leq A_i \leq 10^5\)) — the offensive value of each player.

The third line contains \(N\) integers \(B_1, B_2, B_3 \ldots, B_N\) (\(1 \leq B_i \leq 10^5\)) — the defensive value of each player.

The fourth line contains a single integer \(Q\) (\(1\leq Q\leq10^5\)) — the number of events.

The \(j\)-th of the next \(Q\) lines contains the \(j\)-th event as described. At any moment, each value of \(A_i\) and \(B_i\) is always between \(1\) and \(10^5\) inclusive. There is at least one event of type \(3\).

Output

For each event of type \(3\), output a line containing an integer representing the value of \(\text{RankOverall}(k)\) at that moment.

Note

At the \(8\)-th event, \(A=[3,2,1,3,2]\) and \(B=[3,6,1,4,1]\). It can be obtained that the values of \(\text{RankA}\) and \(\text{RankB}\) for each player are as follows:

  • \(\text{RankA}(1)=1\), \(\text{RankB}(1)=3\)
  • \(\text{RankA}(2)=3\), \(\text{RankB}(2)=1\)
  • \(\text{RankA}(3)=5\), \(\text{RankB}(3)=4\)
  • \(\text{RankA}(4)=1\), \(\text{RankB}(4)=2\)
  • \(\text{RankA}(5)=3\), \(\text{RankB}(5)=4\)

So it can be obtained that \(\text{RankOverall}(1)=2\).

G. Grouped Carriages

Бинарный поиск дп жадные алгоритмы Потоки Структуры данных *2100

Pak Chanek observes that the carriages of a train is always full on morning departure hours and afternoon departure hours. Therefore, the balance between carriages is needed so that it is not too crowded in only a few carriages.

A train contains \(N\) carriages that are numbered from \(1\) to \(N\) from left to right. Carriage \(i\) initially contains \(A_i\) passengers. All carriages are connected by carriage doors, namely for each \(i\) (\(1\leq i\leq N-1\)), carriage \(i\) and carriage \(i+1\) are connected by a two-way door.

Each passenger can move between carriages, but train regulation regulates that for each \(i\), a passenger that starts from carriage \(i\) cannot go through more than \(D_i\) doors.

Define \(Z\) as the most number of passengers in one same carriage after moving. Pak Chanek asks, what is the minimum possible value of \(Z\)?

Input

The first line contains a single integer \(N\) (\(1 \leq N \leq 2\cdot10^5\)) — the number of carriages.

The second line contains \(N\) integers \(A_1, A_2, A_3, \ldots, A_N\) (\(0 \leq A_i \leq 10^9\)) — the initial number of passengers in each carriage.

The third line contains \(N\) integers \(D_1, D_2, D_3, \ldots, D_N\) (\(0 \leq D_i \leq N-1\)) — the maximum limit of the number of doors for each starting carriage.

Output

An integer representing the minimum possible value of \(Z\).

Note

One strategy that is optimal is as follows:

  • \(5\) people in carriage \(1\) move to carriage \(4\) (going through \(3\) doors).
  • \(3\) people in carriage \(5\) move to carriage \(3\) (going through \(2\) doors).
  • \(2\) people in carriage \(6\) move to carriage \(5\) (going through \(1\) door).
  • \(1\) person in carriage \(6\) moves to carriage \(7\) (going through \(1\) door).

The number of passengers in each carriage becomes \([2,4,5,5,4,5,4]\).

K. Keen Tree Calculation

Бинарный поиск геометрия графы Деревья дп реализация Структуры данных *2500

There is a tree of \(N\) vertices and \(N-1\) edges. The \(i\)-th edge connects vertices \(U_i\) and \(V_i\) and has a length of \(W_i\).

Chaneka, the owner of the tree, asks you \(Q\) times. For the \(j\)-th question, the following is the question format:

  • \(X_j\) \(K_j\) – If each edge that contains vertex \(X_j\) has its length multiplied by \(K_j\), what is the diameter of the tree?

Notes:

  • Each of Chaneka's question is independent, which means the changes in edge length do not influence the next questions.
  • The diameter of a tree is the maximum possible distance between two different vertices in the tree.
Input

The first line contains a single integer \(N\) (\(2\leq N\leq10^5\)) — the number of vertices in the tree.

The \(i\)-th of the next \(N-1\) lines contains three integers \(U_i\), \(V_i\), and \(W_i\) (\(1 \leq U_i,V_i \leq N\); \(1\leq W_i\leq10^9\)) — an edge that connects vertices \(U_i\) and \(V_i\) with a length of \(W_i\). The edges form a tree.

The \((N+1)\)-th line contains a single integer \(Q\) (\(1\leq Q\leq10^5\)) — the number of questions.

The \(j\)-th of the next \(Q\) lines contains two integers \(X_j\) and \(K_j\) as described (\(1 \leq X_j \leq N\); \(1 \leq K_j \leq 10^9\)).

Output

Output \(Q\) lines with an integer in each line. The integer in the \(j\)-th line represents the diameter of the tree on the \(j\)-th question.

Note

In the first example, the following is the tree without any changes.

The following is the tree on the \(1\)-st question.

The maximum distance is between vertices \(6\) and \(7\), which is \(6+6+6=18\), so the diameter is \(18\).

The following is the tree on the \(2\)-nd question.

The maximum distance is between vertices \(2\) and \(6\), which is \(3+2+6=11\), so the diameter is \(11\).

C. salyg1n и игра с MEX

жадные алгоритмы игры интерактив Конструктив Структуры данных *1300

Это интерактивная задача!

salyg1n подарил Алисе множество \(S\) из \(n\) различных целых чисел \(s_1, s_2, \ldots, s_n\) (\(0 \leq s_i \leq 10^9\)). Алиса решила сыграть против Боба в игру с этим множеством. Правила игры таковы:

  • Игроки ходят по очереди, первой ходит Алиса.

  • Алиса за один ход добавляет в множество \(S\) одно число \(x\) (\(0 \leq x \leq 10^9\)). Множество \(S\) не должно содержать число \(x\) на момент хода.
  • Боб за один ход удаляет из множества \(S\) одно число \(y\). Множество \(S\) должно содержать число \(y\) на момент хода. Также число \(y\) должно быть строго меньше последнего добавленного Алисой числа.
  • Игра заканчивается, когда Боб не может сделать ход или спустя \(2 \cdot n + 1\) ходов (в таком случае последним ходом будет ход Алисы).
  • Результатом игры назовем \(\operatorname{MEX}\dagger(S)\) (\(S\) на момент конца игры).
  • Алиса стремится максимизировать результат, а Боб минимизировать.

Пусть \(R\) — результат при оптимальной игре обоих игроков. В этой задаче вы играете за Алису против программы жюри, играющей за Боба. Ваша задача — реализовать стратегию Алисы, при которой результат игры всегда будет не меньше \(R\).

\(\dagger\) \(\operatorname{MEX}\) набора чисел \(c_1, c_2, \ldots, c_k\) определяется как наименьшее неотрицательное целое число \(x\), которое не встречается в наборе чисел \(c\). Например, \(\operatorname{MEX}(\{0, 1, 2, 4\})\) \(=\) \(3\).

Входные данные

В первой задано одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество тестовых случаев.

Протокол взаимодействия

Взаимодействие Вашей программы с программой жюри в каждом тестовом случае начинается со считывания целого числа \(n\) (\(1 \leq n \leq 10^5\)) — размера множества \(S\) до начала игры.

Затем считайте одну строку — \(n\) различных целых чисел \(s_i\) \((0 \leq s_1 < s_2 < \ldots < s_n \leq 10^9)\) — множество \(S\) подаренное Алисе.

Чтобы сделать ход выведите целое число \(x\) (\(0 \leq x \leq 10^9\)) — число которое вы хотите добавить в множество \(S\). \(S\) не должно содержать \(x\) на момент хода. Затем считайте одно целое число \(y\) \((-2 \leq y \leq 10^9)\).

  • Если \(0 \leq y \leq 10^9\) — Боб удаляет число \(y\) из множества \(S\). Ваш ход!
  • Если \(y\) \(=\) \(-1\) — игра закончена. После этого следует приступать к обработке следующего тестового случая или завершить программу, если это был последний тестовый случай.
  • Иначе \(y\) \(=\) \(-2\). Это значит, что вы сделали некорректный запрос. Ваша программа должна немедленно завершится, чтобы получить вердикт Неправильный ответ. Иначе она может получить любой другой вердикт.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.
Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(10^5\).

По этой задаче нельзя делать взломы.

Примечание

В первом наборе входных данных множество \(S\) менялось так:

{\(1, 2, 3, 5, 7\)} \(\to\) {\(1, 2, 3, 5, 7, 8\)} \(\to\) {\(1, 2, 3, 5, 8\)} \(\to\) {\(1, 2, 3, 5, 8, 57\)} \(\to\) {\(1, 2, 3, 8, 57\)} \(\to\) {\(0, 1, 2, 3, 8, 57\)}. В конце игры, \(\operatorname{MEX}(S) = 4\), \(R = 4\).

Во втором наборе входных данных множество \(S\) менялось так:

{\(0, 1, 2\)} \(\to\) {\(0, 1, 2, 3\)} \(\to\) {\(1, 2, 3\)} \(\to\) {\(0, 1, 2, 3\)}. В конце игры, \(\operatorname{MEX}(S) = 4\), \(R = 4\).

В третьем наборе входных данных множество \(S\) менялось так:

{\(5, 7, 57\)} \(\to\) {\(0, 5, 7, 57\)}. В конце игры, \(\operatorname{MEX}(S) = 1\), \(R = 1\).

F. НСП?

жадные алгоритмы реализация Структуры данных *3500

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

Дан массив \(a\), состоящий из \(n\) целых чисел.

За одну операцию нужно сделать следующее:

  • Выбрать подотрезок \([l,r]\) (\(1\le l\le r\le n\)) такой, что сумма на этом подотрезке наибольшая среди всех подотрезков в массиве \(a\). Более формально, \(\displaystyle\sum_{i=l}^r a_i=\max_{1\le l'\le r'\le n}\sum_{i=l'}^{r'} a_i\).
  • Затем вычесть \(1\) из всех элементов \(a_l,a_{l+1},\ldots,a_r\).

Найдите минимальное количество операций, которые нужно выполнить, чтобы сделать \(a_i<0\) для всех \(1\le i\le n\).

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — длину массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(-10^6\le a_i\le 10^6\)) — элементы массива \(a\).

Выходные данные

Выведите одно целое число — минимальное количество операций.

Примечание

В первом примере вы можете выполнить операции на подотрезках \([1,5],[1,5],[2,5],[3,5],[4,5],[5,5]\) в таком порядке. Ещё вы можете выполнить операции на подотрезках \([1,5],[2,5],[3,5],[4,5],[5,5],[1,5]\) в таком порядке.

Во втором примере уже выполнено условие \(a_i<0\) для всех \(1\le i\le n\). Поэтому вам не нужно выполнять никаких операций.

D. Контракт с БАПом

Структуры данных *2800

В последней войне PMP победил всех своих соперников и вышел в финал. Но после окончания полуфинала зло ударило его в спину и убило! Упокой Господь его душу.

Перед смертью PMP подписал контракт с быстрыми автобусными перевозками (БАП), которые улучшают общественный транспорт за счет оптимизации оценки времени путешествия. Вы должны помочь PMP закончить его последний контракт.

Каждая линия БАП — это прямая, проходящая через n перекрестков. На каждом перекрестке есть светофор, который циклически меняется от зеленого к красному. Он начинает светиться зеленым в нулевой момент времени. Во время зеленой фазы, которая длится g секунд, транспорт может проезжать. После зеленой фазы цвет меняется на красный и остается таким r секунд. Во время красной фазы транспорту запрещено проезжать. Если транспортное средство достигает перекрестка ровно в тот момент, когда светофор меняется на красный, оно должно остановиться, но транспортное средство может проезжать, если светофор только что изменил цвет на зеленый.

Все светофоры синхронизированы, то есть во все моменты времени показывают одинаковый свет. Иными словами, период красного (и зеленого) цвета одинаковый для всех светофоров, и все они начинают гореть зеленым в нулевой момент времени.

Компания БАП рассчитала время, необходимое автобусу для того, чтобы проехать каждый участок дороги. Участок дороги — это отрезок дороги между двумя идущими подряд светофорами или станцией отправки (или прибытия). Точнее, специалисты БАП предоставляют n + 1 положительных целых чисел li — время в секундах, необходимое автобусу для проезда по i-му участку дороги на пути от станции отправки до станции прибытия. Число l1 обозначает время, необходимое автобусу для преодоления расстояния между станцией отправки и первым перекрестком. Число ln + 1 обозначает время от последнего перекрестка до станции прибытия.

За день q автобусов покидают станцию отправки. Из них i-ый автобус начинается ехать со станции отправки в момент времени ti (в секундах). Аналитики БАПа хотят знать для каждого автобуса, когда он добирается до станции прибытия.

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

Входные данные

В первой строке входного файла записаны через пробел три целых положительных числа n, g, r (1 ≤ n ≤ 105, 2 ≤ g + r ≤ 109) — количество перекрестков, продолжительность зеленой фазы и продолжительность красной фазы. В следующей строке записано n + 1 целых чисел li (1 ≤ li ≤ 109) — время, за которое преодолевается i-ый участок дороги на пути из станции отправления к станции прибытия.

Следующая строка содержит единственное целое число q (1 ≤ q ≤ 105) — количество автобусов за день. На i-ой из следующих q строк записано целое число ti (1 ≤ ti ≤ 109) — время выезда i-го автобуса со станции отправления.

Выходные данные

На i-ой строке выходного файла выведите единственное целое число — время, когда i-ый автобус достигает станции прибытия.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

Примечание

В первом тестовом примере, автобусы #1, #2 и #5 достигнут станции прибытия, не останавливаясь на красный свет. Автобусам #3 и #4 придется подождать пока загорится зеленый.

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

E. Райский Тур

жадные алгоритмы Структуры данных *2900

История не была закончена, как думал PMP. Бог предложил ему еще один шанс перевоплотиться и вернуться к жизни. Но прежде чем он сможет вернуться, Бог сказал ему, что PMP должен расспросить n великих людей, включая выдающихся программистов, об их жизненном опыте.

Эти люди стоят на одной прямой. Они пронумерованы от 1 до n слева направо. Человек номер i стоит в точке с координатой xi (xi < xi + 1, i < n). PMP должен посетить всех этих людей одного за другим в произвольном порядке. Каждого человека надо посетить ровно один раз. PMP начинает обход, подойдя к месту s-го человека, после чего вступает с ним в разговор и перенимает его опыт.

Каждый раз, когда PMP хочет изменить свою позицию, он должен дать билет ангелу, и ангел относит его к месту назначения. Ангелы берут PMP в одном месте, летят к пункту назначения и приземляют его там. При перемещении они никого не посещают. Перелет от i-го до j-го человека занимает |xi - xj| времени. PMP может вернуться к жизни, как только он посетит всех людей.

Есть два вида ангелов: некоторые ангелы летают вправо и принимают только билеты направо. Другие летят налево и принимают только билеты налево. Есть неограниченное количество ангелов каждого типа. PMP имеет l левых билетов и n - 1 - l правых билетов.

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

Входные данные

Первая строка входного файла содержит через пробел три целых числа n, l, s (2 ≤ n ≤ 105, 0 ≤ l < n, 1 ≤ s ≤ n) — количество людей, которых надо посетить, количество билетов налево в распоряжении PMP и его изначальное положение. Следующая строка содержит n целых чисел через пробел. На этой строке i-ое целое число — xi (0 = x1 < x2 < ... < xn ≤ 109) — позиция i-го человека.

Выходные данные

Если PMP не сможет посетить всех людей с билетами, которые у него есть, выведите -1 в единственной строке выходного файла. В противном случае, выведите на первой строке минимальное количество времени, за которое PMP может посетить всех людей. На второй строке выведите n - 1 целых чисел — номера людей, которых должен посетить PMP в порядке, формирующем оптимальное решение. Если ответов несколько, выведите любой.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

Примечание

Помянем величайшего программиста всех времен, который покинул нас около года назад. Покойся с миром, Ренат Муллаханов.

C. Разноцветная таблица

Бинарный поиск дп математика реализация Структуры данных *1300

Вам даны два целых числа \(n\) и \(k\). Также вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\) размера \(n\). Известно, что для всех \(1 \leq i \leq n\) верно, что \(1 \leq a_i \leq k\).

Определим двумерный массив \(b\) размера \(n \times n\) так: \(b_{i, j} = \min(a_i, a_j)\). Представим массив \(b\) как квадрат, где верхняя левая клетка — это \(b_{1, 1}\), строки нумеруются сверху вниз от \(1\) до \(n\), столбцы — слева направо от \(1\) до \(n\). Назовём цветом клетки число, которое в ней записано (для клетки с координатами \((i, j)\) это \(b_{i, j}\)).

Для каждого цвета от \(1\) до \(k\) найдём минимальный прямоугольник в массиве \(b\), содержащий все клетки этого цвета. Выведите сумму ширины и высоты этого прямоугольника.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq n, k \leq 10^5\)) — размер массива \(a\), а также количество цветов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq k\)) — массив \(a\).

Гарантируется, что суммы значений \(n\) и \(k\) по всем наборам входных данных не превосходят \(10^5\).

Выходные данные

На каждый набор входных данных выведите \(k\) чисел: сумму ширины и высоты минимального прямоугольника, содержащего все клетки одного цвета, для цветов от \(1\) до \(k\).

Примечание

В первом наборе входных данных весь массив \(b\) состоит из цвета \(1\), поэтому минимальный прямоугольник для цвета \(1\) имеет размер \(2 \times 2\), сумма его сторон это \(4\).

Во втором наборе входных данных массив \(b\) выглядит так:

11
12

Одна из угловых клеток имеет цвет \(2\), три остальные клетки имеют цвет \(1\). Поэтому для цвета \(1\) минимальный прямоугольник имеет размер \(2 \times 2\), а для цвета \(2\)\(1 \times 1\).

В последнем наборе входных данных \(b\) выглядит так:

11111
12221
12321
12221
11111

G. МЕХанизация

Структуры данных *3300

Определим \(f(S)\). Пусть у вас есть мультимножество (то есть в нём могут быть повторяющиеся элементы) целых неотрицательных чисел \(S\). За одну операцию вы можете выбрать любое непустое подмножество множества \(S\) (в нём также могут быть повторяющиеся элементы), удалить это подмножество (все входящие в него элементы) из множества \(S\), и добавить в \(S\) MEX удалённого подмножества. Вы можете сделать произвольное число таких операций. После всех операций в \(S\) должно остаться ровно \(1\) число. \(f(S)\) — это наибольшее число, которое могло остаться в \(S\) после любого набора операций.

Вам дан массив целых неотрицательных чисел \(a\) длины \(n\). Для каждого из его \(n\) префиксов посчитайте \(f(S)\), если \(S\) — это этот префикс (для \(i\)-го префикса \(S\) это первые \(i\) элементов массива \(a\)).

MEX (minimum excluded, минимальное отсутствующее) массива — это наименьшее целое неотрицательное целое число, которое не принадлежит массиву. Например:

  • MEX массива \([2,2,1]\) равен \(0\), потому что \(0\) не принадлежит массиву.
  • MEX массива \([3,1,0,1]\) равен \(2\), потому что \(0\) и \(1\) принадлежат массиву, а \(2\) — нет.
  • MEX массива \([0,3,1,2]\) равен \(4\), потому что \(0\), \(1\), \(2\) и \(3\) принадлежат массиву, а \(4\) — нет.
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — размер массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 2 \cdot 10^5\)) — массив \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите \(n\) чисел: \(f(S)\) для каждого из \(n\) префиксов массива \(a\).

Примечание

Рассмотрим первой набор входных данных. Для префикса длины \(1\) изначально мультимножество это \(\{179\}\), если ничего не делать, мы получим \(179\).

Для префикса длины \(2\) изначально мультимножество это \(\{57, 179\}\), и используя данную последовательность операций можно получить \(2\):

  1. применить операцию к \(\{57\}\), мультимножество после этого — \(\{0, 179\}\).
  2. применить операцию к \(\{179\}\), мультимножество после этого — \(\{0, 0\}\).
  3. применить операцию к \(\{0\}\), мультимножество после этого — \(\{0, 1\}\).
  4. применить операцию к \(\{0, 1\}\), мультимножество после этого — \(\{2\}\), это и есть наш ответ.

Рассмотрим второй набор входных данных. Для префикса длины \(1\) изначально мультимножество это \(\{0\}\), если применить к \(\{0\}\) операцию, мы получим мультимножество \(\{1\}\), это и будет ответом.

H. Стандартная задача на графы

графы Деревья жадные алгоритмы Структуры данных *3500

Вам дан взвешенный ориентированный граф, содержащий \(n\) вершин и \(m\) ребер. Каждая вершина графа может быть выделенной или обычной, изначально все вершины обычные. Ценой графа назовём минимальную суммарную цену рёбер, которые нужно взять, чтобы из каждой обычной вершины была достижима по взятым ребрам хотя бы одна любая выделенная вершина. Если такого набора рёбер не существует, то цена равна \(-1\).

Вам предстоит вычислить цену графа после каждого из \(q\) запросов. Запросы бывают двух типов:

  • \(+\;v_i\) делает вершину \(v_i\) выделенной; гарантируется, что перед запросом вершина была обычной.
  • \(-\;v_i\) делает вершину \(v_i\) обычной; гарантируется, что перед запросом вершина была выделенной.

Выведите цену графа после каждого из \(q\) запросов.

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(q\) (\(3 \le n \le 2 \cdot 10^5, 1 \le m, q \le 2 \cdot 10^5\)) — количество вершин графа, количество рёбер и число запросов.

Следующие \(m\) строк содержат рёбра графа, по одному ребру в каждой строке. \(i\)-я строка содержит три целых числа \(u_i\), \(v_i\) и \(c_i\) (\(1 \leq u_i, v_i \leq n, u_i \ne v_i, 1 \leq c_i \leq 10^6\)) — концы \(i\)-го ребра (из \(u_i\) в \(v_i\)), а также его вес (\(c_i\)).

Следующие \(q\) строк содержат запросы, по одному запросу в каждой строке. \(i\)-я строка содержит \(+\;v_i\), если это операция первого типа, и \(-\;v_i\), если это операция второго типа (\(1 \leq v_i \leq n\)).

Выходные данные

Выведите \(q\) чисел. \(i\)-е число — это цена графа после первых \(i\) запросов.

Примечание

В первом тесте:

  • Посыле первого запроса выгоднее всего взять ребра с номерами \(3, 4, 5\), сумма их цен равна \(15\).
  • После второго запроса, нет ни одной выделенной вершины, а значит, не существует подходящих наборов ребер, цена графа \(-1\).
  • После третьего запроса выгоднее всего взять ребра с номерами \(1, 2, 5\), сумма их цен равна \(14\).
  • После четвертого запроса выгоднее всего взять ребра с номерами \(4\) и \(5\), сумма их цен равна \(12\).
  • После пятого запроса выгоднее всего взять только ребро номер \(5\), его цена равна \(4\).
  • После шестого запроса все вершины выделенные и можно не брать ребер, цена графа равна \(0\).

E. Фанат структур данных

Бинарный поиск битмаски дп Структуры данных *1500

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\), а также бинарная строка\(^{\dagger}\) \(s\), состоящая из \(n\) символов

Августин — большой фанат структур данных. Поэтому он попросил вас реализовать структуру данных, способную ответить на \(q\) запросов. Запросы бывают двух типов:

  • «1 \(l\) \(r\)» (\(1\le l \le r \le n\)) — для всех \(l \le i \le r\) заменить символ \(s_i\) на противоположный. То есть, заменить все \(\texttt{0}\) на \(\texttt{1}\), а все \(\texttt{1}\) на \(\texttt{0}\).
  • «2 \(g\)» (\(g \in \{0, 1\}\)) — вычислить значение побитового XORа чисел \(a_i\) по всем индексам \(i\) таким, что \(s_i = g\). Обратите внимание, что \(\operatorname{XOR}\) от пустого набора чисел считается равным \(0\).

Пожалуйста, помогите Августину ответить на все запросы!

Например, если \(n = 4\), \(a = [1, 2, 3, 6]\), \(s = \texttt{1001}\), рассмотрим серию запросов:

  1. «2 \(0\)» — нас интересуют индексы \(i\), для которых \(s_i = \tt{0}\), так как \(s = \tt{1001}\) — это индексы \(2\) и \(3\), а значит, ответом на запрос будет \(a_2 \oplus a_3 = 2 \oplus 3 = 1\).
  2. «1 \(1\) \(3\)» — нужно заменить символы \(s_1, s_2, s_3\) на противоположные, таким образом до запроса \(s = \tt{1001}\), а после запроса: \(s = \tt{0111}\).
  3. «2 \(1\)» — нас интересуют индексы \(i\), для которых \(s_i = \tt{1}\), так как \(s = \tt{0111}\) — это индексы \(2\), \(3\) и \(4\), а значит, ответом на запрос будет \(a_2 \oplus a_3 \oplus a_4 = 2 \oplus 3 \oplus 6 = 7\).
  4. «1 \(2\) \(4\)» — \(s = \tt{0111}\) \(\to\) \(s = \tt{0000}\).
  5. «2 \(1\)» — \(s = \tt{0000}\), индексов с \(s_i = \tt{1}\) нет, а значит, так как \(\operatorname{XOR}\) от пустого набора чисел считается равным \(0\), ответ на этот запрос: \(0\).

\(^{\dagger}\) Бинарная строка — это строка, содержащая только символы \(\texttt{0}\) или \(\texttt{1}\).

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^5\)) — длина массива.

Вторая строка набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Третья строка набора входных данных содержит бинарную строку \(s\) длины \(n\).

Четвёртая строка набора входных данных содержит целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов.

Последующие \(q\) строк набора входных данных описывают запросы. Первое число каждого запроса, \(tp \in \{1, 2\}\) характеризует тип запроса: если \(tp = 1\), далее следует \(2\) целых числа \(1 \le l \le r \le n\), означающее, что нужно выполнить операцию типа \(1\) с параметрами \(l, r\), если \(tp = 2\), далее следует целое число \(g \in \{0, 1\}\), означающее, что нужно выполнить операцию типа \(2\) с параметром \(g\).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(10^5\), а также сумма \(q\) по всем наборам не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных, и для каждого запроса типа \(2\) в нём, выведите ответ на соответствующий запрос.

Примечание

Разберём первый набор входных данных примера:

  1. «2 \(0\)» — нас интересуют индексы \(i\), для которых \(s_i = \tt{0}\), так как \(s = \tt{01000}\) — это индексы \(1, 3, 4\) и \(5\), а значит, ответом на запрос будет \(a_1 \oplus a_3 \oplus a_4 \oplus a_5 = 1 \oplus 3 \oplus 4 \oplus 5 = 3\).
  2. «2 \(1\)» — нас интересуют индексы \(i\), для которых \(s_i = \tt{1}\), так как \(s = \tt{01000}\) — единственный подходящий индекс: \(2\), а значит, ответом на запрос будет \(a_2 = 2\).
  3. «1 \(2\) \(4\)» — нужно заменить символы \(s_2, s_3, s_4\) на противоположные, таким образом до запроса \(s = \tt{01000}\), а после запроса: \(s = \tt{00110}\).
  4. «2 \(0\)» — нас интересуют индексы \(i\), для которых \(s_i = \tt{0}\), так как \(s = \tt{00110}\) — это индексы \(1, 2\) и \(5\), а значит, ответом на запрос будет \(a_1 \oplus a_2 \oplus a_5 = 1 \oplus 2 \oplus 5 = 6\).
  5. «2 \(1\)» — нас интересуют индексы \(i\) для которых \(s_i = \tt{1}\), так как \(s = \tt{00110}\) — это индексы \(3\) и \(4\), а значит ответом на запрос будет \(a_3 \oplus a_4 = 3 \oplus 4 = 7\).
  6. «1 \(1\) \(3\)» — \(s = \tt{00110}\) \(\to\) \(s = \tt{11010}\).
  7. «2 \(1\)» — нас интересуют индексы \(i\), для которых \(s_i = \tt{1}\), так как \(s = \tt{11010}\) — это индексы \(1, 2\) и \(4\), а значит, ответом на запрос будет \(a_1 \oplus a_2 \oplus a_4 = 1 \oplus 2 \oplus 4 = 7\).

E. Шаро-стек

Деревья дп Конструктив Структуры данных *3300

С таким названием задача точно не может быть задачей на графы...

У Чанеки есть граф с \(n\) вершинами и \(n-1\) ребрами. Некоторые ребра являются направленными, а некоторые — неориентированными. Ребро \(i\) соединяет вершину \(u_i\) с вершиной \(v_i\). Если \(t_i=0\), то ребро \(i\) является ненаправленным. Если \(t_i=1\), то ребро \(i\) направлено в сторону от \(u_i\) к \(v_i\). Известно, что если сделать все ребра ненаправленными, то граф превратится в дерево\(^\dagger\).

Чанека хочет направить все ненаправленные ребра и раскрасить каждое ребро (разные ребра могут иметь один и тот же цвет).

После этого, предположим, что Чанека начинает прогулку из произвольной вершины \(x\) в произвольную вершину \(y\) (возможно, что \(x=y\)), проходя через одно или несколько ребер. Ей разрешается проходить через каждое ребро, следуя направлению ребра или в противоположную от направления сторону. Также ей разрешается посещать вершину или ребро более одного раза. Во время прогулки Чанека хранит стек шаров, который изначально пуст до начала прогулки. Каждый раз, когда Чанека проходит через ребро, она делает следующее:

  • Если Чанека проходит его в правильном направлении, она кладет на вершину стека новый шар, цвет которого совпадает с цветом ребра.
  • Если Чанека проходит по нему в обратном направлении, то она убирает шар, находящийся на вершине стека.

Прогулка называется стековой тогда и только тогда, когда стек не пуст перед каждым проходом Чанеки по ребру в обратном направлении.

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

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

\(^\dagger\) Дерево — это связный граф, не имеющий циклов.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2\leq n\leq10^5\)) — количество вершин в графе.

В \(i\)-й из следующих \(n-1\) строк содержится три целых числа \(u_i\), \(v_i\) и \(t_i\) (\(1 \leq u_i,v_i \leq n\); \(0\leq t_i\leq1\)) — ненаправленное ребро, соединяющее вершины \(u_i\) и \(v_i\), если \(t_i=0\), или направленное ребро из вершины \(u_i\) в вершину \(v_i\), если \(t_i=1\). Если сделать все ребра ненаправленными, то граф станет деревом.

Выходные данные

Выведите одно число \(-1\), если искомой конструкции не существует.

В противном случае вывод состоит из \(n\) строк, описывающих вашу конструкцию. Первая строка содержит целое число \(z\), равное количеству используемых цветов. В \(i\)-й из следующих \(n-1\) строк содержится три целых числа \(p\), \(q\) и \(c\) (\(1\leq p,q\leq n\); \(1\leq c\leq z\)) — ребро, соединяющее вершины \(p\) и \(q\) в графе, направлено от вершины \(p\) к вершине \(q\) и окрашено в цвет \(c\). Если таких решений несколько, выведите любое из них.

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

Примечание

Ниже приведен заданный граф.

Чанека может направить все неориентированные ребра и раскрасить каждое ребро следующим образом:

В качестве примера рассмотрим путь \(3→1→5→2→5→4→5\). Покажем, что этот путь является шаро-стековым.

  1. Чанека начинается в вершине \(3\). Стеком является \([]\).
  2. Чанека переходит в вершину \(1\). Она кладет шар цвета \(3\). В стеке \([3]\).
  3. Чанека перемещается в вершину \(5\). Она кладет шар цвета \(2\). В стеке \([3,2]\).
  4. Чанека перемещается в вершину \(2\). Она убирает шар цвета \(2\) (того же цвета, что и ребро). В стеке оказывается \([3]\).
  5. Чанека перемещается в вершину \(5\). Она кладет шар цвета \(2\). В стеке \([3,2]\).
  6. Чанека перемещается в вершину \(4\). Она кладет шар цвета \(1\). В стеке \([3,2,1]\).
  7. Чанека перемещается в вершину \(5\). Она убирает шар цвета \(1\) (того же цвета, что и ребро). В стеке оказывается \([3,2]\).

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

G. Clubstep

Бинарный поиск Деревья жадные алгоритмы Перебор Структуры данных *3500

Существует чрезвычайно сложная видеоигра, которая является одной из любимых видеоигр Чанеки. Один из самых трудных уровней в игре называется Clubstep. Clubstep состоит из \(n\) частей, пронумерованных от \(1\) до \(n\). Чанека хорошо натренировалась в прохождении уровня, поэтому на данный момент ее уровень знакомства с каждой частью \(i\) составляет \(a_i\).

После этого Чанека может сделать несколько (возможно, ноль) попыток пройти Clubstep. В каждой попытке она погибает на одной из \(n\) частей. Если попытка заканчивается на части \(p\), то это означает, что она успешно проходит только через каждую часть \(k\) для всех \(1 \leq k \leq p-1\) и не достигает ни одной части \(k\) для всех \(p+1 \leq k \leq n\). Попытка, закончившаяся на части \(p\), занимает \(p\) секунд.

Известно, что Чанека улучшает ту часть, на которой она погибает, гораздо больше, чем все остальные. Известно также, что во время попытки Чанека не успевает потренироваться на тех частях, до которых она не дошла. Таким образом, эффект от попытки, которая заканчивается на части \(p\), будет следующим:

  • Значение знакомства Чанеки с частью \(p\) увеличивается на \(2\).
  • Значение знакомства Чанеки с каждой частью \(k\) для всех \(1 \leq k \leq p-1\) увеличивается на \(1\).
Имеется \(q\) вопросов. В \(j\)-м вопросе Вам даются три целых числа \(l_j\), \(r_j\) и \(x_j\). Затем требуется найти минимальное время (в секундах), которое потребуется Чанеке для того, чтобы значение знакомства с каждой частью \(p\) (\(l_j \leq p \leq r_j\)) стало не меньше \(x_j\).

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

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 3\cdot10^5\)) — количество частей в Clubstep.

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,a_3,\ldots,a_n\) (\(1\leq a_i\leq10^9\)) — значение знакомства Чанеки с каждой частью.

Третья строка содержит одно целое число \(q\) (\(1\leq q\leq3\cdot10^5\)) — количество запросов.

В \(j\)-й из следующих \(q\) строк содержатся три целых числа \(l_j\), \(r_j\) и \(x_j\) (\(1\leq l_j\leq r_j\leq n\); \(1\leq x_j\leq10^9\)) — описание \(j\)-го запроса.

Выходные данные

Выведите \(q\) целых чисел в отдельных строках. Число в \(j\)-й строке равняется минимальнму времени (в секундах), за которое Чанека может сделать так, чтобы значение знакомства для каждой части \(p\) (\(l_j \leq p \leq r_j\)) было не менее \(x_j\).

Примечание

Для ответа на \(1\)-й вопрос можно поступить следующим образом:

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

Общее время (в секундах) составляет \(1+4+10=15\).

Для ответа на \(2\)-й вопрос можно поступить следующим образом:

  1. Сделать попытку \(1\), которая заканчивается на части \(3\). Это занимает \(3\) секунды. Значения знакомства становятся \([2, 4, 4, 1, 2]\).
  2. Выполнить \(2\) попытки, которые заканчиваются на части \(4\). Это занимает \(8\) секунд. Значения знакомства становятся \([4, 6, 6, 5, 2]\).

Общее время (в секундах) составляет \(3+8=11\).

D. Безумные развороты

жадные алгоритмы Структуры данных *1600

Дана строка \(s\) длиной \(n\), состоящая их строчных латинских букв.

Затем вам будут даны положительное целое число \(k\) и два массива \(l\) и \(r\) длиной \(k\).

Гарантируется, что для этих двух массивов выполняются следующие условия:

  • \(l_1 = 1\);
  • \(r_k = n\);
  • \(l_i \le r_i\), для каждого целого числа \(i\), такого что \(1 \le i \le k\);
  • \(l_i = r_{i-1}+1\), для каждого целого числа \(i\), такого что \(2 \le i \le k\);

Затем вам будет дано положительное целое число \(q\) — количество операций, которые вам нужно сделать с \(s\).

Каждая операция определяется одним положительным целым числом \(x\), вам нужно сделать следующее:

  • Найти индекс \(i\), такой что \(l_i \le x \le r_i\), (обратите внимание, что существует только один такой индекс \(i\));
  • присвоить \(a=\min(x, r_i+l_i-x)\) и \(b=\max(x, r_i+l_i-x)\);
  • перевернуть подстроку \(s\) с индекса \(a\) до индекса \(b\).

Переворачивание подстроки \([a, b]\) строки \(s\) означает, что \(s\) становится равной \(s_1, s_2, \dots, s_{a-1},\ s_b, s_{b-1}, \dots, s_{a+1}, s_a,\ s_{b+1}, s_{b+2}, \dots, s_{n-1}, s_n\).

Выведите \(s\) после выполнения всех операций.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следует описание наборов.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2\cdot 10^5\)) — длина строки \(s\) и длина массивов \(l\) и \(r\).

Вторая строка каждого набора содержит строку \(s\) (\( |s| = n\)), содержащую строчные латинские буквы — исходная строка.

Третья строка каждого набора содержит \(k\) положительных целых чисел \(l_1, l_2, \dots, l_k\) (\(1 \le l_i \le n\)) — массив \(l\).

Четвертая строка каждого набора содержит \(k\) положительных целых чисел \(r_1, r_2, \dots, r_k\) (\(1 \le r_i \le n\)) — массив \(r\).

Пятая строка каждого набора содержит положительное целое число \(q\) (\(1 \le q \le 2 \cdot 10^5 \)) — количество операций, которые нужно сделать с \(s\).

Шестая строка каждого набора содержит \(q\) положительных целых чисел \(x_1, x_2, \dots, x_q\) (\(1\le x_i \le n\)) — описание операций.

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2\cdot10^5\).

Гарантируется, что сумма \(q\) по всем наборам не превышает \(2\cdot10^5\).

Гарантируется, что условия, описанные в условии, выполняются для массивов \(l\) и \(r\).

Выходные данные

Для каждого набора входных данных, в отдельной строке выведите строку \(s\) после выполнения всех операций.

Примечание

В первом наборе входных данных:

Исходная строка — «abcd». В первой операции \(x=1\). Поскольку \(l_1=1\leq x \leq r_1=2\), мы находим индекс \(i = 1\). Мы переворачиваем подстроку с индекса \(x=1\) до \(l_1+r_1-x=1+2-1=2\). После этой операции наша строка становится «bacd».

Во второй операции \(x=3\). Поскольку \(l_2=3\leq x \leq r_2=4\), мы находим индекс \(i = 2\). Мы переворачиваем подстроку с индекса \(x=3\) до \(l_2+r_2-x=3+4-3=4\). После этой операции наша строка становится «badc».

Во втором наборе входных данных:

Исходная строка — «abcde». В первой операции \(x=1\). Поскольку \(l_1=1\leq x \leq r_1=1\), мы находим индекс \(i = 1\). Мы переворачиваем подстроку с индекса \(x=1\) до \(l_1+r_1-x=1+1-1=1\). После этой операции наша строка не изменилась («abcde»).

Во второй операции \(x=2\). Поскольку \(l_2=2\leq x \leq r_2=2\), мы находим индекс \(i = 2\). Мы переворачиваем подстроку с индекса \(x=2\) до \(l_2+r_2-x=2+2-2=2\). После этой операции наша строка не изменилась («abcde»).

В третьей операции \(x=3\). Поскольку \(l_3=3\leq x \leq r_3=5\), мы находим индекс \(i = 3\). Мы переворачиваем подстроку с индекса \(x=3\) до \(l_3+r_3-x=3+5-3=5\). После этой операции наша строка становится «abedc».

E. Ива и Пав

Бинарный поиск битмаски жадные алгоритмы Структуры данных *1400

Ива дала Паву массив \(a\) из \(n\) элементов.

Пусть \(f(l, r) = a_l \ \& \ a_{l+1} \ \& \dots \& \ a_r\) (здесь \(\&\) обозначает побитовое И).

Обратите внимание, что \(f(l, r)\) не определено, если \(l>r\).

Ива также дала Паву \(q\) запросов.

Каждый запрос состоит из 2 чисел, \(k\) и \(l\), и она хочет, чтобы Пав нашел наибольший индекс \(r\) (\(l \le r \le n\)), такой что \(f(l, r) \ge k\).

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

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина массива \(a\).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Третья строка каждого набора содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов, которые Ива дала Паву.

Следующие \(q\) строк каждого набора содержат по два числа, \(l\) и \(k\) (\(1 \le l \le n\), \(1 \le k \le 10^9\)) — левая граница для отрезка и целое число \(k\), описанное в условии.

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\). Также гарантируется, что сумма \(q\) по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите максимальный индекс \(r\) (\(l \le r \le n\)) такой, что \(a_l \ \& \ a_{l+1} \ \& \dots \& \ a_r \ \ge \ k\).

Если такого \(r\) не существует, выведите \(-1\).

Примечание

В первом наборе примера \(n=5\), и массив \(a = [15, 14, 17, 42, 34]\)

Первый запрос просит найти наибольший индекс \(r\), такой что \(f(1, r) \ge 7\).

\(f(1,1) = 15, \ f(1, 2) = 14, \ f(1,3)=0 \ f(1, 4)=0 \ f(1, 5)=0\), поэтому ответ \(r=2\).

Второй запрос просит найти \(f(2, r) \ge 15\). Поскольку такой \(r\) не существует, ответ \(-1\).

Третий запрос просит найти \(f(4, r) \ge 5\). \(f(4, 4) = 42, \ f(4, 5) = 34\), поэтому ответ \(r=5\).

Во втором наборе примера \(n=5\), и массив \(a= [7, 5, 3, 1, 7]\).

Для первого запроса, \(f(1, r) \ge 7\).

\(f(1, 1)=7, \ f(1, 2)=5, \ f(1, 3) = 1, \ f(1,4) = 1, \ f(1, 5)=1\), поэтому ответ на этот запрос \(1\).

Для второго запроса, \(f(5, r) \ge 7\).

\(f(5, 5) = 7\), поэтому ответ \(5\).

Для третьего запроса, \(f(2, r) \ge 3\).

\(f(2, 2) = 5, \ f(2, 3) = 1, \ f(2, 4) = 1, \ f(2, 5) = 1\), поэтому ответ \(2\).

G. Дерево wxhtzdy ORO

Бинарный поиск битмаски Деревья Перебор поиск в глубину и подобное реализация Структуры данных *2300

После (наконец-то) прохождения отбора на IOI 2023, wxhtzdy был очень счастлив и решил сделать то, что делают многие люди: попытаться угадать задачи, которые будут на IOI. В процессе этого он случайно создал задачу, которая, по его мнению, была очень крутой.

Дано дерево (связный ациклический граф) с \(n\) вершинами и \(n-1\) ребром. Вершине \(i\) (\(1 \le i \le n\)) соответствует значение \(a_i\). Пусть \(g(u, v)\) - это побитовое ИЛИ значений всех вершин на кратчайшем пути от \(u\) до \(v\). Например, если мы хотим вычислить \(g(3, 4)\) на дереве из первого набора данных примера. На пути от \(3\) до \(4\) находятся вершины \(3\), \(1\), \(4\). Тогда \(g(3, 4) = a_3 \ | \ a_1 \ | \ a_4\) (здесь \(|\) обозначает побитовое ИЛИ).

Также дано \(q\) запросов, и каждый запрос выглядит следующим образом:

Вам даны \(x\) и \(y\). Рассмотрим все вершины \(z\) такие, что \(z\) находится на кратчайшем пути от \(x\) до \(y\) (включительно).

Определим красоту вершины \(z\) как сумму количества ненулевых битов в \(g(x, z)\) и количества ненулевых битов в \(g(y, z)\). Вам нужно найти максимальную красоту среди всех вершин \(z\) на кратчайшем пути от \(x\) до \(y\).

Так как его мозг очень устал после решения output only задачи на SIO (он должен был это сделать, чтобы пройти отбор на IOI), он хочет вашей помощи в этой задаче.

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество вершин.

Вторая строка каждого набора содержит \(n\) положительных целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_v \le 10^9\)) — значение каждой вершины, \(i\)-е число в этой строке соответствует вершине \(i\).

Следующие \(n - 1\) строк описывают дерево.

Каждая строка содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n, u \ne v\)) указывающие, что вершины \(u\) и \(v\) соединены ребром.

Следующая строка содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов.

Следующие \(q\) строк содержат 2 целых числа \(x, y\) (\(1 \le x, y \le n\)) — вершины \(x\) и \(y\) для каждого запроса.

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\).

Гарантируется, что сумма \(q\) по всем наборам не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел, каждое из которых является ответом на соответствующий запрос.

Примечание

На изображении ниже показано дерево из первого набора входных данных второго примера.

Дерево из первого набора входных данных второго примера.

В первом запросе \(x=7\), \(y=5\). Самый короткий путь от \(7\) до \(5\) это \(7-4-2-1-5\).

Давайте вычислим красоту вершины \(7\) на этом пути. У нас есть \(g(7,7)=a_7=10=(1010)_2\) и \(g(5,7)=a_5 \ | \ a_1 \ | \ a_2 \ | \ a_4 \ | \ a_7=10 \ | \ 4 \ | \ 7 \ | \ 4 \ | \ 10=15=(1111)_2\), поэтому ее красота равна \(2 + 4 = 6\).

Теперь давайте вычислим красоту вершины \(4\) на этом пути. У нас есть \(g(7,4)=a_7 \ | \ a_4=10 \ | \ 4=14=(1110)_2\) и \(g(5,4)=a_5 \ | \ a_1 \ | \ a_2 \ | \ a_4=10 \ | \ 4 \ | \ 7 \ | \ 4=15=(1111)_2\), поэтому ее красота равна \(3 + 4 = 7\).

Теперь давайте вычислим красоту вершины \(2\) на этом пути. У нас есть \(g(7,2)=a_7 \ | \ a_4 \ | \ a_2=10 \ | \ 4 \ | \ 7=15=(1111)_2\) и \(g(5,2)=a_5 \ | \ a_1 \ | \ a_2=10 \ | \ 4 \ | \ 7=15=(1111)_2\), поэтому ее красота равна \(4 + 4 = 8\).

Теперь давайте вычислим красоту вершины \(1\) на этом пути. У нас есть \(g(7,1)=a_7 \ | \ a_4 \ | \ a_2 \ | \ a_1=10 \ | \ 4 \ | \ 7 \ | \ 4=15=(1111)_2\) и \(g(5,1)=a_5 \ | \ a_1=10 \ | \ 4=14=(1110)_2\), поэтому ее красота равна \(4 + 3 = 7\).

Наконец, давайте вычислим красоту вершины \(5\) на этом пути. У нас есть \(g(7,5)=a_7 \ | \ a_4 \ | \ a_2 \ | \ a_1 \ | \ a_5=10 \ | \ 4 \ | \ 7 \ | \ 4 \ | \ 10=15=(1111)_2\) и \(g(5,5)=a_5=10=(1010)_2\), поэтому ее красота равна \(4 + 2 = 6\).

Максимальная красота на этом пути у вершины \(2\), и она равна \(8\).

F. Остаться в живых

Перебор Структуры данных теория чисел *2800

В компьютерной игре есть \(n\) героев. У каждого героя есть здоровье \(h\) и изначальная броня \(a\). Пусть текущее количество брони равно \(a_{\mathit{cur}}\), изначально равное \(a\).

Когда герою наносится \(x\) урона, происходит следующее: если \(x < a_{\mathit{cur}}\), то из \(a_{\mathit{cur}}\) вычитается \(x\); иначе из \(h\) вычитается \(1\), а \(a_{\mathit{cur}}\) снова становится равно \(a\).

В начале игры вы выбираете значение \(x\) (целое число, строго большее \(0\)). Затем вы атакуете героев, пока все не погибнут: за один раунд вы наносите \(x\) урона каждому живому герою. Герой погибает, когда его здоровье становится равно \(0\). Игра заканчивается, когда все герои погибают.

Последний погибший герой получает количество очков, равное количеству раундов, в течение которых он был единственным живым героем. Остальные герои получают \(0\) очков. В частности, если в последнем раунде погибают несколько героев, то все герои получают \(0\) очков.

Вы сыграли по одной игре на каждое возможное значение \(x\) (от \(1\) до бесконечности). Между играми очки сбрасывались. Какое наибольшее количество очков было у каждого героя?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество героев.

Во второй строке записаны \(n\) целых чисел \(h_1, h_2, \dots, h_n\) (\(1 \le h_i \le 2 \cdot 10^5\)) — здоровье каждого героя.

В третьей строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)) — изначальное количество брони каждого героя.

Выходные данные

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

Примечание

В первом наборе входных данных игра на \(x = 1\) играется так:

  • до всех раундов: у героев \(h = [3, 1, 2]\), \(a_{\mathit{cur}} = [3, 11, 5]\);
  • раунд \(1\): \(1\) урона наносится всем героям: \(h\) остается \([3, 1, 2]\), \(a_{\mathit{cur}}\) становится \([2, 10, 4]\);
  • раунд \(2\): \(h = [3, 1, 2]\), \(a_{\mathit{cur}} = [1, 9, 3]\);
  • раунд \(3\): у первого героя заканчивается броня, поэтому он теряет очко здоровья: \(h = [2, 1, 2]\), \(a_{\mathit{cur}} = [3, 8, 2]\);
  • ...
  • раунд \(9\): первый герой погибает, так как его здоровье становится равно \(0\): \(h = [0, 1, 1]\), \(a_{\mathit{cur}} = [0, 2, 1]\);
  • раунд \(10\): третий герой погибает: \(h = [0, 1, 0]\), \(a_{\mathit{cur}} = [0, 1, 0]\);
  • раунд \(11\): второй герой погибает: \(h = [0, 0, 0]\), \(a_{\mathit{cur}} = [0, 0, 0]\).

Второй герой погиб последним, и был единственным живым героев в течение одного раунда. Поэтому он получает \(1\) очко за эту игру.

Игра на \(x = 4\) играется так:

  • раунд \(1\): \(h = [2, 1, 2]\), \(a_{\mathit{cur}} = [3, 7, 1]\);
  • раунд \(2\): \(h = [1, 1, 1]\), \(a_{\mathit{cur}} = [3, 3, 5]\);
  • раунд \(3\): \(h = [0, 0, 1]\), \(a_{\mathit{cur}} = [0, 0, 1]\);
  • раунд \(4\): \(h = [0, 0, 0]\), \(a_{\mathit{cur}} = [0, 0, 0]\);

Третий герой погиб последним, и был единственным живым героев в течение одного раунда.

G. Аня и таинственная строка

Бинарный поиск Структуры данных *2000

Ане подарили строку \(s\) длины \(n\), привезённую из Рима. Строка \(s\) состоит из маленьких латинских букв и на первый взгляд не вызывает подозрений. К строке была приложена инструкция.

Начало инструкции.

Палиндромом называется строка, которая читается одинаково как слева направо, так и справа налево. Например, строки «anna», «aboba», «level» являются палиндромами, а строки «gorilla», «banan», «off» — нет.

Подстрокой \([l \ldots r]\) строки \(s\) называется строка \(s_l s_{l+1} \ldots s_{r-1} s_r\). Например, подстрокой \([4 \ldots 6]\) строки «generation» является строка «era».

Строка называется красивой, если она не содержит подстроки длины хотя бы два, являющейся палиндромом. Например, строки «fox», «abcdef» и «yioy» красивые, а строки «xyxx», «yikjkitrb» — нет.

Когда к символу \(s_i\) прибавляют целое положительное число \(x\), он \(x\) раз заменяется на следующий в алфавите, при этом «z» заменяется на «a».

Когда к подстроке \([l, r]\) строки \(s\) прибавляют целое положительное число \(x\), она превращается в строку \(s_1 s_2 \ldots s_{l-1} (s_l + x) (s_{l+1} + x) \ldots (s_{r-1} + x) (s_r + x) s_{r+1} \ldots s_n\). Например, при прибавлении к подстроке \([2, 4]\) строки «abazaba» числа \(6\), получится строка «ahgfaba».

Конец инструкции.

После прочтения инструкции Аня смирилась с тем, что ей предстоит ответить на \(m\) запросов. Запросы бывают двух типов:

  1. Прибавить к подстроке \([l \ldots r]\) строки \(s\) число \(x\).
  2. Сказать, является ли подстрока \([l \ldots r]\) строки \(s\) красивой.
Входные данные

В первой строке дано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Далее следуют описания наборов входных данных.

В первой строке даны целые числа \(n\), \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — длина строки \(s\) и количество запросов.

Во второй строке дана строка \(s\) длины \(n\), состоящая из маленьких букв латинского алфавита.

Следующие \(m\) строк содержат запросы:

  • \(1\) \(l\) \(r\) \(x\) (\(1 \le l \le r \le n\), \(1 \le x \le 10^9\)) — описание запроса первого типа;
  • \(2\) \(l\) \(r\) (\(1 \le l \le r \le n\)) — описание запроса второго типа.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса второго типа выведите «YES», если подстрока \([l \ldots r]\) строки \(s\) является красивой, в противном случае выведите «NO».

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных первого теста происходит следующее:

  • tedubcyyxopz: строка edub является красивой;
  • tedubcyyxopz \(\to\) tedwdeaaxopz;
  • tedwdeaaxopz: строка tedwdea не является красивой, так как содержит палиндром edwde;
  • tedwdeaaxopz \(\to\) terkreaaxopz;
  • terkreaaxopz \(\to\) terkreaaarsz;
  • terkreaaarsz \(\to\) terkreaaaasz;
  • terkreaaaasz: строка kreaaaa не является красивой, так как содержит палиндром aaaa;
  • terkreaaaasz: строка asz является красивой.

D. Влюблино

жадные алгоритмы Структуры данных *1500

Изначально у вас пустое мультимножество отрезков. Вам нужно обработать \(q\) операций двух типов:

  • \(+\) \(l\) \(r\) — Добавить в мультимножество отрезок прямой \((l, r)\),
  • \(-\) \(l\) \(r\) — Удалить из мультимножества ровно один отрезок прямой \((l, r)\). Гарантируется, что этот отрезок есть в мультимножестве.

После каждой операции нужно определить, существует ли пара отрезков из мультимножества, которая не пересекается. Пара отрезков \((l, r)\) и \((a, b)\) не пересекается, если не существует точки \(x\), для которой \(l \leq x \leq r\) и \(a \leq x \leq b\).

Входные данные

Первая строка каждого теста содержит целое число \(q\) (\(1 \leq q \leq 10^5\)) — количество операций.

Следующие \(q\) строк описывают операции двух типов. Если это операция добавления, то она задается в формате \(+\) \(l\) \(r\). Если это операций удаления, то она задается в формате \(-\) \(l\) \(r\) (\(1 \leq l \leq r \leq 10^9\)).

Выходные данные

После каждой операции выведите «YES», если существует пара отрезков из мультимножества, которая не пересекается, и «NO» иначе.

Вы можете вывести ответ в любом регистре (верхнем или нижнем). Например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительные. ответы.

Примечание

В примере после второй, третьей, четвертой и пятой операций, существует пара отрезков \((1, 2)\) и \((3, 4)\), которая не пересекается.

Дальше мы удаляем ровно один отрезок \((3, 4)\), а у нас их к этому моменту было два. Поэтому после этой операции также существует пара непересекающихся отрезков.

F. Ты так красива

Структуры данных *1400

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\). Посчитайте количество подотрезков этого массива \(1 \leq l \leq r \leq n\), таких что:

  • Массив \(b = [a_l, a_{l+1}, \ldots, a_r]\) встречается в массиве \(a\) как подпоследовательность ровно один раз. Другими словами, существует ровно один способ выбрать набор индексов \(1 \leq i_1 < i_2 < \ldots < i_{r - l + 1} \leq n\), такой что \(b_j = a_{i_j}\) для всех \(1 \leq j \leq r - l + 1\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 10^5\)) — размер массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество подходящих подотрезков.

Примечание

В первом наборе входных данных существует ровно один подотрезок \((1, 1)\), который нам подходит.

В втором наборе входных данных существует ровно один подотрезок \((1, 2)\), который нам подходит. Подотрезки \((1, 1)\) и \((2, 2)\) нам не подходят, так как подпоследовательность \([1]\) встречается два раза в массиве.

В третьем наборе входных данных подходят все подотрезки кроме \((1, 1)\) и \((3, 3)\).

C. Средняя конструкция

дп жадные алгоритмы Перебор сортировки Структуры данных *1700

Массив \(a_1, a_2, \ldots, a_m\) изначально заполнен нулями. Вам даны \(n\) попарно различных отрезков \(1 \le l_i \le r_i \le m\). Вы должны выбрать произвольное подмножество этих отрезков (в частности, можно выбрать пустое множество). После этого происходит следующее:

  • Для каждого \(i = 1, 2, \ldots, n\), если отрезок \((l_i, r_i)\) выбран в подмножество, то для каждого индекса \(l_i \le j \le r_i\) вы увеличиваете \(a_j\) на \(1\) (то есть \(a_j\) заменяете на \(a_j + 1\)). Если отрезок \((l_i, r_i)\) не выбран, массив не изменяется.
  • После этого (после обработки всех значений \(i = 1, 2, \ldots, n\)) вы считаете \(\max(a)\) как максимальное значение среди всех элементов \(a\). Аналогично, \(\min(a)\) считается как минимальное значение.
  • Наконец, стоимость выбранного подмножества отрезков объявляется равной \(\max(a) - \min(a)\).

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 10^5\), \(1 \le m \le 10^9\)) — количество отрезков и длина массива.

Следующие \(n\) строк каждого набора входных данных описывают отрезки: \(i\)-я из них содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le m\)). Гарантируется, что все отрезки попарно различны.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите наибольшую стоимость среди всех подмножеств данного множества отрезков.

Примечание

В первом наборе входных данных доступен всего один отрезок. Если его не выбирать, то массив будет равен \(a = [0, 0, 0]\), стоимость такого (пустого) подмножества отрезков равна \(0\). Если же выбрать единственный доступный отрезок, то массив станет равен \(a = [0, 1, 0]\), и стоимость будет равна \(1 - 0 = 1\).

Во втором наборе входных данных можно выбрать все отрезки: массив в таком случае будет равен \(a = [0, 1, 2, 3, 2, 1, 0, 0]\). Стоимость будет равна \(3 - 0 = 3\).

D. Монокарп и множество

Комбинаторика математика Структуры данных *2100

У Монокарпа есть \(n\) чисел \(1, 2, \dots, n\) и множество (изначально пустое). Он \(n\) раз добавляет свои числа в это множество в некотором порядке. Во время каждого шага он добавляет новое число (которого ранее не было в множестве). Другими словами, последовательность добавленных чисел является перестановкой длины \(n\).

Каждый раз, когда Монокарп добавляет элемент в множество, кроме первого раза, он записывает символ:

  • если элемент, который Монокарп пытается добавить, становится максимальным элементом в множестве, Монокарп записывает символ >;
  • если элемент, который Монокарп пытается добавить, становится минимальным элементом в множестве, Монокарп записывает символ <;
  • если ни одно из вышеперечисленного не выполняется, Монокарп записывает символ ?.

Дана строка \(s\) из \(n-1\) символов, которая представляет записанные символы Монокарпом (в порядке их записи). Вам нужно обработать \(m\) запросов к строке. Каждый запрос имеет следующий формат:

  • \(i\) \(c\) — заменить \(s_i\) символом \(c\).

Перед всеми запросами и после каждого запроса вам нужно вычислить количество различных способов упорядочить числа \(1, 2, 3, \dots, n\) таким образом, что если Монокарп вставляет числа в множество в этом порядке, он получает строку \(s\). Поскольку ответы могут быть большими, выведите их по модулю \(998244353\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 3 \cdot 10^5\); \(1 \le m \le 3 \cdot 10^5\)).

Вторая строка содержит строку \(s\), состоящую из ровно \(n-1\) символов <, > и/или ?.

Затем следуют \(m\) строк. Каждая из них представляет запрос. Каждая строка содержит целое число \(i\) и символ \(c\) (\(1 \le i \le n-1\); \(c\) может быть <, >, или ?).

Выходные данные

Перед всеми запросами и после каждого запроса выведите одно целое число — количество способов упорядочить числа \(1, 2, 3, \dots, n\) таким образом, чтобы, если Монокарп вставляет числа в множество в этом порядке, он получает строку \(s\). Поскольку ответы могут быть большими, выведите их по модулю \(998244353\).

Примечание

В первом примере до обработки запросов есть три способа упорядочить числа:

  • \(3, 1, 2, 5, 4, 6\);
  • \(4, 1, 2, 5, 3, 6\);
  • \(4, 1, 3, 5, 2, 6\).

После последнего запроса есть один способ упорядочить числа:

  • \(3, 5, 4, 6, 2, 1\).

F. Кража бриллиантов

жадные алгоритмы Структуры данных *3300

Монокарп — самый известный вор в Берляндии. В этот раз он решил украсть два бриллианта. К несчастью для Монокарпа, за бриллиантами следят \(n\) камер. У каждой из камер есть два параметра \(t_i\) и \(s_i\). Первый параметр определяет, следит ли камера только за первым бриллиантом (\(t_i=1\)), только за вторым (\(t_i=2\)), или за обоими (\(t_i=3\)). Второй параметр определяет количество секунд, которое камера будет отключена после ее взлома.

Монокарп каждую секунду может выполнять одно из трех действий:

  • ничего не делать;
  • выбрать любую камеру и взломать ее; если взломать \(i\)-ю камеру, она будет отключена в следующие \(s_i\) секунд (если номер текущей секунды — \(T\), то камера будет отключена в секунды с \((T+1)\) по \((T+s_i)\), включительно);
  • украсть бриллиант, если все камеры, которые следили за ним, отключены в эту секунду. Второй бриллиант можно красть только после того, как украден первый.

Обратите внимание, что Монокарп может взламывать камеру повторно, даже если она отключена.

Ваша задача — определить минимальное время, за которое Монокарп украдет сначала первый бриллиант, а затем второй, или сообщить, что это невозможно.

Входные данные

Первая строка содержит одно целое число \(n\) (\(0 \le n \le 1500\)) — количество камер.

Далее следует \(n\) строк, \(i\)-я из них содержит два целых числа \(t_i\) и \(s_i\) (\(1 \le t_i \le 3\); \(1 \le s_i \le 2n\)) — параметры \(i\)-й камеры.

Выходные данные

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

C. Минимальный массив

Бинарный поиск жадные алгоритмы Конструктив Перебор Структуры данных хэши *2400

Дан массив \(a\) длины \(n\), состоящий из целых чисел. Далее к нему последовательно \(q\) раз применяют следующую операцию:

  • Выбирают индексы \(l\) и \(r\) (\(1 \le l \le r \le n\)) и целое число \(x\);
  • Ко всем элементам массива \(a\) на отрезке \([l, r]\) прибавляют \(x\). Более формально, присваивают \(a_i := a_i + x\) для всех \(l \le i \le r\).

Пусть \(b_j\) — массив \(a\), полученный после применения первых \(j\) операций (\(0 \le j \le q\)). Обратите внимание, что \(b_0\) — это массив \(a\) до применения всех операций.

Вам нужно найти лексикографически минимальный\(^{\dagger}\) массив среди всех \(b_j\).

\(^{\dagger}\)Массив \(x\) лексикографически меньше чем массив \(y\), если есть индекс \(i\) такой, что \(x_i < y_i\), и \(x_j = y_j\) для всех \(j < i\). Иными словами, для первого такого индекса \(i\), где массивы различны, \(x_i < y_i\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — элементы массива \(a\).

Третья строка каждого набора входных данных содержит одно целое число \(q\) (\(0 \le q \le 5 \cdot 10^5\)) — количество операций с массивом.

В каждой из следующих \(q\) строк находятся по три целых числа \(l_j\), \(r_j\) и \(x_j\) \((1 \le l_j \le r_j \le n, -10^9 \le x_j \le 10^9)\) — описание каждой операции. Операции следуют в порядке их применения.

Гарантируется, что сумма \(n\) по всем наборам входных данных и сумма \(q\) по всем наборам входных данных не превосходят \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите лексикографически минимальный массив среди всех \(b_j\).

Примечание

В первом наборе входных данных:

  • \(b_0 = [1,2,3,4]\);
  • \(b_1 = [1,2,3,4]\);
  • \(b_2 = [-99,-98,-97,4]\).

Таким образом, лексикографически минимальным является массив \(b_2\).

Во втором наборе входных данных лексикографически минимальным является массив \(b_0\).

D. Разрез

Бинарный поиск Деревья математика разделяй и властвуй снм Структуры данных *2700

Назовём массив \(b_1, b_2, \ldots, b_m\) (\(m \ge 2\)) хорошим, если его можно разрезать на две части так, чтобы все элементы в левой части были строго меньше, чем все элементы в правой части. Другими словами, должен существовать такой индекс \(1 \le i < m\), что любой элемент из \(b_1, \ldots, b_i\) строго меньше любого элемента из \(b_{i+1}, \ldots, b_m\).

Дан массив \(a_1, a_2, \ldots a_n\), состоящий из различных целых чисел от \(1\) до \(n\). Поступают \(q\) запросов. В каждом запросе даны два числа \(l\) и \(r\). Требуется для каждого запроса проверить, является ли массив \(a_l, a_{l+1}, \ldots, a_r\) хорошим.

Входные данные

Первая строка содержит единственное целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)) — размер массива.

Вторая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_n \le n\)) — элементы массива \(a\).

Третья строка содержит единственное целое число \(q\) (\(1 \le q \le 3 \cdot 10^5\)) — количество запросов.

Каждая из следующих \(q\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i < r_i \le n\)) — описание \(i\)-го запроса.

Выходные данные

Для каждого запроса выведите «Yes» (без кавычек), если массив \(a_l, a_{l+1}, \ldots, a_r\) является хорошим, и «No» (без кавычек) иначе.

Вы можете выводить «Yes» и «No» в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом примере:

  • Массив \([3,2,1,4,5]\) можно разрезать на две части \([3,2,1]\) и \([4,5]\).
  • Массив \([3,2,1]\) нельзя разрезать на две части так, чтобы все элементы в левой части были меньше всех элементов в правой части.
  • Массив \([3,2,1,4]\) можно разрезать на две части \([3,2,1]\) и \([4]\).
  • Массив \([3,2]\) нельзя разрезать на две части так, чтобы все элементы в левой части были меньше всех элементов в правой части.
  • Массив \([2,1,4,5]\) можно разрезать на две части \([2,1]\) и \([4,5]\).

Во втором примере:

  • Массив \([2,4,3]\) можно разрезать на две части \([2]\) и \([4,3]\).
  • Массив \([6,2,4,3,5]\) нельзя разрезать на две части так, чтобы все элементы в левой части были меньше всех элементов в правой части.
  • Массив \([4,3,5]\) можно разрезать на две части \([4,3]\) и \([5]\).

C1. План осушения от Дореми (простая версия)

дп жадные алгоритмы Перебор сортировки Структуры данных *2000

Единственное различие между двумя версиями этой задачи — ограничение на \(k\), ограничение по времени и ограничение по памяти. Делать взломы можно только в том случае, если решены обе версии задачи.

Дореми живет в дождливой стране, состоящей из \(n\) городов, пронумерованных от \(1\) до \(n\).

По метеорологической трансляции было предсказано распределение дождей в ближайшие \(m\) дней. В \(i\)-й день дождь пойдет в городах, находящихся на отрезке \([l_i, r_i]\). Город называется сухим, если в ближайшие \(m\) дней в нем не будет дождя.

Оказалось, что Дореми обладает особой способностью. Она может выбрать \(k\) (в простой версии: \(k = 2\)) дней, и в течение этих дней дождя не будет. Дореми хочет вычислить максимальное количество сухих городов после использования специальной силы.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(1\le n\le 2\cdot 10^5\), \(2 \le m \le 2\cdot 10^5\), \(k = 2\)) — количество городов, количество дней и количество дней дождя, которые может предотвратить Дореми.

Далее следуют \(m\) строк. В \(i\)-й строке содержатся два целых числа \(l_i\), \(r_i\) (\(1\le l_i\le r_i\le n\)) — отрезок городов, в которых будет дождь в день \(i\).

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество сухих городов.

Примечание

В первом наборе входных данных, если Дореми использует свою силу в дни

  • \(1,2\), то город \(2\) будет сухим;
  • \(2,3\), то ни один город не будет сухим;
  • \(1,3\), то ни один город не будет сухим;

Таким образом, существует не более \(1\) сухого города.

Во втором наборе входных данных, если Дореми предотвращает

  • дождь в дни \(1,2\), то города \(1,2\) будут сухими;
  • дождь в дни \(2,3\), то города \(4,5\) будут сухими;
  • дождь в дни \(1,3\), то города \(1,5\) будут сухими.

Таким образом, существует не более \(2\) сухих городов.

В третьем наборе входных данных оптимальным является предотвращение дождя в дни \(2,5\).

В четвертом наборе входных данных всегда есть \(4\) дня дождя, которые промочат все города, вне зависимости от использования силы.

C2. План осушения от Дореми (сложная версия)

дп Структуры данных *2600

Единственное различие между двумя версиями этой задачи — ограничение на \(k\), ограничение по времени и ограничение по памяти. Делать взломы можно только в том случае, если решены обе версии задачи.

Дореми живет в дождливой стране, состоящей из \(n\) городов, пронумерованных от \(1\) до \(n\).

По метеорологической трансляции было предсказано распределение дождей в ближайшие \(m\) дней. В \(i\)-й день дождь пойдет в городах, находящихся на отрезке \([l_i, r_i]\). Город называется сухим, если в ближайшие \(m\) дней в нем не будет дождя.

Оказалось, что Дореми обладает особой способностью. Она может выбрать \(k\) дней, и в течение этих дней дождя не будет. Дореми хочет вычислить максимальное количество сухих городов после использования специальной силы.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(1\le n\le 2\cdot 10^5\), \(2 \le m \le 2\cdot 10^5\), \(2 \le k \le \min(10, m)\)) — количество городов, количество дней и количество дней дождя, которые может предотвратить Дореми.

Далее следуют \(m\) строк. В \(i\)-й строке содержатся два целых числа \(l_i\), \(r_i\) (\(1\le l_i\le r_i\le n\)) — отрезок городов, в которых будет дождь в день \(i\).

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество сухих городов.

Примечание

В первом наборе входных данных, если Дореми использует свою силу в дни

  • \(1,2\), то город \(2\) будет сухим;
  • \(2,3\), то ни один город не будет сухим;
  • \(1,3\), то ни один город не будет сухим;

Таким образом, существует не более \(1\) сухого города.

Во втором наборе входных данных, если Дореми предотвращает

  • дождь в дни \(1,2\), то города \(1,2\) будут сухими;
  • дождь в дни \(2,3\), то города \(4,5\) будут сухими;
  • дождь в дни \(1,3\), то города \(1,5\) будут сухими.

Таким образом, существует не более \(2\) сухих городов.

В третьем наборе входных данных оптимальным является предотвращение дождя в дни \(1,2,4,5\).

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

F. Усреднённое дерево Дореми

Деревья дп жадные алгоритмы Структуры данных *3500

У Дореми есть корневое дерево размера \(n\), корнем которого является вершина \(r\). Изначально на вершине \(i\) записано число \(w_i\). Дореми может использовать свою силу, чтобы выполнить данную операцию не более \(k\) раз:

  1. Выберем вершину \(x\) (\(1 \leq x \leq n\)).
  2. Пусть \(s = \frac{1}{|T|}\sum_{i \in T} w_i\), где \(T\) — множество всех вершин в поддереве \(x\).
  3. Для всех \(i \in T\) присваиваем \(w_i := s\).

Дореми хочет узнать, каким будет лексикографически минимальный\(^\dagger\) массив \(w\) после выполнения всех операций. Можете ли вы ей помочь?

Если ответов несколько, вы можете вывести любой из них.

\(^\dagger\) Для массивов \(a\) и \(b\) длины \(n\), \(a\) лексикографически меньше \(b\) тогда и только тогда, когда существует индекс \(i\) (\(1 \leq i \le n\)) такой, что \(a_i < b_i\) и для всех индексов \(j\) таких, что \(j<i\), выполняется условие \(a_j=b_j\).

Входные данные

Входные данные состоят из нескольких наборов исходных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит три целых числа \(n\), \(r\), \(k\) (\(2 \le n \le 5000\), \(1 \le r \le n\), \(0 \le k \le \min(500,n)\)).

Вторая строка содержит \(n\) целых чисел \(w_1,w_2,\ldots,w_n\) (\(1 \le w_i \le 10^6\)).

Каждая из следующих \(n-1\) строк содержит два целых числа \(u_i\), \(v_i\) (\(1 \leq u_i, v_i \leq n\)), представляющих собой ребро между \(u_i\) и \(v_i\).

Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(50\,000\).

Выходные данные

Для каждого набора входных данных в первой строке выведите одно целое число \(cnt\) (\(0 \le cnt \le k\)) — количество выполняемых операций.

Затем во второй строке выведите \(cnt\) целых чисел \(p_1,p_2,\ldots,p_{cnt}\) — \(x\) выбирается равным \(p_i\) для \(i\)-й операции.

Если ответов несколько, то можно вывести любой из них.

Примечание

В первом наборе входных данных:

Изначально \(w=[1,9,2,6,1,8]\). Можно выбрать некоторую вершину \(x\) для выполнения не более одной операции.

  • Если \(x=1\), то \(w=[\frac{9}{2},\frac{9}{2},\frac{9}{2},\frac{9}{2},\frac{9}{2},\frac{9}{2}]\).
  • Если \(x=2\), то \(w=[1,\frac{15}{2},2,\frac{15}{2},1,8]\).
  • Если \(x=3\), то \(w=[1,9,\frac{11}{3},6,\frac{11}{3},\frac{11}{3}]\).
  • Если \(x \in \{4, 5, 6\}\), то \(w=[1,9,2,6,1,8]\).
  • Если вы не выполняете никаких операций, то \(w=[1,9,2,6,1,8]\).

\(w\) является лексикографически наименьшим, если \(x=2\).

F. Растущее дерево

Деревья поиск в глубину и подобное Структуры данных *2000

Дано корневое дерево с корнем в вершине \(1\), изначально состоящее из одной вершины. У каждой вершины есть числовое значение, изначально равное \(0\). Так же есть \(q\) запросов двух типов:

  • Первый тип запроса: добавить ребёнка с номером \(sz + 1\) к вершине \(v\), где \(sz\) — текущий размер дерева. Числовое значение новой вершины также равно \(0\).
  • Второй тип запроса: Прибавить \(x\) ко всем числовым значений вершин в поддереве вершины \(v\).

После всех запросов нужно для каждой вершины вывести его итоговое числовое значение.

Входные данные

В первой строке содержится единственное число \(T\) (\(1 \leq T \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(q\) (\(1 \leq q \leq 5 \cdot 10^5\)) — Изначальное количество запросов.

Далее следует \(q\) строк. Далее возможно два случая:

  • Первый тип запроса. В \(i\)-й строке дано два целых числа \(t_i\) (\(t_i = 1\)), \(v_i\). Нужно добавить ребёнка с номером \(sz + 1\) к вершине \(v_i\), где \(sz\) — текущий размер дерева. Гарантируется, что \(1 \leq v_i \leq sz\).
  • Второй тип запроса. В \(i\)-й строке дано три целых числа \(t_i\) (\(t_i = 2\)), \(v_i\), \(x_i\) (\(-10^9 \leq x_i \leq 10^9\)). Нужно прибавить \(x_i\) ко всем числовым значениям вершин в поддереве вершины \(v_i\). Гарантируется, что \(1 \leq v_i \leq sz\), где \(sz\) — текущий размер дерева.

Гарантируется что сумма \(q\) по всем тестовым наборам не превосходит \(5 \cdot 10^5\).

Выходные данные

После всех запросов выведите числовые значения каждой вершины конечного дерева.

Примечание

В первом примере итоговое дерево с числовыми значениями будет выглядеть так:

Итоговое дерево с числовыми значениями

D. Разноцветный конструктив

жадные алгоритмы Конструктив Структуры данных *2600

У вас есть \(n\) цветных кубиков, \(i\)-й кубик имеет цвет \(a_i\).

Вам надо разложить все кубики по полкам. Всего есть \(m\) полок, \(i\)-я из которых вмещает \(s_i\) кубиков. Также, \(s_1 + s_2 + \ldots + s_m = n\).

Допустим, на полке размера \(k\) лежат, в этом порядке, кубики цветов \(c_1, c_2, \ldots, c_k\). Тогда определим разноцветность полки как минимальное расстояние между двумя разными кубиками одного цвета, лежащими на полке, а если все кубики на полке имеют различные цвета, то разноцветность считается равной размеру полки, то есть числу \(k\).

Более формально, разноцветность \(c_1, c_2, \ldots, c_k\) определяется следующим образом:

  • Если все цвета \(c_1, c_2, \ldots, c_k\) различны, разноцветность считается равной \(k\);
  • Иначе разноцветность определяется как минимальное целое число \(x \geq 1\), для которого найдётся индекс \(i\) \((1 \le i \le k - x)\) такой, что \(c_i = c_{i+x}\).

Для каждой полки вам задана минимальная необходимая разноцветность, то есть вам даны числа \(d_1, d_2, \ldots, d_m\), означающие, что необходимо, чтобы полка \(i\) имела разноцветность \(\geq d_i\) для всех \(i\).

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

Входные данные

Каждый тест состоят из нескольких наборов входных данных. Первая строка содержит целое число \(t\) \((1 \leq t \leq 10^4)\) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целые числа \(n, m\) \((1 \leq m \leq n \leq 2 \cdot 10^5)\) — количество кубиков и количество полок, на которые их надо разложить.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1 \leq a_i \leq n)\) — цвета кубиков.

Третья строка каждого набора входных данных содержит \(m\) целых чисел \(s_1, s_2, \ldots, s_m\) \((1 \leq s_i \leq n)\) — размеры полок. Гарантируется, что \(s_1 + \ldots + s_m = n\).

Четвёртая строка каждого набора входных данных содержит \(m\) целых чисел \(d_1, d_2, \ldots, d_m\) \((1 \leq d_i \leq s_i)\) — минимальные необходимые разноцветности полок.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(-1\), если невозможно распределить кубики по полкам, выполнив все требования. Иначе, выведите \(m\) строк, \(i\)-я из которых содержит \(s_i\) чисел — цвета кубиков, лежащих на \(i\)-й полке, в подходящем порядке.

D. XOR-конструктив

битмаски Деревья Конструктив математика строковые суфф. структуры Структуры данных *1900

Даны \(n-1\) целых чисел \(a_1, a_2, \dots, a_{n-1}\).

Ваша задача — построить массив \(b_1, b_2, \dots, b_n\) такой, что:

  • каждое целое число от \(0\) до \(n-1\) встречается в \(b\) ровно один раз;
  • для каждого \(i\) от \(1\) до \(n-1\), \(b_i \oplus b_{i+1} = a_i\) (где \(\oplus\) обозначает побитовое исключающее ИЛИ).
Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит \(n-1\) целых чисел \(a_1, a_2, \dots, a_{n-1}\) (\(0 \le a_i \le 2n\)).

Дополнительное ограничение на входные данные: возможно построить как минимум один допустимый массив \(b\) для заданной последовательности \(a\).

Выходные данные

Выведите \(n\) целых чисел \(b_1, b_2, \dots, b_n\). Если существует несколько массивов, подходящих под условие задачи, вы можете вывести любой из них.

E. Бесконечная карточная игра

Бинарный поиск графы дп жадные алгоритмы игры Перебор поиск в глубину и подобное снм сортировки Структуры данных *2300

Монокарп и Бикарп играют в карточную игру. Каждая карта имеет два параметра: значение атаки и значение защиты. Карта \(s\) бьет карту \(t\), если значение атаки карты \(s\) строго больше значения защиты карты \(t\).

У Монокарпа есть \(n\) карт, \(i\)-я из которых имеет значение атаки \(\mathit{ax}_i\) и значение защиты \(\mathit{ay}_i\). У Бикарпа есть \(m\) карт, \(j\)-я из которых имеет значение атаки \(\mathit{bx}_j\) и значение защиты \(\mathit{by}_j\).

На первом ходе Монокарп выбирает одну из своих карт и кладет ее на стол. Бикарп должен побить эту карту своей картой. Затем Монокарп должен побить карту Бикарпа. Затем ход переходит к Бикарпу, и так далее.

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

Если игра длится \(100^{500}\) ходов, объявляется ничья.

И Монокарп, и Бикарп играют оптимально. То есть, если у игрока есть выигрышная стратегия независимо от ходов его оппонента, он играет на победу. В противном случае, если у него есть стратегия для ничьи, он играет на ничью.

Вам нужно вычислить три значения:

  • количество начальных ходов Монокарпа, которые приводят к победе Монокарпа;
  • количество начальных ходов Монокарпа, которые приводят к ничьей;
  • количество начальных ходов Монокарпа, которые приводят к победе Бикарпа.
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество карт у Монокарпа.

Вторая строка содержит \(n\) целых чисел \(\mathit{ax}_1, \mathit{ax}_2, \dots, \mathit{ax}_n\) (\(1 \le \mathit{ax}_i \le 10^6\)) — значения атаки карт Монокарпа.

Третья строка содержит \(n\) целых чисел \(\mathit{ay}_1, \mathit{ay}_2, \dots, \mathit{ay}_n\) (\(1 \le \mathit{ay}_i \le 10^6\)) — значения защиты карт Монокарпа.

Четвертая строка содержит одно целое число \(m\) (\(1 \le m \le 3 \cdot 10^5\)) — количество карт у Бикарпа.

Пятая строка содержит \(m\) целых чисел \(\mathit{bx}_1, \mathit{bx}_2, \dots, \mathit{bx}_m\) (\(1 \le \mathit{bx}_j \le 10^6\)) — значения атаки карт Бикарпа.

Шестая строка содержит \(m\) целых чисел \(\mathit{by}_1, \mathit{by}_2, \dots, \mathit{by}_m\) (\(1 \le \mathit{by}_j \le 10^6\)) — значения защиты карт Бикарпа.

Дополнительные ограничения на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\), сумма \(m\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите три целых числа:

  • количество начальных ходов Монокарпа, которые приводят к победе Монокарпа;
  • количество начальных ходов Монокарпа, которые приводят к ничьей;
  • количество начальных ходов Монокарпа, которые приводят к победе Бикарпа.

G. Два символа, два цвета

Бинарный поиск дп жадные алгоритмы Потоки Структуры данных *3100

Дана строка, состоящая из символов 0 и/или 1. Вам нужно покрасить каждый символ этой строки в один из двух цветов: красный или синий.

Если вы покрасите \(i\)-й символ в красный цвет, вы получите \(r_i\) монет. Если вы покрасите его в синий цвет, вы получите \(b_i\) монет.

После покраски строки из нее удаляются все символы синего цвета. Затем в полученной строке подсчитывается количество инверсий (т. е. количество пар символов, в которых левый символ в паре — 1, а правый символ — 0). За каждую инверсию вы должны заплатить \(1\) монету.

Какое максимальное количество монет вы можете заработать?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из четырех строк:

  • первая строка содержит одно целое число \(n\) (\(1 \le n \le 4 \cdot 10^5\)) — длину строки;
  • вторая строка содержит \(s\) — последовательность из \(n\) символов, где каждый символ либо 0, либо 1;
  • третья строка содержит \(n\) целых чисел \(r_1, r_2, \dots, r_n\) (\(1 \le r_i \le 10^{12}\));
  • четвертая строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^{12}\)).

Дополнительное ограничение на входные данные: сумма значений \(n\) по всем наборам входных данных не превышает \(4 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество монет, которое вы можете заработать.

Примечание

Пояснения для наборов входных данных в примере из условия (синие символы подчеркнуты, красные — нет):

  1. \(0100\underline{0}1\underline{0}\);
  2. \(10\underline{11}1\);
  3. \(\underline{0}1\underline{00000000}\);
  4. \(0\underline{1}010000\).

D. Единицы и двойки

Бинарный поиск математика разделяй и властвуй Структуры данных *1700

Вам дан массив \(a\) длины \(n\) в \(1\)-нумерации, каждый элемент которого равен \(1\) или \(2\).

Обработайте \(q\) запросов следующих двух типов:

  • «1 s»: проверить, существует ли подотрезок\(^{\dagger}\) массива \(a\), сумма которого равна \(s\).
  • «2 i v»: заменить \(a_i\) на \(v\).

\(^{\dagger}\) Массив \(b\) является подотрезком массива \(a\), если \(b\) может быть получен из \(a\) путем удаления нескольких (возможно, нуля или всех) элементов из начала и нескольких (возможно, нуля или всех) элементов из конца. В частности, массив является подотрезком самого себя.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1\le n,q\le 10^5\)) — длину массива \(a\) и количество запросов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(a_i\) равно \(1\) или \(2\)) — элементы массива \(a\).

Каждая из следующих \(q\) строк каждого набора входных данных содержит некоторое количество целых чисел. Первое целое число \(\mathrm{op}\) равно либо \(1\), либо \(2\).

  • Если \(\mathrm{op}\) равно \(1\), то за ним следует одно целое число \(s\) (\(1 \leq s \leq 2n\)).
  • Если \(\mathrm{op}\) равно \(2\), то за ним следуют два целых числа \(i\) и \(v\) (\(1 \leq i \leq n\), \(v\) равно \(1\) или \(2\)).

Гарантируется, что сумма \(n\) и сумма \(q\) по всем наборам входных данных не превышают \(10^5\).

Выходные данные

Для каждого запроса с \(\mathrm{op}=1\) выведите в отдельной строке «YES», если существует подотрезок \(a\), сумма которого равна \(s\), в противном выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Рассмотрим первый набор входных данных:

  • Ответом на первый запрос будет «YES», потому что \(a_1+a_2+a_3=2+1+2=5\).
  • Ответ на второй запрос — «YES», потому что \(a_1+a_2+a_3+a_4=2+1+2+1=6\).
  • Ответом на третий запрос будет «NO», так как нельзя найти ни одного подотрезка \(a\), сумма которого равна \(7\).
  • После четвертого запроса массив \(a\) становится равным \([2,1,2,2,2]\).
  • Ответом на пятый запрос будет «YES», так как \(a_2+a_3+a_4+a_5=1+2+2+2=7\).

E. Сортировка перестановки

сортировки Структуры данных *2100

Дана перестановка\(^\dagger\) \(a\) длины \(n\). Назовем индекс \(i\) хорошим, если \(a_i=i\). После каждой секунды мы циклически сдвигаем все индексы, которые не являются хорошими, вправо на одну позицию. Формально,

  • Пусть \(s_1,s_2,\ldots,s_k\) — индексы \(a\), которые являются нехорошими в порядке возрастания. То есть \(s_j < s_{j+1}\) и если индекс \(i\) не является хорошим, то существует \(j\) такой, что \(s_j=i\).
  • Для каждого \(i\) от \(1\) до \(k\) мы одновременно назначаем \(a_{s_{(i \% k+1)}} := a_{s_i}\).

Для каждого \(i\) от \(1\) до \(n\) найдите первый момент времени, когда индекс \(i\) становится хорошим.

\(^\dagger\) Перестановкой является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^6\)) — длину перестановки \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы перестановки \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую \(n\) целых чисел, где \(i\)-е целое число равняется первому моменту времени, когда индекс \(i\) становится хорошим.

Примечание

В первом наборе входных данных \(2\) и \(5\) уже находятся на правильных позициях, поэтому индексы \(2\) и \(5\) становятся хорошими в момент времени \(0\). Через \(1\) секунду будет выполнен циклический сдвиг с \(s=[1, 3, 4]\), в результате чего будет получен массив \(a=[1, 2, 3, 4, 5]\). Обратите внимание, что индексы \(1\), \(3\) и \(4\) становятся хорошими на \(1\) секунде.

Во втором наборе входных данных \(5\) уже находится на правильной позиции, поэтому индекс \(5\) становится хорошим на \(0\) секунде. Через \(1\) секунду будет выполнен циклический сдвиг с \(s=[1, 2, 3, 4, 6]\), в результате чего будет получен массив \(a=[3, 2, 1, 4, 5, 6]\). Обратите внимание, что индексы \(2\), \(4\) и \(6\) становятся хорошими через \(1\) секунду. Через \(2\) секунды будет выполнен циклический сдвиг с \(s=[1, 3]\), в результате чего будет получен массив \(a=[1, 2, 3, 4, 5, 6]\). Обратите внимание, что индексы \(1\) и \(3\) становятся хорошими на \(2\) секунде.

E. София и строки

жадные алгоритмы сортировки Строки Структуры данных *2200

У Софии есть строка \(s\) длины \(n\), состоящая из строчных латинских букв. Она может выполнять следующие операции с этой строкой.

  1. Выбрать позицию \(1 \le i \le |s|\) и удалить \(s_i\) из строки.
  2. Выбрать пару позиций \((l, r)\) (\(1 \le l \le r \le |s|\)) и отсортировать подстроку \(s_{l} s_{l+1} \ldots s_r\) в алфавитном порядке.
Здесь \(|s|\) обозначает текущую длину строки \(s\). В частности, \(|s| = n\) перед первой операцией. Например, если \(s = \mathtt{sofia}\), то, применив операцию первого типа с \(i=4\), мы сделаем строку \(s\) равной \(\mathtt{sofa}\). Применив после этого операцию второго типа с \((l, r) = (2, 4)\), получим строку \(s\), равную \(\mathtt{safo}\).

София хочет получить строку \(t\) длины \(m\) из строки \(s\), используя операции, описанные выше, несколько раз (возможно, ноль). Определите, возможно ли это.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10\,000\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано два целых числа \(n\) и \(m\) (\(1\leq m \leq n \leq 2\cdot 10^5\)) — длины строк \(s\) и \(t\) соответственно.

Во второй строке дана строка \(s\) длины \(n\), состоящая из строчных латинских букв.

Во третьей строке дана строка \(t\) длины \(m\), состоящая из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если София может получить строку \(t\) из строки \(s\), используя операции из условия. Иначе, выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных София может сделать следующую операцию:

  1. операция второго типа с \(l=1\) и \(r=5\): строка \(s\) станет равной \(\mathtt{afios}\) после операции.

Во втором наборе входных данных София может сделать следующие операции:

  1. операция второго типа с \(l=1\) и \(r=2\): строка \(s\) станет равной \(\mathtt{bca}\) после операции;
  2. операция первого типа с \(i=3\): строка \(s\) станет равной \(\mathtt{bc}\) после операции.

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

G. Необычное развлечение

Деревья кратчайшие пути поиск в глубину и подобное снм сортировки Структуры данных *1900

Дерево — связный граф без циклов.

Перестановка — массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([5, 1, 3, 2, 4]\) является перестановкой, но \([2, 1, 1]\) не является перестановкой (\(1\) встречается в массиве дважды) и \([1, 3, 2, 5]\) тоже не является перестановкой (\(n = 4\), но в массиве присутствует \(5\)).

После неудачной съёмки в ролике BrMeast у Лёши началась депрессия. Даже день рождения не радовал его. Однако после подарка Тимофея настроение Лёши резко поднялось. Теперь он днями напролёт игрался с подаренным конструктором. Недавно он придумал себе необычное развлечение.

Лёша строит из своего конструктора дерево, состоящее из \(n\) вершин, пронумерованных от \(1\) до \(n\), с корнем в вершине \(1\). Затем он в произвольном порядке выписывает каждое число от \(1\) до \(n\) ровно по одному разу и получает перестановку \(p\). После этого Лёша придумывает \(q\) троек чисел \(l, r, x\). Для каждой тройки он пытается понять, есть ли среди вершин с номерами \(p_l, p_{l+1}, \ldots, p_r\) хотя бы один потомок вершины \(x\).

Вершина \(u\) является потомком вершины \(v\) тогда и только тогда, когда \(\mathrm{dist}(1, v) + \mathrm{dist}(v, u) = \mathrm{dist}(1, u)\), где \(\mathrm{dist}(a, b)\) — расстояние между вершинами \(a\) и \(b\). Иначе говоря, вершина \(v\) должна находиться на пути от корня до вершины \(u\).

Лёша рассказал об этом развлечении Захару. Теперь Лёша говорит своему другу \(q\) троек, описанных выше, надеясь, что Захар сможет проверить наличие потомка. Захар очень сильно хочет спать, поэтому обратился за помощью к вам. Помогите Захару ответить на все вопросы Лёши и наконец-то пойти спать.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных дано два целых числа \(n, q\) (\(1 \le n, q \le 10^5\)) — количество вершин в дереве и количество вопросов, соответственно.

Каждая из следующих \(n - 1\) строк содержит числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\)), которые обозначают, что существует ребро между вершинами \(u_i\) и \(v_i\) (гарантируется, что полученный граф является деревом).

В следующей строке даны \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\)) — перестановка \(p\) (гарантируется, что каждое число от \(1\) до \(n\) встречается ровно один раз).

Далее следуют \(q\) строк, описывающие вопросы Лёши. В \(i\)-й строке написаны числа \(l, r, x\) (\(1 \le l \le r \le n\), \(1 \le x \le n\)), описанные в условии.

Гарантируется, что сумма \(n\) и сумма \(q\) по всем наборам входных данных не превышают \(10^5\).

Выходные данные

Для каждого вопроса Лёши выведите «Yes» (без кавычек), если описанный в условии потомок существует, иначе выведите «No» (без кавычек).

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

D. Точки

Структуры данных *2800

Петя и Вася придумали новую интересную игру. Вася берет листок бумаги в клетку и определяет на нем декартовую систему координат следующим образом: точка (0, 0) находится в левом нижнем углу, ось Ox направлена вправо, а ось Oy — вверх. Петя задает Васе запросы трех типов:

  • add x y — Вася отмечает на листке бумаги точку с координатами (x, y). Для каждого такого запроса гарантируется, что точка (x, y) не отмечена на васином листке в момент запроса.
  • remove x y — Вася стирает на листке бумаги отмеченную ранее точку с координатами (x, y). Для каждого такого запроса гарантируется, что точка (x, y) отмечена на васином листке в момент запроса.
  • find x y — Вася находит на листке все отмеченные точки, лежащие строго выше и строго правее точки (x, y). Среди всех таких точек Вася выбирает самую левую, если таких несколько — самую нижнюю из них, и называет Пете ее координаты.

У Васи хорошо получалось отвечать на запросы, когда их было 10, 100 или 1000, но когда их стало 2·105, Вася перестал справляться. Теперь ему требуется программа, которая будет отвечать на все запросы Пети. Помогите Васе!

Входные данные

В первой строке входного файла содержится число n (1 ≤ n ≤ 2·105) — количество запросов. Далее следует n строк — описания запросов. add x y описывает запрос на добавление точки, remove x y — запрос на удаление точки, find x y — запрос на нахождение нижней левой точки. Все координаты во входном файле неотрицательны и не превосходят 109.

Выходные данные

Для каждого запроса вида find x y выведите в отдельной строке ответ на него — координаты самой нижней из всех самых левых отмеченных точек, находящихся строго выше и правее точки (x, y). Если строго выше и правее нет отмеченных точек, выведите -1.

E. Контрнаступление

графы снм сортировки Структуры данных хэши *2100

Берляндия смогла отразить удар флатландцев и теперь переходит в наступление.

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

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

Помогите ефрейтору выполнить это задание и получить-таки звание сержанта! Не забудьте, что на флатландской карте города, соединены дорогой тогда и только тогда, когда на самом деле между ними нет дороги.

Входные данные

В первой строке записано два целых числа через пробел n и m (1 ≤ n ≤ 5·105, 0 ≤ m ≤ 106) — количество городов и количество дорог, обозначенных на флатландской карте, соответственно.

В следующих m строках записаны описания дорог на карте. В i-ой строке записано два целых числа ai и bi (1 ≤ ai, bi ≤ n, ai ≠ bi) — номера городов, которые соединяет i-я дорога на карте флатландцев.

Гарантируется, что каждая пара городов встречается во входных данных не больше одного раза.

Выходные данные

Выведите в первой строке число k — количество групп городов во Флатландии таких, что в каждой группе из каждого города можно добраться до каждого по дорогам Флатландии, а города разных групп недостижимы по флатландским дорогам.

В каждой из следующих k строк выведите сначала ti (1 ≤ ti ≤ n) — количество вершин в i-й группе. Далее через пробел выведите номера городов i-й группы.

Порядок вывода групп и порядок вывода номеров в группах значения не имеет. Сумма ti по всем k группам должна быть равна n.

Примечание

В первом примере есть только дороги между парами городов 1-4 и 2-3.

Во втором примере между городами 1 и 2 нет дороги, но все равно можно добраться из одного до другого через город номер 3.

F. Локальные удаления

Бинарный поиск реализация Структуры данных *2800

Для массива \(b_1, b_2, \ldots, b_m\), для индекса \(i\) (\(1 < i < m\)) элемент \(b_i\) считается локальным минимумом, если \(b_i < b_{i-1}\) и \(b_i < b_{i+1}\). Элемент \(b_1\) считается локальным минимумом, если \(b_1 < b_2\). Элемент \(b_m\) считается локальным минимумом, если \(b_m < b_{m-1}\).

Для массива \(b_1, b_2, \ldots, b_m\), для индекса \(i\) (\(1 < i < m\)) элемент \(b_i\) считается локальным максимумом, если \(b_i > b_{i-1}\) и \(b_i > b_{i+1}\). Элемент \(b_1\) считается локальным максимумом, если \(b_1 > b_2\). Элемент \(b_m\) считается локальным максимумом, если \(b_m > b_{m-1}\).

Пусть \(x\) — массив, в котором все элементы различны. Определим две операции над ним.

  • \(1\) — удалить из \(x\) все элементы, которые не являются локальными минимумами.
  • \(2\) — удалить из \(x\) все элементы, которые не являются локальными максимумами.

Определим \(f(x)\) следующим образом: повторять операции \(1, 2, 1, 2, \ldots\) в таком порядке, пока в массиве не останется только один элемент. В конце вернуть этот элемент.

Например, возьмем массив \([1,3,2]\). Сначала выполним операцию типа \(1\) и получим \([1, 2]\). Затем выполним операцию типа \(2\) и получим \([2]\). Значит, \(f([1,3,2]) = 2\).

Дана перестановка\(^\dagger\) \(a\) длины \(n\) и \(q\) запросов. Каждый запрос состоит из двух целых чисел \(l\) и \(r\) таких, что \(1 \le l \le r \le n\). Для каждого запроса требуется посчитать \(f([a_l, a_{l+1}, \ldots, a_r])\).

\(^\dagger\) Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 10^5\)) — длину перестановки \(a\) и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы перестановки \(a\).

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

Выходные данные

Для каждого запроса выведите одно целое число — ответ на этот запрос.

Примечание

В первом запросе первого примера единственным числом в подотрезке массива является \(1\), поэтому оно и является ответом.

Во втором запросе первого примера наш подотрезок изначально имеет вид \([1, 4]\). После выполнения операции типа \(1\) мы получаем \([1]\).

В третьем запросе первого примера наш подотрезок изначально имеет вид \([4, 3]\). После выполнения операции типа \(1\) мы получаем \([3]\).

В четвертом запросе первого примера наш подотрезок изначально имеет вид \([1, 4, 3, 6]\). После выполнения операции типа \(1\) мы получаем \([1, 3]\). Затем выполняем операцию типа \(2\) и получаем \([3]\).

В пятом запросе первого примера наш подотрезок изначально имеет вид \([1, 4, 3, 6, 2, 7, 5]\). После выполнения операции типа \(1\) мы получаем \([1,3,2,5]\). После выполнения операции типа \(2\) получаем \([3,5]\). Затем выполняем операцию типа \(1\) и получаем \([3]\).

В первом и единственном запросе второго примера наш подотрезок изначально имеет вид \([1,2,3,4,5,6,7,8,9,10]\). Здесь \(1\) — единственный локальный минимум, поэтому после выполнения операции типа \(1\) остается только он.

D. Запросы робота

Бинарный поиск дп реализация Структуры данных *1900

В точке \((0, 0)\) \(2\)-мерной плоскости стоит робот. Робот может выполнять четыре команды:

  • U — переместиться из точки \((x, y)\) в \((x, y + 1)\);
  • D — переместиться из точки \((x, y)\) в \((x, y - 1)\);
  • L — переместиться из точки \((x, y)\) в \((x - 1, y)\);
  • R — переместиться из точки \((x, y)\) в \((x + 1, y)\).

Задана последовательность команд \(s\) длины \(n\). Ваша задача — ответить на \(q\) независимых запросов: для четырех целых чисел \(x\), \(y\), \(l\) и \(r\) определить, посетит ли робот точку \((x, y)\), выполняя последовательность \(s\), где подстрока с \(l\) по \(r\) перевернута (то есть робот выполняет команды в порядке \(s_1 s_2 s_3 \dots s_{l-1} s_r s_{r-1} s_{r-2} \dots s_l s_{r+1} s_{r+2} \dots s_n\)).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — длину последовательности команд и количество запросов соответственно.

Вторая строка содержит строку \(s\) длины \(n\), состоящую из символов U, D, L и/или R.

Затем следуют \(q\) строк, \(i\)-я из них содержит четыре целых числа \(x_i\), \(y_i\), \(l_i\) и \(r_i\) (\(-n \le x_i, y_i \le n\); \(1 \le l \le r \le n\)), описывающие \(i\)-й запрос.

Выходные данные

Для каждого запроса выведите YES, если робот посещает точку \((x, y)\), выполняя последовательность \(s\), где подстрока с \(l\) по \(r\) перевернута; в противном случае выведите NO.

Примечание

В первом запросе первого примера путь робота выглядит следующим образом:

Во втором запросе первого примера путь робота выглядит следующим образом:

В третьем запросе первого примера путь робота выглядит следующим образом:

E. Коллапс строк

Деревья Строки Структуры данных *1900

Заданы \(n\) строк \(s_1, s_2, \dots, s_n\), состоящие из строчных латинских букв. Пусть \(|x|\) означает длину строки \(x\).

Определим операцию коллапса \(C(a, b)\) двух строк \(a\) и \(b\) следующим образом:

  • если \(a\) пуста, \(C(a, b) = b\);
  • если \(b\) пуста, \(C(a, b) = a\);
  • если последняя буква \(a\) совпадает с первой буквой \(b\), то \(C(a, b) = C(a_{1,|a|-1}, b_{2,|b|})\), где \(s_{l,r}\) — подстрока \(s\) с \(l\)-й по \(r\)-ю букву;
  • в противном случае, \(C(a, b) = a + b\), то есть, конкатенация двух строк.

Вычислите \(\sum\limits_{i=1}^n \sum\limits_{j=1}^n |C(s_i, s_j)|\).

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 10^6\)).

В каждой из следующих \(n\) строк записана строка \(s_i\) (\(1 \le |s_i| \le 10^6\)), состоящая из строчных латинских букв.

Суммарная длина строк не превышает \(10^6\).

Выходные данные

Выведите одно целое число — \(\sum\limits_{i=1}^n \sum\limits_{j=1}^n |C(s_i, s_j)|\).

F. Снова деревья и XOR-запросы

графы Деревья математика поиск в глубину и подобное разделяй и властвуй реализация Структуры данных *2400

Вам дано дерево, состоящее из \(n\) вершин. На каждой вершине написано целое число; на \(i\)-й вершине написано число \(a_i\).

Вам необходимо обработать \(q\) запросов. \(i\)-й запрос состоит из трех целых чисел \(x_i\), \(y_i\) и \(k_i\). Для этого запроса вы должны ответить, возможно ли выбрать набор вершин \(v_1, v_2, \dots, v_m\) (возможно, пустой) так, чтобы:

  • каждая вершина \(v_j\) находилась на простом пути между \(x_i\) и \(y_i\) (в том числе можно использовать концы пути);
  • \(a_{v_1} \oplus a_{v_2} \oplus \dots \oplus a_{v_m} = k_i\), где \(\oplus\) обозначает оператор побитового исключающего ИЛИ.
Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 2^{20} - 1\)).

Затем следуют \(n-1\) строк. Каждая из них содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\); \(u \ne v\)), обозначающие ребро дерева.

Следующая строка содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

Затем следуют \(q\) строк. В \(i\)-й из них содержатся три целых числа \(x_i\), \(y_i\) и \(k_i\) (\(1 \le x_i, y_i \le n\); \(0 \le k_i \le 2^{20} - 1\)).

Выходные данные

Для каждого запроса выведите YES, если возможно сформировать набор вершин, удовлетворяющий ограничениям. В противном случае выведите NO.

Каждую букву можно выводить в любом регистре.

F. Няня

2-sat Бинарный поиск графы Деревья Структуры данных *2500

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

Его дом — это неориентированный граф с \(n\) вершинами и \(m\) ребрами. Его сестра любит играть на ребрах графа, поэтому он должен установить камеру хотя бы в одном из концов каждого ребра графа. Теофанис хочет найти вершинное покрытие, которое максимизирует минимальную разницу между номерами выбранных вершин.

Более формально, пусть \(a_1, a_2, \ldots, a_k\) — вершинное покрытие графа. Пусть минимальная разница между номерами выбранных вершин — это минимальное \(\lvert a_i - a_j \rvert\) (где \(i \neq j\)) среди вершин, которые вы выбрали. Если \(k = 1\), то считаем, что минимальная разница между номерами выбранных вершин равна \(n\).

Можете ли вы найти максимально возможную минимальную разницу между номерами выбранных вершин?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 10^{5}, 1 \le m \le 2 \cdot 10^{5}\)) — количество вершин и количество ребер.

В \(i\)-й из следующих \(m\) строк содержатся два целых положительных числа \(u_i\) и \(v_i\) (\(1 \le u_i,v_i \le n\)), обозначающие, что между ними в графе существует ребро.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^{5}\).

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^{5}\).

Выходные данные

Для каждого набора входных данных выведите максимум среди минимальных разностей между выбранными вершинами среди всех вершинных покрытий.

Примечание

В первом наборе входных данных мы можем установить камеры в вершинах \(1\), \(3\) и \(7\), поэтому ответ — \(2\).

Во втором наборе входных данных мы можем установить только одну камеру в вершине \(1\), поэтому ответ равен \(3\).

C. Игра с массивом

Бинарный поиск Перебор сортировки Структуры данных *1400

Вам дан массив \(a\) из \(n\) целых положительных чисел. За одну операцию вы должны выбрать некоторую пару \((i, j)\) такую, что \(1\leq i < j\leq |a|\) и добавить \(|a_i - a_j|\) к концу \(a\) (то есть увеличить \(n\) на \(1\) и сделать новый элемент \(a_n\) равным \(|a_i - a_j|\)). Ваша задача — минимизировать и вывести минимальный элемент \(a\) после выполнения \(k\) операций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2\le n\le 2\cdot 10^3\), \(1\le k\le 10^9\)) — длину массива и количество операций, которое необходимо выполнить.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1\le a_i\le 10^{18}\)) — элементы массива \(a\).

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(4\cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — наименьшее возможное значение минимума массива \(a\) после выполнения \(k\) операций.

Примечание

В первом наборе входных данных после любых \(k=2\) операций минимальное значение \(a\) будет равно \(1\).

Во втором наборе входных данных оптимальная стратегия состоит в том, чтобы сначала выбрать \(i=1, j=2\) и добавить \(|a_1 - a_2| = 3\) к концу \(a\), получив \(a=[7, 4, 15, 12, 3]\). Затем выбрать \(i=3, j=4\) и добавить \(|a_3 - a_4| = 3\) к концу \(a\), получив \(a=[7, 4, 15, 12, 3, 3]\). В последней операции выбрать \(i=5, j=6\) и добавить \(|a_5 - a_6| = 0\) в конец \(a\). Тогда минимальный элемент \(a\) станет равным \(0\).

В третьем наборе входных данных оптимальная стратегия состоит в том, чтобы сначала выбрать \(i=2, j=3\) и добавить \(|a_2 - a_3| = 3\) к концу \(a\). Любая вторая операция все равно не приведет к тому, чтобы минимальное значение \(a\) стало меньше \(3\).

D2. Присвоить максимум (сложная версия)

жадные алгоритмы Конструктив разделяй и властвуй реализация сортировки Структуры данных *1800

Это сложная версия задачи. Единственное различие между двумя версиями — это ограничение на \(n\) и ограничение по времени. Вы можете делать взломы, только если обе версии задачи решены.

Вам даны два массива \(a\) и \(b\) длины \(n\).

Вы можете выполнить следующую операцию несколько (возможно, ноль) раз:

  1. выбрать \(l\) и \(r\) такие, что \(1 \leq l \leq r \leq n\).
  2. пусть \(x=\max(a_l,a_{l+1},\ldots,a_r)\).
  3. для всех \(l \leq i \leq r\), присвоить \(a_i := x\).

Определите, можно ли сделать массив \(a\) равным массиву \(b\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину массивов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы массива \(a\).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le n\)) — элементы массива \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если вы можете превратить \(a\) в \(b\) с помощью данных операций, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных мы можем получить массив \(b\), применив единственную операцию: \((l,r)=(2,3)\).

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

В третьем наборе входных данных массив \(b\) можно получить, применив две операции: \((l,r)=(2,5)\) и \((l,r)=(1,3)\).

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

E. Запросы на дереве

графы Деревья поиск в глубину и подобное реализация Структуры данных *2500

Кто не работает, тот не ест. Получи то, что ты хочешь своими силами. Поверь, искренние и серьёзные люди всегда смеются последними. Но я всё равно не дам тебе подарка.
—Санта, Hayate no Gotoku!

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

У Хаяте есть дерево с \(n\) вершинами.

Теперь Хаяте хочет, чтобы вы ответили на \(q\) запросов. Каждый запрос состоит из вершины \(x\) и \(k\) других дополнительных вершин \(a_1,a_2,\ldots,a_k\). Эти \(k+1\) вершина гарантированно различны.

Для каждого запроса необходимо найти длину самого длинного простого пути, начинающегося в вершине \(x^\dagger\) после удаления вершин \(a_1,a_2,\ldots,a_k\) вместе со всеми ребрами, соединенными хотя бы с одной из вершин \(a_1,a_2,\ldots,a_k\).

\(^\dagger\) Простой путь длины \(k\), начинающийся в вершине \(x\) — это последовательность различных вершин \(x=u_0,u_1,\ldots,u_k\) таких, что существует ребро между вершинами \(u_{i-1}\) и \(u_i\) для всех \(1 \leq i \leq k\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — количество вершин дерева и количество запросов.

Следующие \(n - 1\) строк содержат по два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \ne v\)) — в дереве есть ребро между вершинами \(u\) и \(v\). Гарантируется, что заданные ребра образуют дерево.

Следующие \(q\) строк описывают запросы. Каждая строка содержит целые числа \(x\), \(k\) и \(a_1,a_2,\ldots,a_k\) (\(1 \leq x \leq n\), \(0 \leq k < n\), \(1 \leq a_i \leq n\)) — начальная вершина, количество удаленных вершин и удаленные вершины.

Гарантируется, что в запросе все вершины \(x,a_1,a_2,\ldots,a_k\) различны.

Гарантируется, что сумма \(k\) по всем запросам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите одно целое число, являющееся ответом на этот запрос.

Примечание

В первом примере дерево выглядит следующим образом:

В первом запросе ни одна вершина не пропущена. Самый длинный простой путь, начинающийся в вершине \(2\), это \(2 \to 1 \to 3 \to 4\). Таким образом, ответ — \(3\).

Во третьем запросе отсутствуют вершины \(1\) и \(6\), и дерево показано ниже. Самый длинный простой путь из вершины \(2\) — это \(2 \to 5\). Таким образом, ответ — \(1\).

F. Прекрасное дерево

графы Деревья поиск в глубину и подобное реализация Структуры данных *2800

У Ланчбокса есть дерево размера \(n\) с корнем в вершине \(1\). Каждой вершине присваивается значение. Ланчбокс считает дерево прекрасным, если каждое значение является уникальным и находится в диапазоне от \(1\) до \(n\). Кроме того, прекрасное дерево должно удовлетворять \(m\) требованиям \(2\) типов:

  • «1 a b c» — Вершина с наименьшим значением на пути между вершинами \(a\) и \(b\) должна быть \(c\).
  • «2 a b c» — Вершина с наибольшим значением на пути между вершинами \(a\) и \(b\) должна быть \(c\).

Теперь вы должны присвоить значения каждой вершине так, чтобы получившееся дерево было прекрасным. Если это невозможно, выведите \(-1\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n, m \le 2 \cdot 10^5\)).

Следующие \(n - 1\) строк содержат по два целых числа \(u\) и \(v\) (\(1 \le u, v \le n, u \ne v\)) — в дереве есть ребро между вершинами \(u\) и \(v\). Гарантируется, что заданные ребра образуют дерево.

Следующие \(m\) строк содержат по четыре целых числа \(t\), \(a\), \(b\) и \(c\) (\(t \in \{1,2\}\), \(1 \le a, b, c \le n\)). Гарантируется, что вершина \(c\) находится на пути между вершинами \(a\) и \(b\).

Выходные данные

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

D. Циклический MEX

математика реализация Структуры данных *2000

Для массива \(a\) определим его стоимость как \(\sum_{i=1}^{n} \operatorname{mex} ^\dagger ([a_1,a_2,\ldots,a_i])\).

Вам дана перестановка\(^\ddagger\) \(p\) множества \(\{0,1,2,\ldots,n-1\}\). Найдите максимальную стоимость среди всех циклических сдвигов \(p\).

\(^\dagger\operatorname{mex}([b_1,b_2,\ldots,b_m])\) — это наименьшее неотрицательное целое число \(x\), такое что \(x\) не встречается среди \(b_1,b_2,\ldots,b_m\).

\(^\ddagger\)Перестановкой множества \(\{0,1,2,...,n-1\}\) является массив, состоящий из \(n\) различных целых чисел от \(0\) до \(n-1\) в произвольном порядке. Например, \([1,2,0,4,3]\) — перестановка, но \([0,1,1]\) не перестановка (\(1\) встречается дважды в массиве), и \([0,2,3]\) тоже не перестановка (\(n=3\), но есть \(3\) в массиве).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^6\)) — длина перестановки \(p\).

Вторая строка каждого набора входных данных содержит \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(0 \le p_i < n\)) — элементы перестановки \(p\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную стоимость среди всех циклических сдвигов \(p\).

Примечание

В первом наборе входных данных циклическим сдвигом, дающим максимальную стоимость, является \([2,1,0,5,4,3]\) со стоимостью \(0+0+3+3+3+6=15\).

Во втором наборе входных данных циклическим сдвигом, дающим максимальную стоимость, является \([0,2,1]\) со стоимостью \(1+1+3=5\).

F. Поле не должно быть пустым

Перебор разделяй и властвуй Структуры данных *2600

Вам дана перестановка\(^{\dagger}\) \(p\) длины \(n\).

Мы называем индекс \(x\) хорошим, если для всех \(y < x\) выполняется условие \(p_y < p_x\), и для всех \(y > x\) выполняется условие \(p_y > p_x\). Обозначим \(f(p)\) как количество хороших индексов в \(p\).

Вы можете выполнить следующую операцию: выберите \(2\) различных индекса \(i\) и \(j\) и поменяйте местами элементы \(p_i\) и \(p_j\).

Найдите максимальное значение \(f(p)\) после применения вышеупомянутой операции ровно один раз.

\(^{\dagger}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длина перестановки \(p\).

Вторая строка каждого набора входных данных содержит \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)) — элементы перестановки \(p\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное значение \(f(p)\) после выполнения операции ровно один раз.

Примечание

В первом наборе входных данных \(p = [1,2,3,4,5]\) и \(f(p)=5\), что уже является максимально возможным. Но операцию нужно выполнить в любом случае. Мы можем получить \(f(p)=3\), выбрав \(i=1\) и \(j=2\), после чего \(p = [2,1,3,4,5]\).

Во втором наборе входных данных мы можем преобразовать \(p\) в \([1,2,3,4,5]\), выбрав \(i=1\) и \(j=2\). Таким образом, \(f(p)=5\).

F. Maximize The Value

сортировки Структуры данных *2100

You are given a one-based array consisting of \(N\) integers: \(A_1, A_2, \cdots, A_N\). Initially, the value of each element is set to \(0\).

There are \(M\) operations (numbered from \(1\) to \(M\)). Operation \(i\) is represented by \(\langle L_i, R_i, X_i \rangle\). If operation \(i\) is executed, all elements \(A_j\) for \(L_i \leq j \leq R_i\) will be increased by \(X_i\).

You have to answer \(Q\) independent queries. Each query is represented by \(\langle K, S, T \rangle\) which represents the following task. Choose a range \([l, r]\) satisfying \(S \leq l \leq r \leq T\), and execute operations \(l, l + 1, \dots, r\). The answer to the query is the maximum value of \(A_K\) after the operations are executed among all possible choices of \(l\) and \(r\).

Input

The first line consists of two integers \(N\) \(M\) (\(1 \leq N, M \leq 100\,000\)).

Each of the next \(M\) lines consists of three integers \(L_i\) \(R_i\) \(X_i\) (\(1 \leq L_i \leq R_i \leq N; -100\,000 \leq X_i \leq 100\,000\)).

The following line consists of an integer \(Q\) (\(1 \leq Q \leq 100\,000\)).

Each of the next \(Q\) lines consists of three integers \(K\) \(S\) \(T\) (\(1 \leq K \leq N; 1 \leq S \leq T \leq M\)).

Output

For each query, output in a single line, an integer which represent the answer of the query.

Note

Explanation for the sample input/output #1

For query \(1\), one of the solutions is to execute operation \(4\) and \(5\).

For query \(2\), one of the solutions is to execute operation \(4\), \(5\), and \(6\).

For query \(3\), the only solution is to execute operation \(3\).

For query \(4\), the only solution is to execute operation \(1\).

For query \(6\), the only solution is to execute operation \(2\).

B. YetnotherrokenKeoard

реализация Строки Структуры данных *1000

У Поликарпа беда — сломалась клавиатура на его ноутбуке.

Теперь, когда он нажимает клавишу 'b', она отрабатывает подобно необычному backspace: происходит удаление последней (самой правой) строчной буквы в набранной строке. Если в набранной строке нет ни одной строчной буквы, то нажатие полностью игнорируется.

Аналогично, когда он нажимает клавишу 'B', то происходит удаление последней (самой правой) прописной буквы в набранной строке. Если в набранной строке нет ни одной прописной буквы, то нажатие полностью игнорируется.

В обоих случаях буквы 'b' и/или 'B' при нажатии на эти клавиши не добавляются в набранную строку.

Рассмотрим пример. Пусть последовательность нажатий имела вид «ARaBbbitBaby». В этом случае набранная строка будет изменяться следующим образом: «» \(\xrightarrow{\texttt{A}}\) «A» \(\xrightarrow{\texttt{R}}\) «AR» \(\xrightarrow{\texttt{a}}\) «ARa» \(\xrightarrow{\texttt{B}}\) «Aa» \(\xrightarrow{\texttt{b}}\) «A» \(\xrightarrow{\texttt{b}}\) «A» \(\xrightarrow{\texttt{i}}\) «Ai» \(\xrightarrow{\texttt{t}}\) «Ait» \(\xrightarrow{\texttt{B}}\) «it» \(\xrightarrow{\texttt{a}}\) «ita» \(\xrightarrow{\texttt{b}}\) «it» \(\xrightarrow{\texttt{y}}\) «ity».

По заданной последовательности нажатых клавиш выведите набранную строку после обработки всех нажатий.

Входные данные

В первой строке входных данных содержится целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте.

Далее содержится \(t\) непустых строк, которые состоят из строчных и прописных букв латинского алфавита.

Гарантируется, что каждая строка содержит хотя бы одну букву и сумма длин строк не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите результат обработки нажатий в отдельной строке. Если набранная строка пустая, то выведите пустую строку.

C. Тяжелые интервалы

жадные алгоритмы Конструктив математика снм сортировки Структуры данных *1400

У вас есть \(n\) интервалов \([l_1, r_1], [l_2, r_2], \dots, [l_n, r_n]\) таких, что \(l_i < r_i\) для каждого \(i\), и все конечные точки интервалов различны.

Вес \(i\)-го интервала составляет \(c_i\) на единицу длины. Поэтому вес \(i\)-го интервала равен \(c_i \cdot (r_i - l_i)\).

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

  • переставить элементы массива \(l\) в любом порядке;
  • переставить элементы массива \(r\) в любом порядке;
  • переставить элементы массива \(c\) в любом порядке.

Однако после выполнения всех операций интервалы должны оставаться корректными (т.е. для каждого \(i\) должно выполняться условие \(l_i < r_i\)).

Какова минимально возможная сумма весов интервалов после выполнения этих операций?

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество интервалов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(l_1, l_2, \ldots, l_n\) (\(1 \le l_i \le 2 \cdot 10^5\)) — левые конечные точки начальных интервалов.

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(r_1, r_2, \ldots, r_n\) (\(l_i < r_i \le 2 \cdot 10^5\)) — правые конечные точки начальных интервалов.

Гарантируется, что все \(\{l_1, l_2, \dots, l_n, r_1, r_2, \dots, r_n\}\) различны.

Четвертая строка каждого набора входных данных содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le 10^7\)) — начальные веса интервалов на единицу длины.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных вы можете сделать так

  • \(l = [8, 3]\);
  • \(r = [23, 12]\);
  • \(c = [100, 100]\).

В этом случае будет два интервала:

  • интервал \([8, 23]\) с весом \(100\) на единицу длины, тогда вес интервала равняется \(100 \cdot (23-8) = 1500\);
  • интервал \([3, 12]\) с весом \(100\) на единицу длины, тогда вес интервала равняется \(100 \cdot (12-3) = 900\);

Сумма весов составляет \(2400\). Можно показать, что не существует конфигурации конечных интервалов, сумма весов которых меньше \(2400\).

Во втором наборе входных данных можно сделать так

  • \(l = [1, 2, 5, 20]\);
  • \(r = [3, 4, 10, 30]\);
  • \(c = [3, 3, 2, 2]\).

В этом случае будет четыре интервала:

  • интервал \([1, 3]\) с весом \(3\) на единицу длины, вес всего интервала равен \(3 \cdot (3-1) = 6\);
  • интервал \([2, 4]\) с весом \(3\) на единицу длины, вес всего интервала равен \(3 \cdot (4-2) = 6\);
  • интервал \([5, 10]\) с весом \(2\) на единицу длины, вес всего интервала равен \(2 \cdot (10-5) = 10\);
  • интервал \([20, 30]\) с весом \(2\) на единицу длины, вес всего интервала равен \(2 \cdot (30-20) = 20\).

Сумма весов равна \(42\). Можно показать, что не существует конфигурации конечных интервалов, сумма весов которых меньше \(42\).

H. Сортировка параллельными обменами

Конструктив Структуры данных *3500

Вам дана перестановка \(p_1, p_2, \dots, p_n\) элементов \([1, 2, \dots, n]\). Вы можете выполнить следующую операцию некоторое количество раз (возможно, \(0\)):

  • выбрать подмассив \([l, r]\) четной длины;
  • поменять местами \(a_l\), \(a_{l+1}\);
  • поменять местами \(a_{l+2}\), \(a_{l+3}\) (если \(l+3 \leq r\));
  • \(\dots\)
  • поменять местами \(a_{r-1}\), \(a_r\).

Отсортируйте перестановку не более чем за \(10^6\) операций. Вам не нужно минимизировать количество операций.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)) — длину перестановки.

Вторая строка содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\), \(p_i\) различны) — перестановку перед выполнением операций.

Выходные данные

Выведите свои операции в следующем формате.

Первая строка должна содержать целое число \(k\) (\(0 \le k \le 10^6\)) — количество операций.

Следующие \(k\) строк представляют \(k\) операций по порядку. Каждая из этих \(k\) строк должна содержать два целых числа \(l\) и \(r\) (\(1 \leq l < r \leq n\), \(r-l+1\) должно быть четным) — соответствующая операция заключается в выборе подмассива \([l, r]\) и перестановке его элементов в соответствии с постановкой задачи.

После всех операций для каждого \(i\) (\(1 \leq i \leq n\)) должно выполняться \(a_i = i\).

Примечание

В первом примере:

  • В начале, \(p = [2, 5, 4, 1, 3]\).
  • В первой операции можно выбрать \([l, r] = [1, 4]\). Тогда \((a_1, a_2)\) меняются местами и \((a_3, a_4)\) меняются местами. Новая перестановка — \(p = [5, 2, 1, 4, 3]\).
  • Во второй операции можно выбрать \([l, r] = [1, 2]\). Тогда \((a_1, a_2)\) меняются местами. Новая перестановка будет \(p = [2, 5, 1, 4, 3]\).
  • В третьей операции можно выбрать \([l, r] = [2, 5]\). Тогда \((a_2, a_3)\) поменяются местами и \((a_4, a_5)\) поменяются местами. Новая перестановка — \(p = [2, 1, 5, 3, 4]\).
  • В четвертой операции можно выбрать \([l, r] = [1, 4]\). Тогда \((a_1, a_2)\) поменяются местами и \((a_3, a_4)\) поменяются местами. Новая перестановка — \(p = [1, 2, 3, 5, 4]\).
  • В пятой операции можно выбрать \([l, r] = [4, 5]\). Тогда \((a_4, a_5)\) поменяются местами. Новая перестановка — \(p = [1, 2, 3, 4, 5]\) — отсортирована.

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

C. Дураки и дороги

Деревья поиск в глубину и подобное Структуры данных *1900

Как известно, в Берляндии ровно две проблемы — дураки и дороги. Кроме того, в Берляндии есть n городов, в которых эти дураки живут, а дороги, соответственно, эти города соединяют. Все берляндские дороги двунаправленные. Так как в Берляндии дураков много, то для каждой пары городов есть путь между ними (иначе дураки расстроятся), а также между каждой парой городов есть не более одного простого пути (иначе дураки заблудятся).

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

Простой путь — это путь, который проходит через каждый город Берляндии не более одного раза.

Правительству Берляндии известны пути, по которым ходят дураки. Помогите правительству для каждой дороги посчитать, сколько различных дураков может по ней проходить.

Обратите внимание на то, как заданы пути дураков во входных данных.

Входные данные

В первой строке записано единственное целое число n (2 ≤ n ≤ 105) — количество городов.

В следующих n - 1 строках записаны по два целых числа через пробел ui, vi (1 ≤ ui, vi ≤ n, ui ≠ vi), означающих, что есть дорога, соединяющая города ui и vi.

В следующей строке записано целое число k (0 ≤ k ≤ 105) — количество пар дураков, которые ходят друг к другу в гости.

В следующих k строках заданы по два целых числа через пробел. В i-й строке (i > 0) записаны числа ai, bi (1 ≤ ai, bi ≤ n). Это означает, что дурак под номером 2i - 1 живет в городе ai и ходит в гости к дураку под номером 2i, который живет в городе bi. Заданные пары городов описывают простые пути, так как между любой парой городов существует ровно один простой путь.

Выходные данные

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

Примечание

В первом примере дурак номер 1 пройдет через первую и третью дорогу, а дурак номер 3 — через вторую, первую и четвертую.

Во втором примере через первую дорогу пройдут дураки под номерами 1, 3 и 5, через вторую — дурак номер 5, через третью — дурак номер 3, через четвертую — дурак номер 1.

E. Разгон митингов

Бинарный поиск Деревья Структуры данных *2200

В Берляндии неспокойные времена. Берляндская оппозиция, финансируемая из соседнего государства, организовала митинги в столице Берляндии городе Берляндске. Благодаря работе разведки известно, что митинги продлятся k дней.

К счастью, в Берляндии есть специальный полицейский отряд, который может спасти страну. В нем ровно n солдат, пронумерованных от 1 до n. Берляндский генерал, командующий отрядом, должен составить расписание работы отряда в эти непростые k дней. В каждый из этих дней генерал должен отправить некоторое количество полицейских для разгона беспорядков. Так как отряд большой, а генерал не очень умный, то он может выбрать только набор из всех солдат с номерами от l до r, включительно, где l и r он выбирает произвольно.

Сейчас у генерала есть ровно две проблемы. Во-первых, нельзя два раза отправлять один и тот же отряд — тогда солдатам станет скучно и они взбунтуются. Во-вторых, не все солдаты одинаково надежны. У каждого солдата есть некоторая надежность ai. Надежность отряда считается как сумма надежностей солдат в нем. Надежность одного солдата может быть отрицательной, тогда при включении в отряд он будет только помехой. Генерал отличается большой жадностью и столь же большой недальновидностью, поэтому каждый день он отправляет на разгон самый надежный отряд солдат из возможных (то есть из всех отрядов, которые еще не были отправлены).

Правительство Берляндии решило узнать, какова будет минимальная надежность отряда, отправляемого на разгон митингов в течение этих k дней. Сам генерал не может справиться со столь сложной задачей. Помогите ему не опозориться перед начальством!

Входные данные

На первой строке записаны два целых числа n и k — количество солдат в отряде и количество дежурств.

На второй строке задано n целых чисел через пробел ai, не превосходящих по модулю 109 — надежности солдат.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

Выходные данные

Выведите одно число — искомую минимальную надежность отряда в течение этих k дней.

H. Сумма цифр сумм

*особая задача Бинарный поиск Структуры данных *2400

Дан массив \([a_1, a_2, \dots, a_n]\), состоящий из положительных целых чисел.

Для каждого \(i\) от \(1\) до \(n\) посчитайте \(\sum \limits_{j=1}^{n} F(a_i + a_j)\), где \(F(x)\) — сумма цифр \(x\).

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i < 10^9\)).

Выходные данные

Выведите \(n\) целых чисел, \(i\)-е из них должно быть равно \(\sum \limits_{j=1}^{n} F(a_i + a_j)\).

D. Схлопывание массива

Деревья дп разделяй и властвуй Структуры данных *2100

Вам дан массив \([p_1, p_2, \dots, p_n]\), где все элементы различны.

Вы можете выполнить несколько (возможно, ни одной) операций с ним. В одной операции вы можете выбрать непрерывный подотрезок \(p\) и удалить все элементы из этого подотрезка, кроме минимального элемента в этом подотрезке. Например, если \(p = [3, 1, 4, 7, 5, 2, 6]\) и вы выберете подотрезок от \(3\)-го элемента до \(6\)-го элемента, полученный массив будет \([3, 1, 2, 6]\).

Массив \(a\) называется достижимым, если его можно получить из \(p\) с помощью нескольких (возможно, нуля) вышеупомянутых операций. Вычислите количество достижимых массивов и выведите его по модулю \(998244353\).

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая строка содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)). Вторая строка содержит \(n\) различных целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le 10^9\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого теста выведите одно целое число — количество достижимых массивов, взятое по модулю \(998244353\).

F. Палиндромы и изменения

Бинарный поиск Строки строковые суфф. структуры Структуры данных хэши *2800

Вам дана строка \(s\) длины \(n\), состоящая из строчных латинских букв.

Вам разрешено заменить не более одного символа строки на произвольную строчную латинскую букву.

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

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различаются, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

В первой строке записано одно целое число \(n\) (\(1 \leq n \leq 3 \cdot 10^5\)) — количество символов в строке.

Во второй строке задана сама строка \(s\) из \(n\) строчных латинских букв

Выходные данные

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

Во второй строке выведите строку, которую можно получить из \(s\) и которая содержит максимальное количество подстрок-палиндромов. Если таких строк несколько, выведите лексикографически минимальную.

G2. Лампочки (сложная версия)

графы дп Комбинаторика поиск в глубину и подобное Структуры данных хэши *2300

Простая и сложная версии этой задачи отличаются друг от друга только ограничениями на \(n\). В сложной версии сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Кроме того, никаких дополнительных ограничений на значение \(n\) в одиночном наборе входных данных нет.

В ряд расположены \(2n\) лампочек. У каждой лампочки есть цвет от \(1\) до \(n\) (ровно по две лампочки каждого цвета).

Изначально все лампочки выключены. Вы выбираете некоторое множество лампочек \(S\), которое вы изначально включите. После этого вы можете выполнять следующие операции в любом порядке любое количество раз:

  • выбрать две лампочки \(i\) и \(j\) одинакового цвета, ровно одна из которых включена, и включить вторую из них;
  • выбрать три лампочки \(i, j, k\), такие, что обе лампочки \(i\) и \(k\) включены и имеют одинаковый цвет, а лампочка \(j\) находится между ними (\(i < j < k\)), и включить лампочку \(j\).

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

Посчитайте два числа:

  • минимальный размер множества \(S\), которое вы изначально включаете;
  • количество множеств \(S\) минимального размера (по модулю \(998244353\)).
Входные данные

В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество пар лампочек.

Во второй строке каждого набора заданы \(2n\) целых чисел \(c_1, c_2, \dots, c_{2n}\) (\(1 \le c_i \le n\)), где \(c_i\) — цвет \(i\)-й лампочки. Для каждого цвета от \(1\) до \(n\) ровно две лампочки имеют этот цвет.

Дополнительное ограничение на входные данные: сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите два целых числа:

  • минимальный размер множества \(S\), которое вы изначально включаете;
  • количество множеств \(S\) минимального размера (по модулю \(998244353\)).

E. Романтические стаканы

жадные алгоритмы математика Структуры данных *1300

У Юлии есть \(n\) стаканов, расположенных в линию. В \(i\)-м стакане \(a_i\) единиц сока. Юлия пьет только из стаканов с нечетными номерами, в то время как ее партнер пьет только из стаканов с четными номерами.

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

Формально, определите, существуют ли два индекса \(l\), \(r\) такие, что \(1 \leq l \leq r \leq n\), и \(a_l + a_{l + 2} + a_{l + 4} + \dots + a_{r} = a_{l + 1} + a_{l + 3} + \dots + a_{r-1}\), если \(l\) и \(r\) имеют одинаковую четность, и \(a_l + a_{l + 2} + a_{l + 4} + \dots + a_{r - 1} = a_{l + 1} + a_{l + 3} + \dots + a_{r}\) в противном случае.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — общее количество стаканов.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — количество сока в каждом стакане.

Сумма \(n\) по всем тестам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если существует подмассив, удовлетворяющий условию, и «NO» в противном случае.

Вы можете вывести ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом тесте Юлия может выбрать \(l=1\) и \(r=3\). Затем она выпьет \(a_1+a_3=1+2=3\) единиц, а ее партнер выпьет \(a_2=3\) единиц сока.

Во втором тесте Юлия может выбрать \(l=2\) и \(r=5\). Затем она выпьет \(a_3+a_5=1+1=2\) единиц, а ее партнер выпьет \(a_2+a_4=1+1=2\) единиц сока.

В третьем тесте ни один такой непрерывный подмассив не подходит.

В четвертом тесте Юлия может выбрать \(l=2\) и \(r=8\). Затем она выпьет \(a_3+a_5+a_7=11+1+1=13\) единиц, а ее партнер выпьет \(a_2+a_4+a_6+a_8=2+4+5+2=13\) единиц сока.

F. Приветствия

разделяй и властвуй сортировки Структуры данных *1500

На числовой прямой находятся \(n\) человек; \(i\)-й человек находится в точке \(a_i\) и хочет попасть в точку \(b_i\). Для каждого человека \(a_i < b_i\), и начальные и конечные точки всех людей различны. (То есть все \(2n\) чисел \(a_1, a_2, \dots, a_n, b_1, b_2, \dots, b_n\) различны.)

Все люди начнут двигаться одновременно со скоростью \(1\) единица в секунду, пока не достигнут своей конечной точки \(b_i\). Когда два человека встречаются в одной точке, они поздороваются один раз. Сколько будет приветствий?

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

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество людей.

Затем следуют \(n\) строк, \(i\)-я из которых содержит два целых числа \(a_i\) и \(b_i\) (\(-10^9 \leq a_i < b_i \leq 10^9\)) — начальные и конечные позиции каждого человека.

Для каждого набора входных данных все \(2n\) чисел \(a_1, a_2, \dots, a_n, b_1, b_2, \dots, b_n\) различны.

Сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных два человека встретятся в точке \(3\) и поздороваются.

E. Весёлая жизнь в университете

Деревья жадные алгоритмы поиск в глубину и подобное Структуры данных *2300

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

Прежде всего они решили позаботиться о том, где будут жить долгие четыре года обучения, и зайдя на сайт университета, выяснили, что общежитие университета можно представить в виде корневого дерева из \(n\) вершин с корнем в вершине \(1\). В дереве каждая вершина представляет собой рекреацию с некоторым видом активности \(a_i\). Друзьям нужно выбрать \(2\) рекреации (не обязательно различные), в которых они поселятся. Ребята убеждены, что тем будет веселее их жизнь, чем больше значение следующей функции \(f(u, v) = diff(u, lca(u, v)) \cdot diff(v, lca(u, v))\). Помогите Егору и Арсению и найдите максимальное значение \(f(u, v)\) среди всех пар рекреаций!

\(^{\dagger} diff(u, v)\) — количество различных активностей, выписанных на простом пути от вершины \(u\) до вершины \(v\).

\(^{\dagger} lca(u, v)\) — такая вершина \(p\), что она находится на максимальном расстоянии от корня и является предком и вершины \(u\), и вершины \(v\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^{5}\)).

Вторая строка каждого набора входных данных содержит \({n - 1}\) целых чисел \(p_2, p_3, \ldots,p_n\) (\(1 \le p_i \le i - 1\)), где \(p_i\) — предок вершины \(i\).

Третья строка каждого набора входных данных содержит \({n}\) целых чисел \(a_1, a_2, \ldots,a_n\) (\(1 \le a_i \le n\)), где \(a_i\) — номер активности, которая находится в вершине \(i\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальное значение \(f(u, v)\), по всем парам рекреаций \((u, v)\).

Примечание

Рассмотрим четвертый набор входных данных. Дерево имеет такой вид:

Все рекреации раскрашены в цвета. Одинаковые цвета означает что активности в рекреациях совпадают. Рассмотрим пару вершин \((11, 12)\), \(lca(11, 12) = 1\). Выпишем все активности на пути от \(11\) до \(1\) — \([11, 5, 1, 11]\), среди них различных активностей \(3\), то есть \(diff(11, 1) = 3\). Также выпишем все активности на пути от \(12\) до \(1\) — \([7, 8, 2, 11]\), среди них различных активностей \(4\), то есть \(diff(12, 1) = 4\). Получаем что \(f(11, 12) = diff(12, 1) \cdot diff(11, 1) = 4 \cdot 3 = 12\), что и является ответом для данного дерева. Можно показать, что ответ лучше получить невозможно.

B. Удалить первый или второй символ

дп Комбинаторика Перебор Строки Структуры данных *1100

Вам дана строка \(s\) длины \(n\). Определим две операции, которые можно применить к строке:

  • удалить первый символ строки;
  • удалить второй символ строки.

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

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

Вторая строка каждого набора входных данных содержит строку \(s\). Гарантируется, что строка содержит только строчные буквы латинского алфавита.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных мы можем получить следующие строки: \(a\), \(aa\), \(aaa\), \(aaaa\), \(aaaaa\).

В третьем наборе входных данных, например, слово \(ba\) можно получить следующим образом:

  • удалить первый символ текущей строки \(ababa\), получив \(baba\);
  • удалить второй символ текущей строки \(baba\), получив \(bba\);
  • удалить второй символ текущей строки \(bba\), получив \(ba\).

D. Очередная задача про инверсии

дп Комбинаторика математика реализация Структуры данных теория чисел *2300

Вам даны перестановка \(p_0, p_1, \ldots, p_{n-1}\) нечётных чисел от \(1\) до \(2n-1\) и перестановка \(q_0, q_1, \ldots, q_{k-1}\) целых чисел от \(0\) до \(k-1\).

Определим массив \(a_0, a_1, \ldots, a_{nk-1}\) длины \(nk\) в соответствии со следующим правилом:

\(a_{i \cdot k+j}=p_i \cdot 2^{q_j}\) для всех \(0 \le i < n\) и всех \(0 \le j < k\)

Например, если \(p = [3, 5, 1]\) и \(q = [0, 1]\), то \(a = [3, 6, 5, 10, 1, 2]\).

Обратите внимание, что все массивы в условии нумеруются с нуля. Также обратите внимание, что каждый элемент массива \(a\) определён однозначно.

Найдите количество инверсий в массиве \(a\). Так как ответ может быть очень большим, выведите его по модулю \(998\,244\,353\).

Инверсией в массиве \(a\) называется пара \((i, j)\) (\(0 \le i < j < nk\)), такая что \(a_i > a_j\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит два числа \(n\) и \(k\) (\(1 \le n, k \le 2 \cdot 10^5\)) — длины массивов \(p\) и \(q\).

Вторая строка каждого набора содержит \(n\) различных целых чисел \(p_0, p_1, \ldots, p_{n-1}\) (\(1 \le p_i \le 2n-1\), \(p_i\) нечётно) — массив \(p\).

Третья строка каждого набора содержит \(k\) различных целых чисел \(q_0, q_1, \ldots, q_{k-1}\) (\(0 \le q_i < k\)) — массив \(q\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), и что сумма \(k\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — количество инверсий в массиве \(a\) по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных массив \(a\) равен \([3, 6, 5, 10, 1, 2]\). В нём есть \(9\) инверсий: \((0, 4)\), \((0, 5)\), \((1, 2)\), \((1, 4)\), \((1, 5)\), \((2, 4)\), \((2, 5)\), \((3, 4)\), \((3, 5)\). Обратите внимание, что здесь перечислены пары \((i, j)\), такие что \(i < j\) и \(a_i > a_j\).

Во втором наборе входных данных массив \(a\) равен \([8, 4, 1, 2, 24, 12, 3, 6, 40, 20, 5, 10]\). В нём \(25\) инверсий.

В третьем наборе входных данных массив \(a\) равен \([1, 2, 4, 8, 16]\). В нём нет инверсий.

B. Минимизируйте инверсии

жадные алгоритмы Конструктив реализация сортировки Структуры данных *900

Вам даны две перестановки \(a\) и \(b\) длины \(n\). Перестановкой называется массив из \(n\) элементов от \(1\) до \(n\), в котором все элементы различны. К примеру, массив [\(2,1,3\)] является перестановкой, а [\(0,1\)] и [\(1,3,1\)] не являются.

Вы можете сколько угодно раз выбрать два индекса \(i\) и \(j\), а затем поменять местами элементы \(a_i\) с \(a_j\) и \(b_i\) с \(b_j\) одновременно.

Вы ненавидите инверсии и поэтому хотите минимизировать суммарное число инверсий в обеих перестановках.

Инверсией в перестановке \(p\) называется пара индексов \((i, j)\), такая что \(i < j\) и \(p_i > p_j\). Например, если \(p=[3,1,4,2,5]\), то количество инверсий в этой перестановке равно \(3\) (искомые пары индексов: \((1,2)\), \((1,4)\) и \((3,4)\)).

Входные данные

В первой строке входных данных вводится одно число \(t\) (\(1 \leq t \leq 20\,000\)) — количество запросов.

Каждый набор входных данных состоит из трех строк. В первой строке вводится число \(n\) (\(1 \leq n \leq 2\cdot10^5\)) — длина перестановок \(a\) и \(b\). Во второй строке вводится \(n\) элементов \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)) — перестановка \(a\). В третьей строке в аналогичном формате вводится перестановка \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите две перестановки \(a'\) и \(b'\) — перестановки после применения операций. Суммарное количество инверсий в \(a'\) и \(b'\) должно быть минимально возможным среди всех пар перестановок, которые возможно получить с помощью операций из условия.

Если существует несколько решений, выведите любое из них.

Примечание

В первом тесте минимальное достижимое количество инверсий равно \(10\).

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

  • Поменять элементы на позициях \(1\) и \(3\) в обеих перестановках. После операции \(a =\) [\(2,1,3\)], \(b =\) [\(2,1,3\)].
  • Поменять элементы на позициях \(1\) и \(2\). После операции \(a\) и \(b\) отсортированы.

В третьем тесте минимальное достижимое количество инверсий равно \(7\).

D. Блокировка элементов

Бинарный поиск дп реализация Структуры данных *1900

Вам дан массив чисел \(a_1, a_2, \ldots, a_n\). Ваша задача — заблокировать некоторые элементы массива так, чтобы минимизировать его стоимость. Допустим, вы заблокировали элементы с индексами \(1 \leq b_1 < b_2 < \ldots < b_m \leq n\). Тогда стоимость массива вычисляется как максимум из:

  • суммы заблокированных элементов, то есть \(a_{b_1} + a_{b_2} + \ldots + a_{b_m}\).
  • максимума из сумм на частях, на которые распадается массив, если удалить заблокированные элементы. То есть максимум из сумм на следующем (\(m + 1\))-ом подотрезке: [\(1, b_1 − 1\)], [\(b_1 + 1, b_2 − 1\)], [\(\ldots\)], [\(b_{m−1} + 1, b_m - 1\)], [\(b_m + 1, n\)] (сумма чисел на подотрезке вида [\(x,x − 1\)] полагается равной \(0\)).

К примеру, если \(n = 6\), исходный массив равен [\(1, 4, 5, 3, 3, 2\)], и вы заблокировали элементы на позициях \(2\) и \(5\), то стоимость массива будет равна максимуму из суммы заблокированных элементов (\(4 + 3 = 7\)) и сумм на отрезках (\(1\), \(5 + 3 = 8\), \(2\)) что равно \(\max(7,1,8,2) = 8\).

Вам нужно вывести минимальную стоимость массива после блокировки.

Входные данные

В первой строке входных данных вводится одно число \(t\) (\(1 \leq t \leq 30\,000\)) — количество запросов.

Каждый набор входных данных состоит из двух строк. В первой строке вводится число \(n\) (\(1 \leq n \leq 10^5\)) — длина массива \(a\). Во второй строке вводится \(n\) элементов \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальную стоимость блокировки массива.

Примечание

Первый набор совпадает с массивом из условия. Чтобы получить стоимость \(7\) нужно заблокировать элементы на позициях \(2\) и \(4\), В таком случае стоимость массива вычислится как максимум из:

  • суммы заблокированных элементов, которая равна \(a_2 + a_4 = 7\).
  • максимума из сумм на частях, на которые распадается массив, если убрать заблокированные, то есть максимум из \(a_1\), \(a_3\), \(a_5 + a_6 = \max(1,5,5) = 5\).

То есть стоимость равна \(\max(7,5) = 7\).

Во втором наборе можно заблокировать элементы на позициях \(1\) и \(4\).

В третьем наборе чтобы получить ответ \(11\) можно заблокировать элементы на позициях \(2\) и \(5\). Есть и другие способы получить такой ответ, например заблокировать позиции \(4\) и \(6\).

C. Увеличения в группах

дп жадные алгоритмы Структуры данных *1400

Дан массив \(a\) длины \(n\). Чтобы вычислить штраф, нужно выполнить следующие действия:

  1. Разбить массив \(a\) на две (возможно, пустых) подпоследовательности \(^\dagger\) \(s\) и \(t\) такие, что каждый элемент \(a\) находится либо в \(s\), либо в \(t^\ddagger\).
  2. Для массива \(b\) длины \(m\) определим штраф \(p(b)\) массива \(b\) как количество индексов \(i\) между \(1\) и \(m - 1\) таких, что \(b_i < b_{i + 1}\).
  3. Общий штраф, который вы получите, равен \(p(s) + p(t)\).

Найдите минимально возможный штраф, который вы получите, если выполните вышеописанные действия оптимально.

\(^\dagger\) Последовательность \(x\) является подпоследовательностью \(y\), если \(x\) может быть получена из \(y\) удалением нескольких (возможно, ни одного или всех) элементов.

\(^\ddagger\) Некоторыми допустимыми способами разбиения массива \(a=[3,1,4,1,5]\) на \((s,t)\) являются \(([3,4,1,5],[1])\), \(([1,1],[3,4,5])\) и \(([\,],[3,1,4,1,5])\), в то время как некоторыми недопустимыми способами разбиения \(a\) являются \(([3,4,5],[1])\), \(([3,1,4,1],[1,5])\) и \(([1,3,4],[5,1])\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 2\cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных возможный способ разбиения \(a\) — \(s=[2,4,5]\) и \(t=[1,3]\). Штраф равняется \(p(s)+p(t)=2 + 1 =3\).

Во втором наборе входных данных возможный способ разбиения \(a\) — \(s=[8,3,1]\) и \(t=[2,1,7,4,3]\). Штраф равняется \(p(s)+p(t)=0 + 1 =1\).

В третьем наборе входных данных возможным способом разбиения \(a\) является \(s=[\,]\) и \(t=[3,3,3,3,3]\). Штраф равняется \(p(s)+p(t)=0 + 0 =0\).

D. 01-дерево

Деревья жадные алгоритмы Конструктив снм сортировки Структуры данных *2100

Есть ребро-взвешенное полное двоичное дерево с \(n\) листьями. Полное двоичное дерево определяется как дерево, в котором каждая нелистовая вершина имеет ровно 2 дочерних вершины. Для каждой нелистовой вершины обозначим одного из ее детей как левого ребенка, а другого — как правого.

Это двоичное дерево обладает очень странным свойством. Для каждой нелистовой вершины одно из ребер к ее детям имеет вес \(0\), а другое ребро — вес \(1\). Обратите внимание, что ребро с весом \(0\) может идти как к левому ребенку, так и к правому.

Вы забыли, как выглядит дерево, но, к счастью, вы помните некоторую информацию о листьях в виде массива \(a\) длины \(n\). Для каждого \(i\) от \(1\) до \(n\), \(a_i\) представляет собой расстояние\(^\dagger\) от корня до \(i\)-го листа (в порядке обхода dfs\(^\ddagger\)). Определите, существует ли полное двоичное дерево, удовлетворяющее массиву \(a\). Обратите внимание, что восстанавливать дерево не нужно.

\(^\dagger\) Расстояние от вершины \(u\) до вершины \(v\) определяется как сумма весов ребер на пути от вершины \(u\) до вершины \(v\).

\(^\ddagger\) Порядок листьев в dfs определяется вызовом следующей функции \(\texttt{dfs}\) на корне бинарного дерева.


dfs_order = [] — порядок обхода dfs

функция dfs(v):
если v — лист:
добавить v в конец dfs_order
иначе:
dfs(левый ребенок v)
dfs(правый ребенок v)

dfs(корень)
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2\cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le n - 1\)) — расстояние от корня до \(i\)-го листа.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если существует полное двоичное дерево, удовлетворяющее массиву \(a\), и «NO» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных массиву удовлетворяет следующее дерево.

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

F1. Винный завод (простая версия)

жадные алгоритмы Структуры данных *2300

Это простая версия задачи. Единственное различие между двумя версиями заключается в ограничениях на \(c_i\) и \(z\). Вы можете делать взломы, только если обе версии задачи решены.

Даны три массива \(a\), \(b\) и \(c\). \(a\) и \(b\) имеют длину \(n\), а \(c\) — длину \(n-1\). Обозначим за \(W(a,b,c)\) количество литров вина, произведённых в результате следующего процесса.

Построим \(n\) водонапорных башен. Изначально \(i\)-я водонапорная башня имеет \(a_i\) литров воды, и перед ней стоит волшебник с силой \(b_i\). Кроме того, для каждого \(1 \le i \le n - 1\) существует клапан, соединяющий водонапорную башню \(i\) с \(i + 1\), и имеющий пропускную способность \(c_i\).

Для каждого \(i\) от \(1\) до \(n\) в этом порядке происходит следующее:

  1. Волшебник, стоящий перед водонапорной башней \(i\), забирает из башни не более \(b_i\) литров воды и превращает забранную воду в вино.
  2. Если \(i \neq n\), то не более \(c_i\) литров воды, оставшейся в водонапорной башне \(i\), вытекает через клапан в водонапорную башню \(i + 1\).

Дано \(q\) обновлений. В каждом обновлении вам будут даны целые числа \(p\), \(x\), \(y\) и \(z\), означающие следующие изменения: \(a_p := x\), \(b_p := y\) и \(c_p := z\). После каждого обновления найдите значение \(W(a,b,c)\). Обратите внимание, что предыдущие обновления массивов \(a\), \(b\) и \(c\) сохраняются во всех последующих обновлениях.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2 \le n \le 5\cdot 10^5\), \(1 \le q \le 5\cdot 10^5\)) — количество водонапорных башен и количество обновлений.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — количество литров воды в водонапорной башне \(i\).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(0 \le b_i \le 10^9\)) — сила волшебника перед водонапорной башней \(i\).

Четвертая строка содержит \(n - 1\) целых чисел \(c_1, c_2, \ldots, c_{n - 1}\) (\(c_i \color{red}{=} 10^{18}\)) — пропускная способность трубы, соединяющей водонапорную башню \(i\) с \(i + 1\).

Каждая из следующих \(q\) строк содержит четыре целых числа \(p\), \(x\), \(y\) и \(z\) (\(1 \le p \le n\), \(0 \le x, y \le 10^9\), \(z \color{red}{=} 10^{18}\)) — обновления массивов \(a\), \(b\) и \(c\).

Заметим, что \(c_n\) не существует, поэтому величина \(z\) не имеет значения при \(p = n\).

Выходные данные

Выведите \(q\) строк, каждая из которых содержит одно целое число, равняющееся \(W(a, b, c)\) после каждого обновления.

Примечание

Первое обновление не вносит никаких изменений в массивы.

  • Для \(i = 1\), в башне 1 находится \(3\) литра воды, и \(1\) литр воды превращается в вино. Оставшиеся \(2\) литра воды перетекают в башню 2.
  • Для \(i = 2\), в башне 2 находится \(5\) литров воды, и \(4\) литра воды превращается в вино. Оставшийся \(1\) литр воды попадает в башню 3.
  • Для \(i = 3\), в башне 3 находится \(4\) литра воды, и \(2\) литра воды превращается в вино. Оставшиеся \(2\) литра воды попадают в башню 4.
  • Для \(i = 4\), в башне 4 находится \(5\) литров воды. Все \(5\) литров воды превращаются в вино.

Следовательно, \(W(a,b,c)=1 + 4 + 2 + 5 = 12\) после первого обновления.

Второе обновление изменяет массивы на \(a = [3, 5, 3, 3]\), \(b = [1, 1, 2, 8]\) и \(c = [10^{18}, 10^{18}, 10^{18}]\).

  • Для \(i = 1\), в башне 1 находится \(3\) литра воды, и \(1\) литр воды превращается в вино. Оставшиеся \(2\) литра воды перетекают в башню 2.
  • Для \(i = 2\), в башне 2 находится \(7\) литров воды, и \(1\) литр воды превращается в вино. Оставшиеся \(6\) литров воды попадают в башню 3.
  • Для \(i = 3\), в башне 3 находится \(9\) литров воды и \(2\) литра воды превращается в вино. Оставшиеся \(7\) литров воды попадают в башню 4.
  • Для \(i = 4\), в башне 4 находится \(10\) литров воды. Только \(8\) литров воды превращается в вино.

Следовательно, \(W(a,b,c)=1 + 1 + 2 + 8 = 12\) после второго обновления.

Третье обновление изменяет массивы на \(a = [3, 5, 0, 3]\), \(b = [1, 1, 0, 8]\) и \(c = [10^{18}, 10^{18}, 10^{18}]\).

  • Для \(i = 1\), в башне 1 находится \(3\) литра воды, и \(1\) литр воды превращается в вино. Оставшиеся \(2\) литра воды перетекают в башню 2.
  • Для \(i = 2\), в башне 2 находится \(7\) литров воды, и \(1\) литр воды превращается в вино. Оставшиеся \(6\) литров воды попадают в башню 3.
  • Для \(i = 3\), в башне 3 находится \(6\) литров воды, и \(0\) литров воды превращается в вино. Оставшиеся \(6\) литров воды попадают в башню 4.
  • Для \(i = 4\), в башне 4 находится \(9\) литров воды. Только \(8\) литров воды превращается в вино.

Следовательно, \(W(a,b,c)=1 + 1 + 0 + 8 = 10\) после третьего обновления.

F2. Винный завод (сложная версия)

дп жадные алгоритмы матрицы Потоки Структуры данных *2800

Это сложная версия задачи. Единственное различие между двумя версиями заключается в ограничениях на \(c_i\) и \(z\). Вы можете делать взломы, только если обе версии задачи решены.

Даны три массива \(a\), \(b\) и \(c\). \(a\) и \(b\) имеют длину \(n\), а \(c\) — длину \(n-1\). Обозначим за \(W(a,b,c)\) количество литров вина, произведённых в результате следующего процесса.

Построим \(n\) водонапорных башен. Изначально \(i\)-я водонапорная башня имеет \(a_i\) литров воды, и перед ней стоит волшебник с силой \(b_i\). Кроме того, для каждого \(1 \le i \le n - 1\) существует клапан, соединяющий водонапорную башню \(i\) с \(i + 1\), и имеющий пропускную способность \(c_i\).

Для каждого \(i\) от \(1\) до \(n\) в этом порядке происходит следующее:

  1. Волшебник, стоящий перед водонапорной башней \(i\), забирает из башни не более \(b_i\) литров воды и превращает забранную воду в вино.
  2. Если \(i \neq n\), то не более \(c_i\) литров воды, оставшейся в водонапорной башне \(i\), вытекает через клапан в водонапорную башню \(i + 1\).

Дано \(q\) обновлений. В каждом обновлении вам будут даны целые числа \(p\), \(x\), \(y\) и \(z\), означающие следующие изменения: \(a_p := x\), \(b_p := y\) и \(c_p := z\). После каждого обновления найдите значение \(W(a,b,c)\). Обратите внимание, что предыдущие обновления массивов \(a\), \(b\) и \(c\) сохраняются во всех последующих обновлениях.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2 \le n \le 5\cdot 10^5\), \(1 \le q \le 5\cdot 10^5\)) — количество водонапорных башен и количество обновлений.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — количество литров воды в водонапорной башне \(i\).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(0 \le b_i \le 10^9\)) — сила волшебника перед водонапорной башней \(i\).

Четвертая строка содержит \(n - 1\) целых чисел \(c_1, c_2, \ldots, c_{n - 1}\) (\(0 \le c_i \color{red}{\le} 10^{18}\)) — пропускная способность трубы, соединяющей водонапорную башню \(i\) с \(i + 1\).

Каждая из следующих \(q\) строк содержит четыре целых числа \(p\), \(x\), \(y\) и \(z\) (\(1 \le p \le n\), \(0 \le x, y \le 10^9\), \(0 \le z \color{red}{\le} 10^{18}\)) — обновления массивов \(a\), \(b\) и \(c\).

Заметим, что \(c_n\) не существует, поэтому величина \(z\) не имеет значения при \(p = n\).

Выходные данные

Выведите \(q\) строк, каждая из которых содержит одно целое число, равняющееся \(W(a, b, c)\) после каждого обновления.

Примечание

Первое обновление не вносит никаких изменений в массивы.

  • Для \(i = 1\), в башне 1 находится \(3\) литра воды, и \(1\) литр воды превращается в вино. Оставшиеся \(2\) литра воды перетекают в башню 2.
  • Для \(i = 2\), в башне 2 находится \(5\) литров воды, и \(4\) литра воды превращаются в вино. Оставшийся \(1\) литр воды попадает в башню 3.
  • Для \(i = 3\), в башне 3 находится \(4\) литра воды, и \(2\) литра воды превращаются в вино. Несмотря на то, что осталось \(2\) литра воды, в башню 4 может попасть только \(1\) литр воды.
  • Для \(i = 4\), в башне 4 находится \(4\) литра воды. Все \(4\) литра воды превращаются в вино.

Следовательно, \(W(a,b,c)=1 + 4 + 2 + 4 = 11\) после первого обновления.

Второе обновление изменяет массивы на \(a = [3, 5, 3, 3]\), \(b = [1, 1, 2, 8]\) и \(c = [5, 1, 1]\).

  • Для \(i = 1\), в башне 1 находится \(3\) литра воды, и \(1\) литр воды превращается в вино. Оставшиеся \(2\) литра воды перетекают в башню 2.
  • Для \(i = 2\), в башне 2 находится \(7\) литров воды, и \(1\) литр воды превращается в вино. Несмотря на то, что осталось \(6\) литров воды, только \(1\) литр воды может попасть в башню 3.
  • Для \(i = 3\), в башне 3 находится \(4\) литра воды, и \(2\) литра воды превращаются в вино. Несмотря на то, что осталось \(2\) литра воды, только \(1\) литр воды может попасть в башню 4.
  • Для \(i = 4\), в башне 4 находится \(4\) литра воды. Все \(4\) литра воды превращаются в вино.

Следовательно, \(W(a,b,c)=1 + 1 + 2 + 4 = 8\) после второго обновления.

Третье обновление изменяет массивы на \(a = [3, 5, 0, 3]\), \(b = [1, 1, 0, 8]\) и \(c = [5, 1, 0]\).

  • Для \(i = 1\), в башне 1 находится \(3\) литра воды, и \(1\) литр воды превращается в вино. Оставшиеся \(2\) литра воды перетекают в башню 2.
  • Для \(i = 2\), в башне 2 находится \(7\) литров воды, и \(1\) литр воды превращается в вино. Несмотря на то, что осталось \(6\) литров воды, только \(1\) литр воды может попасть в башню 3.
  • Для \(i = 3\) в башне 3 находится \(1\) литр воды, и \(0\) литров воды превращается в вино. Несмотря на то, что в башне остался \(1\) литр воды, в башню 4 вода не поступает.
  • Для \(i = 4\), в башне 4 находится \(3\) литра воды. Все \(3\) литра воды превращаются в вино.

Следовательно, \(W(a,b,c)=1 + 1 + 0 + 3 = 5\) после третьего обновления.

F1. Спокойное плавание (простая версия)

Бинарный поиск графы кратчайшие пути Перебор поиск в глубину и подобное снм Структуры данных *2500

Единственное отличие двух версий этой задачи состоит в ограничении на \(q\). Вы можете делать взломы, только если обе версии задачи решены.

Томас плавает вокруг острова, окружённого океаном. Океан и остров можно представить в виде таблицы с \(n\) строками и \(m\) столбцами. Строки пронумерованы от \(1\) до \(n\) сверху вниз, а столбцы пронумерованы от \(1\) до \(m\) слева направо. Позицию клетки в строке \(r\) и в столбце \(c\) обозначим как \((r, c)\). Ниже приведен пример допустимой таблицы.

Пример допустимой таблицы

Существует три типа клеток: остров, океан и подводный вулкан. Клетки, представляющие остров, отмечены символом '#', клетки, представляющие океан, отмечены символом '.', а клетки, представляющие подводный вулкан, отмечены символом 'v'. Гарантируется, что есть хотя бы одна клетка острова и хотя бы одна клетка подводного вулкана. Также гарантируется, что множество всех клеток острова образует единую связную компоненту\(^{\dagger}\), и множество всех клеток океана и подводных вулканов также образует единую связную компоненту. Кроме того, гарантируется, что на краю таблицы (то есть, в строке \(1\), в строке \(n\), в столбце \(1\) и в столбце \(m\)) нет клеток острова.

Определим круговой маршрут, проходимый Томасом, начинающийся в клетке \((x, y)\), как путь, который удовлетворяет следующим условиям:

  • Путь начинается и заканчивается в клетке \((x, y)\).
  • Если Томас находится в клетке \((i, j)\), то он может перейти в клетки \((i+1, j)\), \((i-1, j)\), \((i, j-1)\) и \((i, j+1)\), при условии, что клетка, в которую он переходит, является клеткой океана или подводного вулкана и находится внутри таблицы. Обратите внимание, что Томасу разрешается посещать одну и ту же клетку несколько раз за один круговой маршрут.
  • Путь должен обойти остров и полностью его окружить. Некоторый путь \(p\) полностью окружает остров, если невозможно добраться от клетки острова до клетки на границе таблицы, перемещаясь только в соседние по стороне или диагонали клетки, не посещая при этом клетку на пути \(p\). На изображении ниже путь, начинающийся в \((2, 2)\), приходящий в \((1, 3)\) и возвращающийся в \((2, 2)\) в обратную сторону, не полностью окружает остров и не считается круговым маршрутом.
Пример пути, который не полностью окружает остров

Безопасность кругового маршрута — это минимальное манхэттенское расстояние\(^{\ddagger}\) от клетки на круговом маршруте до подводного вулкана (обратите внимание, что наличие клеток острова не влияет на это расстояние).

У вас есть \(q\) запросов. Запрос можно представить как \((x, y)\), и для каждого запроса вы хотите найти максимальную безопасность кругового маршрута, начинающегося в \((x, y)\). Гарантируется, что \((x, y)\) является клеткой океана или подводного вулкана.

\(^{\dagger}\)Множество клеток образует единую связную компоненту, если из любой клетки этого множества можно добраться до любой другой клетки этого множества, перемещаясь только по клеткам этого множества, каждый раз переходя в клетку с общей стороной.

\(^{\ddagger}\)Манхэттенское расстояние между клетками \((r_1, c_1)\) и \((r_2, c_2)\) равно \(|r_1 - r_2| + |c_1 - c_2|\).

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(q\) (\(3 \leq n, m \leq 10^5\), \(9 \leq n \cdot m \leq 3 \cdot 10^5\), \(1 \leq q \leq 5\)) — количество строк и столбцов таблицы и количество запросов.

Каждая из следующих \(n\) строк содержит \(m\) символов, описывающих клетки таблицы. Символ '#' обозначает клетку острова, '.' обозначает клетку океана, и 'v' обозначает клетку подводного вулкана.

Гарантируется, что есть хотя бы одна клетка острова и хотя бы одна клетка подводного вулкана. Гарантируется, что множество всех клеток острова образует единую связную компоненту, и множество всех клеток океана и подводных вулканов также образует единую связную компоненту. Также гарантируется, что нет клеток острова на краю таблицы (то есть, в строке \(1\), в строке \(n\), в столбце \(1\) и в столбце \(m\)).

Следующие \(q\) строк описывают запросы. Каждая из этих строк содержит два целых числа \(x\) и \(y\) (\(1 \leq x \leq n\), \(1 \leq y \leq m\)), обозначающие круговой маршрут, начинающийся в \((x, y)\).

Гарантируется, что \((x, y)\) является клеткой океана или подводного вулкана.

Выходные данные

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

Примечание

Для первого примера на изображении ниже показан оптимальный круговой маршрут, начинающийся в \((1, 1)\). Безопасность кругового маршрута равна \(3\), так как минимальное манхэттенское расстояние от клетки на круговом маршруте до подводного вулкана равно \(3\).

Пример оптимального кругового маршрута

В четвёртом примере помните, что Томасу разрешается посещать одну и ту же клетку несколько раз за один круговой маршрут. Например, это необходимо для кругового маршрута, начинающегося в \((7, 6)\).

F2. Спокойное плавание (сложная версия)

Бинарный поиск геометрия графы Деревья снм Структуры данных *3000

Единственное отличие двух версий этой задачи состоит в ограничении на \(q\). Вы можете делать взломы, только если обе версии задачи решены.

Томас плавает вокруг острова, окружённого океаном. Океан и остров можно представить в виде таблицы с \(n\) строками и \(m\) столбцами. Строки пронумерованы от \(1\) до \(n\) сверху вниз, а столбцы пронумерованы от \(1\) до \(m\) слева направо. Позицию клетки в строке \(r\) и в столбце \(c\) обозначим как \((r, c)\). Ниже приведен пример допустимой таблицы.

Пример допустимой таблицы

Существует три типа клеток: остров, океан и подводный вулкан. Клетки, представляющие остров, отмечены символом '#', клетки, представляющие океан, отмечены символом '.', а клетки, представляющие подводный вулкан, отмечены символом 'v'. Гарантируется, что есть хотя бы одна клетка острова и хотя бы одна клетка подводного вулкана. Также гарантируется, что множество всех клеток острова образует единую связную компоненту\(^{\dagger}\), и множество всех клеток океана и подводных вулканов также образует единую связную компоненту. Кроме того, гарантируется, что на краю таблицы (то есть, в строке \(1\), в строке \(n\), в столбце \(1\) и в столбце \(m\)) нет клеток острова.

Определим круговой маршрут, проходимый Томасом, начинающийся в клетке \((x, y)\), как путь, который удовлетворяет следующим условиям:

  • Путь начинается и заканчивается в клетке \((x, y)\).
  • Если Томас находится в клетке \((i, j)\), то он может перейти в клетки \((i+1, j)\), \((i-1, j)\), \((i, j-1)\) и \((i, j+1)\), при условии, что клетка, в которую он переходит, является клеткой океана или подводного вулкана и находится внутри таблицы. Обратите внимание, что Томасу разрешается посещать одну и ту же клетку несколько раз за один круговой маршрут.
  • Путь должен обойти остров и полностью его окружить. Некоторый путь \(p\) полностью окружает остров, если невозможно добраться от клетки острова до клетки на границе таблицы, перемещаясь только в соседние по стороне или диагонали клетки, не посещая при этом клетку на пути \(p\). На изображении ниже путь, начинающийся в \((2, 2)\), приходящий в \((1, 3)\) и возвращающийся в \((2, 2)\) в обратную сторону, не полностью окружает остров и не считается круговым маршрутом.
Пример пути, который не полностью окружает остров

Безопасность кругового маршрута — это минимальное манхэттенское расстояние\(^{\ddagger}\) от клетки на круговом маршруте до подводного вулкана (обратите внимание, что наличие клеток острова не влияет на это расстояние).

У вас есть \(q\) запросов. Запрос можно представить как \((x, y)\), и для каждого запроса вы хотите найти максимальную безопасность кругового маршрута, начинающегося в \((x, y)\). Гарантируется, что \((x, y)\) является клеткой океана или подводного вулкана.

\(^{\dagger}\)Множество клеток образует единую связную компоненту, если из любой клетки этого множества можно добраться до любой другой клетки этого множества, перемещаясь только по клеткам этого множества, каждый раз переходя в клетку с общей стороной.

\(^{\ddagger}\)Манхэттенское расстояние между клетками \((r_1, c_1)\) и \((r_2, c_2)\) равно \(|r_1 - r_2| + |c_1 - c_2|\).

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(q\) (\(3 \leq n, m \leq 10^5\), \(9 \leq n \cdot m \leq 3 \cdot 10^5\), \(1 \leq q \leq 3 \cdot 10^5\)) — количество строк и столбцов таблицы и количество запросов.

Каждая из следующих \(n\) строк содержит \(m\) символов, описывающих клетки таблицы. Символ '#' обозначает клетку острова, '.' обозначает клетку океана, и 'v' обозначает клетку подводного вулкана.

Гарантируется, что есть хотя бы одна клетка острова и хотя бы одна клетка подводного вулкана. Гарантируется, что множество всех клеток острова образует единую связную компоненту, и множество всех клеток океана и подводных вулканов также образует единую связную компоненту. Также гарантируется, что нет клеток острова на краю таблицы (то есть, в строке \(1\), в строке \(n\), в столбце \(1\) и в столбце \(m\)).

Следующие \(q\) строк описывают запросы. Каждая из этих строк содержит два целых числа \(x\) и \(y\) (\(1 \leq x \leq n\), \(1 \leq y \leq m\)), обозначающие круговой маршрут, начинающийся в \((x, y)\).

Гарантируется, что \((x, y)\) является клеткой океана или подводного вулкана.

Выходные данные

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

Примечание

Для первого примера на изображении ниже показан оптимальный круговой маршрут, начинающийся в \((1, 1)\). Безопасность кругового маршрута равна \(3\), так как минимальное манхэттенское расстояние от клетки на круговом маршруте до подводного вулкана равно \(3\).

Пример оптимального кругового маршрута

В четвёртом примере помните, что Томасу разрешается посещать одну и ту же клетку несколько раз за один круговой маршрут. Например, это необходимо для кругового маршрута, начинающегося в \((7, 6)\).

D. Сильно отличающийся массив

жадные алгоритмы сортировки Структуры данных *1100

У Пети есть массив \(a_i\) из \(n\) целых чисел. Его брату Васе стало завидно, и он решил сделать свой массив из \(n\) чисел.

Для этого он нашел \(m\) целых чисел \(b_i\) (\(m\ge n\)), теперь он хочет выбрать из них какие-то \(n\) чисел, и расставить их в некотором порядке так, чтобы получился массив \(c_i\) длины \(n\).

Чтобы не быть похожим на брата, Вася хочет сделать так, чтобы его массив максимально отличался от массива Пети. А именно, он хочет, чтобы суммарная разница \(D = \sum_{i=1}^{n} |a_i - c_i|\) была максимально возможной.

Помогите Васе узнать, какую наибольшую разницу \(D\) он может получить.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит числа \(n\) и \(m\) (\(1\le n\le m\le 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) чисел \(a_i\) (\(1\le a_i\le 10^9\)).

Третья строка каждого набора входных данных содержит \(m\) чисел \(b_i\) (\(1\le b_i\le 10^9\)).

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — максимальную суммарную разность \(D\), которую можно получить.

Примечание

В первом примере Вася может, например, сделать массив \((1, 5, 7, 2)\). Тогда суммарная разность будет равна \(D = |6-1|+|1-5|+|2-7|+|4-2| = 5+4+5+2 = 16\).

Во втором примере все числа, доступные Васе, равны 1, поэтому он может собрать только массив \((1, 1, 1)\), для которого разность \(D = 0\).

В третьем примере Вася может, например, сделать массив \((5, 4, 3, 2, 1)\). Тогда суммарная разность будет равна \(D = |1-5|+|2-4|+|3-3|+|4-2|+|5-1| = 4+2+0+2+4 = 12\).

F. Сумма на прогрессии

дп математика Перебор реализация Структуры данных *1900

Дан массив \(a\) из \(n\) чисел. Также есть \(q\) запросов вида \(s, d, k\).

Для каждого из \(q\) запросов найдите сумму элементов \(a_s + a_{s+d} \cdot 2 + \dots + a_{s + d \cdot (k - 1)} \cdot k\). Иными словами, для каждого запроса нужно найти сумму \(k\) элементов массива с индексами начиная с \(s\)-го, делая шаги, равные \(d\), умножая на порядковый номер элемента в полученной последовательности.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора содержит два числа \(n, q\) (\(1 \le n \le 10^5, 1 \le q \le 2 \cdot 10^5\)) — количество чисел в массиве \(a\) и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1, ... a_n\) (\(-10^8 \le a_1, ..., a_n \le 10^8\)) — элементы массива \(a\).

Следующие \(q\) строк содержат по три целых числа \(s\), \(d\) и \(k\) (\(1 \le s, d, k \le n\), \(s + d\cdot (k - 1) \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам не превосходит \(10^5\), и что сумма значений \(q\) по всем наборам не превосходит \(2 \cdot 10^5 \).

Выходные данные

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

G. Озорной стрелок

дп Перебор разделяй и властвуй реализация Структуры данных *2200

Однажды непутёвый озорной стрелок по имени Шел попал на прямоугольное поле размером \(n \times m\), разбитое на единичные квадратики. В каждой из клеток либо стоит мишень, либо нет.

С собой у Шел оказался только счастливый дробовик, из которого можно выстрелить в одну из четырёх сторон: вправо-вниз, влево-вниз, влево-вверх или вправо-вверх. При выстреле дробовик поражает все мишени в выбранном направлении, Манхэттенское расстояние до которых не больше фиксированной для дробовика константы \(k\). Манхэттенское расстояние между двумя точками \((x_1, y_1)\) и \((x_2, y_2)\) равно \(|x_1 - x_2| + |y_1 - y_2|\).

Возможные области поражения для \(k = 3\).

Цель Шел — поразить как можно большее количество мишеней. Помогите ему, пожалуйста, найти это значение.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

На ввод в первой строчке даются размеры поля \(n\), \(m\) и константа для мощности дробовика \(k\) (\(1 \le n, m, k \le 10^5, 1 \le n \cdot m \le 10^5\)).

В следующих \(n\) строках даётся \(m\) символов — описание очередной строки поля, где символ '.' означает, что клетка пуста, а символ '#' означает наличие мишени. Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

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

Примечание

Возможные оптимальные выстрелы для примеров из условия:

D. Безумные монстры

математика Перебор реализация снм Структуры данных *1900

Монокарп играет в компьютерную игру (опять). Угадайте, что он делает? Правильно, убивает монстров.

В ряд стоят \(n\) монстров, пронумерованных от \(1\) до \(n\). У \(i\)-го монстра есть два параметра: значение атаки, равное \(a_i\), и значение защиты, равное \(d_i\). Чтобы убить этих монстров, Монокарп наложил на них заклинание безумия, так что они атакуют друг друга, а не персонажа Монокарпа.

Бой состоит из \(n\) раундов. В каждом раунде происходит следующее:

  • сначала каждый живой монстр \(i\) наносит \(a_i\) урона ближайшему живому монстру слева (если он существует) и ближайшему живому монстру справа (если он существует);
  • затем каждый живой монстр \(j\), который получил больше \(d_j\) урона в течение этого раунда, умирает. Т.е. \(j\)-й монстр умирает тогда и только тогда, когда его значение защиты \(d_j\) строго меньше суммарного урона, который он получил в этом раунде.

Для каждого раунда вычислите количество монстров, которые умрут во время этого раунда.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор состоит из трех строк:

  • первая строка содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\));
  • вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\));
  • третья строка содержит \(n\) целых чисел \(d_1, d_2, \dots, d_n\) (\(1 \le d_i \le 10^9\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел. \(i\)-е целое число должно быть равно количеству монстров, которые умрут в \(i\)-м раунде.

Примечание

Объяснение для первого примера:

Во время первого раунда происходит следующее:

  • монстр \(1\) наносит \(3\) урона монстру \(2\);
  • монстр \(2\) наносит \(4\) урона монстру \(1\) и монстру \(3\);
  • монстр \(3\) наносит \(7\) урона монстру \(2\) и монстру \(4\);
  • монстр \(4\) наносит \(5\) урона монстру \(3\) и монстру \(5\);
  • монстр \(5\) наносит \(10\) урона монстру \(4\);
  • монстр \(1\) не умирает, так как он получил \(4\) урона и его защита равна \(4\);
  • монстр \(2\) умирает, так как он получил \(10\) урона и его защита равна \(9\);
  • монстр \(3\) умирает, так как он получил \(9\) урона и его защита равна \(1\);
  • монстр \(4\) не умирает, так как он получил \(17\) урона и его защита равна \(18\);
  • монстр \(5\) умирает, так как он получил \(5\) урона и его защита равна \(1\).

После первого раунда остаются в живых монстры \(1\) и \(4\).

Во время второго раунда происходит следующее:

  • монстр \(1\) наносит \(3\) урона монстру \(4\);
  • монстр \(4\) наносит \(5\) урона монстру \(1\);
  • монстр \(1\) умирает, так как он получил \(5\) урона и его защита равна \(4\);
  • монстр \(4\) не умирает, так как он получил \(3\) урона и его защита равна \(18\).

В следующих трех раундах остается в живых только монстр \(4\), поэтому ничего не происходит.

D. Слизни

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *1800

В линию расположено \(n\) слизней. Слизни нумеруются от \(1\) до \(n\) слева направо. Размер \(i\)-го слизня равен \(a_i\).

Каждую секунду происходит следующее: ровно один слизень съедает одного из своих соседей и увеличивает свой размер на значение размера соседа. Слизень может съесть своего соседа, только если он строго больше этого соседа. Если нет такого слизня, который больше хотя бы одного из его соседей — процесс завершается.

Например, предположим, что \(n = 5\), \(a = [2, 2, 3, 1, 4]\). Процесс может пройти следующим образом:

  • сначала \(3\)-й слизень съедает \(2\)-го. Размер \(3\)-го слизня становится равным \(5\), \(2\)-й слизень съеден.
  • затем \(3\)-й слизень съедает \(1\)-го (они соседи, так как \(2\)-й уже съеден). Размер \(3\)-го слизня становится равным \(7\), \(1\)-й слизень съеден.
  • затем \(5\)-й слизень съедает \(4\)-го. Размер \(5\)-го слизня становится равным \(5\), \(4\)-й слизень съеден.
  • затем \(3\)-й слизень съедает \(5\)-го (они соседи, так как \(4\)-й уже съеден). Размер \(3\)-го слизня становится равным \(12\), \(5\)-й слизень съеден.

Для каждого слизня вычислите минимальное количество секунд, за которое он может оказаться съеден каким-то другим слизнем (среди всех возможных вариантов, как может происходить процесс), или сообщите, что это невозможно.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество слизней.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел, где \(i\)-е число должно быть равно минимальному количеству секунд, необходимому для того, чтобы \(i\)-й слизень был съеден другим слизнем, или -1, если это невозможно.

E. Посчитай пути

графы Деревья дп поиск в глубину и подобное снм Структуры данных *2000

Вам дано дерево, состоящее из \(n\) вершин, пронумерованных от \(1\) до \(n\). Каждая вершина окрашена в некоторый цвет, обозначенный целым числом от \(1\) до \(n\).

Простой путь в дереве называется красивым, если:

  • он состоит хотя бы из \(2\) вершин;
  • первая и последняя вершины пути имеют одинаковый цвет;
  • ни одна другая вершина на пути не имеет такой же цвет, как и первая вершина.

Посчитайте количество красивых простых путей в дереве. Обратите внимание, что пути считаются ненаправленными (то есть путь из \(x\) в \(y\) — это то же самое, что и путь из \(y\) в \(x\)).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого теста записано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

Во второй строке записаны \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le n\)) — цвет каждой вершины.

В \(i\)-й из следующих \(n - 1\) строк записаны два целых числа \(v_i\) и \(u_i\) (\(1 \le v_i, u_i \le n\); \(v_i \neq u_i\)) — \(i\)-е ребро дерева.

Данные ребра образуют валидное дерево. Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество красивых простых путей в дереве.

B. Космическая гавань

математика реализация сортировки Структуры данных *2100

На прямой линии расположены \(n\) точек, пронумерованных от \(1\) до \(n\). Изначально существует \(m\) гаваней, причем \(i\)-я гавань находится в точке \(X_i\) и имеет значение \(V_i\). Гарантируется, что в точках \(1\) и \(n\) существуют гавани. На каждой из \(n\) точек находится ровно один корабль. Стоимость перемещения корабля с его текущего местоположения до следующей гавани равна произведению значения ближайшей гавани слева и расстояния до ближайшей гавани справа. В частности, если корабль уже находится в гавани, стоимость перемещения его до следующей гавани равна \(0\).

Кроме того, имеется \(q\) запросов, каждый из которых является одним из \(2\) типов:

  • \(1\) \(x\) \(v\) — Добавить гавань в точке \(x\) со значением \(v\). Гарантируется, что перед добавлением в точке \(x\) там еще нет гавани.
  • \(2\) \(l\) \(r\) — Вывести сумму стоимости перемещения всех кораблей с точек от \(l\) до \(r\) до их следующих гаваней. Обратите внимание, что вам нужно только вычислить стоимость перемещения кораблей, но не перемещать их фактически.
Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(q\) (\(2 \le m \le n \le 3 \cdot 10^5\), \(1 \le q \le 3 \cdot 10^5\)) — количество точек, гаваней и запросов соответственно.

Вторая строка содержит \(m\) различных целых чисел \(X_1, X_2, \ldots, X_m(1 \le X_i \le n)\) — позиции \(i\)-й гавани.

Третья строка содержит \(m\) целых чисел \(V_1, V_2, \ldots, V_m(1 \le V_i \le 10^7)\) — значения \(i\)-й гавани.

Каждая из следующих \(q\) строк содержит три целых числа. Первое целое число \(t\) (\(1\le t \le 2\)) — тип запроса. Если \(t=1\), то следующие два целых числа \(x\) и \(v\) (\(2 \le x \le n - 1\), \(1 \le v \le 10^7\)) — запрос первого типа. Если \(t=2\), то следующие два целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)) — запрос второго типа.

Гарантируется, что есть хотя бы один запрос второго типа.

Выходные данные

Для каждого запроса второго типа выведите одно целое число в новой строке — ответ на этот запрос.

Примечание

Для первого запроса типа \(2\), цена для кораблей на позициях \(2\), \(3\), \(4\) и \(5\) будет \(3(3 \times 1)\), \(0\), \(96(24 \times 4)\) и \(72(24 \times 3)\) соответственно.

Для второго запроса типа \(2\), так как корабль в точке \(5\) уже находится в гавани, ответ будет \(0\).

Для третьего запроса типа \(2\), цена для кораблей на позициях \(7\) и \(8\) будет \(15(15 \times 1)\) и \(0\) соответственно.

E. Влад и нечётное упорядочение

Бинарный поиск битмаски дп математика реализация Структуры данных теория чисел *1500

У Владислава есть \(n\) карт с номерами \(1, 2, \dots, n\). Он хочет выложить их в ряд следующим образом:

  • Сначала он выкладывает все карты с нечетными номерами от наименьшего к наибольшему.
  • Затем он выкладывает все карты, которые являются удвоенными нечетными числами, от наименьшего к наибольшему (т.е., \(2\) умноженное на нечётное число).
  • Затем он выкладывает все карты, которые являются нечетными числами, умноженными на \(3\), от наименьшего к наибольшему (т.е., \(3\) умноженное на нечётное число).
  • Затем он выкладывает все карты, которые являются нечетными числами, умноженными на \(4\), от наименьшего к наибольшему (т.е., \(4\) умноженное на нечётное число).
  • И так далее, пока все карты не будут выложены.
Какая карта будет \(k\)-й, которую он выложит в этом процессе? После того, как Влад положил карту, он не может использовать ее снова.
Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 5 \cdot 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 10^9\)) — количество карт у Влада и позицию карты, которую нужно вывести.

Выходные данные

Для каждого набора входных данных выведите одно целое число — \(k\)-ю карту, которую выложит Влад.

Примечание

В первых семи наборах входных данных примера \(n=7\). Влад выкладывает карты следующим образом:

  • Сначала — все карты с нечетными номерами в порядке \(1\), \(3\), \(5\), \(7\).
  • Затем — все карты, которые являются удвоенными нечетными числами, в порядке \(2\), \(6\).
  • Затем нет оставшихся карт, которые являются нечетными числами, умноженными на \(3\). (У Влада есть только по одной карте каждого числа.)
  • Затем — все карты, которые являются нечетными числами, умноженными на \(4\), и есть только одна такая карта: \(4\).
  • Больше карт не осталось, поэтому Влад останавливается.
Таким образом, порядок карт будет \(1\), \(3\), \(5\), \(7\), \(2\), \(6\), \(4\).

D. Найди различные!

Бинарный поиск дп жадные алгоритмы Перебор снм Структуры данных *1300

Вам дан массив \(a\) из \(n\) целых чисел, а также \(q\) запросов.

Каждый запрос представлен двумя числами \(l\) и \(r\) (\(1 \le l \le r \le n\)). Ваша задача для каждого запроса найти такие два индекса \(i\) и \(j\) (или сообщить, что их не существует), что:

  • \(l \le i \le r\);
  • \(l \le j \le r\);
  • \(a_i \ne a_j\).

Иными словами, вам нужно для каждого запроса найти пару различных элементов среди \(a_l, a_{l+1}, \dots, a_r\) или сообщить, что такой пары не существует.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — элементы массива \(a\).

Третья строка каждого набора содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

Следующие \(q\) строк содержат по два целых числа \(l\) и \(r\) (\(1 \le l < r \le n\)) — границы запроса.

Гарантируется, что сумма значений \(n\) по всем наборам не превышает \(2 \cdot 10^5\). Аналогично, гарантируется, что сумма значений \(q\) по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите два числа: искомые \(i\) и \(j\) (\(l \le i, j \le r\)), для которых \(a_i \ne a_j\). Если такой пары не существует, выведите \(i=-1\) и \(j=-1\).

Вы можете разделять выводы для наборов входных данных пустыми строками. Это не является обязательным требованием.

F. Микроцикл

графы Деревья жадные алгоритмы поиск в глубину и подобное реализация снм сортировки Структуры данных *1900

Дан неориентированный взвешенный граф из \(n\) вершин и \(m\) рёбер. Между каждой парой вершин в графе существует не более одного ребра, граф не содержит петель (рёбер из вершины в себя же). Граф не обязательно связный.

Цикл в графе называется простым, если он не проходит через одну и ту же вершину дважды и не содержит одно и то же ребро дважды.

Найдите любой простой цикл этого графа, в котором вес самого лёгкого ребра минимален.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(3 \le n \le m \le \min(\frac{n\cdot(n - 1)}{2}, 2 \cdot 10^5)\)) — размер графа и количество рёбер.

Следующие \(m\) строк набора содержат по три целых числа \(u\), \(v\) и \(w\) (\(1 \le u, v \le n\), \(u \ne v\), \(1 \le w \le 10^6\)) — вершины \(u\) и \(v\) соединены ребром веса \(w\).

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

Гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите пару чисел \(b\) и \(k\), где:

  • \(b\) — минимальный вес ребра в найденном цикле,
  • \(k\) — количество вершин в найденном цикле.

В следующей строке выведите \(k\) чисел от \(1\) до \(n\)  — вершины цикла в порядке обхода.

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

G. Заряды с краской

дп жадные алгоритмы математика Структуры данных *2300

Задана горизонтальная клетчатая полоса из \(n\) клеток. В \(i\)-й клетке находится заряд краски величины \(a_i\). Этот заряд можно:

  • либо использовать влево — тогда все клетки налево на расстоянии меньше \(a_i\) (то есть с \(\max(i - a_i + 1, 1)\) по \(i\) включительно) окажутся покрашены,
  • либо использовать вправо — тогда все клетки направо на расстоянии меньше \(a_i\) (то есть с \(i\) по \(\min(i + a_i - 1, n)\) включительно) окажутся покрашены,
  • либо не использовать заряд.

Обратите внимание, что заряд можно использовать не более одного раза (то есть его нельзя использовать одновременно и влево и вправо). Допустимо, что клетка окажется покрашена более одного раза.

Какое минимальное количество раз заряд необходимо использовать, чтобы покрасить все клетки полосы?

Входные данные

В первой строке входных данных содержится целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных в тесте. Далее следуют описания \(t\) наборов входных данных.

Каждый набор входных данных задаётся двумя строками. Первая из них содержит целое число \(n\) (\(1 \le n \le 100\)) — количество клеток в полосе. Вторая строка содержит \(n\) положительных целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)), где \(a_i\) — величина заряда краски в \(i\)-й слева клетке полосы.

Гарантируется, что сумма значений \(n\) в тесте не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество раз, сколько необходимо использовать заряды, чтобы покрасить все клетки полосы.

Примечание

В третьем наборе входных данных примера достаточно использовать заряд из \(1\)-й клетки вправо, тогда он покроет обе клетки \(1\) и \(2\).

В девятом наборе входных данных примера нужно:

  • использовать заряд из \(3\)-й клетки влево, покрыв клетки от \(1\)-й до \(3\)-й;
  • использовать заряд из \(5\)-й клетки влево, покрыв клетки от \(4\)-й до \(5\)-й;
  • использовать заряд из \(7\)-й клетки влево, покрыв клетки от \(6\)-й до \(7\)-й.

В одиннадцатом наборе входных данных примера нужно:

  • использовать заряд из \(5\)-й клетки вправо, покрыв клетки от \(5\)-й до \(10\)-й;
  • использовать заряд из \(7\)-й клетки влево, покрыв клетки от \(1\)-й до \(7\)-й.

D. Подземелья Одинокой горы

жадные алгоритмы математика Перебор Структуры данных Тернарный поиск *1900

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

Армия жителей Средиземья будет состоять из нескольких отрядов. Известно, что каждая пара существ одной расы, которые находятся в разных отрядах, прибавляет \(b\) единиц к суммарной силе армии. Но так как Тимофею будет сложно руководить армией, состоящей из большого числа отрядов, то суммарная сила армии, состоящей из \(k\) отрядов, уменьшается на \((k - 1) \cdot x\) единиц. Обратите внимание, что армия всегда состоит из хотя бы одного отряда.

Известно, что в Средиземье проживают \(n\) рас, и количество существ \(i\)-й расы равно \(c_i\). Помогите жителям Средиземья определить максимальную силу армии, которую они могут составить.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(b\) и \(x\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le b \le 10^6, 0 \le x \le 10^9\))— количество рас и константы \(b\) и \(x\), описанные выше.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le 2 \cdot 10^5\)) — количества существ каждой из \(n\) рас.

Гарантируется, что сумма значений \(c_1 + c_2 + \ldots + c_n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных жители Средиземья могут составить \(3\) отряда. Так как \(x = 0\), то сила армии не уменьшится из-за количества отрядов. Жителей по отрядам можно распределить так:

  • Единственного представителя первой расы можно отправить в первый отряд.
  • Первого представителя второй расы можно отправить в первый отряд, второго представителя второй расы можно отправить во второй отряд. Тогда суммарная сила армии увеличится на \(b = 1\).
  • Первого представителя третьей расы можно отправить в первый отряд, второго представителя третьей расы можно отправить во второй отряд, третьего представителя третьей расы можно отправить в третий отряд. Тогда суммарная сила армии увеличится на \(3 \cdot b = 3\), так как они образуют три пары, находящиеся в разных отрядах.

Таким образом, суммарная сила армии равна \(4\).

Во втором наборе входных данных жители Средиземья могут составить \(3\) отряда. Так как \(x = 10\), то сила армии уменьшится на \(20\). Жителей по отрядам можно распределить так:

  • Первого представителя первой расы можно отправить в первый отряд, второго представителя первой расы можно отправить во второй отряд. Тогда суммарная сила армии увеличится на \(b = 5\).
  • Первого и второго представителя второй расы можно отправить в первый отряд, третьего и четвёртого представителя второй расы можно отправить во второй отряд, пятого представителя третьей расы можно отправить в третий отряд. Тогда суммарная сила армии увеличится на \(8 \cdot b = 40\).
  • Первого представителя третьей расы можно отправить в первый отряд, второго представителя третьей расы можно отправить во второй отряд, третьего представителя третьей расы можно отправить в третий отряд. Тогда суммарная сила армии увеличится на \(3 \cdot b = 15\), так как они образуют три пары, находящиеся в разных отрядах.

Таким образом, суммарная сила армии равна \(5 + 40 + 15 - 20 = 40\).

F. Цифровые узоры

Комбинаторика математика реализация Структуры данных *2900

Аня занимается рукоделием. Сегодня она решила связать платок из полупрозрачных ниток. Каждая нитка характеризуется единственным целым числом — коэффициентом прозрачности.

Платок делается по следующей схеме: выбираются горизонтальные нитки с коэффициентами прозрачности \(a_1, a_2, \ldots, a_n\) и вертикальные с коэффициентами прозрачности \(b_1, b_2, \ldots, b_m\). Затем они переплетаются между собой, как показано на картинке снизу, и образуют кусок ткани размера \(n \times m\), состоящий ровно из \(nm\) узлов:

Пример куска ткани при \(n = m = 4\).

После того, как сплетение затянется и не будет видно зазоров между нитками, каждый узел, образованный горизонтальной ниткой с номером \(i\) и вертикальной ниткой с номером \(j\), превратится в клетку, которую мы будем обозначать как \((i, j)\). Клетка \((i, j)\) будет иметь коэффициент прозрачности \(a_i + b_j\).

Интересностью полученного платка будем называть количество его подквадратов\(^{\dagger}\), в которых нет пары соседних\(^{\dagger \dagger}\) клеток с одинаковыми коэффициентами прозрачности.

Аня ещё не решила, из каких ниток плести платок, поэтому вам будут даны также \(q\) запросов увеличения/уменьшения коэффициентов прозрачностей ниток на некоторых отрезках. После каждого запроса надо вывести интересность полученного платка.

\(^{\dagger}\)Подквадратом куска ткани называется множество всех его клеток \((i, j)\), таких что \(x_0 \le i \le x_0 + d\) и \(y_0 \le j \le y_0 + d\) для некоторых целых чисел \(x_0\), \(y_0\) и \(d\) (\(1 \le x_0 \le n - d\), \(1 \le y_0 \le m - d\), \(d \ge 0\)).

\(^{\dagger \dagger}\)Клетки \((i_1, j_1)\) и \((i_2, j_2)\) считаются соседними, если \(|i_1 - i_2| + |j_1 - j_2| = 1\).

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(q\) (\(1 \le n, m \le 3 \cdot 10^5\), \(0 \le q \le 3 \cdot 10^5\)) — количество горизонтальных ниток, количество вертикальных ниток и количество запросов изменения.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — коэффициенты прозрачности для горизонтальных ниток, нитки пронумерованы сверху-вниз.

Третья строка содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(-10^9 \le b_i \le 10^9\)) — коэффициенты прозрачности для вертикальных ниток, нитки пронумерованы слева-направо.

В последующих \(q\) строках указаны запросы изменения. Каждый из запросов описывается четверкой целых чисел \(t\), \(l\), \(r\) и \(x\) (\(1 \le t \le 2\), \(l \le r\), \(-10^9 \le x \le 10^9\)). В зависимости от параметра \(t\) в запросе требуется сделать следующее:

  • \(t=1\). Коэффициенты прозрачности для горизонтальных ниток на отрезке \([l, r]\) увеличиваются на \(x\) (иными словами, для всех целых \(l \le i \le r\) значение \(a_i\) увеличивается на \(x\));
  • \(t=2\). Коэффициенты прозрачности для вертикальных ниток на отрезке \([l, r]\) увеличиваются на \(x\) (иными словами, для всех целых \(l \le i \le r\) значение \(b_i\) увеличивается на \(x\)).
Выходные данные

Выведите \((q+1)\) строку. В \((i + 1)\)-й строке (\(0 \le i \le q\)) выведите одно целое число — интересность платка после применения первых \(i\) запросов.

Примечание

В первом примере коэффициенты прозрачности клеток в получившемся платке равны:

2334
2334
3445
4556

Тогда есть следующие подквадраты, не содержащие двух соседних по вертикали или по горизонтали клеток с одинаковым коэффициентом прозрачности:

  • Каждая из \(16\) клеток по отдельности;
  • Подквадрат с левым верхним углом в клетке \((3, 1)\) и правым нижним углом в клетке \((4, 2)\);
  • Подквадрат с левым верхним углом в клетке \((2, 3)\) и правым нижним углом в клетке \((3, 4)\);
  • Подквадрат с левым верхним углом в клетке \((2, 1)\) и правым нижним углом в клетке \((3, 2)\);
  • Подквадрат с левым верхним углом в клетке \((3, 3)\) и правым нижним углом в клетке \((4, 4)\).

Во втором примере после первого запроса коэффициенты прозрачности горизонтальных ниток равны \([1, 2, 2]\). После второго запроса коэффициенты прозрачности вертикальных ниток равны \([2, -4, 2]\).

F. Саша и свадебное бинарное дерево поиска

Деревья Комбинаторика математика Перебор поиск в глубину и подобное Структуры данных *2300

Пройдя все трудности и невзгоды, Саша наконец решил жениться на своей девушке. Для этого нужно подарить ей обручальное кольцо. Однако его девушке не нравятся подобные романтические жесты, но нравятся бинарные деревья поиска\(^{\dagger}\). Поэтому Саша решил ей подарить такое дерево.

Проведя немало времени на свадебных сайтах для программистов, он нашел идеальное бинарное дерево поиска с корнем в вершине \(1\). В нём значение в вершине \(v\) равно \(val_v\).

Но спустя некоторое время он забыл значения в некоторых вершинах. Пытаясь вспомнить найденное дерево, Саша задался вопросом — сколько существует бинарных деревьев поиска, которые он мог найти на сайте, если известно, что значения во всех вершинах являются целыми числами и принадлежат отрезку \([1, C]\). Поскольку это число может быть очень большим, выведите его по модулю \(998\,244\,353\).

\(^{\dagger}\)Бинарным деревом поиска называется корневое бинарное дерево, у которого для любой вершины \(x\) выполняется свойство: значения всех вершин в левом поддереве вершины \(x\) (если оно существует) меньше или равны значению в вершине \(x\) и значения всех вершин в правом поддереве вершины \(x\) (если оно существует) больше или равны значению в вершине \(x\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(C\) (\(2 \leq n \leq 5 \cdot 10^5\), \(1 \leq C \leq 10^9\)) — количество вершин в дереве и максимально допустимое значение в вершине.

Следующие \(n\) строк описывают вершины дерева. \(i\)-я из них содержит три целых числа \(L_i, R_i\) и \(val_i\) (\(-1 \le L_i, R_i \le n\), \(-1 \le val_i \le C\), \(L_i, R_i, val_i \ne 0\)) — номер левого сына, правого сына и значение в \(i\)-й вершине, соответственно. Если \(L_i = -1\), то у \(i\)-й вершины нет левого сына. Если \(R_i = -1\), то у \(i\)-й вершины нет правого сына. Если \(val_i = -1\), то значение в \(i\)-й вершине неизвестно.

Гарантируется, что существует хотя бы одно подходящее бинарное дерево поиска.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — количество подходящих бинарных деревьев поиска по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных, бинарное дерево поиска имеет следующий вид:

Тогда возможными значениями в вершинах являются: \([2, 2, 3, 2, 2]\), \([2, 2, 3, 2, 3]\), \([2, 2, 3, 3, 3]\) и \([3, 2, 3, 3, 3]\).

Во втором наборе входных данных значения во всех вершинах известны, поэтому существует единственное подходящее бинарное дерево поиска.

D. Два отрезка

Структуры данных *2900

У Николая есть некоторая перестановка p целых чисел от 1 до n. Отрезком [l, r] (l ≤ r) называется множество элементов перестановки pi таких, что l ≤ i ≤ r.

Пару отрезков [a0, a1] и [b0, b1] (1 ≤ a0 ≤ a1 < b0 ≤ b1 ≤ n) Николай называет хорошей, если все их (a1 - a0 + b1 - b0 + 2) элементов, отсортированные в порядке возрастания, образуют арифметическую прогрессию с разностью 1. То есть, элементы, выписанные в отсортированном порядке образуют последовательность {x, x + 1, x + 2, ..., x + m - 1} для некоторых x и m.

Вам требуется найти в заданной перестановке количество различных пар хороших отрезков. Две пары отрезков считаются различными, если различны множества элементов, которые содержатся в этих парах отрезков. Например, любой отрезок [l, r] (l < r) может быть представлен в виде пары отрезков, как [l, i] и [i + 1, r] (l ≤ i ≤ r). Так как все эти пары образуют одно множество элементов, все они считаются одинаковыми.

Для лучшего понимания условия, смотрите комментарии к примерам.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 3·105) — размер перестановки. Во второй строке через пробел записано n различных целых чисел pi, (1 ≤ pi ≤ n).

Выходные данные

Выведите единственное число — количество хороших пар отрезков перестановки p.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом примере подходят следующие пары отрезков: ([1, 1], [2, 2]); ([2, 2], [3, 3]); ([1, 2], [3, 3]). Пара отрезков ([1, 1], [2, 3]), по определению, эквивалентна паре ([1, 2], [3, 3]), так как обе эти пары соответствуют множеству элементов {1, 2, 3}.

В третьем примере подходят следующие пары отрезков: ([4, 4], [5, 5]); ([3, 3],[4, 5]); ([2, 2],[3, 5]); ([1, 1],[2, 5]); ([3, 3],[5, 5]); ([2, 3],[5, 5]); ([1, 3],[5, 5]); ([2, 2],[3, 3]); ([1, 1],[2, 3]); ([1, 1],[2, 2]).

C. Лексикографически наибольший

Бинарный поиск жадные алгоритмы Конструктив сортировки Структуры данных *1700

У Стека есть массив \(a\) длины \(n\). У него также есть пустое множество \(S\). Заметим, что \(S\) не является мультимножеством.

Он выполнит следующую трехшаговую операцию ровно \(n\) раз:

  1. Выбрать индекс \(i\) такой, что \(1 \leq i \leq |a|\).
  2. Вставить\(^\dagger\) \(a_i + i\) в \(S\).
  3. Удалить \(a_i\) из \(a\). Обратите внимание, что индексы всех элементов справа от \(a_i\) уменьшаются на \(1\).

Обратите внимание, что после \(n\) операций массив \(a\) станет пустым.

После Стек построит новый массив \(b\), который является \(S\), отсортированным в порядке убывания. Формально, \(b\) — это массив длины \(|S|\), где \(b_i\) — \(i\)-й наибольший элемент \(S\) для всех \(1 \leq i \leq |S|\).

Найдите лексикографически наибольший\(^\ddagger\) массив \(b\), который может получить Стек.

\(^\dagger\) Множество может содержать только уникальные элементы. Вставка элемента, который уже присутствует в множестве, не изменит множество.

\(^\ddagger\) Массив \(p\) лексикографически больше массива \(q\) тогда и только тогда, когда выполняется одно из следующих условий:

  • \(q\) является префиксом \(p\), но \(p \ne q\); или
  • в первой позиции, где \(p\) и \(q\) различаются, массив \(p\) имеет больший элемент, чем соответствующий элемент в \(q\).

Заметим, что \([3,1,4,1,5]\) лексикографически больше, чем \([3,1,3]\), \([\,]\) и \([3,1,4,1]\), но не больше \([3,1,4,1,5,9]\), \([3,1,4,1,5]\) и \([4]\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 3 \cdot 10^5\)) — длину массивов \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_{n}\) (\(1 \leq a_i \leq 10^9\)) — элементы массива \(a\).

Сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите лексикографически наибольшее значение \(b\).

Примечание

В первом наборе входных данных выберите \(i=1\) в первой операции, вставьте \(a_1 + 1 = 3\) в \(S\) и удалите \(a_1\) из \(a\). После первой операции массив \(a\) станет \(a=[1]\). Во второй операции снова выберите \(i=1\) и вставьте \(a_1 + 1 = 2\) в \(S\). Таким образом, \(S=\{2, 3\}\), и \(b = [3, 2]\).

Обратите внимание, что если в первой операции выбрать \(i=2\), а во второй выбрать \(i=1\), то \(S=\{3\}\), так как \(3\) будет вставлено дважды, в результате чего \(b=[3]\).

Поскольку \([3,2]\) лексикографически больше \([3]\), то в первой операции следует выбрать \(i=1\).

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

G. Подсчет множества префиксных максимумов

Деревья дп Структуры данных *3100

Определим для массива \(b\) функцию \(f\) такую, что \(f(b)\) возвращает массив префиксных максимумов \(b\). Другими словами, \(f(b)\) — это массив, содержащий только такие элементы \(b_i\), для которых \(b_i=\max(b_1,b_2,\ldots,b_i)\), без изменения их порядка. Например, \(f([3,10,4,10,15,1])=[3,10,10,15]\).

Вам дано дерево, состоящее из \(n\) вершин с корнем \(1\).

Перестановка\(^\dagger\) \(p\) является прямым обходом дерева, если для всех \(i\) выполняется следующее условие:

  • Пусть \(k\) — число потомков\(^\ddagger\) вершины \(p_i\).
  • Для всех \(x\) таких, что \(i < x \leq i+k\), \(p_x\) — потомок вершины \(p_i\).

Найдите количество различных значений \(f(a)\) среди всех возможных прямых обходов \(a\). Так как это значение может быть большим, вам нужно найти его по модулю \(998\,244\,353\).

\(^\dagger\) Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

\(^\ddagger\) Вершина \(t\) является потомком вершины \(s\), если \(s \neq t\) и \(s\) находится на единственном простом пути из \(t\) в \(1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^6\)) — количество вершин.

Следующие \(n-1\) строк содержат по два целых числа \(u\) и \(v\) (\(1 \leq u, v \leq n\), \(u \neq v\)), обозначающие ребро между вершинами \(u\) и \(v\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите количество различных значений \(f(a)\), которые вы можете получить, по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных единственным допустимым прямым обходом является \(a=[1]\). Поэтому единственное возможное значение \(f(a)\) — \([1]\).

Во втором наборе входных данных единственным допустимым прямым обходом является \(a=[1,2]\). Поэтому единственное возможное значение \(f(a)\) — \([1,2]\).

В третьем наборе входных данных два допустимых прямых обхода — \(a=[1,2,3]\) и \(a=[1,3,2]\). Таким образом, возможные значения \(f(a)\) — \([1,2,3]\) и \([1,3]\).

В пятом наборе входных данных возможными значениями \(f(a)\) являются:

  • \([1,5]\);
  • \([1,2,5]\);
  • \([1,3,5]\);
  • \([1,4,5]\);
  • \([1,2,3,5]\);
  • \([1,2,4,5]\);
  • \([1,3,4,5]\);
  • \([1,2,3,4,5]\).

C. LR-остатки

математика Перебор реализация Структуры данных *1400

Вам задан массив \(a\) длины \(n\), положительное целое число \(m\) и строка команд из \(n\) символов. Каждая команда — это либо символ 'L', либо символ 'R'.

Обработайте все \(n\) команд в порядке их записи в строке \(s\). Обработка команды производится следующим образом:

  • сначала выведите остаток от произведения значений всех элементов массива \(a\) при делении на \(m\),
  • затем, если команда равна 'L', то удалите из массива \(a\) крайний левый элемент, если команда равна 'R', то удалите из массива \(a\) крайний правый элемент.

Обратите внимание, что после каждого хода длина массива \(a\) уменьшается на \(1\) и после обработки всех команд он окажется пустым.

Напишите программу, которая совершит обработку всех команд в порядке из записи в строке \(s\) (слева направо).

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте. Далее следуют описания \(t\) наборов входных данных.

Каждый набор входных данных задаётся тремя строками.

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 2\cdot10^5, 1 \le m \le 10^4\)) — начальная длина массива \(a\) и значение, по которому надо брать остаток.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^4\)) — элементы массива \(a\).

Третья строка состоит из \(n\) букв 'L' и 'R' — строка команд \(s\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных теста не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(b_1, b_2, \dots, b_n\), где \(b_i\) — остаток при делении произведения всех элементов текущего состояния массива \(a\) на \(m\) в начале выполнения \(i\)-й команды.

Примечание

В первом наборе входных данных примера:

  • \(3 \cdot 1 \cdot 4 \cdot 2 \bmod 6 = 24 \bmod 6 = 0\);
  • \(s_1 = \text{L}\), так что удалим первый элемент и получим массив \([1, 4, 2]\);
  • \(1 \cdot 4 \cdot 2 \bmod 6 = 8 \bmod 6 = 2\);
  • \(s_2 = \text{R}\), так что удалим последний элемент и получим массив \([1, 4]\);
  • \(1 \cdot 4 \bmod 6 = 4 \bmod 6 = 4\);
  • \(s_3 = \text{R}\), так что удалим последний элемент и получим массив \([1]\);
  • \(1 \bmod 6 = 1\);
  • \(s_4 = \text{L}\), так что удалим первый элемент и получим пустой массив.

F. Кормление кошек

дп сортировки Структуры данных *1900

Существует увлекательная игра, в которой вам нужно кормить кошек, которые приходят и уходят. Уровень игры состоит из \(n\) шагов. Есть \(m\) кошек; кошка \(i\) присутствует на шагах от \(l_i\) до \(r_i\), включительно. На каждом шаге вы можете покормить всех кошек, которые в данный момент присутствуют, или ничего не делать.

Если вы кормите одну и ту же кошку более одного раза, она переест, и вы сразу проиграете игру. Ваша цель — покормить как можно больше кошек, не заставив ни одну из них переесть.

Найдите максимальное количество кошек, которых вы можете покормить.

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

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 10^6\), \(1 \le m\le 2\cdot 10^5\)).

\(i\)-я из следующих \(m\) строк содержит пару целых чисел \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)).

Сумма \(n\) для всех тестов не превышает \(10^6\), сумма \(m\) для всех тестов не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество кошек, которых вы можете покормить.

Примечание

В первом примере один из способов покормить пять кошек — это покормить их на шагах \(4\) и \(11\).

  • На шаге \(4\) будут покормлены кошки \(1\), \(2\) и \(3\).
  • На шаге \(11\) будут покормлены кошки \(5\) и \(6\).

C. Мессенджер в ЦПМ

Бинарный поиск дп жадные алгоритмы Конструктив Перебор сортировки Структуры данных *1800

В новом мессенджере для учащихся Центра Помощи Магистрам, Кефтемерум, планируется обновление, в котором разработчики хотят оптимизировать набор сообщений, показываемых пользователю. Всего есть \(n\) сообщений, каждое сообщение характеризуется двумя целыми числами \(a_i\) и \(b_i\). Время, потраченное на прочтение набора сообщений с номерами \(p_1, p_2, \ldots, p_k\) (\(1 \le p_i \le n\), все \(p_i\) различны) рассчитывается по формуле:

\(\)\Large \sum_{i=1}^{k} a_{p_i} + \sum_{i=1}^{k - 1} |b_{p_i} - b_{p_{i+1}}|\(\)

Обратите внимание, что время прочтения набора сообщений, состоящего из одного сообщения с номером \(p_1\), равно \(a_{p_1}\). Также время прочтения пустого набора сообщений считается равным \(0\).

Пользователь может сам определить время \(l\), которое он готов провести в мессенджере. Мессенджер же должен сообщить пользователю максимально возможный размер набора сообщений, время прочтения которого не превышает \(l\). Обратите внимание, что максимальный размер набора сообщений может быть равен \(0\).

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 5 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(l\) (\(1 \leq n \leq 2000\), \(1 \leq l \leq 10^9\)) — количество сообщений и время, которое пользователь готов провести в мессенджере.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^9\)) — характеристики \(i\)-го сообщения.

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(4 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможный размер набора сообщений, время прочтения которого не превышает \(l\).

Примечание

В первом наборе входных данных, можно взять набор из трёх сообщений с номерами \(p_1 = 3\), \(p_2 = 2\) и \(p_3 = 5\). Время, затрачиваемое на прочтение данного набора, равно \(a_3 + a_2 + a_5 + |b_3 - b_2| + |b_2 - b_5| = 2 + 1 + 2 + |4 - 5| + |5 - 3| = 8\).

Во втором наборе входных данных, можно взять набор из одного сообщения со номером \(p_1 = 1\). Время, затрачиваемое на прочтение данного набора, равно \(a_1 = 4\).

В пятом наборе входных данных можно показать, что не существует такого непустого набора сообщений, затрачиваемое время на прочтение которого не превышает \(l\).

E. Дистанционные курсы в ЦПМ

битмаски жадные алгоритмы математика Перебор Структуры данных *2400

В Центре Помощи Магистрам наступил Новый год, а значит время добавить нововведение!

Теперь ученикам даются дистанционные курсы, при этом всего есть \(n\) курсов. За \(i\)-й дистанционный курс ученик может получить оценку от \(x_i\) до \(y_i\).

Но каждому ученику могут быть доступны не все курсы, а именно \(j\)-му ученику даются только курсы с номерами от \(l_j\) до \(r_j\), то есть дистанционные курсы с номерами \(l_j, l_j + 1, \ldots, r_j\).

Создатели дистанционных курсов решили определять итоговую оценку особенным образом. Пусть \(j\)-й ученик получил оценки \(c_{l_j}, c_{l_j + 1}, \ldots, c_{r_j}\) за свои дистанционные курсы, тогда его итоговая оценка будет равна \(c_{l_j}\) \(|\) \(c_{l_j + 1}\) \(|\) \(\ldots\) \(|\) \(c_{r_j}\), где \(|\) обозначает операцию побитового ИЛИ.

Так как чат-бот с решениями дистанционных курсов сломался, то ученики попросили вас помочь. Для каждого из \(q\) учеников скажите, какую максимальную итоговую оценку он может получить.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество дистанционных курсов.

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(0 \le x_i \le y_i < 2^{30}\)) — минимальная и максимальная оценка, которую можно получить за \(i\)-й курс.

Следующая строка содержит одно целое число \(q\) (\(1 \le q \le 2\cdot10^5\)) — количество учеников.

Каждая из следующих \(q\) строк содержит два целых числа \(l_j\) и \(r_j\) (\(1 \le l_j \le r_j \le n\)) — минимальный и максимальный номер дистанционных курсов, доступных для \(j\)-го ученика.

Гарантируется, что сумма \(n\) по всем наборам входных данных и сумма \(q\) по всем наборам входных данных не превосходят \(2\cdot10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных:

  1. Максимальная оценка для первого ученика равна \(1\):
    • На первом дистанционном курсе он получит оценку \(1\).
    Таким образом, итоговая оценка равна \(1\).

  2. Максимальная оценка для второго ученика равна \(5\):
    • На первом дистанционном курсе он получит оценку \(1\).
    • На втором дистанционном курсе он получит оценку \(4\).
    Таким образом, итоговая оценка равна \(1\) \(|\) \(4\) \(=\) \(5\).
  3. Максимальная оценка для третьего ученика равна \(4\):
    • На втором дистанционном курсе он получит оценку \(4\).
    Таким образом, итоговая оценка равна \(4\).

Во втором наборе входных данных:

  1. Максимальная оценка для первого ученика равна \(15\):
    • На первом дистанционном курсе он получит оценку \(7\).
    • На втором дистанционном курсе он получит оценку \(4\).
    • На третьем дистанционном курсе он получит оценку \(8\).
    Тем самым, итоговая оценка равна \(7\) \(|\) \(4\) \(|\) \(8\) \(=\) \(15\).

  2. Максимальная оценка для второго ученика равна \(11\):
    • На третьем дистанционном курсе он получит оценку \(9\).
    • На четвертом дистанционном курсе он получит оценку \(2\).
    Тем самым, итоговая оценка равна \(9\) \(|\) \(2\) \(=\) \(11\).

F. Дерево Андрея

Бинарный поиск Деревья жадные алгоритмы Конструктив поиск в глубину и подобное реализация снм Структуры данных *2800

Магистр Андрей очень любит деревья\(^{\dagger}\), поэтому у него есть дерево, состоящее из \(n\) вершин.

Но не все так просто. Магистр Тимофей решил украсть одну вершину из дерева. Если Тимофей украл вершину \(v\) из дерева, то вершина \(v\) и все ребра с концом в вершине \(v\) удаляются из дерева, при этом номера других вершин не меняются. Чтобы Андрей не расстраивался, Тимофей решил сделать получившийся граф снова деревом. Для этого он может добавлять ребра между произвольными вершинами \(a\) и \(b\), однако при добавлении такого ребра он должен заплатить \(|a - b|\) монет в Центр Помощи Магистрам.

Обратите внимание, что получившееся дерево не содержит вершину \(v\).

Тимофей не определился, какую вершину \(v\) он удалит из дерева, поэтому он хочет знать для каждой вершины \(1 \leq v \leq n\), какое минимальное количество монет нужно потратить, чтобы после удаления вершины \(v\) сделать граф снова деревом, а также какие ребра при этом нужно добавить.

\(^{\dagger}\)Деревом называется неориентированный связный граф без циклов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(5 \le n \le 2\cdot10^5\)) — количество вершин в дереве Андрея.

В следующих \(n - 1\) строках содержится описание ребер дерева. \(i\)-я из этих строк содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\)) — номера вершин, соединённых \(i\)-м ребром.

Гарантируется, что данные рёбра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ в следующем формате:

Для каждой вершины \(v\) (в порядке от \(1\) до \(n\)) в первой строке выведите два целых числа \(w\) и \(m\) — минимальное количество монет, которое нужно потратить, чтобы граф после удаления вершины \(v\) снова стал деревом, и количество добавленных ребер.

Далее выведите \(m\) строк, каждая из которых содержит два целых числа \(a\) и \(b\) (\(1 \le a, b \le n, a \ne v, b \ne v\), \(a \ne b\)) — концы добавленного ребра.

Если существует несколько способов добавить ребра, вы можете вывести любое решение с минимальной стоимостью.

Примечание

В первом наборе входных данных:

Рассмотрим удаление вершины \(4\):

Оптимальным решением будет провести ребро из вершины \(5\) в вершину \(3\). Тогда мы потратим \(|5 - 3| = 2\) монеты.

В третьем наборе входных данных:

Рассмотрим удаление вершины \(1\):

Оптимальным решением будет:

  • Провести ребро из вершины \(2\) в вершину \(3\), потратив \(|2 - 3| = 1\) монету.
  • Провести ребро из вершины \(3\) в вершину \(4\), потратив \(|3 - 4| = 1\) монету.
  • Провести ребро из вершины \(4\) в вершину \(5\), потратив \(|4 - 5| = 1\) монету.

Тогда сумарно мы потратим \(1 + 1 + 1 = 3\) монеты.

Рассмотрим удаление вершины \(2\):

Ребра проводить не нужно, так как после удаления вершины граф останется деревом.

B. Пинбол

Бинарный поиск математика реализация Структуры данных *2000

Дана полоска из \(n\) клеток. В \(i\)-й клетке полоски находится символ \(s_i\), равный '<' или '>'.

Когда шарик помещают в одну из клеток, он начинает движение в соответствии со следующими правилами:

  • Если шарик находится в \(i\)-й клетке и \(s_i\) равно '<', то шарик за одну секунду сдвигается на одну клетку влево. Если же \(s_i\) равно '>', то шарик сдвигается на одну клетку вправо.
  • После того как шарик сдвинулся, символ \(s_i\) заменяется на противоположный (т. е. если символ \(s_i\) был равен '<', он становится равным '>', и наоборот).
  • Шарик прекращает движение, когда покидает полоску: он выходит за границы либо слева, либо справа.

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

Для каждого запроса посчитайте, сколько пройдёт секунд до момента, когда шарик выйдет за пределы полоски. Можно доказать, что шарик всегда покинет полоску за конечное число шагов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит строку \(s_1s_2 \ldots s_{n}\) длины \(n\), состоящую из символов '<' и '>'.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, для каждого \(i\) (\(1 \le i \le n\)) выведите ответ, если шарик изначально помещается в \(i\)-ю клетку.

Примечание

В первом наборе входных данных движение шарика для \(i=1\) показано на картинке ниже. Шарику нужно \(3\) секунды, чтобы покинуть полоску.

Движение шарика для \(i=2\) показано на картинке ниже. Шарику нужно \(6\) секунд, чтобы покинуть полоску.

C. Арена покемонов

графы жадные алгоритмы кратчайшие пути реализация сортировки Структуры данных *2400

Вы находитесь на дуэльной арене. Вы также владеете \(n\) покемонами. Изначально на арене находится только \(1\)-й покемон.

Каждый покемон имеет \(m\) характеристик. Значение \(j\)-й характеристики у \(i\)-го покемона равно \(a_{i,j}\). Также у каждого покемона есть стоимость его вызова: цена \(i\)-го покемона равна \(c_i\).

Вы хотите добиться того, чтобы на арене находился \(n\)-й покемон. Для этого вы можете выполнять операции двух типов любое количество раз в любом порядке:

  • Выбрать три целых числа \(i\), \(j\), \(k\) (\(1 \le i \le n\), \(1 \le j \le m\), \(k > 0\)) и навсегда увеличить \(a_{i,j}\) на \(k\). Стоимость такой операции равна \(k\).
  • Выбрать два числа \(i\), \(j\) (\(1 \le i \le n\), \(1 \le j \le m\)) и вызвать \(i\)-го покемона, который бросит вызов текущему покемону на арене по \(j\)-й характеристике. При этом \(i\)-й покемон победит, если \(a_{i,j}\) не меньше, чем \(j\)-я характеристика текущего покемона на арене (иначе он проиграет). После дуэли на арене остаётся только её победитель. Стоимость такой операции равна \(c_i\).

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 4 \cdot 10^5\), \(1 \le m \le 2 \cdot 10^5\), \(2 \leq n \cdot m \leq 4 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le 10^9\)).

Далее, \(i\)-я из следующих \(n\) строк содержит \(m\) целых чисел \(a_{i,1}, a_{i,2}, \ldots, a_{i,m}\) (\(1 \le a_{i,j} \le 10^9\)).

Гарантируется, что сумма значений \(n \cdot m\) по всем наборам входных данных не превосходит \(4 \cdot 10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных массив значений характеристик \(1\)-го покемона (который изначально расположен на арене) есть \([2,9,9]\).

На первой операции можно выбрать \(i=3\), \(j=1\), \(k=1\) и увеличить \(a_{3,1}\) на \(1\) навсегда. Теперь массив значений характеристик \(3\)-го покемона станет равен \([2,2,1]\). Стоимость этой операции равна \(k = 1\).

На второй операции можно выбрать \(i=3\), \(j=1\) и вызвать \(3\)-го покемона, который сразится с текущим покемоном на арене по \(1\)-й характеристике. Поскольку \(a_{i,j}=a_{3,1}=2 \ge 2=a_{1,1}\), \(3\)-й покемон победит. Стоимость этой операции равна \(c_3 = 1\).

Таким образом, \(3\)-й покемон находится на арене, а суммарная стоимость операций равна \(2\). Можно показать, что меньше \(2\) ответ получить нельзя.

Во втором наборе входных данных массив значений характеристик \(1\)-го покемона есть \([9,9,9]\).

На первой операции можно выбрать \(i=2\), \(j=3\), \(k=2\) и увеличить \(a_{2,3}\) на \(2\) навсегда. Теперь массив значений характеристик \(2\)-го покемона есть \([6,1,9]\). Стоимость этой операции равна \(k = 2\).

На второй операции можно выбрать \(i=2\), \(j=3\) и вызвать \(2\)-го покемона, который сразится с текущим покемоном на арене по \(3\)-й характеристике. Поскольку \(a_{i,j}=a_{2,3}=9 \ge 9=a_{1,3}\), \(2\)-й покемон победит. Стоимость этой операции равна \(c_2 = 3\).

На третьей операции можно выбрать \(i=3\), \(j=2\) и вызвать \(3\)-го покемона, который сразится с текущим покемоном на арене по \(2\)-й характеристике. Поскольку \(a_{i,j}=a_{1,2}=2 \ge 1=a_{2,2}\), \(3\)-й покемон победит. Стоимость этой операции равна \(c_3 = 1\).

Таким образом, \(3\)-й покемон находится на арене, а суммарная стоимость операций равна \(6\). Можно показать, что меньше \(6\) ответ получить нельзя.

D. Битовый парадокс

Бинарный поиск битмаски жадные алгоритмы Структуры данных *3100

Даны два массива целых чисел \(a\) и \(b\) длины \(n\), а также фиксированное целое число \(v\).

Отрезок \([l, r]\) назовём хорошим, если \((b_l \mid b_{l+1} \mid \ldots \mid b_r) \ge v\), где \(|\) обозначает операцию побитового ИЛИ. Далее, красота хорошего отрезка определяется как \(\max(a_l, a_{l+1}, \ldots, a_r)\).

Вам даны \(q\) запросов двух типов:

  • «1 i x»: нужно выполнить присваивание \(b_i := x\);
  • «2 l r»: найдите минимальную красоту среди всех хороших отрезков \([l_0,r_0]\), удовлетворяющих условию \(l \le l_0 \le r_0 \le r\). Если подходящих красивых отрезков нет, выведите \(-1\).

Обработайте все запросы.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(v\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le v \le 10^9\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le 10^9\)).

Четвёртая строка каждого набора входных данных содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)).

В \(i\)-й из следующих \(q\) строк содержится описание очередного запроса. Каждая строка имеет один из двух типов:

  • «1 i x» (\(1 \le i \le n\), \(1 \le x \le 10^9)\);
  • «2 l r» (\(1 \le l \le r \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных, как и сумма значений \(q\) по всем наборам входных данных, не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответы на все запросы второго типа.

Примечание

В первом наборе входных данных \(a = [2, 1, 3]\), \(b = [2, 2, 3]\), \(v = 7\).

Первый запрос является запросом второго типа, в нём \(l = 1\) и \(r = 3\). Самый большой доступный отрезок есть \([1, 3]\), но даже на нём побитовое ИЛИ равно \(b_1 \mid b_2 \mid b_3 = 3\), что меньше \(v\). Значит, не существует ни одного хорошего отрезка.

Второй запрос просит заменить \(b_2\) на \(5\), так что массив \(b\) становится равен \([2, 5, 3]\).

Третий запрос является запросом второго типа, в нём \(l = 2\) и \(r = 3\). Есть три возможных отрезка: \([2, 2]\), \([3, 3]\) и \([2, 3]\). Однако, \(b_2 = 5 < v\), \(b_3 = 3 < v\). Так что только последний отрезок является хорошим: для него \(b_2 \mid b_3 = 7\). Значит, ответ равен \(\max(a_2, a_3) = 3\).

Четвёртый запрос является запросом второго типа, в нём \(l = 1\) и \(r = 3\). Есть три хороших отрезка: \([1, 2]\), \([2, 3]\) и \([1, 3]\). Их красоты равны \(2\), \(3\), \(3\) соответственно. Таким образом, ответ равен \(2\).

Во втором наборе входных данных \(a = [5, 1, 2, 4]\), \(b = [4, 2, 3, 3]\), \(v = 5\).

В первом запросе \(l = 1\) и \(r = 4\). Хорошими отрезками являются только следующие: \([1, 2]\), \([1, 3]\), \([1, 4]\). Их красоты равны \(5\), \(5\), \(5\) соответственно. Таким образом, ответ равен \(5\).

E. Рудольф и k мостов

Бинарный поиск дп Структуры данных *1600

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

Река представляет собой клетчатое поле из \(n\) строк и \(m\) столбцов. На пересечении \(i\)-й строки и \(j\)-го столбца записано число \(a_{i,j}\) — глубина в соответствующей клетке. Все клетки первого и последнего столбцов соответствуют берегам реки, поэтому глубина в них \(0\).

Река может выглядеть так.

Рудольф может выбрать строку \((i,1), (i,2), \ldots, (i,m)\) и построить над ней мост. В каждой клетке строки он может установить опору для моста. Стоимость установки опоры в клетке \((i,j)\) равна \(a_{i,j}+1\). Опоры необходимо установить так, чтобы были выполнены следующие условия:

  1. В клетке \((i,1)\) должна быть установлена опора;
  2. В клетке \((i,m)\) должна быть установлена опора;
  3. Расстояние между любой парой соседних опор должно быть не больше \(d\). Расстояние между опорами \((i, j_1)\) и \((i, j_2)\) равно \(|j_1 - j_2| - 1\).

Построить один мост это скучно. Поэтому Рудольф решил построить \(k\) мостов на последовательных строках реки, то есть выбрать некоторое \(i\) (\(1 \le i \le n - k + 1\)) и независимо построить по мосту на каждой из строк \(i, i + 1, \ldots, i + k - 1\). Помогите Рудольфу минимизировать суммарную стоимость установки опор.

Входные данные

Первая строка содержит одно целое число \(t\) \((1 \le t \le 10^3)\) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора данных содержит четыре целых числа \(n\), \(m\), \(k\) и \(d\) (\(1 \le k \le n \le 100\), \(3 \le m \le 2 \cdot 10^5\), \(1 \le d \le m\)) — количество строк и столбцов поля, количество мостов, максимальное расстояние между опорами.

Далее следует \(n\) строк, \(i\)-я строка содержит \(m\) целых положительных чисел \(a_{i, j}\) (\(0 \le a_{i, j} \le 10^6\), \(a_{i, 1} = a_{i, m} = 0\)) — глубины клеток реки.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальную суммарную стоимость опор.

Примечание

В первом наборе тестовых данных выгоднее всего построить мост на второй строке.

Это не вид сверху, а вид сбоку: серые ячейки — сам мост, белые ячейки — пустые, черные ячейки — опоры, синие ячейки — вода, коричневые ячейки — дно реки.

Во втором наборе мост выгоднее всего построить на второй и третьей строках. Опоры будут стоять в клетках \((2, 3)\), \((3, 2)\) и на берегах.

В третьем наборе опоры можно расположить по берегам.

D. Учимся рисовать

Бинарный поиск дп жадные алгоритмы поиск в глубину и подобное реализация сортировки Структуры данных *2100

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

У Элси есть двумерный массив \(a\), который она будет использовать для оценки картин. Пусть максимальные непрерывные отрезки закрашенных клеток в картине равны \([l_1,r_1],[l_2,r_2],\ldots,[l_x,r_x]\). Красота картины — это сумма \(a_{l_i,r_i}\) по всем \(1 \le i \le x\). На изображении выше максимальные непрерывные отрезки закрашенных клеток равны \([2,4],[6,6],[8,9]\), а красота картины равна \(a_{2,4}+a_{6,6}+a_{8,9}\).

Всего есть \(2^n\) различных способов раскрасить холст. Помогите Элси найти \(k\) наибольших значений красоты картины, которые она может получить, среди всех способов. Обратите внимание, что эти \(k\) значений не обязательно должны быть различными. Гарантируется, что существует не менее \(k\) различных способов раскрасить холст.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит \(2\) целых числа \(n\) и \(k\) (\(1 \leq n \leq 10^3\), \(1 \leq k \leq \min(2^n, 5 \cdot 10^3)\)) — количество клеток и количество наибольших значений красоты картины, которые вы должны найти.

Следующие \(n\) строк каждого набора входных данных описывают двумерный массив \(a\), \(i\)-я строка содержит \(n-i+1\) целых чисел \(a_{i,i},a_{i,i+1},\ldots,a_{i,n}\) (\(-10^6 \leq a_{i,j} \leq 10^6\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^3\), а сумма \(k\) по всем наборам входных данных не превосходит \(5 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке \(k\) целых чисел: \(i\)-е из них должно равняться \(i\)-му наибольшему значение красоты картины, которое может получить Элси.

Примечание

В первом наборе входных данных Элси может либо закрасить единственную клетку, либо не закрашивать ее. Если она раскрасит единственную клетку, красота картины составит \(-5\). Если она решит не раскрашивать ее, красота картины составит \(0\). Таким образом, наибольшая красота, которую она может получить, равна \(0\), а вторая по величине красота, которую она может получить, равна \(-5\).

Ниже приведена иллюстрация третьего набора входных данных.

F. Любимая функция Фермера Джона

математика Перебор реализация Структуры данных *2700

У Фермера Джона есть массив \(a\) длины \(n\). У него также есть функция \(f\) со следующим рекуррентным соотношением:

  • \(f(1) = \sqrt{a_1}\);
  • Для всех \(i > 1\), \(f(i) = \sqrt{f(i-1)+a_i}\).

Обратите внимание, что \(f(i)\) не обязательно является целым числом.

Он планирует сделать \(q\) обновлений массива. При каждом обновлении он дает вам два целых числа \(k\) и \(x\) и хочет, чтобы вы установили \(a_k = x\). После каждого обновления он хочет узнать \(\lfloor f(n) \rfloor\), где \(\lfloor t \rfloor\) обозначает значение \(t\), округленное вниз до ближайшего целого числа.

Входные данные

Первая строка содержит \(n\) и \(q\) (\(1 \leq n, q \leq 2 \cdot 10^5\)) — длину \(a\) и количество обновлений, которые он будет выполнять.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^{18}\)).

Следующие \(q\) строк содержат по два целых числа \(k\) и \(x\) (\(1 \leq k \leq n\), \(0 \leq x \leq 10^{18}\)) — индекс обновления и элемент, на который он заменит \(a_k\).

Выходные данные

После каждого обновления выведите целое число \(\lfloor f(n) \rfloor\) в отдельной строке.

Примечание

В первом примере массив после первого обновления имеет вид \([4, 14, 0, 7, 6]\). Значения \(f\) следующие:

  • \(f(1)=2\);
  • \(f(2)=4\);
  • \(f(3)=2\);
  • \(f(4)=3\);
  • \(f(5)=3\).

Поскольку \(\lfloor f(5) \rfloor = 3\), ответом будет \(3\).

Массив после второго обновления имеет вид \([3, 14, 0, 7, 6]\). Значения \(f\), округленные до \(6\) знаков после запятой, таковы:

  • \(f(1)\approx 1.732051\);
  • \(f(2)\approx 3.966365\);
  • \(f(3)\approx 1.991573\);
  • \(f(4)\approx 2.998595\);
  • \(f(5)\approx 2.999766\).

Поскольку \(\lfloor f(5) \rfloor = 2\), ответом будет \(2\).

H. Лучший стажер фермера Джона

Деревья дп Потоки Структуры данных *3500

Руби только что получила место стажера на ферме Фермера Джона, победив в соревновании по программированию! В обязанности Руби входит обслуживание персикового дерева Фермера Джона — дерева, состоящего из \(n\) вершин, с корнем в вершине \(1\). В каждой вершине изначально содержится \(a_i = 0\) персиков. Могут происходить два вида событий:

  1. Событие роста в вершине \(x\): Руби должна выбрать либо родителя \(x\), либо любую вершину в поддереве \(x\), и увеличить количество персиков в ней на единицу.
  2. Событие сбора урожая в вершине \(x\): Руби должна выбрать одну вершину, которая находится в поддереве \(x\), и уменьшить количество содержащихся в ней персиков на единицу. Обратите внимание, что это не тот же набор вершин, что и в событии роста.
Обратите внимание, поддерево вершины \(x\) включает в себя саму вершину \(x\).

Руби также дан массив \(b\) длины \(n\). Персиковое дерево считается здоровым, если \(a_i \ge b_i\) для каждой вершины \(i\).

Руби предлагается выполнить \(q\) операций двух типов:

  • 1 x v — Выполнить \(v\) событий роста на вершине \(x\). Руби не обязательно выбирать одну и ту же вершину для увеличения в каждом событии роста.
  • 2 x v — Выполнить \(v\) событий сбора урожая на вершине \(x\). Руби не обязательно выбирать одну и ту же вершину для уменьшения в каждом событии сбора урожая.

Для каждого префикса операций она просит вас определить, может ли она выполнить эти операции в некотором порядке так, чтобы получившееся (после всех этих операций) персиковое дерево было здоровым. Обратите внимание, что Руби не может выполнять событие сбора урожая, которое сделает некоторое \(a_i\) отрицательным.

Каждый префикс операций независим, то есть для данной операции Руби может выбрать разные вершины для выполнения событий на каждом префиксе, содержащем эту операцию.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — размер дерева и количество операций.

Вторая строка содержит \(n - 1\) целых чисел \(p_2, p_3, \ldots, p_n\) (\(1 \le p_i < i\)) — родителей вершин.

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(0 \le b_i \le 10^6\)) — минимальное количество персиков, необходимое каждой вершине для того, чтобы персиковое дерево считалось здоровым.

Следующие \(q\) строк описывают операции, которые будет выполнять Руби. Каждая строка содержит три целых числа \(t\), \(x\) и \(v\) (\(1 \le t \le 2\), \(1 \le x \le n\), \(1 \le v \le 10^6\)). Если \(t = 1\), это означает, что Руби должна выполнить \(v\) событий роста на вершине \(x\). Если \(t = 2\), это означает, что Руби должна выполнить \(v\) событий урожая на вершине \(x\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), и сумма \(q\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) строк. Строка \(i\) должна содержать «YES», если Руби может сделать персиковое дерево здоровым после выполнения операций \(1, 2, \ldots, i\) в любом порядке. В противном случае она должна содержать «NO».

Вы можете выводить ответ в любом регистре (верхнем или нижнем). Например, строки «YEs», «Yes», «Yes» и «YES» будут распознаны как положительные ответы.

Примечание

Для префикса, содержащего операции \(1, 2, \ldots, 5\) в первом примере, Руби может выполнять операции в следующем порядке:

  1. Руби выполняет операцию \(2\) и решает увеличить \(a_4\) на \(9\) и \(a_5\) на \(8\).
  2. Руби выполняет операцию \(1\) и решает увеличить \(a_1\) на \(5\), \(a_3\) на \(2\), \(a_6\) на \(4\) и \(a_8\) на \(3\).
  3. Руби выполняет операцию \(3\) и решает увеличить \(a_2\) на \(7\).
  4. Руби выполняет операцию \(4\) и решает уменьшить \(a_2\) на \(1\).
  5. Руби выполняет операцию \(5\) и решает увеличить \(a_7\) на \(1\).

F. Кирилл и грибы

сортировки Структуры данных *1900

Стоило всем в лагере уснуть, как Кирилл выбрался из палатки и отправился к Мудрому Дубу собирать грибы.

Известно, что под Дубом растет \(n\) грибов, каждый из которых обладает характеристикой \(v_i\) — волшебностью. Кирилл очень хочет приготовить из грибов магический эликсир максимальной силы.

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

Однако не все так просто. Мудрый Дуб сообщил Кириллу перестановку чисел \(p\) от \(1\) до \(n\). Если Кирилл соберёт всего \(k\) грибов, то волшебность всех грибов с индексами \(p_1, p_2, \dots, p_{k - 1}\) станет равна \(0\). Грибы с нулевой волшебностью Кирилл не будет использовать для приготовления эликсира.

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

Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит единственное целое число \(n\) (\(1 \le n \le 200\,000\)) — количество грибов.

Во второй строке задан массив \(v\) размера \(n\) (\(1\le v_i \le 10^9\)) — волшебности грибов.

В третьей строке задана перестановка \(p\) чисел от \(1\) до \(n\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

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

Примечание

В первом примере нужно взять грибы под индексами \(1\) и \(2\), таким образом сила эликсира равна \(2 \cdot \min(a_1, a_2) = 2 \cdot \min(9, 8) = 2 \cdot 8 = 16\). Обратите внимание, что волшебность гриба с индексом \(3\) после срывания двух грибов станет равна \(0\).

G. Повар и каша

Бинарный поиск Конструктив реализация Структуры данных *2500

Наконец-то, обед!

\(n\) школьников выстроились в длинную очередь к палатке повара за кашей. Повар будет выдавать кашу в течение \(D\) минут. Школьник, который стоит на \(i\)-м месте в очереди, имеет приоритет \(k_i\) и съедает одну порцию каши за \(s_i\) минут.

В начале каждой минуты перерыва повар накладывает первому в очереди школьнику одну порцию каши, после этого школьник уходит есть свою порцию. Если \(i\)-му школьнику выдали порцию в начале \(x\)-й минуты, то он вернётся в очередь в конце \((x + s_i)\)-й минуты.

Когда \(i\)-й школьник возвращается в очередь, школьники в конце очереди, приоритет которых строго меньше, чем у \(i\)-го школьника, должны пропустить его. Таким образом, он встанет в очередь за последним из школьников, приоритет которого не меньше, чем его собственный. То есть за последним школьником \(j\), у которого \(k_j \ge k_i\). Если в очереди нет ни одного такого школьника, то \(i\)-й школьник встаёт в начало очереди.

Если несколько школьников возвращаются в одно время, то они вернутся в очередь в порядке возрастания их \(s_i\).

Например, если \(n = 3\), \(D = 3\), \(k = [2, 3, 2]\) и \(s = [2, 1, 3]\), то выдача будет происходить следующим образом:

  • В начале \(1\) минуты в очереди стоят школьники \([1, 2, 3]\), школьнику \(1\) выдают кашу;
  • в начале \(2\) минуты в очереди стоят школьники \([2, 3]\), школьнику \(2\) выдают кашу;
  • в начале \(3\) минуты в очереди стоят школьники \([3]\) школьнику \(3\) выдают кашу;
  • в конце \(3\) минуты в очередь возвращается школьник \(2\) и очередь становится \([2]\);
  • в конце \(3\) минуты в очередь возвращается школьник \(1\) и очередь становится \([2, 1]\), так как его приоритет ниже.

Определите, через какое минимальное количество минут после начала перерыва каждый школьник получит кашу хотя бы один раз или сообщите, что за \(D\) минут этого не произойдёт.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(D\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le D \le 3\cdot 10^5\)) — количество школьников в очереди и время перерыва соответственно.

Следующие \(n\) строк содержат по два целых числа \(k_i\) и \(s_i\) (\(1 \le k_i, s_i, \le 10^9\)) — приоритет и время поедания одной порции каши для очередного школьника. Школьники заданы в порядке, в котором они стоят в очереди (от начала к концу).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\). Аналогично гарантируется, что сумма значений \(D\) по всем наборам входных данных не превосходит \(3\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество минут, через которое каждый школьник получит кашу хотя бы один раз. Если этого не произойдёт за время перерыва, выведите \(-1\).

H. НОД больше

математика Перебор Структуры данных теория чисел *2600

Вечерами в походе нужно как-то коротать время, поэтому Кирилл и Антон решили достать из рюкзака массив целых чисел \(a\) длины \(n\) и сыграть с ним в игру. Правила заключаются в следующем:

  1. Кирилл выбирает себе от \(2\)-х до \((n-2)\)-х чисел и обводит их красным цветом.
  2. Антон обводит синим цветом все остальные числа.
  3. Кирилл считает наибольший общий делитель (НОД) всех красных чисел.
  4. Антон считает побитовое И всех синих чисел и прибавляет к результату число \(x\).
  5. Если НОД всех красных чисел строго больше, чем сумма побитового И всех синих чисел и числа \(x\), то Кирилл выигрывает, иначе выигрывает Антон.

Помогите Кириллу обыграть Антона или скажите, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 20\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(x\) (\(4\le n \le 4\cdot 10^5\), \(0 \le x \le 4\cdot 10^5\)) — количество чисел и число \(x\) соответственно.

Во второй строке вводится массив \(a\) длины \(n\) (\(1 \le a_i \le 4\cdot 10^5\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(4\cdot 10^5\). Также гарантируется, что сумма максимальных значений \(a_i\) по каждому набору входных данных не превосходит \(4\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в первой строке «YES», если выполнить условие возможно, во второй — количество чисел, которые выбирает Кирилл, а также сами числа в любом порядке через пробел, а в третьей — размер второго множества и числа, попавшие в него.

Иначе выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

F. Никто не нужен

2-sat дп поиск в глубину и подобное Структуры данных *2500

Олег в подарок на день рождения получил перестановку \(a\) длины \(n\).

Друг Олега Нечипор задает Олегу \(q\) вопросов, каждый вопрос характеризуется двумя числами \(l\) и \(r\), в ответ на вопрос Олег должен сказать количество наборов индексов \((t_1, t_2, \ldots, t_k)\) произвольной длины \(k \ge 1\) таких, что:

  • \(l \le t_i \le r\) для каждого \(i\) от \(1\) до \(k\).
  • \(t_i < t_{i+1}\) для каждого \(i\) от \(1\) до \(k-1\).
  • \(a_{t_{i+1}}\) делится на \(a_{t_i}\) для каждого \(i\) от \(1\) до \(k-1\).

Помогите Олегу и ответьте на все вопросы Нечипора.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 10^6\)) — длина перестановки и количество вопросов Нечипора.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — сама перестановка \(a\).

В каждой из следующих \(q\) строк каждого набора входных данных содержатся два целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)) — очередной вопрос Нечипора.

Гарантируется, что сумма значений \(n\) и сумма значений \(q\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите ответы на все вопросы Нечипора.

Примечание

Все подходящие массивы в первом наборе входных данных: (\(1\)), (\(2\)), (\(3\)), (\(4\)), (\(5\)), (\(6\)), (\(7\)), (\(8\)), (\(1, 3\)), (\(1, 6\)), (\(1, 7\)), (\(1, 6, 7\)), (\(2, 3\)), (\(2, 4\)), (\(2, 5\)), (\(2, 6\)), (\(2, 7\)), (\(2, 8\)), (\(2, 6, 7\)), (\(6, 7\)).

Все подходящие массивы в четвертом наборе входных данных: (\(1\)), (\(2\)), (\(3\)), (\(4\)), (\(5\)), (\(6\)), (\(7\)), (\(8\)), (\(1, 2\)), (\(1, 3\)), (\(1, 4\)), (\(1, 5\)), (\(1, 6\)), (\(1, 7\)), (\(1, 8\)), (\(1, 2, 4\)), (\(1, 2, 6\)), (\(1, 2, 8\)), (\(1, 2, 4, 8\)), (\(1, 3, 6\)), (\(1, 4, 8\)), (\(2, 4\)), (\(2, 6\)), (\(2, 8\)), (\(2, 4, 8\)), (\(3, 6\)), (\(4, 8\)).

B. После тренировки

математика реализация Структуры данных *1300

После тренировки одной из команд на чемпионате Европы по футболу Валерику поручили собрать мячи и разложить по корзинам. Всего на стадионе имеется n мячей и m корзин. Корзины расположены в ряд слева направо и пронумерованы, соответственно, числами от 1 до m. Мячи пронумерованы числами от 1 до n.

Валерик решил раскладывать мячи в порядке увеличения их номеров по следующей схеме. Каждый новый мяч он будет класть в ту корзину, где меньше всего мячей. При этом если у него есть несколько вариантов, то Валерик выбирает корзину, которая ближе всего к середине. Это означает, что он выбирает ту корзину, для которой минимально, где i — номер корзины. Если при этом также есть несколько вариантов, тогда он выбирает корзину с минимальным номером.

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

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

Входные данные

В первой строке через пробел записаны два целых числа n, m (1 ≤ n, m ≤ 105) — количество мячей и корзин, соответственно.

Выходные данные

Выведите n чисел, по одному на каждой строке. В i-ой строке должен содержаться номер корзины, в которую попадет i-ый мяч.

E. Построение леса

графы снм Структуры данных *2000

Ориентированным взвешенным лесом называется взвешенный ациклический орграф, в котором из каждой вершины выходит не более одного ребра.

Корнем вершины v ориентированного взвешенного леса назовем вершину, из которой не выходит ребра, и до которой можно дойти из вершины v, двигаясь по ребрам ориентированного взвешенного леса. Обозначим корень вершины v как root(v).

Глубиной вершины v назовем сумму весов пути проходящего от вершины v до ее корня. Обозначим глубину вершины v как depth(v).

Рассмотрим процесс построения ориентированного взвешенного леса. Изначально лес не содержит вершин. Вершины последовательно добавляются по одной. Всего выполняется n операций добавления. i(i > 0) операция добавления описывается набором чисел (k,  v1,  x1,  v2,  x2,  ... ,  vk,  xk) и означает, что в граф нужно добавить вершину номер i и k ребер: ребро из вершины root(v1) в вершину i весом depth(v1) + x1, ребро из вершины root(v2) в вершину i весом depth(v2) + x2 и так далее. В случае, если k = 0, в граф добавляется только вершина i и не добавляется никаких ребер.

Ваша задача состоит в том, чтобы по заданным операциям добавления вершин вычислить остаток от деления суммы весов всех ребер леса, получившихся после применения всех заданных операций, на 1000000007 (109 + 7).

Входные данные

В первой строке записано единственное целое число: n (1 ≤ n ≤ 105) — количество операций добавления вершины.

Следующие n строк содержат описание операций, i-я из них содержит описание операции добавления i-ой вершины в следующем формате: первый числом строки является целое k (0 ≤ k ≤ i - 1), далее следует 2k целых чисел, разделенных пробелами: v1, x1, v2, x2, ... , vk, xk (1 ≤ vj ≤ i - 1, |xj| ≤ 109).

Операции заданы в том порядке, в котором их следует применять к графу. Гарантируется, что сумма k по всем операциям не превосходит 105, а также что в результате применения операций добавления вершин не образуется петель и кратных ребер.

Выходные данные

Выведите одно целое число — сумму весов всех ребер получившегося графа по модулю 1000000007 (109 + 7).

Примечание

Рассмотрим первый пример:

  1. Добавляется вершина 1. Так как k = 0, то ребер не добавляется.
  2. Добавляется вершина 2. Так как k = 0, то ребер не добавляется.
  3. Добавляется вершина 3. k = 1. v1 = 2, x1 = 1. Добавляется ребро из вершины root(2) = 2 в вершину 3 веса depth(2) + x1 = 0 + 1 = 1.
  4. Добавляется вершина 4. k = 2. v1 = 1, x1 = 5. Добавляется ребро из вершины root(1) = 1 в вершину 4 веса depth(1) + x1 = 0 + 5 = 5. v2 = 2, x2 = 2. Добавляется ребро из вершины root(2) = 3 в вершину 4 веса depth(2) + x1 = 1 + 2 = 3.
  5. Добавляется вершина 5. k = 1. v1 = 1, x1 = 2. Добавляется ребро из вершины root(1) = 4 в вершину 5 веса depth(1) + x1 = 5 + 2 = 7.
  6. Добавляется вершина 6. k = 1. v1 = 3, x1 = 4. Добавляется ребро из вершины root(3) = 5 в вершину 6 веса depth(3) + x1 = 10 + 4 = 14.

Получившийся граф показан на иллюстрации ниже:

B. Битвы коров

Бинарный поиск жадные алгоритмы Структуры данных *1200

В турнире по программированию участвуют \(n\) коров. Корова \(i\) имеет рейтинг Cowdeforces, равный \(a_i\) (все значения разные), и изначально находится на позиции \(i\). Турнир состоит из \(n-1\) матча, проводимых следующим образом:

  • Первый матч проводится между коровой на позиции \(1\) и коровой на позиции \(2\).
  • В дальнейшем матч \(i\) проводится между коровой на позиции \(i+1\) и победителем матча \(i-1\).
  • В каждом матче корова с более высоким рейтингом Cowdeforces побеждает и переходит к следующему матчу.

Вы являетесь владельцем коровы \(k\). Для вас не важна победа в турнире, скорее, вы хотите, чтобы ваша корова выиграла как можно больше матчей. Будучи знакомым организаторов турнира, вы можете попросить их поменять место вашей коровы с другой коровой только один раз, или же вы можете ничего не делать.

Найдите максимальное количество побед, которое может одержать ваша корова.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 10^5, 1 \le k \le n\)) — количество коров и индекс вашей коровы.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — рейтинги коров на Cowdeforces. Гарантируется, что \(a_i\) попарно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимальное количество побед коровы \(k\), которого можно достичь, если сделать оптимальный обмен (или ничего не делать).

Примечание

При первом наборе входных данных оптимально ничего не делать. Пусть \(a'\) — это рейтинги на Cowdeforces коров в изначальном порядке (при этом рейтинг вашей коровы выделен жирным шрифтом), тогда

  • Изначально, \(a' = [\mathbf{12}, 10, 14, 11, 8, 3]\).
  • Ваша корова играет против коровы с рейтингом Cowdeforces \(10\) и выигрывает. \(a' = [\mathbf{12}, 14, 11, 8, 3]\).
  • Ваша корова играет против коровы с рейтингом Cowdeforces \(14\) и проигрывает.
В общей сложности ваша корова выигрывает в \(1\) матче.

Во втором наборе входных данных оптимально поменять вашу корову с коровой на позиции \(3\). Тогда пусть \(a'\) — это рейтинги на Cowdeforces коров в порядке после обмена позициями.

  • Изначально, \(a' = [7, 2, \mathbf{12}, 10, 727, 13]\).
  • Корова с рейтингом Cowdeforces \(7\) играет против коровы с рейтингом Cowdeforces \(2\) и выигрывает. \(a' = [7, \mathbf{12}, 10, 727, 13]\).
  • Корова с рейтингом Cowdeforces \(7\) играет против вашей коровы, и ваша корова побеждает. \(a' = [\mathbf{12}, 10, 727, 13]\).
  • Ваша корова играет против коровы с рейтингом Cowdeforces \(10\) и выигрывает. \(a' = [\mathbf{12}, 727, 13]\).
  • Ваша корова играет против коровы с рейтингом Cowdeforces \(727\) и проигрывает.
В общей сложности ваша корова выиграет \(2\) матча.

F. Инверсии композиции

жадные алгоритмы Конструктив Структуры данных *2500

Вам дана перестановка \(p\) длины \(n\), а также целое неотрицательное число \(k\). Вам нужно построить перестановку \(q\) длины \(n\) такую, что \(\operatorname{inv}(q) + \operatorname{inv}(q \cdot p) = k {}^\dagger {}^\ddagger\), или определить, что это сделать невозможно.

\({}^\dagger\) Для двух перестановок \(p\) и \(q\) одинаковой длины \(n\) перестановка \(w = q \cdot p\) такова, что \(w_i = q_{p_i}\) для всех \(1 \le i \le n\).

\({}^\ddagger\) Для перестановки \(p\) длины \(n\) функция \(\operatorname{inv}(p)\) возвращает количество инверсий \(p\), то есть количество пар индексов \(1 \le i < j \le n\) таких, что \(p_i > p_j\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 3 \cdot 10^5, 0 \le k \le n(n - 1)\)) — длину \(p\) и требуемое количество инверсий.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\), \(p_i\) попарно различны) — перестановку \(p\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке «YES», если существует перестановка \(q\), удовлетворяющая заданному условию, или «NO», если такой перестановки не существует.

Если ответ «YES», то во второй строке выведите \(n\) целых чисел \(q_1, q_2, \ldots, q_n\), которые представляют собой удовлетворяющую условию перестановку \(q\). Если таких \(q\) несколько, выведите любую из них.

Примечание

В первом наборе входных данных имеем \(q \cdot p = [2, 1, 3]\), \(\operatorname{inv}(q) = 3\), и \(\operatorname{inv}(q \cdot p) = 1\).

В четвертом наборе входных данных имеем \(q \cdot p = [9, 1, 8, 5, 7, 6, 4, 3, 2]\), \(\operatorname{inv}(q) = 24\), и \(\operatorname{inv}(q \cdot p) = 27\).

E. Цепная реакция

Бинарный поиск жадные алгоритмы математика реализация снм Структуры данных теория чисел *2200

В ряд стоят \(n\) монстров, у \(i\)-го монстра \(a_i\) очков здоровья.

В каждую секунду вы можете выбрать одного живого монстра и запустить в него цепную молнию. Молния наносит ему \(k\) урона, а также распространяется налево (в сторону уменьшения \(i\)) и направо (в сторону увеличения \(i\)) по живым монстрам, нанося каждому по \(k\) урона. Когда молния доходит до мертвого монстра или до начала/конца ряда, она останавливается. Монстр считается живым, если количество его очков здоровья строго больше \(0\).

Например, рассмотрим следующий сценарий: три монстра с уровнями здоровья \([5, 2, 7]\), \(k = 3\). Можно убить всех монстров за \(4\) секунды:

  • запустить цепную молнию в \(3\)-го монстра, тогда уровни здоровья будут равны \([2, -1, 4]\);
  • запустить цепную молнию в \(1\)-го монстра, тогда уровни здоровья будут равны \([-1, -1, 4]\);
  • запустить цепную молнию в \(3\)-го монстра, тогда уровни здоровья будут равны \([-1, -1, 1]\);
  • запустить цепную молнию в \(3\)-го монстра, тогда уровни здоровья будут равны \([-1, -1, -2]\).

Для каждого \(k\) от \(1\) до \(\max(a_1, a_2, \dots, a_n)\) посчитайте минимальное количество секунд, за которое можно убить всех монстров.

Входные данные

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

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^5\)) — количество очков здоровья у \(i\)-го монстра.

Выходные данные

Для каждого \(k\) от \(1\) до \(\max(a_1, a_2, \dots, a_n)\) выведите минимальное количество секунд, за которое можно убить всех монстров.

B. Прогрессивный квадрат

Конструктив реализация сортировки Структуры данных *1000

Прогрессивный квадрат размера \(n\) — это матрица размера \(n \times n\). Максим выбирает три натуральных числа \(a_{1,1}\), \(c\) и \(d\) и строит прогрессивный квадрат по следующим правилам:

\(\)a_{i+1,j} = a_{i,j} + c\(\)

\(\)a_{i,j+1} = a_{i,j} + d\(\)

Например, если \(n = 3\), \(a_{1,1} = 1\), \(c=2\) и \(d=3\), то прогрессивный квадрат выглядит следующим образом:

\(\) \begin{pmatrix} 1 & 4 & 7 \\ 3 & 6 & 9 \\ 5 & 8 & 11 \end{pmatrix} \(\)

В прошлом месяце Максим построил прогрессивный квадрат и запомнил значения \(n\), \(c\) и \(d\). Недавно он нашёл массив \(b\) из \(n^2\) целых чисел, идущих в случайном порядке и хочет убедиться, что эти элементы являются элементами того самого квадрата.

Можно показать, что при любых значениях \(n\), \(a_{1,1}\), \(c\) и \(d\) существует ровно один прогрессивный квадрат, удовлетворяющий всем правилам.

Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le {10} ^ 4\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(c\) и \(d\) (\(2 \le n \le 500\), \(1 \le c, d \le 10^6\)) — размер квадрата и значения \(c\) и \(d\), описанные в условии.

Вторая строка каждого набора содержит \(n \cdot n\) целых чисел \(b_1, b_2, \dots, b_{n \cdot n}\) (\(1 \le b_i \le 10^9\)) — элементы, которые нашёл Максим.

Гарантируется, что сумма \(n ^ 2\) по всем наборам входных данных не превосходит \(25 \cdot {10} ^ 4\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите «YES», если прогрессивный квадрат для данных \(n\), \(c\) и \(d\) может быть составлен из элементов массива \(a\), в противном случае выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

D. Неточный поиск подперестановки

Структуры данных *1400

У Максима есть массив \(a\) из \(n\) целых чисел и массив \(b\) из \(m\) целых чисел (\(m \le n\)).

Максим считает массив \(c\) длины \(m\) хорошим, если элементы массива \(c\) можно переставить таким образом, чтобы не менее \(k\) из них совпали с элементами массива \(b\).

Например, если \(b = [1, 2, 3, 4]\) и \(k = 3\), то массивы \([4, 1, 2, 3]\) и \([2, 3, 4, 5]\) являются хорошими (их можно упорядочить следующим образом: \([1, 2, 3, 4]\) и \([5, 2, 3, 4]\)), а массивы \([3, 4, 5, 6]\) и \([3, 4, 3, 4]\) не являются хорошими.

Максим хочет выбрать в качестве элементов массива \(c\) каждый подотрезок массива \(a\) длины \(m\). Помогите Максиму посчитать, сколько выбранных массивов будут являться хорошими.

Иными словами, найдите количество позиций \(1 \le l \le n - m + 1\) таких, что элементы \(a_l, a_{l+1}, \dots, a_{l + m - 1}\) формируют хороший массив.

Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \le k \le m \le n \le 2 \cdot 10^5\)) — количество элементов в массивах \(a\) и \(b\), требуемое число совпадающих элементов.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — элементы массива \(a\). Элементы массива \(a\) не обязательно различные.

Третья строка каждого набора содержит \(m\) целых чисел \(b_1, b_2, \dots, b_m\) (\(1 \le b_i \le 10^6\)) — элементы массива \(b\). Элементы массива \(b\) не обязательно различные.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Аналогично, гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите количество хороших подотрезков массива \(a\).

Примечание

В первом примере все подотрезки являются хорошими.

Во втором примере хорошие подотрезки начинаются с позиций \(1\), \(2\) и \(3\).

В третьем примере хорошие подотрезки начинаются с позиций \(1\) и \(2\).

A. Игра Нины

Бинарный поиск жадные алгоритмы игры Перебор Структуры данных *800

Нина придумала новую игру, основанную на возрастающей последовательности целых чисел \(a_1, a_2, \ldots, a_k\).

В этой игре, изначально \(n\) игроков встают в ряд. В каждом раунде происходит следующее:

  • Нина находит \(a_1\)-го, \(a_2\)-го, \(\ldots\), \(a_k\)-го игроков в ряду. Они покидают игру одновременно. Если игру должен покинуть \(i\)-й игрок в ряду, но в ряду меньше \(i\) игроков, этот игрок пропускается.

Как только в некотором раунде никто не покинул игру, все игроки, находящиеся в игре в данный момент, объявляются победителями.

Например, рассмотрим игру с \(a=[3, 5]\) и \(n=5\) игроками. Пусть игроков зовут игрок A, игрок B, \(\ldots\), игрок E в том порядке, в котором они выстроились изначально. Тогда,

  • Перед первым раундом, порядок игроков в ряду ABCDE. Нина находит \(3\)-го и \(5\)-го игроков в ряду. Это игроки C и E. Они покидают игру в первом раунде.
  • Теперь порядок игроков ABD. Нина находит \(3\)-го и \(5\)-го игроков в ряду. \(3\)-й игрок это игрок D и в ряду нет \(5\)-го игрока. Поэтому только игрок D покидает игру во втором раунде.
  • В третьем раунде никто не покидает игру, поэтому после этого раунда игра заканчивается.
  • Игроки A и B объявляются победителями.

Нина пока не решила, сколько игроков будут принимать участие в игре. Она даст вам \(q\) целых чисел \(n_1, n_2, \ldots, n_q\), а вы должны ответить на следующий вопрос для всех \(1 \le i \le q\) независимо:

  • Сколько игроков будут объявлены победителями, если изначально в игре будут принимать участие \(n_i\) игроков?
Входные данные

В первой строке дано одно целое число \(t\) (\(1 \le t \le 250\)) — количество наборов входных данных.

В первой строке даны два целых числа \(k\) и \(q\) (\(1 \le k, q \le 100\)) — длина последовательности \(a\) и количество значений \(n_i\), для которых вы должны решить задачу.

Во второй строке даны \(k\) целых чисел \(a_1,a_2,\ldots,a_k\) (\(1\leq a_1<a_2<\ldots<a_k\leq 100\)) — последовательность \(a\).

В третьей строке даны \(q\) целых чисел \(n_1,n_2,\ldots,n_q\) (\(1\leq n_i \leq 100\)).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел: \(i\)-е (\(1\le i \le q\)) из них должно быть равно количеству игроков, которые будут объявлены победителями, если изначально в игре будет принимать участие \(n_i\) игроков.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных при \(n=1\), единственный игрок остаётся в игре после первого раунда. После этого, игра заканчивается и он объявляется победителем.

F. Нина и игра в баскетбол

графы Конструктив снм сортировки Структуры данных *3000

Нина тренирует свою команду по баскетболу. Команда Нины состоит из \(n\) игроков, пронумерованных от \(1\) до \(n\). У \(i\)-го игрока есть интервал рук \([l_i,r_i]\). Два игрока \(i\) и \(j\) (\(i \neq j\)) могут передавать мяч друг другу, только если \(|i-j|\in[l_i+l_j,r_i+r_j]\) (здесь \(|x|\) обозначает абсолютное значение \(x\)).

Нина хочет проверить готовность своей команды. Для этого она проведет несколько раундов передач.

  • В каждом раунде Нина выберет последовательность игроков \(p_1,p_2,\ldots,p_m\) такую, что игроки \(p_i\) и \(p_{i+1}\) могут передавать мяч друг другу для всех \(1 \le i < m\). Длина последовательности \(m\) может быть выбрана Ниной. Каждый игрок может появиться в последовательности \(p_1,p_2,\ldots,p_m\) несколько раз или вообще не появиться в ней.
  • Затем Нина бросит мяч игроку \(p_1\), игрок \(p_1\) передаст мяч игроку \(p_2\) и так далее... Игрок \(p_m\) выбросит мяч за пределы баскетбольного поля, так что его больше нельзя будет использовать.

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

Входные данные

В первой строке дано одно целое число \(t\) (\(1 \le t \le 2\cdot 10^5\)) — количество наборов входных данных.

В первой строке дано одно целое число \(n\) (\(1 \le n \le 2\cdot 10^6\)) — количество игроков.

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

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(2\cdot 10^6\).

Выходные данные

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

Примечание

В первых двух наборах входных данных Нина может провести два раунда передач: один с \(p=[1]\) и один с \(p=[2]\). Можно показать, что одного раунда передач недостаточно, поэтому ответ \(2\).

В третьем наборе входных данных Нина может провести два раунда передач: один с \(p=[1,3]\) и один с \(p=[2]\). Игрок \(1\) может передать мяч игроку \(3\), так как \(|3-1|=2 \in [1+1,3+3]\). Можно показать, что одного раунда передач недостаточно, поэтому ответ \(2\).

F1. Несоответствие частот (простая версия)

Бинарный поиск Деревья разделяй и властвуй Структуры данных Теория вероятностей хэши *2600

Это простая версия задачи. Единственное отличие между версиями — ограничение на \(k\). Вы можете делать взломы, только если обе версии задачи решены.

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

Вам дано \(q\) запросов. В каждом запросе дается \(5\) целых чисел, \(u_1, v_1, u_2, v_2, k\). Обозначим количество вершин со значением \(c\) на пути \(u_1 \rightarrow v_1\) как \(x_c\), а количество вершин со значением \(c\) на пути \(u_2 \rightarrow v_2\) как \(y_c\). Пусть существует \(z\) таких значений \(c\), что \(x_c \neq y_c\). Тогда выведите любые \(\min(z, k)\) таких значений в любом порядке.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество вершин в дереве.

Следующая строка содержит \(n\) целых чисел, \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^5\)) — значения, записанные на каждой вершине дерева.

Затем следует \(n - 1\) строка. Каждая строка содержит два целых числа \(u\) и \(v\) (\(1 \leq u, v \leq n, u \neq v\)), обозначающие ребро дерева. Гарантируется, что заданные ребра образуют дерево.

Следующая строка содержит одно целое число \(q\) (\(1 \leq q \leq 10^5\)) — количество запросов.

Затем следуют \(q\) строк. Каждая строка содержит пять целых чисел \(u_1, v_1, u_2, v_2, k\) (\(1 \leq u_1, v_1, u_2, v_2 \leq n\), \(k = 1\)).

Выходные данные

Для каждого запроса выведите ответ на отдельной строке. Для каждого запроса сначала выведите \(\min(z, k)\), а затем в той же строке выведите любые \(\min(z, k)\) значений, которые встречаются разное количество раз на путях, в любом порядке.

Примечание

Для \(1\) запроса первый путь: \(1 \rightarrow 2 \rightarrow 4\), на котором встречается мультинабор значений \(\{5, 2, 4\}\). На втором пути \(4 \rightarrow 2 \rightarrow 5\) мы имеем мультинабор \(\{4, 2, 3\}\). Два числа — \(3\) и \(5\) встречаются разное количество раз, поэтому мы выводим одно из них.

Во \(2\) запросе пути совпадают, поэтому выводим \(0\).

В \(3\) запросе первый путь — только вершина \(5\), что приводит к мультинабору \(\{3\}\), а второй путь — \(4 \rightarrow 2 \rightarrow 1 \rightarrow 3\) дает \(\{4, 2, 5, 3\}\). Числа \(5\), \(2\) и \(4\) встречаются разное количество раз.

F2. Несоответствие частот (сложная версия)

Бинарный поиск Деревья поиск в глубину и подобное Структуры данных Теория вероятностей хэши *2700

Это сложная версия задачи. Единственное отличие между версиями — ограничение на \(k\). Вы можете делать взломы, только если обе версии задачи решены.

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

Вам дано \(q\) запросов. В каждом запросе дается \(5\) целых чисел, \(u_1, v_1, u_2, v_2, k\). Обозначим количество вершин со значением \(c\) на пути \(u_1 \rightarrow v_1\) как \(x_c\), а количество вершин со значением \(c\) на пути \(u_2 \rightarrow v_2\) как \(y_c\). Пусть существует \(z\) таких значений \(c\), что \(x_c \neq y_c\). Тогда выведите любые \(\min(z, k)\) таких значений в любом порядке.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество вершин в дереве.

Следующая строка содержит \(n\) целых чисел, \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^5\)) — значения, записанные на каждой вершине дерева.

Затем следует \(n - 1\) строка. Каждая строка содержит два целых числа \(u\) и \(v\) (\(1 \leq u, v \leq n, u \neq v\)), обозначающие ребро дерева. Гарантируется, что заданные ребра образуют дерево.

Следующая строка содержит одно целое число \(q\) (\(1 \leq q \leq 10^5\)) — количество запросов.

Затем следуют \(q\) строк. Каждая строка содержит пять целых чисел \(u_1, v_1, u_2, v_2, k\) (\(1 \leq u_1, v_1, u_2, v_2 \leq n\), \(1 \leq k \leq 10\)).

Выходные данные

Для каждого запроса выведите ответ на отдельной строке. Для каждого запроса сначала выведите \(\min(z, k)\), а затем в той же строке выведите любые \(\min(z, k)\) значений, которые встречаются разное количество раз на путях, в любом порядке.

Примечание

Для \(1\) запроса первый путь: \(1 \rightarrow 2 \rightarrow 4\), на котором встречается мультинабор значений \(\{5, 2, 4\}\). На втором пути \(4 \rightarrow 2 \rightarrow 5\) мы имеем мультинабор \(\{4, 2, 3\}\). Два числа — \(3\) и \(5\) встречаются разное количество раз, поэтому мы выводим оба числа.

Во \(2\) запросе пути совпадают, поэтому выводим \(0\).

В \(3\) запросе у нас те же пути, что и в запросе \(1\), но нам нужно вывести только \(1\) значение, поэтому мы выводим \(5\).

В \(4\) запросе первый путь — только вершина \(5\), что приводит к мультинабору \(\{3\}\), а второй путь — \(4 \rightarrow 2 \rightarrow 1 \rightarrow 3\) дает \(\{4, 2, 5, 3\}\). Числа \(5\), \(2\) и \(4\) встречаются разное количество раз.

D. Следующая хорошая строка

жадные алгоритмы Строки Структуры данных хэши *2800

В задачах на строки часто требуется найти строку, обладающую какими-то особыми свойствами. В очередной раз авторам задачи было лень придумывать название для такой строки, поэтому они назвали ее хорошей. Строка называется хорошей, если в ней нет подстрок-палиндромов длины большей или равной d.

Дана строка s, состоящая только из строчных латинских букв. Найдите хорошую строку t длины |s|, состоящую из строчных латинских букв, и лексикографически большую, чем s. Из всех таких строк строка t должна быть лексикографически минимальной.

Непустую строку s[a ... b] = sasa + 1... sb (1 ≤ a ≤ b ≤ |s|) будем называть подстрокой строки s = s1s2... s|s|.

Непустая строка s = s1s2... sn называется палиндромом, если для всех i от 1 до n выполняется si = sn - i + 1. Другими словами, палиндромы читаются одинаково в обоих направлениях.

Строка x = x1x2... x|x| лексикографически больше строки y = y1y2... y|y|, если либо |x| > |y| и x1 = y1, x2 = y2, ... , x|y| = y|y|, либо существует такое число r (r < |x|, r < |y|), что x1 = y1, x2 = y2, ... , xr = yr и xr + 1 > yr + 1. Символы в строках сравниваются как их ASCII-коды.

Входные данные

В первой строке записано целое число d (1 ≤ d ≤ |s|).

Во второй строке записана непустая строка s длины не более 4·105 символов, состоящая из строчных латинских букв.

Выходные данные

Выведите следующую после s в лексикографическом порядке хорошую строку той же длины, состоящую только из строчных латинских букв. Если такой строки не существует, выведите «Impossible» (без кавычек).

F. Конференция

Потоки Структуры данных *3300

Вас попросили организовать очень важную конференцию об искусстве. Первый шаг — выбрать даты.

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

Вы опросили \(n\) потенциальных лекторов по поводу их доступности. Лектор \(i\) указал, что сможет выступить в любой день с \(l_i\) по \(r_i\) включительно.

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

Для каждого \(k\) от \(1\) до \(n\) найдите, сколько есть способов выбрать отрезок из \(k\) подряд идущих дней в качестве дат конференции.

Входные данные

Первая строка содержит одно целое число \(n\) — число потенциальных лекторов (\(1 \le n \le 2 \cdot 10^5\)).

Каждая из следующих \(n\) строк содержит два целых числа \(l_i\) и \(r_i\) — отрезок доступных дней для \(i\)-го лектора (\(1 \le l_i \le r_i \le 2 \cdot 10^5\)).

Выходные данные

Выведите \(n\) целых чисел, где \(k\)-е число обозначает число способов выбрать отрезок из \(k\) подряд идущих дней в качестве дат конференции.

Примечание

В первом примере конференцию из одного дня можно устроить в любой из дней с \(1\) по \(6\). Конференцию из двух дней можно устроить с дня \(2\) по день \(3\), а также с дня \(4\) по день \(5\).

Во втором примере, несмотря на то, что сразу пятеро лекторов выразили желание выступить на конференции, все они доступны только в дни с \(1\) по \(3\), поэтому устроить конференцию длиннее трёх дней не выйдет.

C. Дерево Фенвика

битмаски Деревья дп Комбинаторика математика Перебор Структуры данных *2300

Пусть \(\operatorname{lowbit}(x)\) обозначает значение младшего двоичного бита \(x\), например, \(\operatorname{lowbit}(12)=4\), \(\operatorname{lowbit}(8)=8\).

Для массива \(a\) длины \(n\), если массив \(s\) длины \(n\) удовлетворяет условию \(s_k=\left(\sum\limits_{i=k-\operatorname{lowbit}(k)+1}^{k}a_i\right)\bmod 998\,244\,353\) для всех \(k\), то \(s\) называется Деревом Фенвика массива \(a\). Обозначим его как \(s=f(a)\).

Для целого положительного числа \(k\) и массива \(a\), \(f^k(a)\) определяется следующим образом:

\(\) f^k(a)= \begin{cases} f(a)&\textrm{если }k=1\\ f(f^{k-1}(a))&\textrm{иначе.}\\ \end{cases} \(\)

Вам дан массив \(b\) длины \(n\) и целое положительное число \(k\). Найдите массив \(a\), который удовлетворяет условию \(0\le a_i < 998\,244\,353\) и \(f^k(a)=b\). Можно доказать, что ответ всегда существует. Если существует несколько ответов, вы можете вывести любой из них.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых положительных числа \(n\) (\(1 \leq n \leq 2\cdot 10^5\)) и \(k\) (\(1\le k\le 10^9\)), обозначающих длину массива и количество раз выполнения функции \(f\).

Вторая строка каждого набора входных данных содержит массив \(b_1, b_2, \ldots, b_n\) (\(0\le b_i < 998\,244\,353\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую корректный массив \(a\) длины \(n\).

Примечание

Из первого набора входных данных видно, что \(f^1([1,1,1,1,1,1,1,1])=[1,2,1,4,1,2,1,8]\).

Во втором наборе входных данных видно, что \(f^2([1,2,3,4,5,6])=f^1([1,3,3,10,5,11])=[1,4,3,17,5,16]\).

F. Следующий и предыдущий

Перебор реализация Структуры данных *3200

Пусть \(p_1, \ldots, p_n\) — перестановка массива \([1, \ldots, n]\).

Пусть \(q\)-последовательность \(p\) — это перестановка \([1, q]\), элементы которой расположены в том же относительном порядке, что и в \(p_1, \ldots, p_n\). То есть мы извлекаем из \(p\) в исходном порядке все элементы, которые не превосходят \(q\), и они составляют \(q\)-последовательность \(p\).

Для заданного массива \(a\) пусть \(pre(i)\) — наибольшее значение, удовлетворяющее \(pre(i) < i\) и \(a_{pre(i)} > a_i\). Если такого значения не существует, пусть \(pre(i) = -10^{100}\). Пусть \(nxt(i)\) — наименьшее значение, удовлетворяющее \(nxt(i) > i\) и \(a_{nxt(i)} > a_i\). Если оно не существует, пусть \(nxt(i) = 10^{100}\).

Для каждого \(q\) такого, что \(1 \leq q \leq n\), пусть \(a_1, \ldots, a_q\) — \(q\)-последовательность \(p\). Для каждого \(i\), такого, что \(1 \leq i \leq q\), \(pre(i)\) и \(nxt(i)\) будут вычислены в соответствии с условиями выше. Затем вам будут даны некоторые целые значения \(x\), и для каждого из них вы должны вычислить \(\sum\limits_{i=1}^q \min(nxt(i) - pre(i), x)\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке находится одно целое число \(n\) (\(1 \leq n \leq 3\cdot 10^5\)) — длина перестановки.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_1, \ldots, p_n\) (\(1 \leq p_i \leq n\)) — начальную перестановку.

Затем, для каждого \(q\) такого, что \(1 \leq q \leq n\), в порядке возрастания, вам будет дано целое число \(k\) (\(0 \leq k \leq 10^5\)), представляющее собой количество запросов для \(q\)-последовательности. Затем в строке следуют \(k\) чисел: каждое из них является значением \(x\) для одного запроса (\(1 \leq x \leq q\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3\cdot 10^5\), а сумма \(k\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, для каждого запроса выведите одну строку с целым числом — ответом на запрос.

Примечание

\(1\)-последовательность — это \([1]\), причем \(pre=[-10^{100}]\), \(nxt=[10^{100}]\). \(ans(1)=\min(10^{100}-(-10^{100}),1)=1\).

\(5\)-последовательностью является \([1,4,3,2,5]\), причем \(pre=[-10^{100},-10^{100},2,3,-10^{100}]\), \(nxt=[2,5,5,5,10^{100}]\). \(ans(1)=5,ans(2)=10,ans(3)=14\).

F. Отрезки с равным XOR

Бинарный поиск Структуры данных *1800

Давайте назовем массив \(x_1,\dots,x_m\) интересным, если возможно разделить массив на \(k>1\) частей так, чтобы побитовое исключающее ИЛИ(XOR) значений из каждой части было равно.

Формально, вам нужно разделить массив \(x\) на \(k\) последовательных отрезков, причем каждый элемент \(x\) должен принадлежать ровно \(1\) отрезку. Пусть XOR элементов из каждой части равны \(y_1,\dots,y_k\), соответственно. Тогда должно выполняться условие \(y_1=y_2=\dots=y_k\).

Например, если \(x = [1, 1, 2, 3, 0]\), вы можете разделить его следующим образом: \([\color{blue}1], [\color{green}1], [\color{red}2, \color{red}3, \color{red}0]\). Действительно, \(\color{blue}1=\color{green}1=\color{red}2 \oplus \color{red}3\oplus \color{red}0\).

Вам дан массив \(a_1,\dots,a_n\). Ваша задача — ответить на \(q\) запросов:

  • Для фиксированных \(l\), \(r\) определить, является ли подмассив \(a_l,a_{l+1},\dots,a_r\) интересным.
Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(q\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le q \le 2 \cdot 10^5\)) — количество элементов в массиве и количество запросов соответственно.

Следующая строка содержит \(n\) целых чисел \(a_1,\dots,a_n\) (\(0 \le a_i < 2^{30}\)) — элементы массива.

Следующие \(q\) строк содержат по два целых числа \(l\) и \(r\) (\(1 \le l < r \le n\)) описывающие запрос.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Гарантируется, что сумма \(q\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите «YES», если подмассив интересный, и «NO» в противном случае.

Вы можете выводить «Yes» и «No» в любом регистре (например, строки «yES», «yes» и «Yes» будут распознаны как правильные ответы).

Примечание

Объяснение для первого примера:

Первый запрос описан в условии.

Во втором запросе мы должны разделить \([1,2,3]\). Возможное разделение — \([1,2],[3]\), так как \(1\oplus 2=3\).

Можно показать, что для запросов \(3,4,5\) подмассивы не интересны.

G1. Деление + LCP (простая версия)

Бинарный поиск дп Строки строковые суфф. структуры Структуры данных хэши *1900

Это простая версия задачи. В этой версии \(l=r\).

Дана строка \(s\). Для фиксированного \(k\) рассмотрим деление \(s\) на ровно \(k\) непрерывных подстрок \(w_1,\dots,w_k\). Пусть \(f_k\) — максимально возможное \(LCP(w_1,\dots,w_k)\) среди всех делений.

\(LCP(w_1,\dots,w_m)\) — это длина самого длинного общего префикса строк \(w_1,\dots,w_m\).

Например, если \(s=abababcab\) и \(k=4\), то возможное деление \(\color{red}{ab}\color{blue}{ab}\color{orange}{abc}\color{green}{ab}\). \(LCP(\color{red}{ab},\color{blue}{ab},\color{orange}{abc},\color{green}{ab})\) равно \(2\), так как \(ab\) — самый длинный общий префикс этих четырех строк. Обратите внимание, что каждая подстрока состоит из непрерывного сегмента символов, и каждый символ принадлежит ровно одной подстроке.

Ваша задача — найти \(f_l,f_{l+1},\dots,f_r\). В этой версии \(l=r\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого теста содержит три целых числа \(n\), \(l\) и \(r\) (\(1 \le l = r \le n \le 2 \cdot 10^5\)) — длина строки и заданный диапазон.

Вторая строка каждого набора содержит строку \(s\) из \(n\) символов, все символы — строчные буквы английского алфавита.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(r-l+1\) значений: \(f_l,\dots,f_r\).

Примечание

В первом примере \(n=k\), поэтому единственное деление \(aba\)\(\color{red}a\color{blue}b\color{orange}a\). Ответ — ноль, потому что у этих строк нет общего префикса.

Во втором примере единственное деление — \(\color{red}a\color{blue}a\color{orange}a\). Их самый длинный общий префикс равен одному.

G2. Деление + LCP (сложная версия)

Бинарный поиск дп математика Перебор Строки строковые суфф. структуры Структуры данных хэши *2200

Это cложная версия задачи. В этой версии \(l\le r\).

Дана строка \(s\). Для фиксированного \(k\) рассмотрим деление \(s\) на ровно \(k\) непрерывных подстрок \(w_1,\dots,w_k\). Пусть \(f_k\) — максимально возможное \(LCP(w_1,\dots,w_k)\) среди всех делений.

\(LCP(w_1,\dots,w_m)\) — это длина самого длинного общего префикса строк \(w_1,\dots,w_m\).

Например, если \(s=abababcab\) и \(k=4\), то возможное деление \(\color{red}{ab}\color{blue}{ab}\color{orange}{abc}\color{green}{ab}\). \(LCP(\color{red}{ab},\color{blue}{ab},\color{orange}{abc},\color{green}{ab})\) равно \(2\), так как \(ab\) — самый длинный общий префикс этих четырех строк. Обратите внимание, что каждая подстрока состоит из непрерывного сегмента символов, и каждый символ принадлежит ровно одной подстроке.

Ваша задача — найти \(f_l,f_{l+1},\dots,f_r\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого теста содержит три целых числа \(n\), \(l\) и \(r\) (\(1 \le l \le r \le n \le 2 \cdot 10^5\)) — длина строки и заданный диапазон.

Вторая строка каждого набора содержит строку \(s\) из \(n\) символов, все символы — строчные буквы английского алфавита.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(r-l+1\) значений: \(f_l,\dots,f_r\).

D. Игра в магазине

жадные алгоритмы математика сортировки Структуры данных *1900

Алиса и Боб играют в игру в магазине. В магазине есть \(n\) предметов; каждый предмет имеет два параметра: \(a_i\) (цена предмета для Алисы) и \(b_i\) (цена предмета для Боба).

Алиса хочет выбрать подмножество (возможно, пустое) предметов и купить их. После этого Боб делает следующее:

  • если Алиса купила меньше \(k\) предметов, Боб может взять их все бесплатно;
  • в противном случае, он возьмет \(k\) предметов, купленные Алисой, бесплатно (Боб сам выбирает, какие \(k\) предметов это будут), а остальные выбранные предметы Боб купит у Алисы и заплатит \(b_i\) за \(i\)-й предмет.

Прибыль Алисы равна \(\sum\limits_{i \in S} b_i - \sum\limits_{j \in T} a_j\), где \(S\) — множество предметов, которые Боб покупает у нее, а \(T\) — множество предметов, которые она покупает в магазине. Другими словами, прибыль Алисы — это разность между тем, сколько Боб платит ей, и тем, сколько она платит за покупку предметов.

Алиса хочет максимизировать свою прибыль, Боб хочет минимизировать прибыль Алисы. Ваша задача — посчитать прибыль Алисы, если и Алиса, и Боб действуют оптимально.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\); \(0 \le k \le n\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^9\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных Алисе следует купить \(2\)-й предмет и продать его Бобу, тогда ее прибыль составит \(2 - 1 = 1\).

Во втором наборе входных данных Алисе следует купить предметы \(1\), \(2\) и \(3\); затем Боб берет \(1\)-й предмет бесплатно и платит за \(2\)-й и \(3\)-й предметы. Прибыль Алисы составит \((3+2) - (1+2+1) = 1\). Боб мог бы взять \(2\)-й предмет бесплатно; это не изменит прибыль Алисы. Боб не будет брать \(3\)-й предмет бесплатно, так как тогда прибыль Алисы будет равна \(2\).

E. Уникальный массив

Бинарный поиск дп жадные алгоритмы разделяй и властвуй Структуры данных *2400

Задан целочисленный массив \(a\) размера \(n\). Подмассивом массива \(a\) назовем его непрерывную подпоследовательность (то есть массив \([a_l, a_{l+1}, \dots, a_r]\) для некоторых \(l\) и \(r\), удовлетворяющих условию \(1 \le l < r \le n\)). Назовем подмассив уникальным, если в нем есть целое число, которое встречается ровно один раз.

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

Ваша задача — посчитать минимальное количество вышеописанных операций, чтобы все подмассивы массива \(a\) стали уникальными.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество вышеописанных операций, чтобы все подмассивы массива \(a\) стали уникальными.

Примечание

Во втором наборе входных данных можно заменить \(1\)-й и \(3\)-й элемент, например, следующим образом: \([3, 4, 1, 4]\).

В третьем наборе входных данных можно заменить \(4\)-й элемент, например, следующим образом: \([3, 1, 2, 3, 2]\).

G. XOUR

снм сортировки Структуры данных *1700

Вам дан массив \(a\), состоящий из \(n\) неотрицательных целых чисел.

Вы можете поменять местами элементы на позициях \(i\) и \(j\), если \(a_i~\mathsf{XOR}~a_j < 4\), где \(\mathsf{XOR}\) — это побитовая операция XOR.

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

Массив \(x\) лексикографически меньше массива \(y\), если на первой позиции, где \(x\) и \(y\) отличаются, \(x_i < y_i\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \leq n \leq 2\cdot10^5\)) — длина массива.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_i\) (\(0 \leq a_i \leq 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел — лексикографически наименьший массив, который можно получить любым количеством обменов.

Примечание

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

Во втором примере вы можете поменять местами \(2\) и \(1\) (их \(\mathsf{XOR}\) равен \(3\)), \(7\) и \(5\) (их \(\mathsf{XOR}\) равен \(2\)), и \(7\) и \(6\) (их \(\mathsf{XOR}\) равен \(1\)), чтобы получить лексикографически наименьший массив.

B. Кот, Лиса и одинокий массив

Бинарный поиск битмаски жадные алгоритмы математика Структуры данных *1300

Сегодня Кот и Лиса нашли массив \(a\), состоящий из \(n\) целых неотрицательных чисел.

Определим одиночество массива \(a\) как наименьшее целое положительное число \(k\) (\(1 \le k \le n\)) такое, что для любых двух целых положительных чисел \(i\) и \(j\) (\(1 \leq i, j \leq n - k +1\)) выполняется \(\)a_i | a_{i+1} | \ldots | a_{i+k-1} = a_j | a_{j+1} | \ldots | a_{j+k-1},\(\) где \(x | y\) обозначает операцию побитового ИЛИ чисел \(x\) и \(y\). Другими словами, побитовое ИЛИ любых \(k\) подряд идущих элементов совпадает. Заметьте, что одиночество массива \(a\) определено корректно, так как при \(k = n\) условие выполняется.

Кот и Лиса хотят узнать, насколько одинок массив \(a\). Помогите им вычислить одиночество найденного массива.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4 \)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i < 2^{20}\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — одиночество данного массива.

Примечание

В первом примере одиночество массива с одним элементом равно \(1\), поэтому ответом будет \(1\).

Во втором примере побитовое ИЛИ каждого подмассива длины \(k = 1\) равняется \(2\), поэтому одиночество всего массива равно \(1\).

В седьмом примере верно, что \((0 | 1 | 3) = (1 | 3 | 2) = (3 | 2 | 2) = (2 | 2 | 1) = (2 | 1 | 0) = (1 | 0 | 3) = 3\), поэтому условие выполняется для \(k = 3\). Можно убедиться, что условие не выполняется при любом меньшем \(k\), поэтому ответ действительно равен \(3\).

C. Красивые пары троек

Комбинаторика Структуры данных *1400

Поликарпу подарили массив \(a\) из \(n\) целых чисел. Ему очень нравятся тройки чисел, поэтому для каждого \(j\) (\(1 \le j \le n - 2\)) он выписал тройку из элементов \([a_j, a_{j + 1}, a_{j + 2}]\).

Поликарп считает пару из троек \(b\) и \(c\) красивой, если они различаются ровно в одной позиции, то есть выполняется одно из следующих условий:

  • \(b_1 \ne c_1\) и \(b_2 = c_2\) и \(b_3 = c_3\);
  • \(b_1 = c_1\) и \(b_2 \ne c_2\) и \(b_3 = c_3\);
  • \(b_1 = c_1\) и \(b_2 = c_2\) и \(b_3 \ne c_3\).

Найдите количество красивых пар троек среди выписанных троек \([a_j, a_{j + 1}, a_{j + 2}]\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — элементы массива.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество красивых пар троек среди пар вида \([a_j, a_{j + 1}, a_{j + 2}]\).

Обратите внимание, что ответ может не умещаться в 32-битные типы данных.

Примечание

В первом примере \(a = [3, 2, 2, 2, 3]\), Поликарп выпишет следующие тройки:

  1. \([3, 2, 2]\);
  2. \([2, 2, 2]\);
  3. \([2, 2, 3]\).
Красивыми парами являются тройка \(1\) с тройкой \(2\) и тройка \(2\) с тройкой \(3\).

В третьем примере \(a = [1, 2, 3, 2, 2, 3, 4, 2]\), Поликарп выпишет следующие тройки:

  1. \([1, 2, 3]\);
  2. \([2, 3, 2]\);
  3. \([3, 2, 2]\);
  4. \([2, 2, 3]\);
  5. \([2, 3, 4]\);
  6. \([3, 4, 2]\);
Красивыми парами являются тройка \(1\) с тройкой \(4\), тройка \(2\) с тройкой \(5\), тройка \(3\) с тройкой \(6\).

F. Игра с отрезанием

Бинарный поиск Перебор реализация сортировки Структуры данных *1900

Алиса и Боб снова играли в игру. У них есть клетчатое поле размера \(a \times b\) (\(1 \le a, b \le 10^9\)), на котором расположены \(n\) фишек, в каждой клетке может быть не более одной фишки. Клетка на пересечении \(x\)-й строки и \(y\)-го столбца имеет координаты \((x, y)\).

Первой ходила Алиса, игроки ходили по очереди. На каждом ходу игрок мог отрезать несколько (но не все) строк или столбцов с начала или конца оставшегося поля и получить очко за каждую фишку, которая находилась на отрезанной части поля. Каждый ход может быть описан символом 'U', 'D', 'L' или 'R' и числом \(k\):

  • Если символ равен 'U', то будут отрезаны \(k\) первых строк среди оставшихся;
  • Если символ равен 'D', то будут отрезаны \(k\) последних строк среди оставшихся;
  • Если символ равен 'L', то будут отрезаны \(k\) первых столбцов среди оставшихся;
  • Если символ равен 'R', то будут отрезаны \(k\) последних столбцов среди оставшихся.

По изначальному состоянию поля и ходам игроков определите количество очков, заработанное Алисой и Бобом соответственно.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит четыре целых числа \(a\), \(b\), \(n\) и \(m\) (\(2 \le a, b \le 10^9\), \(1 \le n, m \le 2 \cdot 10^5\)) — размеры поля, количество фишек и количество ходов.

Следующие \(n\) строк содержат по два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i \le a\), \(1 \le y_i \le b\)) — координаты фишек. Все пары координат различны.

Следующие \(m\) строк содержат символ \(c_j\) и число \(k_j\) — описание \(j\)-го хода. Гарантируется, что \(k\) меньше количества строк/столбцов текущего поля. То есть игрок не мог отрезать всё оставшееся поле на своём ходу.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(2 \cdot 10^5\). Гарантируется, что сумма значений \(m\) по всем наборам входных данных в тесте не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите два целых числа — количество очков, заработанное Алисой и Бобом соответственно.

Примечание

Ниже показана игра из первого примера:

На своём ходу Алиса отрезала \(2\) строки снизу и получила \(2\) очка, после Боб отрезал \(1\) столбец справа и получил одно очко. Обратите внимание, что если бы Боб отрезал \(1\) строку снизу, он также получил бы \(1\) очко.

G. Деньги теперь покупают меньше счастья

жадные алгоритмы сортировки Структуры данных *2000

Никогда нельзя купить достаточно счастья, поэтому мы снова здесь! В этой версии вы можете купить только \(h_i = 1\) единицу счастья каждый месяц, но количество месяцев увеличено в разы. Мы находимся в области квантового счастья и временного растяжения.

Будучи физиком, Чарли любит планировать свою жизнь в простых и точных терминах.

В течение следующих \(m\) месяцев, начиная с нулевой суммы денег, Чарли будет усердно работать и зарабатывать \(x\) фунтов в месяц. Для \(i\)-го месяца \((1 \le i \le m)\) будет одна возможность заплатить стоимость \(c_i\) фунтов за получение одной единицы счастья. Вы не можете купить более одной единицы счастья каждый месяц.

Запрещено брать в долг. Деньги, заработанные в \(i\)-м месяце, могут быть потрачены только в более поздний \(j\)-й месяц (\(j>i\)).

Поскольку физики не пишут код, помогите Чарли найти максимально достижимое количество единиц счастья.

Входные данные

Первая строка ввода содержит \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа, \(m\) и \(x\) (\(1 \le m \le 2 \cdot 10^5\), \(1 \le x \le 10^3\)) — общее количество месяцев и ежемесячная зарплата.

Вторая строка каждого набора содержит \(m\) целых чисел \(c_1, c_2, \dots, c_m\) (\(1 \leq c_i \leq 10^3\)) — стоимость одной единицы счастья для каждого месяца.

Гарантируется, что сумма \(m\) по всем наборам входных данных теста не превышает \(2 \cdot 10^5\).

Выходные данные

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

E. Цепные запросы

Бинарный поиск Деревья поиск в глубину и подобное реализация Структуры данных *2100

Вам дано дерево из \(n\) вершин, пронумерованных от \(1\) до \(n\). Изначально все вершины окрашены в белый или черный цвет.

Вам предлагается выполнить \(q\) запросов:

  • «u» — поменять цвет вершины \(u\) (если она была белой, то поменять на черную и наоборот).

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1\leq n,q\leq 2\cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(c_1,c_2,\ldots,c_n\) (\(c_i \in \{ \mathtt{0}, \mathtt{1} \}\)) — изначальные цвета вершин. \(c_i\) обозначает цвет вершины \(i\), где \(\mathtt{0}\) обозначает белый цвет, а \(\mathtt{1}\) — черный.

Далее следует \(n - 1\) строка, каждая из которых содержит по два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i,y_i \le n\)), обозначающих ребро между вершинами \(x_i\) и \(y_i\). Гарантируется, что эти ребра образуют дерево.

Следующие \(q\) строк содержат по одному целому числу \(u_i\) (\(1 \le u_i \le n\)), указывающему на то, что цвет вершины \(u_i\) необходимо поменять.

Гарантируется, что и сумма \(n\), и сумма \(q\) по всем наборам входных данных не превосходят \(2\cdot 10^5\).

Выходные данные

Для каждого запроса выведите «Yes», если черные вершины образуют цепочку, и «No» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Во втором наборе входных данных цвета вершин следующие:

Исходное дерево:

Первый запрос меняет цвет вершины \(4\):

Второй запрос меняет цвет вершины \(3\):

Третий запрос меняет цвет вершины \(2\):

Четвертый запрос меняет цвет вершины \(5\):

D. Инвертируемые скобочные последовательности

Бинарный поиск Комбинаторика разделяй и властвуй реализация Структуры данных *2000

Правильная скобочная последовательность — это скобочная последовательность, которую можно превратить в корректное арифметическое выражение, вставив символы '1' и '+' между исходными символами. Например:

  • скобочные последовательности «()()» и «(())» — правильные (из них можно получить выражения «(1)+(1)» и «((1+1)+1)»);
  • скобочные последовательности «)(», «(» и «)» — неправильные.

Давайте определим инверсию скобочной последовательности следующим образом: заменить все скобки '(' на ')', и наоборот (все скобки ')' на '('). Например, строки «()((» и «)())» являются инверсиями друг друга.

Задана правильная скобочная последовательность \(s\). Ваша задача — посчитать количество таких пар целых чисел \((l,r)\) (\(1 \le l \le r \le |s|\)), что если заменить всю подстроку \(s\) с \(l\)-го символа по \(r\)-й символ (включительно) на ее инверсию, \(s\) все еще будет правильной скобочной последовательностью.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора содержит непустую правильную скобочную последовательность; она состоит только из символов '(' и/или ')'.

Дополнительное ограничение на входные данные: общая длина правильных скобочных последовательностей по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество пар \((l,r)\), удовлетворяющих условию задачи.

Примечание

В первом примере есть только одна пара:

  • \((2, 3)\): (()) \(\rightarrow\) ()().

Во втором примере подходящих пар нет.

В третьем примере есть три подходящих пары:

  • \((2, 3)\): ()()() \(\rightarrow\) (())();
  • \((4, 5)\): ()()() \(\rightarrow\) ()(());
  • \((2, 5)\): ()()() \(\rightarrow\) (()());

E. Разделяемые перестановки

Деревья жадные алгоритмы Комбинаторика математика поиск в глубину и подобное Структуры данных *2500

Изначально у нас был один массив — перестановка размера \(n\) (массив размера \(n\), где каждое целое число от \(1\) до \(n\) встречается ровно один раз).

Мы провели \(q\) операций. В ходе \(i\)-й операции мы сделали следующее:

  • выбрали любой из имеющихся у нас массивов размера хотя бы \(2\);
  • разделили его на две непустых части (префикс и суффикс);
  • записали два числа \(l_i\) и \(r_i\), где \(l_i\) — максимум в левой из полученных частей, а \(r_i\) — максимум в правой из полученных частей;
  • удалили массив, который мы разделили, из набора массивов, которые мы можем использовать, а вместо него добавили две полученных части массива.

Например, пусть изначально у нас был массив \([6, 3, 4, 1, 2, 5]\), и мы провели следующие операции:

  1. выбрали массив \([6, 3, 4, 1, 2, 5]\) и разделили его на \([6, 3]\) и \([4, 1, 2, 5]\). Затем мы записали \(l_1 = 6\) и \(r_1 = 5\), и в следующих операциях нам доступны массивы \([6, 3]\) и \([4, 1, 2, 5]\);
  2. выбрали массив \([4, 1, 2, 5]\) и разделили его на \([4, 1, 2]\) и \([5]\). Затем мы записали \(l_2 = 4\) и \(r_2 = 5\), и в следующих операциях нам доступны массивы \([6, 3]\), \([4, 1, 2]\) и \([5]\);
  3. выбрали массив \([4, 1, 2]\) и разделили его на \([4]\) и \([1, 2]\). Затем мы записали \(l_3 = 4\) и \(r_3 = 2\), и в следующих операциях нам доступны массивы \([6, 3]\), \([4]\), \([1, 2]\) и \([5]\).

Даны два целых числа \(n\) и \(q\), а также две последовательности \([l_1, l_2, \dots, l_q]\) и \([r_1, r_2, \dots, r_q]\). Перестановку размера \(n\) назовем подходящей, если можно провести на ней \(q\) операций и получить заданные последовательности \([l_1, l_2, \dots, l_q]\) и \([r_1, r_2, \dots, r_q]\).

Посчитайте количество подходящих перестановок.

Входные данные

В первой строке заданы два целых числа \(n\) и \(q\) (\(1 \le q < n \le 3 \cdot 10^5\)).

Во второй строке заданы \(q\) целых чисел \(l_1, l_2, \dots, l_q\) (\(1 \le l_i \le n\)).

В третьей строке заданы \(q\) целых чисел \(r_1, r_2, \dots, r_q\) (\(1 \le r_i \le n\)).

Дополнительное ограничение на входные данные: существует хотя бы одна перестановка, по которой можно получить заданные последовательности \([l_1, l_2, \dots, l_q]\) и \([r_1, r_2, \dots, r_q]\).

Выходные данные

Выведите одно целое число — количество подходящих перестановок, взятое по модулю \(998244353\).

F. Удаление мостов

Деревья дп жадные алгоритмы поиск в глубину и подобное сортировки Структуры данных *2800

Вам дано корневое дерево, состоящее из \(n\) вершин, пронумерованных от \(1\) до \(n\). Вершина \(1\) является корнем. Кроме того, у корня есть только один ребенок.

Требуется добавить ровно \(k\) рёбер в дерево (возможно, кратные рёбра и/или рёбра, уже существующие в дереве).

Напомним, что мост — это такое ребро, что после его удаления количество компонент связности в графе увеличивается. Таким образом, изначально все рёбра дерева являются мостами.

После добавления \(k\) рёбер некоторые изначальные рёбра дерева остаются мостами, а некоторые перестают ими быть. Необходимо удовлетворить два условия:

  • для каждого моста все рёбра дерева в поддереве нижней вершины этого моста также должны быть мостами;
  • количество мостов должно быть как можно меньше.

Решите задачу для всех значений \(k\) от \(1\) до \(n - 1\) и выведите наименьшее количество мостов.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)) — количество вершин дерева.

В каждой из следующих \(n - 1\) строк записаны два целых числа \(v\) и \(u\) (\(1 \le v, u \le n\)) — описание рёбер дерева. Гарантируется, что заданные рёбра образуют валидное дерево.

Дополнительное ограничение на входные данные: корень (вершина \(1\)) имеет ровно одного ребенка.

Сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n - 1\) целое число. Для каждого \(k\) от \(1\) до \(n - 1\) выведите наименьшее количество мостов, которые могут остаться после добавления \(k\) рёбер в дерево.

C. Никита и ТЧ

дп жадные алгоритмы математика Перебор сортировки Структуры данных теория чисел *1900

Никита — студент, увлеченный теорией чисел и алгоритмами. Он столкнулся с интересной задачей, связанной с массивом чисел.

Допустим, у Никиты есть массив целых чисел \(a\) длины \(n\). Назовём подпоследовательность\(^\dagger\) массива особенной, если её наименьшее общее кратное (НОК) не содержится в \(a\). НОК пустой подпоследовательности равен \(0\).

Никита задался вопросом: какова длина самой длинной особенной подпоследовательности массива \(a\)? Помогите ему ответить на этот важный вопрос!

\(^\dagger\) Последовательность \(b\) является подпоследовательностью \(a\), если \(b\) может быть получена из \(a\) путем удаления нескольких (возможно, нуля или всех) элементов, не изменяя порядок оставшихся элементов. Например, \([5,2,3]\) является подпоследовательностью \([1,5,7,8,2,4,3]\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2000\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2000\).

Выходные данные

Для каждого набора выведите одно целое число — максимальную длину особенной подпоследовательности \(a\).

Примечание

В первом наборе входных данных НОК любой непустой подпоследовательности будет содержаться в \(a\), поэтому ответ \(0\).

Во втором наборе входных данных можно взять подпоследовательность \([3, 2, 10, 1]\), ее НОК — число \(30\), которое не содержится в \(a\).

В третьем наборе входных данных можно взять подпоследовательность \([2, 3, 6, 100\,003]\), ее НОК — число \(600\,018\), которое не содержится в \(a\).

C. Манхэттенские перестановки

жадные алгоритмы Конструктив математика реализация Структуры данных *1300

Назовем манхэттенской величиной перестановки\(^{\dagger}\) \(p\) значение выражения \(|p_1 - 1| + |p_2 - 2| + \ldots + |p_n - n|\).

Например, для перестановки \([1, 2, 3]\) манхэттенская величина равна \(|1 - 1| + |2 - 2| + |3 - 3| = 0\), а для перестановки \([3, 1, 2]\) манхэттенская величина равна \(|3 - 1| + |1 - 2| + |2 - 3| = 2 + 1 + 1 = 4\).

Вам даны целые числа \(n\) и \(k\). Найдите такую перестановку \(p\) длины \(n\), что её манхэттенская величина равна \(k\) или определите, что такой перестановки не существует.

\(^{\dagger}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно число \(t\) (\(1 \leq t \leq 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^{5}, 0 \le k \le 10^{12}\)) — длина перестановки и необходимая манхэттенская величина.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^{5}\).

Выходные данные

Для каждого набора входных данных, если не существует подходящей перестановки, выведите «No». В противном случае в первой строке выведите «Yes», а во второй строке выведите \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)) — подходящую перестановку.

Если существует несколько решений, выведите любое из них.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных подходит перестановка \([3, 1, 2]\), её манхэттенская величина равна \(|3 - 1| + |1 - 2| + |2 - 3| = 2 + 1 + 1 = 4\).

Во втором наборе входных данных можно доказать, что не существует перестановки длины \(4\) с манхэттенской величиной \(5\).

В третьем наборе входных данных подходит перестановка \([1,2,3,4,5,6,7]\), её манхэттенская величина равна \(|1-1|+|2-2|+|3-3|+|4-4|+|5-5|+|6-6|+|7-7|=0\).

D. Выборы

жадные алгоритмы математика реализация Структуры данных *1600

В Берляндии проходят выборы. На выборах участвуют \(n\) кандидатов, пронумерованных от \(1\) до \(n\). У \(i\)-го из них есть \(a_i\) фанатов, которые проголосуют за него. Также дополнительно есть \(c\) людей, которые не определились с любимым кандидатом, назовем их неопределившимися. Неопределившиеся люди проголосуют за кандидата с наименьшим номером.

На выборах побеждает кандидат, который набрал максимальное количество голосов, а если максимальное количество голосов набрали несколько кандидатов, то среди таких побеждает кандидат с наименьшим номером.

Такие выборы вам показались слишком скучными и предсказуемыми, поэтому вы решили не допустить некоторых кандидатов к ним. Если вы не допустите кандидата с номером \(i\) к выборам, то все \(a_i\) его фанатов станут неопределившимися, и на выборах проголосуют за допущенного кандидата с наименьшим номером.

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(c\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le c \le 10^9\)) — количество кандидатов на выборах и количество неопределившихся людей.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — количество фанатов у каждого кандидата.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных:

  • Если допустить всех кандидатов, то кандидат с номером \(1\) наберёт \(3\) голоса (за него проголосует \(1\) неопределившийся человек), кандидат с номером \(2\) наберёт \(0\) голосов, кандидат с номером \(3\) наберёт \(3\) голоса. Таким образом, выиграет кандидат с номером \(1\) (он набрал столько же голосов, сколько кандидат \(3\), но его номер меньше), поэтому для него ответ равен \(0\).
  • Если не допустить кандидата с номером \(1\), то его \(2\) фаната станут неопределившимися. Тогда кандидат с номером \(2\) наберёт \(3\) голоса (за него проголосуют \(3\) неопределившихся человека) и кандидат с номером \(3\) наберёт \(3\) голоса. Таким образом, выиграет кандидат с номером \(2\) (он набрал столько же голосов, сколько кандидат \(3\), но его номер меньше), поэтому для него ответ равен \(1\).
  • Если не допустить кандидатов с номерами \(1\) и \(2\), то выиграет кандидат с номером \(3\), поэтому для него ответ равен \(2\).

Во втором наборе входных данных кандидат с номером \(1\) выиграет, если не допустить кандидата с номером \(2\).

E. Вычислительная машина

дп жадные алгоритмы Перебор реализация Структуры данных *2000

У Саши есть две бинарные строки \(s\) и \(t\) одинаковой длины \(n\), состоящие из символов 0 и 1.

Также есть вычислительная машина, которая умеет выполнять два вида операций с бинарными строками \(a\) и \(b\) одинаковой длины \(k\):

  1. Если \(a_{i} = a_{i + 2} =\) 0, то можно присвоить \(b_{i + 1} :=\) 1 (\(1 \le i \le k - 2\)).
  2. Если \(b_{i} = b_{i + 2} =\) 1, то можно присвоить \(a_{i + 1} :=\) 1 (\(1 \le i \le k - 2\)).

Саше стало интересно следующее: если рассмотреть строку \(a=s_ls_{l+1}\ldots s_r\) и строку \(b=t_lt_{l+1}\ldots t_r\), то какое максимальное количество символов 1 в строке \(a\) можно получить с помощью вычислительной машины. Так как Саша очень любознательный, но ленивый, то вам предстоит ответить на этот вопрос для нескольких интересующих его пар \((l_i, r_i)\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина строк \(s\) и \(t\).

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\), состоящую из символов 0 и 1.

Третья строка каждого набора входных данных содержит бинарную строку \(t\) длины \(n\), состоящую из символов 0 и 1.

Четвертая строка каждого набора входных данных содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

\(i\)-я из следующих строк содержит два целых числа \(l_{i}\) и \(r_{i}\) (\(1 \le l_{i} \le r_{i} \le n\)) — границы \(i\)-й пары подстрок, которые интересуют Сашу.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\) и сумма \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел — ответы на все запросы.

Примечание

В первом наборе входных данных:

  • В первом запросе \(a =\) 11, поэтому максимальное количество символов 1 равно \(2\).
  • Во втором запросе \(a =\) 111, поэтому максимальное количество символов 1 равно \(3\).

Во втором наборе входных данных:

  • В первом запросе \(a =\) 101 и \(b =\) 110. Никаких операций сделать нельзя, поэтому максимальное количество символов 1 равно \(2\).
  • Во втором запросе \(a =\) 1010 и \(b =\) 1101. Так как \(a_2 = a_4 =\) 0, то можно присвоить \(b_3 :=\) 1. Теперь \(b_1 = b_3 =\) 1, поэтому можно присвоить \(a_2 :=\) 1. Строка \(a\) стала равна 1110, поэтому максимальное количество символов 1 равно \(3\).

F. Большой граф

графы поиск в глубину и подобное снм Структуры данных теория чисел *2400

Дан массив \(a\) длины \(n\). Построим квадратную матрицу \(b\) размера \(n \times n\), где в \(i\)-й строке записан массив \(a\), циклически сдвинутый на \((i - 1)\) вправо. Например, для массива \(a = [3, 4, 5]\) получается матрица

\(\)b = \begin{bmatrix} 3 & 4 & 5 \\ 5 & 3 & 4 \\ 4 & 5 & 3 \end{bmatrix}\(\)

Построим следующий граф:

  • Граф содержит \(n^2\) вершин, каждая из которых соответствует одному из элементов матрицы. Обозначим вершину, соответствующую элементу \(b_{i, j}\), как \((i, j)\).
  • Между вершинами \((i_1, j_1)\) и \((i_2, j_2)\) проведём ребро, если \(|i_1 - i_2| + |j_1 - j_2| \le k\) и \(\gcd(b_{i_1, j_1}, b_{i_2, j_2}) > 1\), где \(\gcd(x, y)\) обозначает наибольший общий делитель чисел \(x\) и \(y\).

Ваша задача — посчитать количество компонент связности\(^{\dagger}\) в полученном графе.

\(^{\dagger}\)Компонента связности графа — это множество некоторых вершин графа, в котором любая вершина достижима из любой по рёбрам, и добавление любой другой вершины в множество нарушает это правило.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 10^6\), \(2 \le k \le 2 \cdot 10^6\)) — длина массива и параметр \(k\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^6\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество компонент связности в полученном графе.

Примечание

В первом наборе входных данных матрица \(b\) приведена в условии. Первая компонента связности содержит вершины \((1, 1)\), \((2, 2)\) и \((3, 3)\). Вторая компонента связности содержит вершины \((1, 2)\), \((2, 3)\) и \((3, 1)\). Третья компонента связности содержит вершины \((1, 3)\), \((2, 1)\) и \((3, 2)\). Таким образом, в графе есть \(3\) компоненты связности.

Во втором наборе входных данных получается следующая матрица:

\(\)b = \begin{bmatrix} 3 & 4 & 9 \\ 9 & 3 & 4 \\ 4 & 9 & 3 \end{bmatrix}\(\)

Первая компонента связности содержит все вершины, соответствующие элементам со значениями \(3\) и \(9\). Вторая компонента связности содержит все вершины, соответствующие элементам со значением \(4\).

В четвёртом наборе входных данных все вершины находятся в одной компоненте связности.

E. Манхэттенский треугольник

Бинарный поиск геометрия Конструктив реализация Структуры данных *2400

Манхэттенским расстоянием между двумя точками \((x_1, y_1)\) и \((x_2, y_2)\) называется величина, равная: \(\)|x_1 - x_2| + |y_1 - y_2|.\(\)

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

Вам дан набор попарно различных точек и четное целое число \(d\). Ваша задача — найти любой манхэттенский треугольник, составленный из трёх различных точек данного набора, у которого манхэттенское расстояние между любой парой вершин равно \(d\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(d\) (\(3 \le n \le 2 \cdot 10^5\), \(2 \le d \le 4 \cdot 10^5\), \(d\) — чётное) — количество точек и требуемое манхэттенское расстояние между вершинами треугольника.

\((i + 1)\)-я строка каждого набора входных данных содержит два целых числа \(x_i\) и \(y_i\) (\(-10^5 \le x_i, y_i \le 10^5\)) — координаты \(i\)-й точки. Гарантируется, что все точки попарно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите три целых попарно различных целых числа \(i\), \(j\) и \(k\) (\(1 \le i,j,k \le n\)) — индексы точек, образующих манхэттенский треугольник. Если ответа не существует, выведите «\(0\ 0\ 0\)» (без кавычек).

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных:

Точки \(A\), \(B\) и \(F\) образуют манхэттенский треугольник, манхэттенское расстояние между каждой парой вершин равно \(4\). Точки \(D\), \(E\) и \(F\) также могут быть ответом.

В третьем наборе входных данных:

Точки \(A\), \(C\) и \(E\) образуют манхэттенский треугольник, манхэттенское расстояние между каждой парой вершин равно \(6\).

В четвертом наборе входных данных не существует двух точек, манхэттенское расстояние между которыми равно \(4\), а следовательно подходящего манхэттенского треугольника не существует.

E. Захватывающая история

Бинарный поиск сортировки Структуры данных *2400

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

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

Всего из потерпевших крушение кораблей вывалилось n гравитонных захватов: i-ый из них находится в точке с координатами (xi, yi). Каждый захват имеет две характеристики — pi (мощность) и ri (радиус действия) — и позволяет притягивать любые предметы массой не более pi на расстоянии не более ri. Сам захват тоже является предметом и имеет собственную массу mi.

Корабль Йцукена находится в точке (x, y) и оборудован стареньким магнитным захватом с характеристиками p и r. Других захватов в трюме корабля нет.

Определите какое наибольшее количество захватов сможет собрать Йцукен. В процессе сбора предметов Йцукен может произвольно устанавливать себе на корабль любой захват из трюма, в том числе, и только что подобранный (в любой момент времени на корабле может быть установлен только один действующий захват). Считается, что во время сбора все предметы и корабль Йцукена неподвижны (кроме момента притягивания — тогда предмет перемещается в трюм, а корабль все также остается неподвижен). Можно считать, что в трюм корабля могут поместиться все захваты. Любой подобранный захват, а также изначальный захват Йцукена, можно использовать произвольное количество раз.

Входные данные

В первой строке записаны пять целых чисел x, y, p, r и n ( - 109 ≤ x, y ≤ 109, 1 ≤ p, r ≤ 109, 1 ≤ n ≤ 250000) — начальное положение корабля, характеристики первоначального захвата и количество вывалившихся при крушении захватов.

В следующих n строках находятся описания захватов: i-ая из них содержит пять целых чисел xi, yi, mi, pi, ri ( - 109 ≤ xi, yi ≤ 109, 1 ≤ mi, pi, ri ≤ 109) — координаты i-го захвата и его характеристики.

Гарантируется, что все захваты находятся в различных точках. Никакой из захватов не находится в той же точке, что и корабль Йцукена.

Выходные данные

Выведите одно число — наибольшее количество захватов, которые Йцукен может притянуть к себе (имеющийся изначально старенький магнитный захват учитывать не нужно).

Примечание

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

E. Перестановка строк и столбцов

жадные алгоритмы Конструктив математика матрицы реализация сортировки Структуры данных хэши *1600

У вас была матрица \(a\) размера \(n\) на \(m\), содержащая перестановку целых чисел от \(1\) до \(n \cdot m\).

Перестановкой из \(n\) целых чисел называется массив, содержащий все числа от \(1\) до \(n\) ровно один раз. Например, массивы \([1]\), \([2, 1, 3]\), \([5, 4, 3, 2, 1]\) являются перестановками, а массивы \([1, 1]\), \([100]\), \([1, 2, 4, 5]\) — нет.

Матрица содержит перестановку, если при выписывании всех её элементов полученный массив является перестановкой. Матрицы \([[1, 2], [3, 4]]\), \([[1]]\), \([[1, 5, 3], [2, 6, 4]]\) содержат перестановки, а матрицы \([[2]]\), \([[1, 1], [2, 2]]\), \([[1, 2], [100, 200]]\) — нет.

За одну операцию вы можете совершить одно из двух следующих действий:

  • выбрать столбец \(c\) и столбец \(d\) (\(1 \le c, d \le m\), \(c \ne d\)) и поменять эти столбцы местами;
  • выбрать строку \(c\) и строку \(d\) (\(1 \le c, d \le n\), \(c \ne d\)) и поменять эти строки местами.

Вы можете совершить любое количество операций.

Вам даны исходная матрица \(a\) и матрица \(b\). Ваша задача — определить, можно ли с помощью данных операций сделать из матрицы \(a\) матрицу \(b\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит \(2\) целых числа \(n\) и \(m\) (\(1 \le n, m \le n \cdot m \le 2 \cdot 10^5\)) — размеры матрицы.

Следующие \(n\) строк содержат по \(m\) целых чисел \(a_{ij}\) каждая (\(1 \le a_{ij} \le n \cdot m\)). Гарантируется, что матрица \(a\) является перестановкой.

Следующие \(n\) строк содержат по \(m\) целых чисел \(b_{ij}\) каждая (\(1 \le b_{ij} \le n \cdot m\)). Гарантируется, что матрица \(b\) является перестановкой.

Гарантируется, что сумма значений \(n \cdot m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если вторая матрица может быть получена из первой, и «NO» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Во втором примере исходная матрица выглядит так:

\( \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} \)

При обмене строк \(1\) и \(2\) местами она станет такой:

\( \begin{pmatrix} 3 & 4 \\ 1 & 2 \end{pmatrix} \)

При обмене столбцов \(1\) и \(2\) местами она станет равна матрице \(b\):

\( \begin{pmatrix} 4 & 3 \\ 2 & 1 \end{pmatrix} \)

F1. Разделение поля (простая версия)

математика сортировки Структуры данных *1900

Это упрощённая версия задачи, она отличается от усложнённой только поставленным вопросом. Простая версия требует только определить, являются ли некоторые значения ненулевыми. В сложной версии нужно определить сами значения.

Алиса и Боб делят поле. Поле представляет собой прямоугольник \(n \times m\) (\(2 \le n, m \le 10^9\)), строки пронумерованы от \(1\) до \(n\) сверху вниз, столбцы пронумерованы от \(1\) до \(m\) слева направо. Клетка на пересечении строки \(r\) и столбца \(c\) обозначается как (\(r, c\)).

У Боба есть \(k\) (\(2 \le k \le 2 \cdot 10^5\)) фонтанов, все из них расположены в разных клетках поля. Алиса отвечает за разделение поля, но должна соблюсти несколько условий:

  • для разделения поля Алиса начнёт свой путь в любой свободной (без фонтана) клетке на левой или верхней стороне поля и будет перемещаться, каждый раз двигаясь на соседнюю клетку вниз или вправо, свой путь она закончит на правой или нижней стороне поля;
  • этот путь Алисы разделит поле на две части — одна часть будет принадлежать Алисе (в эту часть включаются клетки её пути), другая — Бобу;
  • Алисе будет принадлежать та часть, которая включает в себя клетку (\(n, 1\));
  • Бобу будет принадлежать та часть, которая включает в себя клетку (\(1, m\)).

Алиса хочет разделить поле так, чтобы получить как можно больше клеток.

Боб хочет сохранить владение всеми фонтанами, но один любой из них подарить Алисе. Выведите сначала целое число \(\alpha\) — максимальный возможный размер участка Алисы, если Боб не подарит ей ни один фонтан (т.е. все фонтаны останутся на участке Боба). Далее выведите \(k\) неотрицательных целых чисел \(a_1, a_2, \dots, a_k\), где:

  • \(a_i=0\), если после того как Боб подарит Алисе \(i\)-й фонтан максимальный возможный размер участка Алисы не увеличится (т.е. останется равным \(\alpha\));
  • \(a_i=1\), если после того как Боб подарит Алисе \(i\)-й фонтан максимальный возможный размер участка Алисы увеличится (т.е. станет больше \(\alpha\)).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \le n, m \le 10^9\), \(2 \le k \le 2 \cdot 10^5\)) — размеры поля и количество фонтанов, соответственно.

Далее следуют \(k\) строк, содержащие по два числа \(r_i\) и \(c_i\) (\(1 \le r_i \le n\), \(1 \le c_i \le m\)) — координаты клетки с \(i\)-м фонтаном. Гарантируется, что все клетки различны и среди них нет (\(n, 1\)).

Гарантируется, что сумма \(k\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных сначала выведите \(\alpha\) — максимальный размер участка, который может принадлежать Алисе, если Боб не подарит ей ни один из фонтанов. В следующую строку выведите \(k\) неотрицательных целых чисел \(a_1, a_2, \dots, a_k\), где:

  • \(a_i=0\), если после того как Боб подарит Алисе \(i\)-й фонтан максимальный возможный размер участка Алисы не увеличится, по сравнению со случаем, когда все \(k\) фонтанов принадлежат Бобу;
  • \(a_i=1\), если после того как Боб подарит Алисе \(i\)-й фонтан максимальный возможный размер участка Алисы увеличится, по сравнению со случаем, когда все \(k\) фонтанов принадлежат Бобу.

Если вместо \(1\) вы выведите любое другое положительное число, которое помещается в 64-битный целочисленный знаковый тип, оно также будет распознано как \(1\). Таким образом, решение усложнённой версии этой задачи также проходит тесты упрощённой.

Примечание

Ниже приведены изображения для второго примера:

Зелёным цветом подписаны номера фонтанов. Синим цветом обозначены клетки, принадлежащие Алисе.

Обратите внимание, что если Боб дарит Алисе фонтан \(1\) или фонтан \(3\), то этот фонтан не может находиться на участке Алисы.

G. Яся и таинственное дерево

битмаски графы Деревья жадные алгоритмы поиск в глубину и подобное Строки Структуры данных *2300

Яся гуляла по лесу и совершенно случайно нашла дерево на \(n\) вершинах. Дерево — это связный неориентированный граф, в котором отсутствуют циклы.

Рядом с деревом девочка нашла древний манускрипт, на котором записаны \(m\) запросов. Запросы бывают двух видов.

Первый вид запросов описывается числом \(y\). Вес каждого ребра в дереве заменяется на побитовое исключающее «ИЛИ» веса этого ребра и числа \(y\).

Второй вид описывается вершиной \(v\) и числом \(x\). Яся выбирает вершину \(u\) (\(1 \le u \le n\), \(u \neq v\)) и мысленно проводит в дереве двунаправленное ребро веса \(x\) из \(v\) в \(u\).

Затем Яся находит простой цикл в получившемся графе и считает побитовое исключающее «ИЛИ» от всех рёбер на нём. Она хочет выбрать такую вершину \(u\), чтобы посчитанное значение было максимально. Это посчитанное значение и будет ответом на запрос. Можно показать существование и единственность такого цикла в указанных ограничениях (независимо от выбора \(u\)). Если ребро между \(v\) и \(u\) уже существовало, простым циклом будет путь \(v \to u \to v\).

Обратите внимание, что запрос второго типа выполняется мысленно, то есть дерево после него никак не меняется.

Помогите Ясе ответить на все запросы.

Входные данные

В первой строке дано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Далее следуют описания наборов.

В первой строке каждого набора даны целые числа \(n\), \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le m \le 2 \cdot 10^5\)) — количество вершин в дереве и количество запросов.

В следующих \(n - 1\) строках каждого набора даны целые числа \(v\), \(u\), \(w\) (\(1 \le v, u \le n\), \(1 \le w \le 10^9\)) — концы некоторого ребра в дереве и его вес.

Гарантируется, что заданный набор рёбер образует дерево.

В следующих \(m\) строках каждого набора описаны запросы:

  • ^ \(y\) (\(1 \le y \le 10^9\)) — параметр запроса первого типа;
  • ? \(v\) \(x\) (\(1 \le v \le n\), \(1 \le x \le 10^9\)) — параметры запроса второго типа.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). То же самое гарантируется для \(m\).

Выходные данные

Для каждого набора входных данных выведите ответы на запросы второго типа.

E. Черепаха и пересекающиеся отрезки

графы жадные алгоритмы снм Структуры данных *2600

Черепаха только что получила \(n\) отрезков и последовательность \(a_1, a_2, \ldots, a_n\). \(i\)-й отрезок представляет собой \([l_i, r_i]\).

Черепаха создаст неориентированный граф \(G\). Если отрезок \(i\) и отрезок \(j\) пересекаются, то Черепаха добавит неориентированное ребро между \(i\) и \(j\) с весом \(|a_i - a_j|\), для каждого \(i \ne j\).

Черепаха хочет, чтобы вы вычислили сумму весов рёбер минимального остовного дерева графа \(G\), или сообщили, что у графа \(G\) нет остовного дерева.

Мы говорим, что два отрезка \([l_1, r_1]\) и \([l_2, r_2]\) пересекаются тогда и только тогда, когда \(\max(l_1, l_2) \le \min(r_1, r_2)\).

Входные данные

Каждый тест содержит несколько тестовых случаев. Первая строка содержит количество тестов \(t\) (\(1 \le t \le 10^5\)). Далее следует описание тестов.

Первая строка каждого теста содержит одно целое число \(n\) (\(2 \le n \le 5 \cdot 10^5\)) — количество отрезков.

\(i\)-я из следующих \(n\) строк содержит три целых числа \(l_i, r_i, a_i\) (\(1 \le l_i \le r_i \le 10^9, 1 \le a_i \le 10^9\)) — \(i\)-й отрезок и \(i\)-й элемент последовательности.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(5 \cdot 10^5\).

Выходные данные

Для каждого теста выведите одно целое число — сумму весов рёбер минимального остовного дерева графа \(G\). Если у графа \(G\) нет остовного дерева, выведите \(-1\).

Примечание

В первом тесте граф \(G\) выглядит следующим образом:

Одно из минимальных остовных деревьев \(G\) выглядит следующим образом:

Сумма весов рёбер минимального остовного дерева равна \(9\).

Во втором тесте граф \(G\) выглядит следующим образом:

\(G\) уже является деревом, и сумма весов дерева равна \(13\).

В третьем тесте граф \(G\) выглядит следующим образом:

В четвертом тесте граф \(G\) выглядит следующим образом:

Легко видеть, что \(G\) не связан, поэтому у \(G\) нет остовного дерева.

F. Черепаха и пути на дереве

Деревья дп Структуры данных *3000

Обратите внимание на необычное определение \(\text{MEX}\) в этой задаче.

Свинка подарила Черепахе бинарное дерево\(^{\dagger}\) с \(n\) вершинами и последовательностью \(a_1, a_2, \ldots, a_n\) на ее день рождения. Бинарное дерево имеет корень в вершине \(1\).

Если набор путей \(P = \{(x_i, y_i)\}\) в дереве покрывает каждое ребро ровно один раз, то Черепаха считает, что набор путей хороший. Обратите внимание, что хороший набор путей может покрывать вершину дважды или более.

Черепаха определяет значение набора путей как \(\sum\limits_{(x, y) \in P} f(x, y)\), где \(f(x, y)\) обозначает \(\text{MEX}^{\ddagger}\) всех \(a_u\), таких что вершина \(u\) лежит на простом пути от \(x\) до \(y\) в дереве (включая начальную вершину \(x\) и конечную вершину \(y\)).

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

\(^{\dagger}\)Бинарное дерево — это дерево, в котором у каждой вершины есть не более \(2\) сыновей.

\(^{\ddagger}\text{MEX}\) набора целых чисел \(c_1, c_2, \ldots, c_k\) определяется как наименьшее положительное целое число \(x\), которое не встречается в наборе \(c\). Например, \(\text{MEX}\) для \([3, 3, 1, 4]\) равно \(2\), \(\text{MEX}\) для \([2, 3]\) равно \(1\).

Входные данные

Каждый тест содержит несколько тестовых случаев. Первая строка содержит количество тестов \(t\) (\(1 \le t \le 10^4\)). Затем следует описание тестов.

Первая строка каждого теста содержит одно целое число \(n\) (\(2 \le n \le 2.5 \cdot 10^4\)) — количество вершин в дереве.

Вторая строка каждого теста содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы последовательности \(a\).

Третья строка каждого теста содержит \(n - 1\) целых чисел \(p_2, p_3, \ldots, p_n\) (\(1 \le p_i < i\)) — родитель каждой вершины в дереве.

Дополнительное ограничение на ввод: заданное дерево является бинарным деревом, то есть у каждой вершины не более \(2\) сыновей.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(10^5\).

Выходные данные

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

Примечание

В первом тестовом случае дерево выглядит следующим образом. Число в скобках обозначает вес вершины:

Хороший набор путей с минимальным значением — \(\{(2, 3), (4, 5)\}\).

Обратите внимание, что в этом тестовом случае \(\{(4, 5)\}\) и \(\{(3, 4), (4, 5)\}\) не являются хорошими наборами путей, потому что каждое ребро должно быть покрыто ровно один раз.

Во втором тестовом случае дерево выглядит следующим образом:

Набор хороших путей с минимальным значением — \(\{(1, 2), (1, 3), (4, 5)\}\).

В третьем тестовом случае дерево выглядит следующим образом:

Набор хороших путей с минимальным значением — \(\{(1, 6), (3, 5)\}\).

C. Скучный день

Бинарный поиск дп жадные алгоритмы Структуры данных *1200

В очередной день Егору стало скучно, и он решил чем-нибудь заняться. Но так как у него нет друзей, он придумал игру, в которую и хочет сыграть.

У Егора есть колода из \(n\) карт, на \(i\)-й карте сверху написано какое-то число \(a_i\). Егор хочет сыграть в игру некоторое количество раундов, пока не закончатся карты. В каждом раунде он берет некоторое ненулевое количество карт с верха колоды и заканчивает раунд. Если сумма чисел на набранных за раунд картах находится между \(l\) и \(r\) включительно, то раунд считается выигранным, иначе проигранным.

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(l\) и \(r\) (\(1 \le n \le 10^{5}\), \(1 \le l \le r \le 10^9\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — числа на картах сверху вниз.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^{5}\).

Выходные данные

Для каждого набора входных данных выведите одно число — наибольшее количество раундов, которое сможет выиграть Егор.

Примечание

В первом наборе входных данных Егор может выиграть \(3\) раунда:

  • В первом раунде взять \(2\) верхние карты со значениями \(2\) и \(1\) и выиграть, так как в сумме они дают \(3\). Колода после этого будет выглядеть так: \([11, 3, 7]\).
  • Во втором раунде взять верхнюю карту и проиграть, так как ее значение \(11\) больше \(r = 10\). Колода после этого будет выглядеть так: \([3, 7]\).
  • В третьем раунде взять верхнюю карту со значением \(3\) и выиграть. Колода после этого будет выглядеть так: \([7]\).
  • После этого в четвертом раунде Егору остается только взять последнюю карту в колоде со значением \(7\) и снова выиграть.

Во втором наборе входных данных Егор не сможет выиграть ни одного раунда, как бы он не старался.

В третьем наборе входных данных можно каждый раунд брать по одной карте, тогда первый и третий раунд будут проигрышными, а второй — выигрышным.

В четвертом наборе данных можно брать по две карты каждый раунд и всегда выигрывать.

D. Красота гор

математика Перебор реализация Структуры данных теория чисел *1700

Никита любит горы и наконец-то решил посетить Берляндский горный хребет! Хребет был настолько красив, что Никита решил запечатлеть его на карте. Карта представляет собой таблицу из \(n\) строк и \(m\) столбцов, в каждой клетке записано целое неотрицательное число — высота этой горы.

Также он заметил, что горы бывают двух типов:

  • Со снежными шапками.
  • Без снежных шапок.

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

Никита может проводить трансформации подматриц размером \(k \times k\) следующим образом: к высотам гор, попавших в этот участок, прибавляется целочисленная константа \(c\), но при этом тип гор не меняется. При этом константу \(c\) Никита может выбирать для каждой трансформации независимо от предыдущих. Обратите внимание, что \(c\) может быть отрицательной.

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

Если на карте представлен только один тип гор, то сумма высот другого типа гор принимается равной нулю.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n, m, k\) (\(1 \le n, m \le 500, 1 \le k \le min(n, m)\)).

Следующие \(n\) строк каждого набора входных данных содержат по \(m\) целых чисел \(a_{i j}\) (\(0 \le a_{i j} \le 10^{9}\)) — изначальные высоты гор.

Следующие \(n\) бинарных строк длины \(m\) каждого набора входных данных определяют тип гор, '\(0\)' — со снежными шапками, '\(1\)' — без них.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(250\,000\).

Выходные данные

Для каждого набора входных данных выведите «YES» без кавычек, если можно уравнять суммы высот гор, иначе выведите «NO» без кавычек. Вы можете вывести каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

Горный массив из первого набора данных выглядит так:

Изначально сумма высот гор со снежными шапками равна \(11 + 3 + 4 + 3 + 0 + 1 + 15 = 37\), а без них \(7 + 2 = 9\).

Чтобы уравнять эти суммы, мы можем выполнить две трансформации:

Первая трансформация:

Обратите внимание, что константа \(c\) может быть отрицательной.

После первой трансформации горный массив выглядит так:

Вторая трансформация:

В результате горный массив выглядит так:

Сумма высот гор со снежными шапками равна \(17 + 9 + 9 - 16 - 20 - 19 + 15 = -5\), а без них \(7 - 12 = -5\), таким образом ответ YES.

F. И снова задача о сортировке

Бинарный поиск сортировки Структуры данных *2600

У вас есть массив \(a\) из \(n\) элементов. Также есть \(q\) изменений массива. Перед первым изменением и далее после каждого изменения вы бы хотели узнать следующее:

Какой подотрезок минимальной длины необходимо отсортировать по неубыванию, чтобы массив \(a\) был полностью отсортирован по неубыванию?

Более формально, вы хотите выбрать подотрезок массива \((l, r)\) с минимальным значением \(r - l + 1\). После этого вы отсортируете элементы \(a_{l}, a_{l + 1}, \ldots, a_{r}\) и хотите, чтобы выполнялось условие \(a_{i} \le a_{i + 1}\) для всех \(1 \le i < n\). Если же массив уже отсортирован по неубыванию, то \(l\) и \(r\) стоит считать равными \(-1\).

Обратите внимание, что нахождение таких \((l, r)\) никак не меняет массив. А сами изменения имеют вид: присвоить \(a_{pos} = x\) для заданных \(pos\) и \(x\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^{5}\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_{i}\) (\(0 \le |a_{i}| \le 10^{9}\)) — изначальные элементы массива \(a\).

В третьей строке каждого набора входных данных дано число \(q\) (\(0 \le q \le 5 \cdot 10^{5}\)) — количество изменений массива.

Следующие \(q\) строк каждого набора входных данных содержат по два целых числа \(pos_{i}\) (\(1 \le pos_{i} \le n\)) и \(val_{i}\) (\(0 \le |val_{i}| \le 10^{9}\)) — это означает, что при \(i\)-м изменении \(a_{pos_{i}}\) присваивается значение \(val_{i}\).

Гарантируется, что сумма \(n\) и сумма \(q\) по всем наборам входных данных не превосходит \(5 \cdot 10^{5}\).

Выходные данные

Для каждого набора входных данных выведите \(q + 1\) строку. В каждой строке должно быть по \(2\) целых числа \(l, r\) — границы минимального подотрезка, при сортировке которого массив \(a\) станет полностью отсортирован. Если \(a\) уже отсортирован, то выведите \(l = -1\), \(r = -1\).

Примечание

Рассмотрим первый набор входных данных:

  • Изначально массив отсортирован по неубыванию: \([2, 2, 3, 4, 5]\)
  • После первого запроса массив выглядит так: \([\color{red}{2}, \color{red}{1}, 3, 4, 5]\).
  • После второго запроса массив выглядит так: \([\color{red}{2}, \color{red}{1}, \color{red}{3}, \color{red}{1}, 5]\).
  • После третьего запроса массив выглядит так: \([1, 1, \color{red}{3}, \color{red}{1}, 5]\).

Красным цветом показаны отрезки, которые нужно отсортировать, чтобы весь массив был отсортирован по неубыванию.

D. Дилемма обмена

жадные алгоритмы Конструктив математика разделяй и властвуй сортировки Структуры данных *1700

Даны два массива \(a\) и \(b\) длины \(n\), состоящих из различных целых положительных чисел, и мы хотим сделать массивы равными. Два массива \(x\) и \(y\) длины \(k\) называются равными, если для всех \(1 \le i \le k\) выполняется \(x_i = y_i\).

За один ход можно выбрать некоторые индексы \(l\) и \(r\) в \(a\) (\(l \le r\)) и поменять местами \(a_l\) и \(a_r\), затем выбрать некоторые \(p\) и \(q\) (\(p \le q\)) в \(b\) такие, что \(r-l=q-p\), и поменять местами \(b_p\) и \(b_q\).

Можно ли сделать массивы одинаковыми?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину массивов \(a\) и \(b\).

Вторая строка каждого набора входных данных содержит \(n\) различных целых чисел \(a_1,a_2,a_3,\ldots,a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)) — массив \(a\).

Третья строка каждого набора входных данных содержит \(n\) различных целых чисел \(b_1,b_2,b_3,\ldots,b_n\) (\(1 \le b_i \le 2 \cdot 10^5\)) — массив \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если массивы \(a\) и \(b\) можно сделать одинаковыми. В противном случае выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

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

Для второго набора входных данных можно доказать, что не существует способа сделать массивы одинаковыми.

В третьем наборе входных данных один из способов сделать массивы равными такой: на первом ходу выбрать \(l=1\), \(r=3\), \(p=1\), \(q=3\), на втором выбрать \(l=1\), \(r=2\), \(p=3\), \(q=4\).

F. Значения массивов

Бинарный поиск битмаски жадные алгоритмы Структуры данных *2500

У вас есть массив целых неотрицательных чисел \(a_1, a_2, \ldots, a_n\).

Значение подотрезка длины \(\ge 2\): \(a[l, r] = [a_l, a_{l+1}, \ldots, a_r]\) — это минимальное значение \(a_i \oplus a_j\) такое, что \(l \le i < j \le r\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Вам нужно найти \(k\)-е наименьшее значение среди всех подотрезков длины \(\ge 2\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целые числа \(n\) и \(k\) (\(2 \le n \le 10^5\), \(1 \le k \le \frac{n\cdot(n-1)}{2}\)).

Вторая строка входных данных содержит \(n\) целых положительных чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — сам массив.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(k\)-ю порядковую статистику среди значений всех подотрезков длины хотя бы \(2\).

Примечание

В первом наборе входных данных мы имеем такие подотрезки и наименьшие значения побитового исключающего ИЛИ пары элементов:

\([1,2]: 3\)

\([2,3]: 1\)

\([3,4]: 7\)

\([4,5]: 1\)

\([1,2,3]: 1\)

\([2,3,4]: 1\)

\([3,4,5]: 1\)

\([1,2,3,4]: 1\)

\([2,3,4,5]: 1\)

\([1,2,3,4,5]: 1\)

Упорядоченные значения: \(1, 1, 1, 1, 1, 1, 1, 1, 3, 7\). Таким образом, вторым наименьшим элементом будет \(1\).

F. Финальный босс

Бинарный поиск Структуры данных *1500

Вы сталкиваетесь с финальным боссом в своей любимой видеоигре. У босса \(h\) здоровья. У вашего персонажа есть \(n\) атак, \(i\)-я атака наносит \(a_i\) урона боссу, но имеет перезарядку \(c_i\) ходов, что означает, что вы сможете использовать эту атаку в следующий раз в ход \(x + c_i\), если ваш текущий ход \(x\). Каждый ход вы можете использовать сразу все атаки, которые сейчас не находятся в режиме перезарядки. Если все атаки находятся в режиме перезарядки, вы ничего не делаете в этот ход и переходите к следующему.

Изначально все атаки не находятся в режиме перезарядки. Сколько ходов вам понадобится, чтобы победить босса? Босс будет побежден, когда его здоровье станет \(0\) или меньше.

Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 10^4\))  – количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(h\) и \(n\) (\(1 \leq h, n \leq 2 \cdot 10^5\)) – здоровье босса и количество ваших атак.

Следующая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, ..., a_n\) (\(1 \leq a_i \leq 2 \cdot 10^5\)) – урон ваших атак.

Следующая строка каждого набора содержит \(n\) целых чисел \(c_1, c_2, ..., c_n\) (\(1 \leq c_i \leq 2 \cdot 10^5\)) – перезарядка ваших атак.

Гарантируется, что сумма \(h\) и \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите целое число, минимальное количество ходов, необходимое для победы над боссом.

Примечание

В первом примере вы можете использовать атаки \(1\) и \(2\) на первом ходу, нанеся в общей сложности \(3\) урона и убив босса.

Во втором примере вы можете победить босса за \(3\) хода, используя следующие атаки:

Ход \(1\): Используйте атаки \(1\) и \(2\), нанеся \(3\) урона боссу. У босса осталось \(2\) здоровья.

Ход \(2\): Используйте атаку \(2\), нанеся \(1\) урон боссу. У босса осталось \(1\) здоровья.

Ход \(3\): Используйте атаку \(1\), нанеся \(2\) урона боссу. У босса осталось \(-1\) здоровья. Поскольку его здоровье меньше или равно \(0\), вы побеждаете босса.

В шестом примере: не забудьте использовать 64-битный целочисленный тип, так как ответ может быть большим.

H1. Максимизация наибольшей компоненты (простая версия)

графы Перебор поиск в глубину и подобное реализация снм Структуры данных *1700

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

У Алекса есть матрица из \(n\) строк и \(m\) столбцов, состоящая из символов '.' и '#'. Набор '#' ячеек формирует компоненту связности, если из любой ячейки в этом наборе можно достичь любую другую ячейку в этом наборе, перемещаясь только в другую ячейку набора, которая имеет общую сторону. Размер компоненты связности — это количество ячеек в наборе.

За одну операцию Алекс выбирает любую строку \(r\) (\(1 \le r \le n\)) или любой столбец \(c\) (\(1 \le c \le m\)), затем устанавливает каждую ячейку в строке \(r\) или столбце \(c\) равной '#'. Помогите Алексу найти максимально возможный размер наибольшей компоненты связности из ячеек '#', который он может достичь после выполнения операции не более одного раза.

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \le n \cdot m \le 10^6\)) — количество строк и столбцов матрицы.

Следующие \(n\) строк содержат по \(m\) символов. Каждый символ может быть '.' или '#'.

Гарантируется, что сумма \(n \cdot m\) по всем наборам не превышает \(10^6\).

Выходные данные

Для каждого теста выведите одно целое число — максимально возможный размер компоненты связности из ячеек '#', который может достичь Алекс.

Примечание

Во втором примере для Алекса оптимально установить все ячейки в столбце \(2\) равными '#'. Это приведет к тому, что наибольшая компонента связности из '#' будет иметь размер \(6\).

В третьем примере для Алекса оптимально установить все ячейки в строке \(2\) равными '#'. Это приведет к тому, что наибольшая компонента связности из '#' будет иметь размер \(9\).

В четвертом примере для Алекса оптимально установить все ячейки в строке \(4\) равными '#'. Это приведет к тому, что наибольшая компонента связности из '#' будет иметь размер \(11\).

H2. Максимизация наибольшей компоненты (сложная версия)

дп поиск в глубину и подобное реализация снм Структуры данных *2200

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

У Алекса есть матрица из \(n\) строк и \(m\) столбцов, состоящая из символов '.' и '#'. Набор '#' ячеек формирует компоненту связности, если из любой ячейки в этом наборе можно достичь любую другую ячейку в этом наборе, перемещаясь только в другую ячейку набора, которая имеет общую сторону. Размер компоненты связности — это количество ячеек в наборе.

За одну операцию Алекс выбирает любую строку \(r\) (\(1 \le r \le n\)) и любой столбец \(c\) (\(1 \le c \le m\)), затем устанавливает каждую ячейку в строке \(r\) и столбце \(c\) равной '#'. Помогите Алексу найти максимально возможный размер наибольшей компоненты связности из ячеек '#', который он может достичь после выполнения операции не более одного раза.

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \le n \cdot m \le 10^6\)) — количество строк и столбцов матрицы.

Следующие \(n\) строк содержат по \(m\) символов. Каждый символ может быть '.' или '#'.

Гарантируется, что сумма \(n \cdot m\) по всем наборам не превышает \(10^6\).

Выходные данные

Для каждого теста выведите одно целое число — максимально возможный размер связного компонента из ячеек '#', который может достичь Алекс.

Примечание

В четвертом тесте для Алекса оптимально установить все ячейки в строке \(4\) и столбце \(2\) равными '#'. Это приведет к наибольшей компоненте связности из ячеек '#' размером \(16\).

В пятом тесте для Алекса оптимально установить все ячейки в строке \(2\) и столбце \(4\) равными '#'. Это приведет к наибольшей компоненте связности из ячеек '#' размером \(22\).

B. Стабилизация матрицы

жадные алгоритмы Перебор сортировки Структуры данных *1000

Вам дана матрица \(n \times m\), где строки пронумерованы от \(1\) до \(n\) сверху вниз, а столбцы пронумерованы от \(1\) до \(m\) слева направо. Элемент на пересечении \(i\)-й строки и \(j\)-го столбца обозначим за \(a_{ij}\).

Рассмотрим алгоритм стабилизации матрицы \(a\):

  1. Найти клетку \((i, j)\), такую что ее значение строго больше значения всех соседних с ней клеток. Если такой клетки нет, завершить алгоритм. Если таких клеток несколько, то выбирается клетка с наименьшим значением \(i\), а если и таких несколько, то среди них с наименьшим значением \(j\).
  2. Сделать \(a_{ij} = a_{ij} - 1\).
  3. Перейти к шагу \(1\).

В этой задаче клетки \((a, b)\) и \((c, d)\) являются соседними, если у них есть общая сторона, то есть \(|a - c| + |b - d| = 1\).

Ваша задача вывести матрицу \(a\) после того, как будет запущен алгоритм стабилизации. Можно показать, что данный алгоритм не может выполняться бесконечное количество итераций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 100, n \cdot m > 1\)) — количество строк и столбцов матрицы \(a\).

Следующие \(n\) строк описывают соответствующие строки матрицы. \(i\)-я строка содержит \(m\) целых чисел \(a_{i1}, a_{i2}, \ldots, a_{im}\) (\(1 \leq a_{ij} \leq 10^9\)).

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк по \(m\) чисел в каждой — значения клеток матрицы \(a\) после алгоритма стабилизации.

Примечание

В первом наборе входных данных два раза подряд алгоритм выберет клетку \((1, 1)\) и завершится.

Во втором наборе входных данных нет клетки, значение которой строго больше значений всех соседних клеток.

В третьем наборе входных данных алгоритм выберет клетку \((2, 2)\) и завершится.

В четвертом наборе входных данных алгоритм три раза выберет клетку \((1, 1)\) и затем два раза клетку \((2, 3)\).

C. Запросы обновления

жадные алгоритмы сортировки Структуры данных *1100

Рассмотрим следующую простую задачу. Вам дана строка \(s\) длины \(n\), состоящая из строчных букв латинского алфавита, а также массив индексов \(ind\) длины \(m\) (\(1 \leq ind_i \leq n\)) и строка \(c\) длины \(m\), состоящая из строчных букв латинского алфавита. Далее вы по порядку делали операцию обновления, а именно во время \(i\)-й операции вы делали \(s_{ind_i} = c_i\). Обратите внимание, что вы делаете все \(m\) операций от первой до последней.

Конечно же, если поменять порядок индексов в массиве \(ind\) и/или порядок букв в строке \(c\), можно получить разный результат. Найдите какую лексикографически наименьшую строку \(s\) можно получить после \(m\) операций обновления, если вы можете как угодно переставить индексы в массиве \(ind\) и буквы в строке \(c\).

Строка \(a\) лексикографически меньше строки \(b\) тогда и только тогда, когда одно из двух условий выполнено:

  • \(a\) является префиксом \(b\), но \(a \neq b\);
  • в первой позиции, в которой \(a\) и \(b\) отличаются, в строке \(a\) стоит символ, который встречается в алфавите раньше, чем соответствующий символ в строке \(b\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 10^5\)) — длина строки \(s\) и количество обновлений. Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\), состоящую из строчных букв латинского алфавита.

Третья строка каждого набора входных данных содержит \(m\) целых чисел \(ind_1, ind_2, \ldots, ind_m\) (\(1 \leq ind_i \leq n\)) — массив индексов \(ind\).

Четвертая строка каждого набора входных данных содержит строку \(c\) длины \(m\), состоящую из строчных букв латинского алфавита.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Аналогично сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите лексикографически наименьшую строку \(s\), которую можно получить, если как угодно перемешать индексы в массиве \(ind\) и буквы в строке \(c\).

Примечание

В первом наборе входных данных можно не перемешивать массив \(ind\) и строку \(c\) и просто сделать все операции именно в таком порядке.

Во втором наборе входных данных можно сделать массив \(ind = [1, 1, 4, 2]\) и \(c =\) «zczw». Тогда строка \(s\) будет меняться следующим образом: \(meow \rightarrow zeow \rightarrow ceow \rightarrow ceoz \rightarrow cwoz\).

В третьем наборе входных данных можно оставить массив \(ind\) без изменений и сделать \(c = \) «admn». Тогда строка \(s\) будет меняться следующим образом: \(abacaba \rightarrow abacaba \rightarrow abdcaba \rightarrow abdcmba \rightarrow abdcmbn\).

G1. Задача на перестановку (простая версия)

Бинарный поиск Комбинаторика математика Перебор Структуры данных теория чисел *2200

Это простая версия задачи. Единственное различие состоит в том, что в этой версии \(n \leq 10^5\) и сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Вам дана перестановка \(p\) длины \(n\). Посчитайте количество пар индексов \(1 \leq i < j \leq n\), таких что \(p_i \cdot p_j\) делится без остатка на \(i \cdot j\).

Перестановка — это последовательность из \(n\) целых чисел, в которой каждое целое число от \(1\) до \(n\) встречается ровно по одному разу. Например, \([1]\), \([3,5,2,1,4]\), \([1,3,2]\) — перестановки, а \([2,3,2]\), \([4,3,1]\), \([0]\) — нет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — длина перестановки \(p\).

Вторая строка каждого набора входных данных содержит \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\)) — перестановку \(p\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите количество пар индексов \(1 \leq i < j \leq n\), таких что \(p_i \cdot p_j\) делится без остатка на \(i \cdot j\).

Примечание

В первом наборе входных данных нет ни одной пары индексов, так как размер перестановки равен \(1\).

Во втором наборе входных данных есть одна пара индексов \((1, 2)\) и она подходит.

В третьем наборе входных данных подходит пара индексов \((1, 2)\).

В четвертом наборе входных данных подходят пары индексов \((1, 2)\), \((1, 5)\) и \((2, 5)\).

G2. Задача на перестановку (сложная версия)

математика Перебор Структуры данных теория чисел хэши *2500

Это сложная версия задачи. Единственное различие состоит в том, что в этой версии \(n \leq 5 \cdot 10^5\) и сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Вам дана перестановка \(p\) длины \(n\). Посчитайте количество пар индексов \(1 \leq i < j \leq n\), таких что \(p_i \cdot p_j\) делится без остатка на \(i \cdot j\).

Перестановка — это последовательность из \(n\) целых чисел, в которой каждое целое число от \(1\) до \(n\) встречается ровно по одному разу. Например, \([1]\), \([3,5,2,1,4]\), \([1,3,2]\) — перестановки, а \([2,3,2]\), \([4,3,1]\), \([0]\) — нет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 5 \cdot 10^5\)) — длина перестановки \(p\).

Вторая строка каждого набора входных данных содержит \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\)) — перестановку \(p\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество пар индексов \(1 \leq i < j \leq n\), таких что \(p_i \cdot p_j\) делится без остатка на \(i \cdot j\).

Примечание

В первом наборе входных данных нет ни одной пары индексов, так как размер перестановки равен \(1\).

Во втором наборе входных данных есть одна пара индексов \((1, 2)\) и она подходит.

В третьем наборе входных данных подходит пара индексов \((1, 2)\).

В четвертом наборе входных данных подходят пары индексов \((1, 2)\), \((1, 5)\) и \((2, 5)\).

E. Прекрасное дерево!

Деревья жадные алгоритмы Перебор поиск в глубину и подобное снм Структуры данных *2000

Да благословят боги этот прекрасный ArrayForces!
Случайная галька

Дано дерево с \(n\) вершинами с корнем в вершине \(1\), в \(i\)-й вершине записано целое число \(a_i\).

Пусть \(L\) — это множество всех прямых сыновей\(^{\text{∗}}\) вершины \(v\). Назовём дерево прекрасным, если для всех вершин \(v\) с непустым \(L\) верно \(\)a_v \le \sum_{u \in L}{a_u}.\(\)

За одну операцию вы можете выбрать любую вершину \(v\) и увеличить значение \(a_v\) на \(1\).

Найдите минимальное количество операций, необходимых для того, чтобы сделать данное дерево прекрасным!

\(^{\text{∗}}\) Вершина \(u\) называется прямым сыном \(v\), если:

  • \(u\) и \(v\) соединены ребром, и
  • \(v\) лежит на (единственном) пути от \(u\) до корня дерева.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 5000\)) — количество вершин в дереве.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — значения, написанные на вершинах дерева.

Третья строка каждого набора входных данных содержит \(n - 1\) целых чисел \(p_2, p_3 , \ldots, p_n\) (\(1 \le p_i < i\)), каждое из которых означает, что в графе есть ребро между вершинами \(i\) и \(p_i\). Гарантируется, что данные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, необходимых для того, чтобы сделать данное дерево прекрасным!

Примечание

Дерево в первом наборе входных данных:

Вы можете применить операцию к вершине \(5\) и дважды к вершине \(2\), чтобы получить прекрасное дерево.

Во втором наборе входных данных вы можете два раза применить операцию к вершине \(2\), чтобы получить прекрасное дерево.

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

E. Сумма минимумов на подотрезках

Бинарный поиск Перебор разделяй и властвуй реализация Структуры данных *2300

Для массива \([a_1,a_2,\ldots,a_n]\) длины \(n\) определим \(f(a)\) как сумму минимального элемента по всем подотрезкам этого массива. Иными словами, \(\)f(a)=\sum_{l=1}^n\sum_{r=l}^n \min_{l\le i\le r}a_i.\(\)

Перестановка — это последовательность целых чисел от \(1\) до \(n\) длиной \(n\), содержащая каждое число ровно один раз. Вам дана перестановка \([a_1,a_2,\ldots,a_n]\). Для каждого \(i\) решите следующую задачу независимо:

  • Удалите \(a_i\) из \(a\), объединив оставшиеся части, получив \(b = [a_1,a_2,\ldots,a_{i-1},\;a_{i+1},\ldots,a_{n}]\).
  • Вычислите \(f(b)\).
Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^5\)). Затем следует описание наборов.

Первая строка каждого набора содержит целое число \(n\) (\(1\le n\le 5\cdot 10^5\)).

Вторая строка каждого набора содержит \(n\) различных целых чисел \(a_1,\ldots,a_n\) (\(1\le a_i\le n\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(10^6\).

Выходные данные

Для каждого набора выведите одну строку, содержащую \(n\) целых чисел. \(i\)-е целое число должно быть ответом при удалении \(a_i\).

Примечание

Во втором наборе входных данных \(a=[3,1,2]\).

  • При удалении \(a_1\), \(b=[1,2]\). \(f(b)=1+2+\min\{1,2\}=4\).
  • При удалении \(a_2\), \(b=[3,2]\). \(f(b)=3+2+\min\{3,2\}=7\).
  • При удалении \(a_3\), \(b=[3,1]\). \(f(b)=3+1+\min\{3,1\}=5\).

D. Кузнечное дело

дп жадные алгоритмы математика Перебор сортировки Структуры данных *1900

Вы играете в одну известную игру (которая «просто работает»), в которой у вас есть различные навыки, которые можно прокачивать. Сегодня вы сосредоточились на навыке «Кузнечное дело». Ваша тактика довольно проста: ковать оружие из слитков, а затем их переплавлять, чтобы вернуть часть материалов. Для простоты, каждый раз, когда вы создаете предмет, вы получаете \(1\) очко опыта, и каждый раз, когда вы переплавляете предмет, вы также получаете \(1\) очко опыта.

В игре есть \(n\) классов оружия, которые вы можете создать, и \(m\) типов металлических слитков.

Вы можете создать одно оружие \(i\)-го класса, затратив \(a_i\) слитков металла одного типа. Переплавка одного оружия \(i\)-го класса (которое вы ранее создали) возвращает вам \(b_i\) слитков металла, из которого оно было изготовлено.

У вас есть \(c_j\) слитков металла \(j\)-го типа, и вы знаете, что можете создать оружие любого класса из любого типа металла. Каждую комбинацию класса оружия и типа металла можно использовать любое количество раз.

Какое максимальное количество очков опыта вы можете заработать, создавая и переплавляя оружие?

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^6\)) — количество классов оружия и типов металла.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)), где \(a_i\) — это количество слитков, необходимых для создания одного оружия \(i\)-го класса.

В третьей строке заданы \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(0 \le b_i < a_i\)), где \(b_i\) — количество слитков, возвращаемых при переплавке одного оружия \(i\)-го класса, которое вы ранее создали.

В четвертой строке заданы \(m\) целых чисел \(c_1, c_2, \dots, c_m\) (\(1 \le c_j \le 10^9\)) — количество слитков металла соответствующего типа, которые у вас есть.

Выходные данные

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

Примечание

В первом тесте вы можете сделать следующее:

  1. создать одно оружие \(1\)-го класса из \(1\)-го типа металла, потратив \(9\) слитков;
  2. переплавить это оружие, вернув \(8\) слитков \(1\)-го типа металла;
  3. снова создать и переплавить одно оружие \(1\)-го класса из \(1\)-го типа металла;
  4. создать и переплавить одно оружие \(3\)-го класса из \(1\)-го типа металла;
  5. создать и переплавить одно оружие \(3\)-го класса из \(3\)-го типа металла;
  6. создать и переплавить одно оружие \(4\)-го класса из \(1\)-го типа металла;
  7. создать и переплавить одно оружие \(5\)-го класса из \(3\)-го типа металла;
В конце у вас останется \(c = [2, 4, 2]\) слитков. Всего вы создали \(6\) оружий и переплавили \(6\) оружий, заработав в общей сложности \(12\) очков опыта.

E1. Поймай крота (легкая версия)

Бинарный поиск Деревья интерактив поиск в глубину и подобное Структуры данных *2500

Это легкая версия задачи. Единственное отличие — это ограничение на количество запросов.

Это интерактивная задача.

Вам дано дерево из \(n\) вершин с вершиной \(1\) в качестве корневой.

В одной из вершин спрятан крот. Чтобы найти его положение, вы можете выбрать вершину \(x\) (\(1 \le x \le n\)) и сделать запрос к жюри. После этого жюри вернет \(1\), если крот находится в поддереве вершины \(x\). В противном случае жюри вернет \(0\). Если жюри возвращает \(0\) и крот не находится в корневой вершине \(1\), крот переместится в вершину-родителя той вершины, в которой он находится в данный момент.

Используя не более \(300\) операций, найдите текущую вершину, в которой находится крот.

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Описание наборов входных данных следует ниже.

Протокол взаимодействия

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 5000\)).

Следующая \(n-1\) строка описывает ребра дерева. Каждая строка содержит два целых числа, разделенные пробелом, \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\)), обозначающие ребро между вершинами \(u_i\) и \(v_i\).

Гарантируется, что входные данные представляют собой дерево.

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

Чтобы сделать запрос, вам нужно выбрать вершину \(x\) (\(1 \le x \le n\)) и вывести строку следующего вида:

  • «? x»

После этого вы получите:

  • \(0\), если крот не находится в поддереве \(x\);
  • \(1\), если крот находится в поддереве \(x\).

Вы можете сделать не более \(300\) запросов такого вида для каждого набора входных данных.

Затем, если вы определили текущую вершину, где находится крот, выведите строку следующего вида:

  • «! x»

Обратите внимание, что эта строка не считается запросом и не учитывается при подсчете количества заданных запросов.

После этого переходите к следующему набору входных данных.

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

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Чтобы сделать взлом, используйте следующий формат:

Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(2 \le n \le 5000\), \(1 \le x \le n\)), описывающие размер дерева и начальное положение крота.

Следующая \(n-1\) строка описывает ребра дерева. Каждая строка содержит два целых числа, разделенные пробелом, \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\)), обозначающие ребро между вершинами \(u_i\) и \(v_i\).

Входные данные обязаны представлять собой дерево.

Примечание

В первом наборе входных данных крот изначально находится в вершине \(2\).

Для запроса «? 2», жюри возвращает \(1\), потому что крот находится в поддереве вершины \(2\). После этого запроса крот не перемещается.

Ответ \(2\) — это текущая вершина, где находится крот, поэтому ответ считается правильным.

Во втором наборе входных данных крот изначально находится в вершине \(6\).

Для запроса «? 2», жюри возвращает \(0\), потому что крот не находится в поддереве вершины \(2\). После этого запроса крот перемещается из вершины \(6\) в вершину \(5\).

Для запроса «? 6», жюри возвращает \(0\), потому что крот не находится в поддереве вершины \(6\). После этого запроса крот перемещается из вершины \(5\) в вершину \(4\).

Для запроса «? 4», жюри возвращает \(1\), потому что крот находится в поддереве вершины \(4\). После этого запроса крот не перемещается.

Ответ \(4\) — это текущая вершина, где находится крот, поэтому ответ считается правильным.

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

E2. Поймай крота (сложная версия)

Бинарный поиск Деревья интерактив поиск в глубину и подобное разделяй и властвуй Структуры данных *2600

Это сложная версия задачи. Единственное отличие — это ограничение на количество запросов.

Это интерактивная задача.

Вам дано дерево из \(n\) вершин с вершиной \(1\) в качестве корневой.

В одной из вершин спрятан крот. Чтобы найти его положение, вы можете выбрать вершину \(x\) (\(1 \le x \le n\)) и сделать запрос к жюри. После этого жюри вернет \(1\), если крот находится в поддереве вершины \(x\). В противном случае жюри вернет \(0\). Если жюри возвращает \(0\) и крот не находится в корневой вершине \(1\), крот переместится в вершину-родителя той вершины, в которой он находится в данный момент.

Используя не более \(160\) операций, найдите текущую вершину, в которой находится крот.

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Описание наборов входных данных следует ниже.

Протокол взаимодействия

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 5000\)).

Следующая \(n-1\) строка описывает ребра дерева. Каждая строка содержит два целых числа, разделенные пробелом, \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\)), обозначающие ребро между вершинами \(u_i\) и \(v_i\).

Гарантируется, что входные данные представляют собой дерево.

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

Чтобы сделать запрос, вам нужно выбрать вершину \(x\) (\(1 \le x \le n\)) и вывести строку следующего вида:

  • «? x»

После этого вы получите:

  • \(0\), если крот не находится в поддереве \(x\);
  • \(1\), если крот находится в поддереве \(x\).

Вы можете сделать не более \(160\) запросов такого вида для каждого набора входных данных.

Затем, если вы определили текущую вершину, где находится крот, выведите строку следующего вида:

  • «! x»

Обратите внимание, что эта строка не считается запросом и не учитывается при подсчете количества заданных запросов.

После этого переходите к следующему набору входных данных.

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

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Чтобы сделать взлом, используйте следующий формат:

Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(2 \le n \le 5000\), \(1 \le x \le n\)), описывающие размер дерева и начальное положение крота.

Следующая \(n-1\) строка описывает ребра дерева. Каждая строка содержит два целых числа, разделенные пробелом, \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\)), обозначающие ребро между вершинами \(u_i\) и \(v_i\).

Входные данные обязаны представлять собой дерево.

Примечание

В первом наборе входных данных крот изначально находится в вершине \(2\).

Для запроса «? 2», жюри возвращает \(1\), потому что крот находится в поддереве вершины \(2\). После этого запроса крот не перемещается.

Ответ \(2\) — это текущая вершина, где находится крот, поэтому ответ считается правильным.

Во втором наборе входных данных крот изначально находится в вершине \(6\).

Для запроса «? 2», жюри возвращает \(0\), потому что крот не находится в поддереве вершины \(2\). После этого запроса крот перемещается из вершины \(6\) в вершину \(5\).

Для запроса «? 6», жюри возвращает \(0\), потому что крот не находится в поддереве вершины \(6\). После этого запроса крот перемещается из вершины \(5\) в вершину \(4\).

Для запроса «? 4», жюри возвращает \(1\), потому что крот находится в поддереве вершины \(4\). После этого запроса крот не перемещается.

Ответ \(4\) — это текущая вершина, где находится крот, поэтому ответ считается правильным.

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

F. Многоугольные отрезки

дп жадные алгоритмы Перебор разделяй и властвуй Структуры данных *2800

У вас есть массив \(a\) размера \(n\).

Отрезок \([l, r](1 \le l < r \le n)\) называется многоугольным отрезком в том случае, если выполняются следующие условия:

  • \((r-l+1) \geq 3\);
  • Используя \(a_l, a_{l+1}, \ldots, a_r\) в качестве длин сторон, эти стороны могут образовать многоугольник с \((r-l+1)\) стороной.

Обработайте \(q\) запросов двух типов:

  • «1 l r»: найти длину самого длинного отрезка среди всех многоугольных отрезков \([l_0,r_0]\), удовлетворяющих условию \(l \le l_0 \le r_0 \le r\). Если такого многоугольного отрезка нет, выведите вместо этого \(-1\);
  • «2 i x»: присвоить \(a_i := x\).
Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Для каждого набора входных данных:

  • Первая строка каждого набора входных данных содержит два целых числа \(n\), \(q\) (\(4 \le n \le 2\cdot 10^5\), \(1 \le q \le 10^5\));
  • Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots, a_n\) (\(1 \le a_i \le 10^{12}\));
  • Следующие \(q\) строк содержат описание запросов. Каждая строка имеет один из двух типов:
    • «1 l r» (\(1 \le l < r \le n\), \(r-l+1\ge 3\));
    • «2 i x» (\(1 \le i \le n\), \(1 \le x \le 10^{12}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), а сумма \(q\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого запроса, если подходящего отрезка нет, выведите в отдельной строке \(-1\). В противном случае выведите длину самого длинного отрезка, удовлетворяющего вышеприведенному условию.

Примечание

В первом запросе первого набора входных данных не существует многоугольного отрезка. Например, если взять отрезок \([1,3]\), нельзя сделать треугольник со сторонами \(a_1=3\), \(a_2=1\) и \(a_3=2\).

Во втором запросе первого набора входных данных самый длинный многоугольный отрезок — \([1,4]\). Вы можете сделать четырехугольник со сторонами \(a_1=3\), \(a_2=1\), \(a_3=2\) и \(a_4=2\).

Пример четырехугольника со сторонами \(3\), \(1\), \(2\) и \(2\).

B2. Букет (сложная версия)

Бинарный поиск жадные алгоритмы математика сортировки Структуры данных *1700

Это сложная версия задачи. Единственное отличие в том, что в этой версии вместо перечисления количеств лепестков у каждого цветка задано для всех типов цветов (по количеству лепестков) их количество в магазине.

Девочка готовится к своему дню рождения и хочет составить невероятной красоты букет. В магазине представлено в общей сложности \(n\) различных типов цветов, для каждого из перечисленных типов цветов указано их количество в магазине. Цветок с \(k\) лепестками стоит \(k\) монет. Девочка решила, что разница в количестве лепестков между любыми двумя цветами, которые она будет использовать для составления букета, не должна превышать единицы. В то же время девочка хочет собрать букет с максимально возможным количеством лепестков. К сожалению, у неё есть только \(m\) монет, и она не может потратить больше. С каким максимальным количеством лепестков она может собрать букет?

Входные данные

Каждый тест состоит из нескольких тестовых наборов. В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество тестовых наборов. Далее следует описание тестовых наборов.

Первая строка каждого тестового примера содержит два целых числа \(n\), \(m\) (\(1 \le n \le 2 \cdot 10^5, 1 \le m \le 10^{18}\)) — количество типов цветов в магазине и количество монет у девочки. Вторая строка каждого тестового примера содержит \(n\) целых различных чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) – это количество лепестков у \(i\)-го типа цветов в магазине (для различных индексов \(i \neq j\) гарантируется, что количество лепестков у соответствующих типов цветов различное, то есть \(a_i \neq a_j\)). Третья строка каждого тестового примера содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le 10^9\)), где \(c_i\) – количество цветов \(i\)-го типа в магазине.

Сумма \(n\) по всем тестовым случаям не превышает \(2 \cdot {10}^5\).

Выходные данные

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

Примечание

В первом наборе входных данных некоторые разрешенные букеты — это \((1, 1, 2, 2), (2, 2, 3), (1, 1), (2, 2)\). Максимум из разрешенных букетов, не превышающий \(10\), составляет \(7\) для \((2, 2, 3)\). Во втором наборе входных данных вы можете собрать разрешенный букет из \((206, 206, 207, 207, 207)\) с суммой \(1033\), что является максимальным количеством лепестков, которое может купить девушка. В третьем наборе входных данных вы можете собрать корректный букет из \((5, 5, 5, 4)\) с суммой \(19\). Видно, что ни в одном разрешенном букете не может быть \(20\) лепестков.

E1. Позвольте мне преподать вам урок (легкая версия)

2-sat дп матрицы Структуры данных *2700

Это простая версия задачи. Единственное отличие между простой и сложной версиями заключается в ограничениях на \(t\) и \(n\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Артур проводит урок для своих знаменитых \(2 n\) рыцарей. Как и все другие студенты, они сидят за партами парами, но по привычке по кругу. Рыцарь \(2 i - 1\) сидит за партой с рыцарем \(2 i\).

Каждый рыцарь имеет интеллект, который можно измерить целым числом. Обозначим интеллект \(i\)-го рыцаря как \(a_i\). Артур хочет, чтобы максимальная разница в общем интеллекте по всем парам парт была как можно меньше. Более формально, он хочет минимизировать \(\max\limits_{1 \le i \le n} (a_{2 i - 1} + a_{2 i}) - \min\limits_{1 \le i \le n} (a_{2 i - 1} + a_{2 i})\).

Однако рыцарский кодекс позволяет менять местами только противоположных рыцарей в круге, т.е. Артур может одновременно выполнять \(a_i := a_{i + n}\), \(a_{i + n} := a_i\) для любого \(1 \le i \le n\). Артур может делать любое количество таких обменов. Какой наилучший результат он может себе обеспечить?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. За ним следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2000\)) — количество парт.

Вторая строка состоит из \(2n\) целых чисел \(a_1, a_2, \ldots, a_{2 n}\) (\(1 \le a_i \le 10^9\)) — значения интеллекта рыцарей.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2000\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую одно целое число — минимальная разница, которую Артур может достичь.

Примечание

В первом наборе входных данных Артур может поменять местами второго и четвертого рыцарей. Тогда общий интеллект на обеих партах составит \(10\).

В третьем наборе входных данных Артур может сделать \(0\) операций, что приведет к общему интеллекту \(11\) за каждой из парт.

В четвертом наборе входных данных Артур может поменять местами рыцарей с индексами \(2\) и \(5\) и достичь разницы \(2\). Можно доказать, что он не может улучшить свой результат дальше.

E2. Позвольте мне преподать вам урок (сложная версия)

дп матрицы Структуры данных *2900

Это сложная версия задачи. Единственное отличие между простой и сложной версиями заключается в ограничениях на \(t\) и \(n\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Артур проводит урок для своих знаменитых \(2 n\) рыцарей. Как и все другие студенты, они сидят за партами парами, но по привычке по кругу. Рыцарь \(2 i - 1\) сидит за партой с рыцарем \(2 i\).

Каждый рыцарь имеет интеллект, который можно измерить целым числом. Обозначим интеллект \(i\)-го рыцаря как \(a_i\). Артур хочет, чтобы максимальная разница в общем интеллекте по всем парам парт была как можно меньше. Более формально, он хочет минимизировать \(\max\limits_{1 \le i \le n} (a_{2 i - 1} + a_{2 i}) - \min\limits_{1 \le i \le n} (a_{2 i - 1} + a_{2 i})\).

Однако рыцарский кодекс позволяет менять местами только противоположных рыцарей в круге, т.е. Артур может одновременно выполнять \(a_i := a_{i + n}\), \(a_{i + n} := a_i\) для любого \(1 \le i \le n\). Артур может делать любое количество таких обменов. Какой наилучший результат он может себе обеспечить?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. За ним следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\,000\)) — количество парт.

Вторая строка состоит из \(2n\) целых чисел \(a_1, a_2, \ldots, a_{2 n}\) (\(1 \le a_i \le 10^9\)) — значения интеллекта рыцарей.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(100\,000\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую одно целое число — минимальная разница, которую Артур может достичь.

Примечание

В первом наборе входных данных Артур может поменять местами второго и четвертого рыцарей. Тогда общий интеллект на обеих партах составит \(10\).

В третьем наборе входных данных Артур может сделать \(0\) операций, что приведет к общему интеллекту \(11\) за каждой из парт.

В четвертом наборе входных данных Артур может поменять местами рыцарей с индексами \(2\) и \(5\) и достичь разницы \(2\). Можно доказать, что он не может улучшить свой результат дальше.

E. Декодирование

Комбинаторика математика реализация Структуры данных *1600

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

Дана двоичная строка \(s\) длиной \(n\). Для каждой пары целых чисел \((l, r)\) \((1 \leq l \leq r \leq n)\) посчитайте количество пар \((x, y)\) \((l \leq x \leq y \leq r)\) таких, что количество \(\mathtt{0}\) равно количеству \(\mathtt{1}\) в подстроке \(s_xs_{x+1}...s_y\).

Выведите сумму подсчетов для всех возможных \((l, r)\) по модулю \(10^9+7\).

Входные данные

В первой строке содержится \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Каждый набор входных данных содержит двоичную строку \(s\) (\(1 \leq |s| \leq 2 \cdot 10^5\)). Гарантируется, что \(s\) содержит только символы \(\mathtt{0}\) и \(\mathtt{1}\).

Гарантируется, что сумма \(|s|\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите целое число — ответ по модулю \(10^9+7\).

G. Пенакония

графы жадные алгоритмы Перебор Структуры данных хэши *2200

На Пенаконии, земле грёз существует \(n\) домов и \(n\) дорог. Существует дорога между домом \(i\) и \(i+1\) для всех \(1 \leq i \leq n-1\) и дорога между домом \(n\) и домом \(1\). Все дороги двусторонние. Однако из-за кризиса на Пенаконии, управляющая семья залезла в долги и может не быть в состоянии поддерживать все дороги.

Среди жителей Пенаконии существует \(m\) пар друзей. Если житель, живущий в доме \(a\), дружит с жителем, живущим в доме \(b\), должен существовать путь между домами \(a\) и \(b\) через поддерживаемые дороги.

Какое минимальное количество дорог для этого необходимо поддержать?

Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 10^4\)) — количество тестов.

Первая строка каждого теста содержит два целых числа \(n\) и \(m\) (\(3 \leq n \leq 2 \cdot 10^5, 1 \leq m \leq 2 \cdot 10^5\)) — количество домов и количество дружб.

Следующие \(m\) строк содержат два целых числа \(a\) и \(b\) (\(1 \leq a < b \leq n\)) — житель дома \(a\) дружит с жителем дома \(b\). Гарантируется, что все (\(a, b\)) различны.

Гарантируется, что сумма \(n\) и \(m\) по всем тестам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого теста выведите целое число — минимальное количество дорог, которые должны быть поддержаны.

Примечание

В первом примере должны быть поддержаны следующие дороги:

  • \(8 \leftarrow \rightarrow 1\)
  • \(7 \leftarrow \rightarrow 8\)
  • \(1 \leftarrow \rightarrow 2\)
  • \(4 \leftarrow \rightarrow 5\)

C. Четные позиции

жадные алгоритмы Конструктив Структуры данных *1100

У Монокарпа была правильная скобочная последовательность \(s\) длины \(n\) (\(n\) — четное). Он даже придумал свой способ вычисления её стоимости.

Он знает, что в правильной скобочной последовательности (ПСП) каждой открывающей скобке соответствует парная ей закрывающая скобка. Поэтому он решил вычислить стоимость ПСП как сумму расстояний между парами соответствующих скобок.

Например, рассмотрим ПСП (())(). Она состоит из трех пар скобок:

  • (__)__: расстояние между скобками на позициях \(1\) и \(4\) равно \(4 - 1 = 3\);
  • _()___: расстояние равно \(3 - 2 = 1\);
  • ____(): расстояние равно \(6 - 5 = 1\).
Таким образом, стоимость (())() равна \(3 + 1 + 1 = 5\).

К сожалению, из-за повреждения данных Монокарп потерял все символы на нечетных позициях \(s_1, s_3, \dots, s_{n-1}\). Остались только символы на четных позициях (\(s_2, s_4, \dots, s_{n}\)). Например, (())() превратилась в _(_)_).

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

Напоминание: Правильная скобочная последовательность — это строка, состоящая только из скобок, такая что эта строка, когда в неё вставляются 1-ы и +-ы, дает корректное математическое выражение. Например, (), (()) или (()())() являются ПСП, в то время как ), ()( или ())(() — не являются.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Далее следуют сами \(t\) наборов.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\); \(n\) — четное) — длина строки \(s\).

Во второй строке каждого набора задана строка \(s\) длины \(n\), где все символы на нечетных позициях равны '_' и все символы на четных позициях равны либо '(', либо ')'.

Дополнительные ограничения:

  • из \(s\) можно восстановить как минимум одну правильную скобочную последовательность;
  • сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).
Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную стоимость правильной скобочной последовательности, которую можно получить из \(s\), заменив '_' на скобки.

Примечание

В первом наборе оптимально сделать \(s\) равной (())(). Стоимость \(s\) будет равна \(3 + 1 + 1 = 5\).

Во втором наборе единственный вариант — сделать \(s\) равной () со стоимостью \(1\).

В третьем наборе единственная возможная ПСП — ()()()() со стоимостью \(1 + 1 + 1 + 1 = 4\).

В четвертом наборе оптимально сделать \(s\) равной (())(()) со стоимостью \(3 + 1 + 3 + 1 = 8\).

E. Прокачка персонажа

Бинарный поиск Перебор разделяй и властвуй реализация Структуры данных *2200

Монокарп играет в компьютерную игру. Он начинает игру, будучи \(1\) уровня. Ему предстоит сразиться с \(n\) монстрами в порядке от \(1\) до \(n\). Уровень \(i\)-го из них равен \(a_i\).

Когда Монокарп встречает очередного монстра, происходит следующее:

  • если уровень Монокарпа строго выше уровня монстра, то монстр спасается бегством;
  • иначе Монокарп сражается с монстром.

После каждого \(k\)-го сражения с монстром (сбежавшие монстры не считаются) уровень Монокарпа увеличивается на \(1\). То есть, после \(k\) сражений с монстрами уровень становится равен \(2\), после \(2k\) — равен \(3\), после \(3k\) — равен \(4\) и так далее.

Требуется обработать \(q\) запросов следующего вида:

  • \(i~x\): будет ли Монокарп сражаться с \(i\)-м монстром (или же этот монстр сбежит), если параметр \(k\) равен \(x\)?
Входные данные

В первой строке записаны два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — количество монстров и количество запросов.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)) — уровни монстров.

В \(j\)-й из следующих \(q\) строк записаны два целых числа \(i\) и \(x\) (\(1 \le i, x \le n\)) — номер монстра и количество сражений, необходимых для повышения уровня в \(j\)-м запросе.

Выходные данные

На каждый запрос выведите «YES», если Монокарп сразится с \(i\)-м монстром в этом запросе, и «NO», если \(i\)-й монстр сбежит.

D. Определите победные острова в гонке

графы дп жадные алгоритмы кратчайшие пути Структуры данных *2100

МУУУУУУУУУУУУУУУУУ
— Корова Бесси, Искусство гонок по островам

Две коровы фермера Джона, Бесси и Элси, планируют участвовать в гонках по \(n\) островам. Существует \(n - 1\) основных мостов, соединяющих остров \(i\) с островом \(i + 1\) для всех \(1 \leq i \leq n - 1\). Кроме того, существует \(m\) альтернативных мостов. Элси может использовать и основные, и альтернативные мосты, а Бесси — только основные. Все мосты являются односторонними и могут использоваться только для перемещения с острова с меньшим индексом на остров с большим индексом.

Изначально Элси находится на острове \(1\), а Бесси — на острове \(s\). Коровы ходят по очереди, причем Бесси ходит первой. Предположим, что корова находится на острове \(i\). Во время хода коровы, если есть мост, соединяющий остров \(i\) с островом \(j\), то корова может переместиться на остров \(j\). Затем остров \(i\) разрушается, и все мосты, соединяющие остров \(i\), также разрушаются. Обратите внимание на следующее:

  • Если нет мостов, соединяющих остров \(i\) с другим островом, то остров \(i\) разрушается, и эта корова выбывает из гонки.
  • Если другая корова также находится на острове \(i\), то после того, как эта корова переместится на другой остров, остров разрушится, и другая корова выбывает из гонки.
  • После того, как остров или мост разрушились, ни одна корова не может ими воспользоваться.
  • Если корова выбывает из гонки, ее ход пропускается до конца гонки.

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

Для каждого \(1 \leq s \leq n - 1\) определите, выиграет ли Бесси, если она начнет гонку на острове \(s\). Предположим, что обе коровы следуют оптимальным стратегиям, чтобы обеспечить себе победу.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два числа \(n\) и \(m\) (\(2 \leq n \leq 2 \cdot 10^5\), \(0 \leq m \leq 2 \cdot 10^5\)) — количество островов и количество альтернативных мостов.

Следующие \(m\) строк каждого набора входных данных содержат по два числа \(u\) и \(v\) (\(1 \leq u < v \leq n\)) — острова, которые соединяет альтернативный мост. Гарантируется, что все альтернативные мосты различны и не совпадают с основными мостами.

Гарантируется, что ни сумма \(n\), ни сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке бинарную строку длины \(n - 1\). \(i\)-й символ равен \(1\), если Бесси может выиграть, если она начнет с острова \(i\). В противном случае он равен \(0\).

Примечание

В первом наборе входных данных нет альтернативных мостов, по которым Элси могла бы обогнать Бесси и первой достичь острова \(n\), поэтому Бесси выиграет на всех островах, потому что она всегда ходит первой.

Во втором случае Бесси проиграет, если начнет с острова \(3\), потому что:

  • Ход Бесси: Перейти по основному мосту с острова \(3\) на остров \(4\).
  • Ход Элси: Перейти по основному мосту с острова \(1\) на остров \(2\).
  • Ход Бесси: Перейти по основному мосту с острова \(4\) на остров \(5\).
  • Ход Элси: Перейти по альтернативному мосту с острова \(2\) на остров \(6\). Элси первой достигает острова \(n\).

E1. Удаление шаров с помощью слияния (лёгкая версия)

Бинарный поиск жадные алгоритмы Перебор разделяй и властвуй Структуры данных *2200

Пейте воду.
— Сунь-Цзы, Искусство стать здоровым программистом

Это лёгкая версия задачи. Единственное отличие в том, что в этой версии \(x=n\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Вам даны два целых числа \(n\) и \(x\) (\(x=n\)). В ряд выстроены \(n\) шаров, пронумерованных от \(1\) до \(n\) слева направо. Изначально на \(i\)-м шаре записано значение \(a_i\).

Для каждого целого числа \(i\) от \(1\) до \(n\) мы определяем функцию \(f(i)\) следующим образом:

  • Предположим, что у вас есть множество \(S = \{1, 2, \ldots, i\}\).

  • В рамках одной операции вам нужно выбрать целое число \(l\) (\(1 \leq l < i\)) из \(S\) такое, что \(l\) не является наибольшим элементом \(S\). Предположим, что \(r\) — наименьший элемент \(S\), значение которого больше \(l\).

    • Если \(a_l > a_r\), то установить \(a_l = a_l + a_r\) и удалить \(r\) из \(S\).
    • Если \(a_l < a_r\), то установить \(a_r = a_l + a_r\) и удалить \(l\) из \(S\).
    • Если \(a_l = a_r\), вы выбираете целое число \(l\) или \(r\) для удаления из \(S\):
      • Если вы решили удалить \(l\) из \(S\), вы устанавливаете \(a_r = a_l + a_r\) и удаляете \(l\) из \(S\).
      • Если вы решили удалить \(r\) из \(S\), вы устанавливаете \(a_l = a_l + a_r\) и удаляете \(r\) из \(S\).

  • \(f(i)\) обозначает количество целых чисел \(j\) (\(1 \le j \le i\)) таких, что можно получить \(S = \{j\}\), выполнив вышеописанную операцию ровно \(i - 1\) раз.

Для каждого целого числа \(i\) от \(x\) до \(n\) необходимо найти \(f(i)\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \leq n \leq 2 \cdot 10^5; x = n\)) — количество шаров и наименьший индекс \(i\), для которого нужно найти \(f(i)\).

Вторая строка каждого набора входных данных содержит \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — начальное число, записанное на каждом шаре.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке \(n-x+1\) целых числа, разделенных пробелом, где \(j\)-е целое число равняется \(f(x+j-1)\).

Примечание

В первом наборе входных данных требуется вычислить \(f(5)\). Можно показать, что после \(4\) операций \(S\) может содержать \(2\), \(3\) или \(4\). Ниже показаны операции, необходимые для того, чтобы получить \(S = \{4\}\).

  • Изначально \(S = \{1, 2, 3, 4, 5\}\) и \(a = [1, 2, 3, 2, 1]\).
  • Выбираем \(l = 1\). Тогда \(r = 2\). Так как \(a_1 < a_2\), зададим \(a_2 = 1 + 2\) и удалим \(1\) из \(S\). Теперь \(S = \{2, 3, 4, 5\}\) и \(a = [1, 3, 3, 2, 1]\).
  • Выбираем \(l = 4\). Тогда \(r = 5\). Поскольку \(a_4 > a_5\), зададим \(a_4 = 2 + 1\) и удалим \(5\) из \(S\). Теперь \(S = \{2, 3, 4\}\) и \(a = [1, 3, 3, 3, 1]\).
  • Выбираем \(l = 3\). Тогда \(r = 4\). Поскольку \(a_3 = a_4\), у нас есть выбор, удалить \(3\) или \(4\). Поскольку мы хотим сохранить \(4\), удалим \(3\). Итак, зададим \(a_4 = 3 + 3\) и удалим \(3\) из \(S\). Теперь \(S = \{2, 4\}\) и \(a = [1, 3, 3, 6, 1]\).
  • Выбираем \(l = 2\). Тогда \(r = 4\). Поскольку \(a_2 < a_4\), зададим \(a_4 = 3 + 6\) и удалим \(2\) из \(S\). Наконец, \(S = \{4\}\) и \(a = [1, 3, 3, 9, 1]\).

Во втором наборе входных данных требуется вычислить \(f(7)\). Можно показать, что после \(6\) операций \(S\) может содержать \(2\), \(4\), \(6\) или \(7\).

E2. Удаление шаров с помощью слияния (сложная версия)

Бинарный поиск жадные алгоритмы Перебор разделяй и властвуй реализация Структуры данных *2500

Пейте воду.
— Сунь-Цзы, Искусство стать здоровым программистом

Это сложная версия задачи. Единственное отличие в том, что в этой версии \(x=1\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Вам даны два целых числа \(n\) и \(x\) (\(x=1\)). В ряд выстроены \(n\) шаров, пронумерованных от \(1\) до \(n\) слева направо. Изначально на \(i\)-м шаре записано значение \(a_i\).

Для каждого целого числа \(i\) от \(1\) до \(n\) мы определяем функцию \(f(i)\) следующим образом:

  • Предположим, что у вас есть множество \(S = \{1, 2, \ldots, i\}\).

  • В рамках одной операции вам нужно выбрать целое число \(l\) (\(1 \leq l < i\)) из \(S\) такое, что \(l\) не является наибольшим элементом \(S\). Предположим, что \(r\) — наименьший элемент \(S\), значение которого больше \(l\).

    • Если \(a_l > a_r\), то установить \(a_l = a_l + a_r\) и удалить \(r\) из \(S\).
    • Если \(a_l < a_r\), то установить \(a_r = a_l + a_r\) и удалить \(l\) из \(S\).
    • Если \(a_l = a_r\), вы выбираете целое число \(l\) или \(r\) для удаления из \(S\):
      • Если вы решили удалить \(l\) из \(S\), вы устанавливаете \(a_r = a_l + a_r\) и удаляете \(l\) из \(S\).
      • Если вы решили удалить \(r\) из \(S\), вы устанавливаете \(a_l = a_l + a_r\) и удаляете \(r\) из \(S\).

  • \(f(i)\) обозначает количество целых чисел \(j\) (\(1 \le j \le i\)) таких, что можно получить \(S = \{j\}\), выполнив вышеописанную операцию ровно \(i - 1\) раз.

Для каждого целого числа \(i\) от \(x\) до \(n\) необходимо найти \(f(i)\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \leq n \leq 2 \cdot 10^5; x = 1\)) — количество шаров и наименьший индекс \(i\), для которого нужно найти \(f(i)\).

Вторая строка каждого набора входных данных содержит \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — начальное число, записанное на каждом шаре.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке \(n-x+1\) целых числа, разделенных пробелом, где \(j\)-е целое число равняется \(f(x+j-1)\).

Примечание

Для первого набора входных данных ниже приведены возможные значения \(j\) для каждого \(f(i)\) от \(1\) до \(n\).

  • Для \(f(1)\) единственным возможным значением \(j\) является \(1\).
  • Для \(f(2)\) единственным возможным значением \(j\) является \(2\).
  • Для \(f(3)\) возможные значения \(j\): \(2\) и \(3\).
  • Для \(f(4)\) возможные значения \(j\): \(2\) и \(3\).
  • Для \(f(5)\) возможные значения \(j\): \(2\), \(3\) и \(4\).

A. Кино

Перебор Структуры данных *2400

В столице Берляндии находится единственный кинотеатр в стране, да и к тому же он состоит только из одного зала. Зал разделен на n рядов, каждый из которых состоит из m мест.

В очереди к кассе кинотеатра стоят k человек, каждый из которых хочет купить ровно один билет для себя любимого. Еще до начала продаж каждый нашел самое лучшее с его точки зрения место и запомнил его как пару координат (xi, yi), где xi — номер ряда, а yi — номер места в этом ряду.

Возможно, что несколько человек облюбовали одно и то же место, тогда те люди, места которых оказались заняты к моменту покупки билета, выберут себе другие места, руководствуясь следующими правилами. Пусть изначально посетитель хотел себе купить билет на место (x1, y1), тогда когда он подойдет к кассе, то выберет такое свободное место (x2, y2), которое удовлетворяет условиям:

  • величина |x1 - x2| + |y1 - y2| принимает наименьшее значение
  • если выбор неоднозначен, то среди мест, удовлетворяющих первому условию, выбирается то, у которого величина x2 принимает наименьшее значение
  • если выбор все еще не однозначен, то среди мест, удовлетворяющих первому и второму условям, выбирается то, у которого величина y2 принимает наименьшее значение

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

Входные данные

В первой строке входных данных содержатся три целых числа n, m, k (1 ≤ n, m ≤ 2000, 1 ≤ k ≤ min(n·m, 105) — количество рядов в кинотеатре, количество мест в каждом ряду и количество людей в очереди соответственно. Далее в k строках заданы по два целых числа xi, yi (1 ≤ xi ≤ n, 1 ≤ yi ≤ m) — координаты выбранного места для каждого из посетителей. Числа в одной строке разделяются пробелом. Пары координат расположены в порядке нахождения людей в очереди начиная с головы (первый человек в очереди перед кассой) к хвосту (последний человек в очереди).

Выходные данные

Выведите в k строках по паре чисел. В i-ой строке выведите xi, yi — координаты места, на которое i-ый в очереди посетитель купит билет.

C. Числовой шаблон строки

Строки Структуры данных *1000

У Кристины есть массив \(a\), называемый шаблоном, и состоящий из \(n\) целых чисел. Также у нее есть \(m\) строк, каждая из которых состоит только из строчных латинских букв. Строки пронумерованы от \(1\) до \(m\). Она хочет проверить, какие из них соответствуют шаблону.

Считается, что некоторая строка \(s\) соответствует шаблону, если одновременно верны все следующие условия:

  • Длина строки \(s\) равна количеству элементов в массиве \(a\).
  • Одинаковым числам из \(a\) соответствуют одинаковые символы из \(s\). То есть, если \(a_i = a_j\), то \(s_i = s_j\) для (\(1 \le i, j \le n\)).
  • Одинаковым символам из \(s\) соответствуют одинаковые числа из \(a\). То есть, если \(s_i = s_j\), то \(a_i = a_j\) для (\(1 \le i, j \le n\)).
Другими словами, между символами строки и элементами массива должно существовать взаимно-однозначное соответствие.

Например, если \(a\) = [\(3, 5, 2, 1, 3\)], то строка «abfda» соответствует шаблону, а строка «afbfa» — нет, так как символу «f» одновременно соответствуют числа \(1\) и \(5\).

Входные данные

Первая строка входных данных содержит единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка каждого набора содержит единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество элементов в массиве \(a\).

Вторая строка каждого набора содержит ровно \(n\) целых чисел \(a_i\) (\(-10^9 \le a_i \le 10^9\)) — элементы массива \(a\).

Третья строка каждого набора содержит единственное целое число \(m\) (\(1 \le m \le 2 \cdot 10^5\)) — количество строк, для которых необходимо проверить соответствие шаблону.

Далее следуют \(m\) строк, каждая из которых содержит непустую строку \(s_j\) (\(1 \le |s_j| \le 2 \cdot 10^5\)), состоящую из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\), а также что сумма длин всех строк не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(m\) строк. На \(i\)-й строке (\(1 \le i \le m\)) выведите:

  • «YES», если строка с индексом \(i\) соответствует шаблону;
  • «NO» иначе.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

Первый набор входных данных разобран в условии задачи.

E. Фотосессия для горилл

жадные алгоритмы Комбинаторика математика Структуры данных *1400

Вы очень любите горилл, поэтому решили устроить им фотосессию. Гориллы обитают в джунглях. Джунгли представляют собой клетчатое поле из \(n\) строк и \(m\) столбцов. В фотосессии согласились принять участие \(w\) горилл, горилла с номером \(i\) (\(1 \le i \le w\)) имеет рост \(a_i\). Вы хотите расставить всех горилл в клетки поля так, чтобы в каждой клетке стояло не более одной гориллы.

Зрелищность расстановки равна сумме зрелищностей всех подквадратов поля с длиной стороны \(k\).

Зрелищность подквадрата равна сумме ростов горилл в нём.

Из всех подходящих расстановок выберите расстановку с максимальной зрелищностью.

Входные данные

В первой строке дано целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Далее следуют описания наборов.

В первой строке даны целые числа \(n\), \(m\), \(k\) (\(1 \le n, m \le 2 \cdot 10^5\), \(1 \le n \cdot m \le 2 \cdot 10^5\), \(1 \le k \le \min(n, m)\)) — размеры поля и сторона квадрата.

Во второй строке дано целое число \(w\) (\(1 \le w \le n \cdot m\)) — количество горилл.

В третьей строке даны \(w\) целых чисел \(a_1, a_2, \ldots, a_w\) (\(1 \le a_i \le 10^9\)) — росты горилл.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). То же самое гарантируется для \(w\).

Выходные данные

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

Примечание

В первом наборе входных данных первого теста суммируются зрелищности следующих подквадратов:

Жёлтый цвет соответствует подквадратам, зелёный — остальным клеткам поля.

На картинке представлено оптимальное расположение горилл. Зрелищность расстановки равна \(4 + 4 + 3 + 3 + 4 + 3 = 21\).

H. Ксюша и загруженное множество

Бинарный поиск Перебор реализация Структуры данных *2200

Ксюша решила основать компанию по производству игр. Чтобы выделиться среди конкурентов и добиться успеха, она решила написать свой игровой движок. Движок должен поддерживать множество, изначально состоящее из \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\).

К множеству будут последовательно применяться \(m\) операций. Операции бывают следующих типов:

  • Вставить элемент \(x\) в множество;
  • Удалить элемент \(x\) из множества;
  • Сообщить \(k\)-загруженность множества.

\(k\)-загруженностью множества называется такое минимальное целое положительное число \(d\), что числа \(d, d + 1, \ldots, d + (k - 1)\) не встречаются в этом множестве. Например, \(3\)-загруженность множества \(\{3, 4, 6, 11\}\) равна \(7\), так как числа \(7, 8, 9\) отсутствуют в множестве, а никакое меньшее значение не подходит.

Ксюша занята менеджерскими делами, поэтому движок придётся писать вам. Реализуйте эффективную поддержку описанных операций.

Входные данные

В первой строке дано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Далее следуют описания наборов.

В первой строке дано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — начальный размер множества.

Во второй строке даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_1 < a_2 < \ldots < a_n \le 2 \cdot 10^6\)) — начальное состояние множества.

В третьей строке дано целое число \(m\) (\(1 \le m \le 2 \cdot 10^5\)) — количество операций.

В следующих \(m\) строках даны операции. Операции даны в следующем формате:

  • + \(x\) (\(1 \le x \le 2 \cdot 10^6\)) — вставить элемент \(x\) в множество (гарантируется, что \(x\) отсутствует в множестве);
  • - \(x\) (\(1 \le x \le 2 \cdot 10^6\)) — удалить элемент \(x\) из множества (гарантируется, что \(x\) присутствует в множестве);
  • ? \(k\) (\(1 \le k \le 2 \cdot 10^6\)) — вывести значение \(k\)-загруженности множества.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), то же самое гарантируется для \(m\).

Выходные данные

Для каждого набора входных данных выведите ответы на операции типа «?».

D. Самая длинная подпоследовательность

жадные алгоритмы Конструктив Перебор реализация Структуры данных *1900

Вам дана последовательность целых чисел \(a_1, a_2, \ldots, a_n\). Пусть \(S\) — множество всех непустых подпоследовательностей \(a\), в которых нет одинаковых элементов. Ваша цель — найти самую длинную последовательность в \(S\). Если таких несколько, найдите ту, которая минимизирует лексикографический порядок после умножения членов в нечетных позициях на \(-1\).

Например, при \(a = [3, 2, 3, 1]\), \(S = \{[1], [2], [3], [2, 1], [2, 3], [3, 1], [3, 2], [2, 3, 1], [3, 2, 1]\}\). Тогда \([2, 3, 1]\) и \([3, 2, 1]\) будут самыми длинными, а \([3, 2, 1]\) будет ответом, так как \([-3, 2, -1]\) лексикографически меньше, чем \([-2, 3, -1]\).

Последовательность \(c\) является подпоследовательностью последовательности \(d\), если \(c\) может быть получена из \(d\) путем удаления нескольких (возможно, нуля или всех) элементов.

Последовательность \(c\) лексикографически меньше последовательности \(d\) тогда и только тогда, когда выполняется одно из следующих условий:

  • \(c\) является префиксом \(d\), но \(c \ne d\);
  • в первой позиции, где \(c\) и \(d\) различаются, последовательность \(c\) имеет меньший элемент, чем соответствующий элемент в \(d\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — длина \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — последовательность \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ в следующем формате:

Выведите целое число \(m\) в первой строке — длину \(b\).

Затем выведите \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) во второй строке — последовательность \(b\).

Примечание

В первом примере \(S = \{[1], [2], [3], [1, 3], [2, 1], [2, 3], [3, 1], [3, 2], [2, 1, 3], [3, 2, 1]\}\). Среди них \([2, 1, 3]\) и \([3, 2, 1]\) — самые длинные, а \([-3, 2, -1]\) лексикографически меньше \([-2, 1, -3]\), поэтому \([3, 2, 1]\) — ответ.

Во втором примере \(S = \{[1]\}\), поэтому \([1]\) — ответ.

D1. Проверка DFS (лёгкая версия)

графы Деревья Перебор поиск в глубину и подобное Структуры данных хэши *1900

Это лёгкая версия задачи. В этой версии заданное дерево является полным бинарным деревом, а ограничения на \(n\) и \(q\) ниже. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Вам дано полное бинарное дерево\(^\dagger\), состоящее из \(n\) вершин. Вершины пронумерованы от \(1\) до \(n\), вершина \(1\) — корень. Вам также дана перестановка \(p_1, p_2, \ldots, p_n\) чисел \([1,2,\ldots,n]\).

Вам нужно ответить на \(q\) запросов. В каждом запросе вам даются два целых числа \(x\), \(y\); вам нужно поменять местами \(p_x\) и \(p_y\) и определить, является ли \(p_1, p_2, \ldots, p_n\) возможным порядком обхода в глубину\(^\ddagger\) заданного дерева.

Обратите внимание, что перестановки элементов сохраняются между запросами.

\(^\dagger\) Полное бинарное дерево — это дерево с корнем в вершине \(1\), имеющее размер \(n=2^k-1\) для некоторого целого положительного числа \(k\), и где родитель каждой вершины \(i\) (\(1<i\le n\)) — это \(\left\lfloor\frac{i}{2}\right\rfloor\). Таким образом, все листья этого дерева находятся на расстоянии \(k - 1\) от корня.

\(^\ddagger\) Порядок обхода в глубину получается вызовом следующей функции \(\texttt{dfs}\) на заданном дереве.

dfs_order = []

function dfs(v):
добавить v в конец dfs_order
выбрать произвольную перестановку s детей v
for child in s:
dfs(child)

dfs(1)

Обратите внимание, что порядок обхода DFS определён не однозначно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержатся два целых числа \(n\), \(q\) (\(3\le n\le 65\,535\), \(2\le q\le 5 \cdot 10^4\)) — количество вершин в дереве и количество запросов. Гарантируется, что \(n=2^k-1\) для некоторого целого положительного числа \(k\).

В следующей строке содержатся \(n-1\) целое число \(a_2,a_3,\ldots,a_n\) (\(1\le a_i<i\)) — родитель каждой вершины в заданном дереве. Гарантируется, что \(a_i=\left\lfloor\frac{i}{2}\right\rfloor\).

В следующей строке содержатся \(n\) целых чисел \(p_1,p_2,\ldots,p_n\) (\(1\le p_i\le n\), все \(p_i\) различны) — начальная перестановка \(p\).

В следующих \(q\) строках содержится по два целых числа \(x\), \(y\) (\(1\le x,y\le n,x\neq y\)) — позиции элементов, которые нужно поменять местами в перестановке.

Гарантируется, что сумма всех \(n\) не превышает \(65\,535\), а сумма всех \(q\) не превышает \(5 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите \(q\) строк, соответствующих \(q\) запросам. Для каждого запроса выведите \(\texttt{YES}\), если есть порядок обхода в глубину, который точно равен текущей перестановке, и выведите \(\texttt{NO}\) в противном случае.

Вы можете вывести \(\texttt{Yes}\) и \(\texttt{No}\) в любом регистре (например, строки \(\texttt{yEs}\), \(\texttt{yes}\), \(\texttt{Yes}\) и \(\texttt{YES}\) будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных перестановка \(p_1, p_2, \ldots, p_n\) после каждой модификации равна \([1,3,2],[1,2,3],[3,2,1]\) соответственно. Первые две перестановки — это возможные порядки обхода в глубину; третья — не порядок обхода в глубину.

Во втором наборе входных данных перестановка \(p_1, p_2, \ldots, p_n\) после каждой модификации равна \([1,2,3,4,5,6,7],[1,2,5,4,3,6,7],[1,3,5,4,2,6,7],[1,3,7,4,2,6,5],[1,3,7,6,2,4,5]\) соответственно.

D2. Проверка DFS (сложная версия)

Бинарный поиск графы Деревья поиск в глубину и подобное Структуры данных хэши *2300

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

Вам дано корневое дерево, состоящее из \(n\) вершин. Вершины пронумерованы от \(1\) до \(n\), вершина \(1\) — корень. Вам также дана перестановка \(p_1, p_2, \ldots, p_n\) чисел \([1,2,\ldots,n]\).

Вам нужно ответить на \(q\) запросов. В каждом запросе вам даются два целых числа \(x\), \(y\); вам нужно поменять местами \(p_x\) и \(p_y\) и определить, является ли \(p_1, p_2, \ldots, p_n\) возможным порядком обхода в глубину\(^\dagger\) заданного дерева.

Обратите внимание, что перестановки элементов сохраняются между запросами.

\(^\dagger\) Порядок обхода в глубину получается вызовом следующей функции \(\texttt{dfs}\) на заданном дереве.

dfs_order = []

function dfs(v):
добавить v в конец dfs_order
выбрать произвольную перестановку s детей v
for child in s:
dfs(child)

dfs(1)

Обратите внимание, что порядок обхода DFS определён не однозначно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержатся два целых числа \(n\),\(q\) (\(2\le n\le 3\cdot 10^5\), \(2\le q\le 10^5\)) — количество вершин в дереве и количество запросов.

В следующей строке содержатся \(n-1\) целых чисел \(a_2,a_3,\ldots,a_n\) (\(1\le a_i<i\)) — родитель каждой вершины в заданном дереве.

В следующей строке содержатся \(n\) целых чисел \(p_1,p_2,\ldots,p_n\) (\(1\le p_i\le n\), все \(p_i\) различны) — начальная перестановка \(p\).

В следующих \(q\) строках каждая строка содержит два целых числа \(x\), \(y\) (\(1\le x,y\le n,x\neq y\)) — позиции элементов, которые нужно поменять местами в перестановке.

Гарантируется, что сумма всех \(n\) не превышает \(3\cdot 10^5\), а сумма всех \(q\) не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) строк, соответствующих \(q\) запросам. Для каждого запроса выведите \(\texttt{YES}\), если есть порядок обхода в глубину, который точно равен текущей перестановке, и выведите \(\texttt{NO}\) в противном случае.

Вы можете вывести \(\texttt{Yes}\) и \(\texttt{No}\) в любом регистре (например, строки \(\texttt{yEs}\), \(\texttt{yes}\), \(\texttt{Yes}\) и \(\texttt{YES}\) будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных перестановка \(p_1, p_2, \ldots, p_n\) после каждой модификации равна \([1,3,2],[1,2,3],[3,2,1]\) соответственно. Первые две перестановки — это возможные порядки обхода в глубину; третья — не порядок обхода в глубину.

Во втором наборе входных данных перестановка \(p_1, p_2, \ldots, p_n\) после каждой модификации равна \([1,2,3,4,5,6,7],[1,2,5,4,3,6,7],[1,3,5,4,2,6,7],[1,3,7,4,2,6,5],[1,3,7,6,2,4,5]\) соответственно.

E. Космические лучи

дп Перебор Структуры данных *2300

Дан массив целых чисел \(s_1, s_2, \ldots, s_l\). Каждую секунду, под действием космических лучей, все \(s_i\), такие что \(i=1\) или \(s_i\neq s_{i-1}\), будут одновременно удалены, а оставшиеся части массива будут конкатенированы вместе, чтобы образовать новый массив \(s_1, s_2, \ldots, s_{l'}\).

Определим силу массива как число секунд, которое требуется ему, чтобы стать пустым.

Вам дан массив целых чисел, сжатых в виде \(n\) пар, описывающих массив слева направо. Каждая пара \((a_i,b_i)\) представляет собой \(a_i\) копий \(b_i\), то есть \(\underbrace{b_i,b_i,\cdots,b_i}_{a_i\textrm{ раз}}\).

Для каждого \(i=1,2,\dots,n\) найдите силу последовательности, описываемой первыми \(i\) парами.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится одно целое число \(n\) (\(1\le n\le3\cdot10^5\)) — длина последовательности \(a\).

Каждая из следующих \(n\) строк содержит два целых числа \(a_i\), \(b_i\) (\(1\le a_i\le10^9,0\le b_i\le n\)) — пары, которые описывают последовательность.

Гарантируется, что сумма всех \(n\) не превышает \(3\cdot10^5\).

Гарантируется, что для всех \(1\le i<n\) выполняется \(b_i\neq b_{i+1}\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую \(n\) целых чисел — ответ для каждого префикса пар.

Примечание

В первом наборе входных данных, для префикса длины \(4\), изменения будут следующими: \([0,0,1,0,0,0,1,1,1,1,1]\rightarrow[0,0,0,1,1,1,1]\rightarrow[0,0,1,1,1]\rightarrow[0,1,1]\rightarrow[1]\rightarrow[]\), поэтому массив станет пустым через \(5\) секунд.

Во втором наборе входных данных, для префикса длины \(4\), изменения будут следующими:\([6,6,6,6,3,6,6,6,6,0,0,0,0]\rightarrow[6,6,6,6,6,6,0,0,0]\rightarrow[6,6,6,6,6,0,0]\rightarrow[6,6,6,6,0]\rightarrow[6,6,6]\rightarrow[6,6]\rightarrow[6]\rightarrow[]\), поэтому массив станет пустым через \(7\) секунд.

E2. Черепаха и инверсии (сложная версия)

дп жадные алгоритмы математика Перебор разделяй и властвуй Структуры данных *2700

Это сложная версия этой задачи. Различия между версиями заключаются в ограничении на \(m\) и условии \(r_i < l_{i + 1}\), которое выполняется для каждого \(i\) от \(1\) до \(m - 1\) в простой версии. Вы можете делать взломы только в том случае, если обе версии задачи решены.

Черепаха дает вам \(m\) отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_m, r_m]\). Она считает, что перестановка \(p\) интересна, если существуют целые числа \(k_i\) для каждого отрезка (\(l_i \le k_i < r_i\)), такие что если она вычислит \(a_i = \max\limits_{j = l_i}^{k_i} p_j, b_i = \min\limits_{j = k_i + 1}^{r_i} p_j\) для каждого целого числа \(i\) от \(1\) до \(m\), то будет выполняться следующее условие:

\(\)\max\limits_{i = 1}^m a_i < \min\limits_{i = 1}^m b_i\(\)

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

Инверсией перестановки \(p\) называется пара целых чисел \((i, j)\) (\(1 \le i < j \le n\)), такая что \(p_i > p_j\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^3\)). Далее следует описание наборов.

Первая строка каждого набора содержит два целых числа \(n, m\) (\(2 \le n \le 5 \cdot 10^3, 0 \le m \le 5 \cdot 10^3\)) — длину перестановки и количество отрезков.

\(i\)-я из следующих \(m\) строк содержит два целых числа \(l_i, r_i\) (\(1 \le l_i < r_i \le n\)) — \(i\)-й отрезок. Обратите внимание, что могут существовать пары одинаковых отрезков (т.е. могут существовать два разных индекса \(i, j\), такие что \(l_i = l_j\) и \(r_i = r_j\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(5 \cdot 10^3\), а также сумма \(m\) по всем наборам не превышает \(5 \cdot 10^3\).

Выходные данные

Для каждого набора, если интересной перестановки не существует, выведите одно целое число \(-1\).

В противном случае выведите одно целое число — максимальное количество инверсий.

Примечание

В третьем наборе интересная перестановка с максимальным количеством инверсий это \([5, 2, 4, 3, 1]\).

В четвертом наборе интересная перестановка с максимальным количеством инверсий это \([4, 3, 8, 7, 6, 2, 1, 5]\). В этом случае мы можем задать \([k_1, k_2, k_3] = [2, 2, 7]\).

В пятом и шестом наборе можно доказать, что интересной перестановки не существует.

В седьмом наборе интересная перестановка с максимальным количеством инверсий это \([4, 7, 6, 3, 2, 1, 5]\). В этом случае мы можем задать \([k_1, k_2, k_3, k_4] = [1, 6, 1, 6]\).

В восьмом наборе интересная перестановка с максимальным количеством инверсий это \([4, 7, 3, 6, 2, 5, 1]\).

F. Черепаха и три последовательности

дп жадные алгоритмы математика Перебор Структуры данных Теория вероятностей *2800

Свинка дает Черепахе три последовательности \(a_1, a_2, \ldots, a_n\), \(b_1, b_2, \ldots, b_n\) и \(c_1, c_2, \ldots, c_n\).

Черепаха выберет подпоследовательность из \(1, 2, \ldots, n\) длины \(m\), пусть это будет \(p_1, p_2, \ldots, p_m\). Подпоследовательность должна удовлетворять следующим условиям:

  • \(a_{p_1} \le a_{p_2} \le \cdots \le a_{p_m}\);
  • Все \(b_{p_i}\) для всех индексов \(i\) попарно различны, т.е. не существует двух различных индексов \(i\), \(j\), таких что \(b_{p_i} = b_{p_j}\).

Помогите ему найти максимальное значение \(\sum\limits_{i = 1}^m c_{p_i}\), или скажите ему, что невозможно выбрать подпоследовательность длины \(m\), которая удовлетворяет вышеуказанным условиям.

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

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 3000\), \(1 \le m \le 5\)) — длины трех последовательностей и требуемая длина подпоследовательности.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы последовательности \(a\).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le n\)) — элементы последовательности \(b\).

Четвертая строка содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le 10^4\)) — элементы последовательности \(c\).

Выходные данные

Выведите единственное целое число — максимальное значение \(\sum\limits_{i = 1}^m c_{p_i}\). Если невозможно выбрать подпоследовательность длины \(m\), которая удовлетворяет вышеуказанным условиям, выведите \(-1\).

Примечание

В первом тесте мы можем выбрать \(p = [1, 2]\), тогда \(c_{p_1} + c_{p_2} = 1 + 4 = 5\). Мы не можем выбрать \(p = [2, 4]\), так как \(a_2 > a_4\), что нарушает первое условие. Мы также не можем выбрать \(p = [2, 3]\), так как \(b_2 = b_3\), что нарушает второе условие. Мы можем выбрать \(p = [1, 4]\), но \(c_1 + c_4 = 4\), что не является максимальным.

Во втором тесте мы можем выбрать \(p = [4, 6, 7]\).

В третьем тесте невозможно выбрать подпоследовательность длины \(3\), которая удовлетворяет обоим условиям.

D. Цветные порталы

Бинарный поиск графы жадные алгоритмы кратчайшие пути Перебор реализация Структуры данных *1600

На прямой расположено \(n\) городов. Города пронумерованы целыми числами от \(1\) до \(n\).

Для перемещения между городами используются порталы. Порталы бывают \(4\) цветов: синий, зеленый, красный и желтый. В каждом городе расположены порталы двух разных цветов. Из города \(i\) можно переместиться в город \(j\), если в них есть порталы одинакового цвета (например, между городом «красный-синий» и городом «синий-зеленый» можно перемещаться). Данное перемещение стоит \(|i-j|\) монет.

Ваша задача — ответить на \(q\) независимых запросов: посчитайте минимальную стоимость, чтобы переместиться из города \(x\) в город \(y\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — количество городов и количество запросов, соответственно.

Вторая строка содержит \(n\) строк одного из следующих типов: BG, BR, BY, GR, GY или RY; \(i\)-я из них описывает порталы, находящиеся в \(i\)-м городе; символ B обозначает, что в городе есть портал синего цвета, G — зеленого, R — красного, а Y — желтого.

\(j\)-я из следующих \(q\) строк содержит два целых числа \(x_j\) и \(y_j\) (\(1 \le x_j, y_j \le n\)) — описание \(j\)-го запроса.

Дополнительные ограничения на входные данные:

  • сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\);
  • сумма \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).
Выходные данные

Для каждого запроса выведите одно целое число — минимальную стоимость, чтобы переместиться из города \(x\) в город \(y\) (или \(-1\), если это невозможно).

F. Сделай палиндром

Бинарный поиск жадные алгоритмы математика Перебор Структуры данных *2600

Задан массив \(a\), состоящий из \(n\) целых чисел.

Скажем, что результат функции \(f(b)\) — минимальное количество операций, чтобы сделать массив \(b\) палиндромом. Операции, которые вы можете выполнять — следующие:

  • выбрать два соседних элемента \(b_i\) и \(b_{i+1}\), удалить их и заменить одним элементом, равным \((b_i + b_{i + 1})\);
  • или выбрать элемент \(b_i > 1\), удалить его и заменить двумя положительными целыми числами \(x\) и \(y\) (\(x > 0\) и \(y > 0\)) такими, что \(x + y = b_i\).

Например, из массива \(b=[2, 1, 3]\) за одну операцию можно получить следующие массивы: \([1, 1, 1, 3]\), \([2, 1, 1, 2]\), \([3, 3]\), \([2, 4]\) или \([2, 1, 2, 1]\).

Посчитайте \(\displaystyle \left(\sum_{1 \le l \le r \le n}{f(a[l..r])}\right)\), где \(a[l..r]\) — подотрезок массива \(a\) с \(l\)-й по \(r\)-ю позиции включительно. Другими словами — сумму значений функции \(f\) для всех подотрезков массива \(a\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2000\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^5\)).

Дополнительные ограничения на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора выведите одно целое число — сумму значений функции \(f\) для всех подотрезков массива \(a\).

G. Сжатие подстрок

дп матрицы Структуры данных *3200

Определим операцию сжатия строки \(t\), состоящей из хотя бы \(2\) цифр от \(1\) до \(9\), следующим образом:

  • разобьем ее на четное количество непустых подстрок — пусть эти подстроки будут \(t_1, t_2, \dots, t_m\) (то есть, \(t = t_1 + t_2 + \dots + t_m\), где \(+\) является операцией конкатенации);
  • запишем строку \(t_2\) \(t_1\) раз, потом строку \(t_4\) \(t_3\) раз, и так далее.

Например, для строки «12345» можно сделать так: разбить на («1», «23», «4», «5»), записать «235555».

Пусть функция \(f(t)\) для строки \(t\) возвращает минимальную длину строки, которую можно будет получить в результате такого процесса.

Дана строка \(s\), состоящая из \(n\) цифр от \(1\) до \(9\), и целое число \(k\). Посчитайте значение функции \(f\) для всех последовательных подстрок \(s\) длины ровно \(k\).

Входные данные

В первой строке записаны два целых числа \(n\) и \(k\) (\(2 \le k \le n \le 2 \cdot 10^5\)).

Во второй строке записана строка \(s\) (\(|s| = n\)), состоящая только из цифр от \(1\) до \(9\).

Выходные данные

Выведите \(n - k + 1\) целое число — \(f(s_{1,k}), f(s_{2,k+1}), \dots, f(s_{n - k + 1, n})\).

D. Измените НОД

Бинарный поиск Перебор разделяй и властвуй реализация Структуры данных теория чисел *2400

Вам даны два массива \(a_1, a_2, \ldots, a_n\) и \(b_1, b_2, \ldots, b_n\).

Вы должны выполнить следующую операцию ровно один раз:

  • выбрать любые индексы \(l\) и \(r\) такие, что \(1 \le l \le r \le n\);
  • поменять местами \(a_i\) и \(b_i\) для всех \(i\) таких, что \(l \leq i \leq r\).

Найдите максимально возможное значение \(\text{gcd}(a_1, a_2, \ldots, a_n) + \text{gcd}(b_1, b_2, \ldots, b_n)\) после выполнения операции ровно один раз. Также найдите количество различных пар \((l, r)\), для которых достигается максимальное значение.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных дается одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество чисел в массивах.

В следующей строке вам дается \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

В последней строке даны \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le 10^9\)) — элементы массива \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите два целых числа: максимальное значение \(\text{gcd}(a_1, a_2, \ldots, a_n) + \text{gcd}(b_1, b_2, \ldots, b_n)\) после выполнения операции ровно один раз, и количество подходящих пар.

Примечание

В первом, третьем и четвертом наборах входных данных ни в одном из массивов нельзя получить НОД больше \(1\), поэтому ответ — \(1 + 1 = 2\). Любая пара \((l, r)\) достигает одинаковый результат, например, в первом примере \(36\) такиз пар.

В последнем наборе входных данных нужно выбрать \(l = 1\), \(r = 2\) для максимизации ответа. В этом случае НОД в первом массиве будет\(5\), а во втором — \(1\), поэтому ответ равен \(5 + 1 = 6\), а количество пар равно \(1\).

E2. Игра Подугольник (сложная версия)

дп жадные алгоритмы игры реализация Структуры данных *2500

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

Цовак и Нарек играют в игру. У них есть массив \(a\) и матрица целых чисел \(b\) с \(n\) строками и \(m\) столбцами, пронумерованных с \(1\). Ячейка в \(i\)-й строке и \(j\)-м столбце обозначается \((i, j)\).

Они ищут элементы \(a\) по очереди; первым начинает Цовак. Каждый раз игрок ищет в матрице клетку, содержащую текущий элемент \(a\) (Цовак ищет первый, Нарек — второй и т.д.). Допустим, игрок выбрал клетку \((r, c)\). Следующий игрок должен выбрать свою клетку в подматрице, начинающейся в \((r + 1, c + 1)\) и заканчивающейся в \((n, m)\) (подматрица может быть пустой, если \(r=n\) или \(c=m\)). Если игрок не может найти такую клетку (или оставшаяся подматрица пуста) или массив заканчивается (предыдущий игрок выбрал последний элемент), то он проигрывает.

Ваша задача — определить победителя, если игроки играют оптимально.

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

Например, в C++ достаточно использовать следующие строки в начале функции main():

int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
}
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(l\), \(n\) и \(m\) (\(1 \le l, n, m \le 1500\)) – длина массива и размер матрицы.

Вторая строка содержит \(l\) целых чисел \(a_1, a_2, a_3, \ldots a_l\) (\(1 \le a_i \le n \cdot m\)) – элементы массива \(a\).

В \(i\)-й из последующих \(n\) строк содержится \(m\) целых чисел \(b_{i,1}, b_{i,2}, b_{i,3}, \ldots b_{i,m}\) (\(1 \le b_{i,j} \le n \cdot m\), представляющих \(i\)-ю строку матрицы.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(3 \cdot 10^6\).

Гарантируется, что сумма \(l\) по всем наборам входных данных не превосходит \(1500\).

Выходные данные

Вы должны вывести \(t\) строк, \(i\)-я из которых содержит символ, представляющий ответ на \(i\)-й набор входных данных: «T», если победил Цовак, или «N», в противном случае (без кавычек).

Примечание

В первом наборе входных данных Цовак начинает с поиска \(1\). Существует только одно вхождение \(1\) в \((1,1)\), поэтому он выбирает его. Затем Нареку нужно найти \(2\) в подматрице \((2, 2)\), которая состоит только из двух последних элементов: \(6\) и \(2\). Он выбирает \(2\), и Цовак проигрывает, так как массив закончился.

Во втором наборе входных данных Цовак должен выбрать \(1\). В клетке \((n,m)\) есть \(1\), поэтому он выбирает эту клетку. Затем, поскольку подматрица \((n + 1, m + 1)\) пуста, Нарек не может найти \(2\), поэтому он проигрывает.

B. Ирис и дерево

Деревья математика Перебор поиск в глубину и подобное снм Структуры данных *1800

Дано корневое дерево с корнем в вершине \(1\). Для любой вершины \(i\) (\(1 < i \leq n\)) в дереве есть ребро, соединяющее вершины \(i\) и \(p_i\) (\(1 \leq p_i < i\)), вес которого равен \(t_i\).

Ирис не знает значений \(t_i\), но она знает, что \(\displaystyle\sum_{i=2}^n t_i = w\) и любое из \(t_i\) является неотрицательным целым числом.

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

Дерево на этой картинке удовлетворяет условию. Например, в поддереве вершины \(2\) номера вершин равны \(2, 3, 4, 5\), то есть являются последовательными целыми числами.
Дерево на этой картинке не удовлетворяет условию, так как в поддереве вершины \(2\) номера вершин \(2\) и \(4\) не являются последовательными целыми числами.

Определим \(\operatorname{dist}(u, v)\) как длину простого пути между вершинами \(u\) и \(v\) в дереве.

Далее произойдёт \(n - 1\) событие:

  • Ирис сообщают целые числа \(x\) и \(y\), обозначающие, что \(t_x = y\).

После каждого события Ирис хочет знать максимальное возможное значение \(\operatorname{dist}(i, i \bmod n + 1)\) независимо для всех \(i\) (\(1\le i\le n\)). Ей достаточно узнать только сумму этих \(n\) значений. Пожалуйста, помогите Ирис быстро получить ответы.

Обратите внимание, что при вычислении максимально возможных значений \(\operatorname{dist}(i, i \bmod n + 1)\) и \(\operatorname{dist}(j, j \bmod n + 1)\) для \(i \ne j\) неизвестные веса рёбер могут быть разными.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(w\) (\(2 \le n \le 2 \cdot 10^5\), \(0 \leq w \leq 10^{12}\)) — количество вершин в дереве и сумма весов рёбер.

Вторая строка каждого набора входных данных содержит \(n - 1\) целых чисел \(p_2, p_3, \ldots, p_n\) (\(1 \leq p_i < i\)) — описание рёбер дерева.

Затем следуют \(n-1\) строк, обозначающих события. Каждая строка содержит два целых числа \(x\) и \(y\) (\(2 \leq x \leq n\), \(0 \leq y \leq w\)), обозначающие, что \(t_x = y\).

Гарантируется, что все \(x\) в событиях различны. Также гарантируется, что сумма всех \(y\) равна \(w\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую \(n-1\) целых числа, каждое из которых представляет ответ после каждого события.

Примечание

В первом наборе входных данных \(\operatorname{dist}(1, 2) = \operatorname{dist}(2, 1) = t_2 = w = 10^{12}\), поэтому \(\operatorname{dist}(1, 2) + \operatorname{dist}(2, 1) = 2 \cdot 10^{12}\)

Во втором наборе входных данных дерево после того, как Ирис узнала все \(t_x\), показано ниже:

\(\operatorname{dist}(1, 2) = t_2\), \(\operatorname{dist}(2, 3) = t_2 + t_3\), \(\operatorname{dist}(3, 4) = t_3 + t_4\), \(\operatorname{dist}(4, 1) = t_4\). После первого события мы узнали, что \(t_2 = 2\), поэтому \(\operatorname{dist}(1, 2) = 2\). В то же время:

  • \(\operatorname{dist}(2, 3)\) максимально, если \(t_3 = 7\), \(t_4 = 0\). Тогда \(\operatorname{dist}(2, 3) = 9\).
  • \(\operatorname{dist}(3, 4)\) и \(\operatorname{dist}(4, 1)\) максимальны, если \(t_3 = 0\), \(t_4 = 7\). Тогда \(\operatorname{dist}(3, 4) = \operatorname{dist}(4, 1) = 7\).

Таким образом, ответ равен \(2 + 9 + 7 + 7 = 25\).

После второго события мы узнали, что \(t_4 = 4\), тогда \(t_3 = w - t_2 - t_4 = 4\). \(\operatorname{dist}(1, 2) = 2\), \(\operatorname{dist}(2, 3) = 2 + 3 = 5\), \(\operatorname{dist}(3, 4) = 3 + 4 = 7\), \(\operatorname{dist}(4, 1) = 4\). Таким образом, ответ равен \(2 + 5 + 7 + 4 = 18\).

C. Эри и расширение множеств

математика разделяй и властвуй Структуры данных теория чисел *2300

Пусть существует множество, содержащее различные положительные целые числа. Чтобы расширить множество и включить в него как можно больше целых чисел, Эри может выбрать два целых числа \(x\neq y\) из множества так, чтобы их среднее \(\frac{x+y}2\) также было целым числом и не содержалось в множестве, и добавить его в множество. Целые числа \(x\) и \(y\) при этом остаются в множестве.

Назовем множество целых чисел последовательным, если, после сортировки элементов, разница между любой парой соседних элементов равна \(1\). Например, множества \(\{2\}\), \(\{2, 5, 4, 3\}\), \(\{5, 6, 8, 7\}\) являются последовательными, в то время как \(\{2, 4, 5, 6\}\), \(\{9, 7\}\) не являются.

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

Обратите внимание, что если одно и то же целое число встречается в массиве несколько раз, мы помещаем его в множество один раз, так как множество всегда содержит различные положительные целые числа.

У Эри есть массив \(a\) из \(n\) положительных целых чисел. Пожалуйста, помогите ему подсчитать количество пар целых чисел \((l,r)\) таких, что \(1 \leq l \leq r \leq n\) и подмассив \(a_l, a_{l+1}, \ldots, a_r\) является великолепным.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 4 \cdot 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(4 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество великолепных подмассивов.

Примечание

В первом наборе входных данных массив \(a = [2, 2]\) имеет \(3\) подмассива: \([2]\), \([2]\) и \([2, 2]\). Для всех них множество содержит только одно целое число \(2\), поэтому оно всегда является последовательным. Все эти подмассивы являются великолепными, поэтому ответ равен \(3\).

Во втором наборе входных данных рассмотрим подмассив \([3, 6, 10]\). Мы можем выполнить операции следующим образом:

\(\)\{3,6,10\} \xrightarrow{x=6,y=10} \{3,6,8,10\} \xrightarrow{x=6,y=8} \{3,6,7,8,10\} \xrightarrow{x=3,y=7} \{3,5,6,7,8,10\}\(\) \(\)\xrightarrow{x=3,y=5} \{3,4,5,6,7,8,10\} \xrightarrow{x=8,y=10} \{3,4,5,6,7,8,9,10\}\(\)

\(\{3,4,5,6,7,8,9,10\}\) является последовательным множеством, поэтому подмассив \([3, 6, 10]\) является великолепным.

D. Ирис и соседние произведения

жадные алгоритмы математика реализация Структуры данных *2600

Ирис только что научилась умножению на уроках математики. Однако, поскольку её мозг не в состоянии выдерживать слишком сложные вычисления, она не может перемножать два целых числа, произведение которых больше \(k\). В противном случае её мозг может взорваться!

Её учитель каждый день даёт ей сложную задачу в качестве домашнего задания на летних каникулах. Теперь ей дан массив \(a\), состоящий из \(n\) элементов, и ей нужно вычислить произведение каждой пары соседних элементов (то есть, \(a_1 \cdot a_2\), \(a_2 \cdot a_3\) и так далее). Ирис хочет, чтобы её мозг не перегружался, и для этого она хотела бы изменить массив \(a\) так, чтобы выполнялось условие \(a_i \cdot a_{i + 1} \leq k\) для всех \(1 \leq i < n\). Она может выполнять два типа операций:

  1. Она может переставить элементы массива \(a\) произвольным образом.
  2. Она может выбрать произвольный элемент массива \(a\) и изменить его значение на произвольное целое число от \(1\) до \(k\).

Ирис хочет минимизировать количество операций типа \(2\), которые она использует.

Однако это совершенно не конец летних каникул! Летние каникулы длятся \(q\) дней, и в \(i\)-й день Ирис просят решить математическое задание для подмассива \(b_{l_i}, b_{l_i + 1}, \ldots, b_{r_i}\). Помогите Ирис и скажите ей минимальное количество операций типа \(2\), которые ей нужно выполнить для каждого дня. Обратите внимание, что операции независимы для каждого дня, то есть массив \(b\) не изменяется.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 5\cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(q\) и \(k\) (\(2 \leq n \leq 10^5\), \(1 \leq q \leq 10^5\), \(1 \leq k \leq 10^6\)) — длина массива \(b\), количество дней и верхняя граница для вычисления произведения.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq k\)) — элементы массива \(b\).

Затем следуют \(q\) строк, \(i\)-я из которых содержит два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i < r_i \leq n\)) — границы подмассива в \(i\)-й день.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\), и сумма \(q\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую \(q\) целых числа — минимальное количество операций типа \(2\), необходимых для каждого дня.

Примечание

В первом наборе входных данных, так как Ирис всегда может перемножить \(1\) и \(1\), операции не требуются, поэтому ответ равен \(0\).

Во втором наборе входных данных, домашнее задание первого дня — \([1, 10, 9]\). Ирис может переставить его элементы, чтобы получить \([9, 1, 10]\), поэтому операции типа \(2\) не требуются. Домашнее задание второго дня — \([10, 9]\), и она может изменить один элемент, чтобы получить массив \([1, 9]\), поэтому требуется одна операция типа \(2\).

E. Полное бинарное дерево Ирис

Деревья Перебор поиск в глубину и подобное Структуры данных *3100

Ирис любит полные бинарные деревья.

Определим глубину корневого дерева как максимальное количество вершин на простых путях от некоторой вершины до корня. Полное бинарное дерево глубины \(d\) — это бинарное дерево глубины \(d\) с ровно \(2^d - 1\) вершинами.

Ирис называет дерево \(d\)-бинарным, если к нему можно добавить некоторые вершины и рёбра, чтобы оно стало полным бинарным деревом глубины \(d\). Обратите внимание, что любая вершина может быть выбрана в качестве корня полного бинарного дерева.

Поскольку выполнение операций над большими деревьями затруднительно, она определяет бинарную глубину дерева как минимальное \(d\), удовлетворяющее условию, что дерево является \(d\)-бинарным. В частности, если не существует целого числа \(d \ge 1\), такого что дерево является \(d\)-бинарным, то бинарная глубина дерева равна \(-1\).

У Ирис сейчас есть дерево, состоящее только из вершины \(1\). Она хочет добавить ещё \(n - 1\) вершин, чтобы сформировать большее дерево. Она будет добавлять вершины по одной. Когда она добавляет вершину \(i\) (\(2 \leq i \leq n\)), она сообщит вам целое число \(p_i\) (\(1 \leq p_i < i\)) и добавит новое ребро, соединяющее вершины \(i\) и \(p_i\).

Ирис хочет спросить вас о бинарной глубине дерева, образованного первыми \(i\) вершинами для всех \(1 \le i \le n\). Можете ли вы сказать ей ответ?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 5 \cdot 10^5\)) — итоговый размер дерева.

Вторая строка каждого набора входных данных содержит \(n - 1\) целых числа \(p_2, p_3, \ldots, p_n\) (\(1 \leq p_i < i\)) — описания всех рёбер дерева.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел, \(i\)-е из которых представляет бинарную глубину дерева, образованного первыми \(i\) вершинами.

Примечание

В первом наборе входных данных итоговое дерево показано ниже:

  • Дерево, состоящее из вершины \(1\), имеет бинарную глубину \(1\) (само дерево является полным бинарным деревом глубины \(1\)).
  • Дерево, состоящее из вершин \(1\) и \(2\), имеет бинарную глубину \(2\) (мы можем добавить вершину \(3\), чтобы сделать его полным бинарным деревом глубины \(2\)).
  • Дерево, состоящее из вершин \(1\), \(2\) и \(3\), имеет бинарную глубину \(2\) (само дерево является полным бинарным деревом глубины \(2\)).

Во втором наборе входных данных полное бинарное дерево, образованное после добавления некоторых вершин к дереву, состоящему из \(n\) вершин, показано ниже (добавленные вершины выделены жирным):

Глубина образованного полного бинарного дерева равна \(4\).

В пятом наборе входных данных итоговое дерево показано ниже:

Можно доказать, что Ирис не может сформировать никакое полное бинарное дерево, добавляя вершины и рёбра, поэтому бинарная глубина равна \(-1\).

B. Индекс и максимальное значение

жадные алгоритмы Структуры данных *900

Получив на свой день рождения ещё один массив целых чисел \(a_1, a_2, \ldots, a_n\), Индекс решает выполнить некоторые операции над ним.

Формально, она собирается выполнить \(m\) операций по порядку. Каждая из них относится к одному из двух типов:

  • \(\texttt{+ l r}\). Даны два целых числа \(l\) и \(r\), для всех \(1 \leq i \leq n\), таких что \(l \leq a_i \leq r\), присвоить \(a_i := a_i + 1\).
  • \(\texttt{- l r}\). Даны два целых числа \(l\) и \(r\), для всех \(1 \leq i \leq n\), таких что \(l \leq a_i \leq r\), присвоить \(a_i := a_i - 1\).

Например, если начальный массив \(a = [7, 1, 3, 4, 3]\), после выполнения операции \(\texttt{+} \space 2 \space 4\), массив \(a = [7, 1, 4, 5, 4]\). Затем, после выполнения операции \(\texttt{-} \space 1 \space 10\), массив \(a = [6, 0, 3, 4, 3]\).

Индекс интересует максимальное значение в массиве \(a\). Пожалуйста, помогите ей найти его после каждой из \(m\) операций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 10^5\), \(1 \leq m \leq 10^5\)) — длина массива и количество операций.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — начальный массив \(a\).

Затем следуют \(m\) строк, каждая строка соответствует операции в следующем формате: \(\texttt{c l r}\) (\(c \in \{\texttt +, \texttt -\}\), \(l\) и \(r\) — целые числа, \(1 \leq l \leq r \leq 10^9\)) — описание операции.

Обратите внимание, что элементы \(a_i\) могут не удовлетворять \(1\le a_i\le 10^9\) после некоторых операций, как показано в примере.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\), и сумма \(m\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую \(m\) целых чисел, где \(i\)-е из них описывает максимальное значение массива после \(i\)-й операции.

Примечание

В первом наборе входных данных процесс операций представлен ниже:

  • После первой операции массив становится равным \([2,3,4,3,2]\). Максимальное значение \(4\).
  • После второй операции массив становится равным \([1,2,4,2,1]\). Максимальное значение \(4\).
  • После третьей операции массив становится равным \([2,3,4,3,2]\). Максимальное значение \(4\).
  • После четвёртой операции массив становится равным \([3,4,5,4,3]\). Максимальное значение \(5\).
  • После пятой операции массив становится равным \([3,4,5,4,3]\). Максимальное значение \(5\).

Во втором наборе входных данных процесс операций представлен ниже:

  • После первой операции массив становится равным \([2,4,4,5,5]\). Максимальное значение \(5\).
  • После второй операции массив становится равным \([3,4,4,5,5]\). Максимальное значение \(5\).
  • После третьей операции массив становится равным \([3,3,3,4,4]\). Максимальное значение \(4\).
  • После четвёртой операции массив становится равным \([2,2,2,4,4]\). Максимальное значение \(4\).
  • После пятой операции массив становится равным \([1,1,1,3,3]\). Максимальное значение \(3\).

E. Чередующаяся строка

дп жадные алгоритмы Перебор реализация Строки Структуры данных *1500

Сакурако очень любит чередующиеся строки. Она называет строку \(s\) из строчных латинских букв чередующейся строкой, если символы на четных позициях одинаковы, если символы на нечетных позициях одинаковы и длина строки четная.

Например, строки 'abab' и 'gg' являются чередующимися, а строки 'aba' и 'ggwp' — нет.

Как хороший друг, вы решили подарить такую строку, но не смогли её найти. К счастью, вы можете выполнить два типа операций над строкой:

  1. Выберите индекс \(i\) и удалите из строки \(i\)-й символ, что уменьшит длину строки на \(1\). Такую операцию можно выполнить не более \(1\) раза;
  2. Выберите индекс \(i\) и замените \(s_i\) на любую другую букву.

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

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных.

Первая строка каждого набора содержит одно число \(n\) (\(1 \le n\le 2\cdot 10^5\))  — длина строки.

Вторая строка каждого набора содержит строку \(s\), состоящую из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого тестового случая выведите одно целое число — минимальное количество операций, необходимых для превращения строки \(s\) в чередующуюся.

Примечание

Для строки ababa можно удалить первый символ, чтобы получить baba, что является чередующейся строкой.

Для строки acdada можно изменить первые два символа, чтобы получить dadada, что является чередующейся строкой.

F. Запросы Светлячка

битмаски математика Потоки Структуры данных *1700

Светлячку дан массив \(a\) длины \(n\). Пусть \(c_i\) обозначает \(i\)-й циклический сдвиг\(^{\text{∗}}\) массива \(a\). Она создает новый массив \(b\) так, что \(b = c_1 + c_2 + \dots + c_n\), где \(+\) представляет собой конкатенацию\(^{\text{†}}\).

Затем она задает вам \(q\) запросов. Для каждого запроса выведите сумму всех элементов в подмассиве \(b\), который начинается с \(l\)-го элемента и заканчивается \(r\)-м, включая оба конца.

\(^{\text{∗}}\)Циклический сдвиг \(x\)-й (\(1 \leq x \leq n\)) массива \(a\) равен \(a_x, a_{x+1} \ldots a_n, a_1, a_2 \ldots a_{x - 1}\). Обратите внимание, что \(1\)-й сдвиг — это исходный массив \(a\).

\(^{\text{†}}\)Конкатенация двух массивов \(p\) и \(q\) длины \(n\) (другими словами, \(p + q\)) равна \(p_1, p_2, ..., p_n, q_1, q_2, ..., q_n\).

Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \leq n, q \leq 2 \cdot 10^5\)) — длина массива и количество запросов.

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, ..., a_n\) (\(1 \leq a_i \leq 10^6\)).

Следующие \(q\) строк содержат два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq n^2\)) — левую и правую границы запроса.

Обратите внимание, что большие входные данные могут потребовать использования 64-битных целых чисел.

Гарантируется, что сумма \(n\) не превышает \(2 \cdot 10^5\), а сумма \(q\) не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите ответ на новой строке.

Примечание

Для первого набора входных данных, \(b = [1, 2, 3, 2, 3, 1, 3, 1, 2]\).

G1. Запросы подмассивов Юнли (простая версия)

Бинарный поиск Структуры данных *1900

Это простая версия задачи. В этой версии гарантируется, что \(r=l+k-1\) для всех запросов.

Для произвольного массива \(b\) Юнли может выполнять следующую операцию любое количество раз:

  • Выбрать индекс \(i\). Присвоить \(b_i = x\), где \(x\) — любое целое число, которое она желает (\(x\) не ограничено интервалом \([1,n]\)).

Обозначим \(f(b)\) как минимальное количество операций, которые ей нужно выполнить, чтобы появился последовательный подмассив\(^{\text{∗}}\) длиной не менее \(k\) в \(b\).

Юнли дан массив \(a\) размера \(n\), и она задает вам \(q\) запросов. В каждом запросе вы должны вывести \(\sum_{j=l+k-1}^{r} f([a_l, a_{l+1}, \ldots, a_j])\). Обратите внимание, что в этой версии вам нужно только вывести \(f([a_l, a_{l+1}, \ldots, a_{l+k-1}])\).

\(^{\text{∗}}\)Если существует последовательный подмассив длины \(k\), который начинается с индекса \(i\) (\(1 \leq i \leq |b|-k+1\)), то \(b_j = b_{j-1} + 1\) для всех \(i < j \leq i+k-1\).

Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(k\) и \(q\) (\(1 \leq k \leq n \leq 2 \cdot 10^5\), \(1 \leq q \leq 2 \cdot 10^5\)) — длину массива, длину последовательного подмассива и количество запросов.

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq n\)).

Следующие \(q\) строк содержат по два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq n\), \(r=l+k-1\)) — границы запроса.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\) и сумма \(q\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Выведите \(\sum_{j=l+k-1}^{r} f([a_l, a_{l+1}, \ldots, a_j])\) для каждого запроса на новой строке.

Примечание

В первом запросе первого примера, \(b=[1,2,3,2,1]\). Юнли может сделать последовательный подмассив длиной \(5\) за \(2\) хода:

  • Присвоить \(b_4=4\)
  • Присвоить \(b_5=5\)
В итоге \(b=[1, 2, 3, 4, 5]\).

Во втором запросе первого примера, \(b=[2,3,2,1,2]\). Юнли может сделать последовательный подмассив длиной \(5\) за \(3\) хода:

  • Присвоить \(b_3=0\)
  • Присвоить \(b_2=-1\)
  • Присвоить \(b_1=-2\)
В итоге \(b=[-2, -1, 0, 1, 2]\).

G2. Запросы подмассивов Юнли (сложная версия)

Бинарный поиск дп Структуры данных *2200

Это сложная версия задачи. В этой версии гарантируется, что \(r \geq l+k-1\) для всех запросов.

Для произвольного массива \(b\) Юнли может выполнять следующую операцию любое количество раз:

  • Выбрать индекс \(i\). Присвоить \(b_i = x\), где \(x\) — любое целое число, которое она хочет (\(x\) не ограничено интервалом \([1,n]\)).

Обозначим \(f(b)\) как минимальное количество операций, которые ей нужно выполнить, чтобы в массиве \(b\) существовал последовательный подмассив\(^{\text{∗}}\) длиной не менее \(k\).

Юнли дан массив \(a\) размером \(n\), и она задает вам \(q\) запросов. В каждом запросе вы должны вывести \(\sum_{j=l+k-1}^{r} f([a_l, a_{l+1}, \ldots, a_j])\).

\(^{\text{∗}}\)Если существует последовательный подмассив длиной \(k\), который начинается с индекса \(i\) (\(1 \leq i \leq |b|-k+1\)), то \(b_j = b_{j-1} + 1\) для всех \(i < j \leq i+k-1\).

Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(k\) и \(q\) (\(1 \leq k \leq n \leq 2 \cdot 10^5\), \(1 \leq q \leq 2 \cdot 10^5\)) — длину массива, длину последовательного подмассива и количество запросов.

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, ..., a_n\) (\(1 \leq a_i \leq n\)).

Следующие \(q\) строк содержат по два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq n\), \(r \geq l+k-1\)) — границы запроса.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\), а сумма \(q\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Выведите \(\sum_{j=l+k-1}^{r} f([a_l, a_{l+1}, \ldots, a_j])\) для каждого запроса на новой строке.

Примечание

Во втором запросе первого набора входных данных мы вычисляем следующие значения функции:

  • \(f([2,3,2,1,2])=3\), потому что Юнли может присвоить \(b_3=4\), \(b_4=5\) и \(b_5=6\), сделав последовательный подмассив размером \(5\) за \(3\) хода.
  • \(f([2,3,2,1,2,3])=2\), потому что мы можем присвоить \(b_3=0\) и \(b_2=-1\), сделав последовательный подмассив размером \(5\) за \(2\) хода (начиная с позиции \(2\)).

Ответ на этот запрос равен \(3+2=5\).

G3. Запросы подмассивов Юнли (экстремальная версия)

дп реализация Структуры данных *2700

Это экстремальная версия задачи. В этой версии выход для каждого запроса отличается от легкой и сложной версий. Также гарантируется, что \(r \geq l+k-1\) для всех запросов.

Для произвольного массива \(b\) Юнли может выполнять следующую операцию любое количество раз:

  • Выбрать индекс \(i\). Установить \(b_i = x\), где \(x\) — любое целое число, которое она желает (\(x\) не ограничено интервалом \([1,n]\)).

Обозначим \(f(b)\) как минимальное количество операций, которые ей нужно выполнить, чтобы в массиве \(b\) существовал последовательный подмассив\(^{\text{∗}}\) длиной не менее \(k\).

Юнли дан массив \(a\) размером \(n\), и она задает вам \(q\) запросов. В каждом запросе вы должны вывести \(\sum_{i=l}^{r-k+1} \sum_{j=i+k-1}^{r} f([a_i, a_{i+1}, \ldots, a_j])\).

\(^{\text{∗}}\)Если существует последовательный подмассив длины \(k\), который начинается с индекса \(i\) (\(1 \leq i \leq |b|-k+1\)), то \(b_j = b_{j-1} + 1\) для всех \(i < j \leq i+k-1\).

Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(k\) и \(q\) (\(1 \leq k \leq n \leq 2 \cdot 10^5\), \(1 \leq q \leq 2 \cdot 10^5\)) — длину массива, длину последовательного подмассива и количество запросов.

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, ..., a_n\) (\(1 \leq a_i \leq n\)).

Следующие \(q\) строк содержат по два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq n\), \(r \geq l+k-1\)) — границы запроса.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\), а сумма \(q\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Выведите \(\sum_{i=l}^{r-k+1} \sum_{j=i+k-1}^{r} f([a_i, a_{i+1}, \ldots, a_j])\) для каждого запроса на новой строке.

Примечание

В первом запросе первого набора входных данных мы можем вычислить ответ на запрос следующим образом:

  • \(i = 4\) и \(j = 5\): \(f([2, 1])=1\), потому что Юнли может установить \(b_2=3\), что создаст последовательный подмассив размером \(2\) за \(1\) ход.
  • \(i = 4\) и \(j = 6\): \(f([2, 1, 2])=0\), потому что уже существует последовательный массив размером \(2\).
  • \(i = 5\) и \(j = 6\): \(f([1, 2])=0\), потому что уже существует последовательный массив размером \(2\).

Ответ на этот запрос равен \(1+0+0=1\).

F. Хороший подмассив

*особая задача жадные алгоритмы Структуры данных

Задан целочисленный массив \(a\) размера \(n\).

Назовем массив хорошим, если его можно получить при помощи следующего алгоритма: создать массив, состоящий из одного любого целого числа; а затем произвольное количество раз выполнить следующую операцию: выбрать элемент из уже существующих в массиве (назовем его \(x\)) и в конец массива добавить \(x\), \((x-1)\) или \((x+1)\).

Например, массивы \([1, 2, 1]\), \([5]\) и \([3, 2, 1, 4]\) хорошие, а \([2, 4]\) и \([3, 1, 2]\) — нет.

Ваша задача — посчитать количество хороших непрерывных подмассивов массива \(a\). Два подмассива с одинаковыми элементами, которые различаются своими позициями в массиве \(a\), считаются различными.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\( 1 \le a_i \le n)\).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество хороших непрерывных подмассивов массива \(a\).

Примечание

В первом примере следующие четыре подмассива — хорошие:

  • с \(1\)-го по \(1\)-й элемент;
  • с \(1\)-го по \(2\)-й элемент;
  • с \(2\)-го по \(2\)-й элемент;
  • с \(3\)-го по \(3\)-й элемент.

Во втором примере единственный подмассив, не являющийся хорошим, — это подмассив с \(3\)-го по \(4\)-й элемент.

I. Стек и очередь

*особая задача разделяй и властвуй Структуры данных

Перед приемом к двум врачам выстроились \(2\) очереди пациентов. Первый врач принимает пациентов в обычном порядке очереди — кто раньше пришел, того он раньше и примет. А второй врач делает наоборот — принимает сначала тех, кто пришел позже всех. То есть, к первому врачу стоит очередь, а ко второму — стек. Один пациент может одновременно стоять и в очереди, и в стеке. Каждый пациент характеризуется временем, которое займет его визит ко врачу (время одинаковое для обоих врачей).

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

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

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

Изначально очередь и стек пусты. Поступают запросы трех типов:

  1. добавить пациента \(x\) в очередь;
  2. добавить пациента \(x\) в стек;
  3. пациент \(x\), стоявший в очереди, понимает, что он стоит не туда и перемещается в стек; при этом он перемещается на то место в стеке, как если бы он встал в стек в момент запроса, когда он встал в очередь.

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

После каждого запроса нужно узнать, является ли конфигурация хорошей.

Входные данные

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

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — для каждого пациента время, которое займет его визит ко врачу.

В каждой из следующих \(n\) строк записаны два целых числа \(t\) и \(x\) (\(1 \le t \le 3\); \(1 \le x \le n\)) — тип запроса и номер пациента. Гарантируется, что:

  • если запрос типа \(1\), то пациент \(x\) еще не стоит в очереди;
  • если запрос типа \(2\), то пациент \(x\) еще не стоит в стеке;
  • если запрос типа \(3\), то пациент \(x\) уже стоит в очереди и еще не стоит в стеке.
Выходные данные

После каждого запроса выведите «YES», если текущая конфигурация является хорошей, и «NO» в противном случае.

Примечание

В первом тесте следующие конфигурации:

  1. очередь: \([1]\); стек: \([]\); пациента \(1\) первый врач принимает \(10\) минут, начиная с минуты \(0\).
  2. очередь: \([1]\); стек: \([1]\); пациента \(1\) первый врач принимает во время \([0; 10)\) и второй во время \([0; 10)\). Так как пациент \(1\) должен одновременно быть у двух врачей, ответ «NO».
  3. очередь: \([1]\); стек: \([1, 2]\); пациента \(1\) первый врач принимает во время \([0; 10)\), а второй во время \([15; 25)\); пациента \(2\) второй врач принимает во время \([0, 15)\). Теперь пациент \(1\) успевает ко второму врачу после приема у первого.

Во втором тесте конфигурации после запроса \(4\) следующая конфигурация:

  • очередь: \([1, 2]\);
  • стек: \([5, 3]\);
  • пациент \(1\): первый врач \([0, 2)\), второй врач не принимает;
  • пациент \(2\): первый врач \([2, 7)\), второй врач не принимает;
  • пациент \(3\): первый врач не принимает, второй врач \([0, 1)\);
  • пациент \(5\): первый врач не принимает, второй врач \([1, 6)\).

После запроса \(5\) следующая конфигурация:

  • очередь: \([1]\);
  • стек: \([5, 2, 3]\);
  • пациент \(1\): первый врач \([0, 2)\), второй врач не принимает;
  • пациент \(2\): первый врач не принимает, второй врач \([1, 6)\);
  • пациент \(3\): первый врач не принимает, второй врач \([0, 1)\);
  • пациент \(5\): первый врач не принимает, второй врач \([6, 11)\).

После запроса \(6\) следующая конфигурация:

  • очередь: \([1, 2]\);
  • стек: \([5, 2, 3]\);
  • пациент \(1\): первый врач \([0, 2)\), второй врач не принимает;
  • пациент \(2\): первый врач \([2, 7)\), второй врач \([1, 6)\);
  • пациент \(3\): первый врач не принимает, второй врач \([0, 1)\);
  • пациент \(5\): первый врач не принимает, второй врач \([6, 11)\).

Пациент \(2\) должен быть у двух врачей одновременно.

После запроса \(7\) следующая конфигурация:

  • очередь: \([2]\);
  • стек: \([1, 5, 2, 3]\);
  • пациент \(1\): первый врач не принимает, второй врач \([11, 13)\);
  • пациент \(2\): первый врач \([0, 5)\), второй врач \([1, 6)\);
  • пациент \(3\): первый врач не принимает, второй врач \([0, 1)\);
  • пациент \(5\): первый врач не принимает, второй врач \([6, 11)\).

Пациент \(2\) должен быть у двух врачей одновременно.

F1. Игра на дереве (простая версия)

Бинарный поиск Деревья дп жадные алгоритмы игры Перебор реализация Структуры данных *2700

Это простая версия задачи. В этой версии \(\mathbf{u = v}\). Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Алиса и Боб играют в забавную игру на дереве. В эту игру играют на дереве из \(n\) вершин, пронумерованных от \(1\) до \(n\). Напомним, что дерево на \(n\) вершинах — это неориентированный связный граф с \(n - 1\) ребрами.

Алиса и Боб ходят по очереди, причём Алиса ходит первой. Каждый игрок начинает с какой-то вершины.

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

Вам даны две вершины \(u\) и \(v\). Представим простой путь из вершины \(u\) в \(v\) как массив \(p_1, p_2, p_3, \ldots, p_m\), где \(p_1 = u\), \(p_m = v\), между \(p_i\) и \(p_{i + 1}\) есть ребро для всех \(i\) (\(1 \le i < m\)).

Вы должны определить победителя игры, если Алиса начнёт в вершине \(1\), а Боб в вершине \(p_j\) для каждого \(j\) (где \(1 \le j \le m\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин дерева.

Каждая из следующих \(n - 1\) строк содержит два целых числа \(a\), \(b\) (\(1 \le a, b \le n\)), обозначающих неориентированное ребро между вершинами \(a\) и \(b\). Гарантируется, что данные ребра образуют дерево.

Последняя строка каждого набора входных данных содержит два целых числа \(u\) и \(v\) (\(2 \le u, v \le n\), \(\mathbf{u = v}\)).

Гарантируется, что путь между \(u\) и \(v\) не проходит через вершину \(1\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(m\) строк.

В \(i\)-й строке выведите победителя игры, если Алиса начинает с вершины \(1\), а Боб с вершины \(p_i\), выведите «Alice» (без кавычек), если выиграет Алиса, или «Bob» (без кавычек) в противном случае.

Примечание
Дерево из первого и второго примера.

В первом наборе входных данных путь будет иметь вид (\(2,2\)). Боб начинает в вершине \(2\), Алиса в своём первом ходу не сможет никуда пойти, и она проиграет.

Во втором наборе входных данных путь будет иметь вид (\(3,3\)). Боб начинает в вершине \(3\), Алиса переместится в вершину \(2\), и у Боба не останется вершин, которые можно посетить, и он проиграет.

F2. Игра на дереве (сложная версия)

Бинарный поиск Деревья Структуры данных *3500

Это сложная версия задачи. В этой версии не гарантируется, что \(u = v\). Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Алиса и Боб играют в забавную игру на дереве. В эту игру играют на дереве из \(n\) вершин, пронумерованных от \(1\) до \(n\). Напомним, что дерево на \(n\) вершинах — это неориентированный связный граф с \(n - 1\) ребрами.

Алиса и Боб ходят по очереди, причём Алиса ходит первой. Каждый игрок начинает с какой-то вершины.

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

Вам даны две вершины \(u\) и \(v\). Представим простой путь из вершины \(u\) в \(v\) как массив \(p_1, p_2, p_3, \ldots, p_m\), где \(p_1 = u\), \(p_m = v\), между \(p_i\) и \(p_{i + 1}\) есть ребро для всех \(i\) (\(1 \le i < m\)).

Вы должны определить победителя игры, если Алиса начнёт в вершине \(1\), а Боб в вершине \(p_j\) для каждого \(j\) (где \(1 \le j \le m\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин дерева.

Каждая из следующих \(n - 1\) строк содержит два целых числа \(a\), \(b\) (\(1 \le a, b \le n\)), обозначающих неориентированное ребро между вершинами \(a\) и \(b\). Гарантируется, что данные рёбра образуют дерево.

Последняя строка каждого набора входных данных содержит два целых числа \(u\) и \(v\) (\(2 \le u, v \le n\)).

Гарантируется, что путь между \(u\) и \(v\) не проходит через вершину \(1\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(m\) строк.

В \(i\)-й строке выведите победителя игры, если Алиса начинает с вершины \(1\), а Боб с вершины \(p_i\), выведите «Alice» (без кавычек), если выиграет Алиса, или «Bob» (без кавычек) в противном случае.

Примечание
Дерево из первого примера.

В первом наборе входных данных путь будет иметь вид (\(2,3\)). В случае, когда Боб начинает в вершине \(2\), Алиса в своём первом ходу не сможет никуда пойти, и она проиграет.

А в случае, когда Боб начинает в вершине \(3\), Алиса переместится в вершину \(2\), и у Боба не останется вершин, которые можно посетить, и он проиграет.

D. Роберт Гуд и миссис Гуд

жадные алгоритмы Перебор сортировки Структуры данных *1400

Впечатли своего брата, но не огорчай свою мать.

Брат и мать Робина собираются в гости, и Робин должен выбрать день приезда для каждого гостя.

Все доступные дни пронумерованы от \(1\) до \(n\). У Робина и его веселой компании запланировано всего \(k\) рискованных 'работ'. \(i\)-я работа проходит между днями \(l_i\) и \(r_i\) включительно, для \(1 \le i \le k\).

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

Робин хочет, чтобы визит его брата пересекался с максимальным количеством различных работ, а визит его матери — с минимальным.

Найдите подходящие дни начала визита для брата и матери Робина. Если есть несколько подходящих дней, выберите самый ранний.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(d\), \(k\) (\(1 \le n \le 10^5, 1 \le d, k \le n\)) — количество дней, продолжительность визитов и количество работ.

Затем следуют \(k\) строк, каждая содержит по два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — начальный и конечный день каждой работы.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите два целых числа, лучшие дни начала визитов брата и матери Робина соответственно. Оба визита должны укладываться между днем \(1\) и \(n\) включительно.

Примечание

В первом примере единственная работа занимает все \(2\) дня, оба гостя должны приехать в день \(1\).

Во втором примере день \(2\) пересекается с \(2\) работами, а день \(1\) пересекается только с \(1\).

В третьем примере Роберт посещает дни \([1,2]\), миссис Гуд посещает дни \([4,5]\).

G. Молочные дни

жадные алгоритмы Перебор реализация Структуры данных *2200

Что сделано, то сделано, и испорченное молоко не исправить.

Маленький Джон настолько мал, насколько ночь — это день, он был известен как гигант, возможно, ростом \(2.1\) метра. Это связано с его любовью к молоку.

В его молочном дневнике \(n\) записей, показывающих, что он приобрел \(a_i\) пинт свежего молока в день \(d_i\). Молоко теряет свежесть с течением времени и остается пригодным для питья максимум \(k\) дней. Другими словами, свежее молоко, приобретенное в день \(d_i\), будет пригодно для питья с дня \(d_i\) по день \(d_i+k-1\) включительно.

Каждый день маленький Джон пьет пригодное для питья молоко, максимум \(m\) пинт. Другими словами, если молока меньше \(m\) пинт, он выпьет все и не будет насыщен; если молока \(m\) пинт или больше, он выпьет ровно \(m\) пинт и будет насыщен, и это будет день молочного насыщения.

Маленький Джон всегда сначала пьет самое свежее пригодное для питья молоко.

Определите количество дней молочного насыщения маленького Джона.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\leq t \leq 10^4\)), количество наборов входных данных.

Первая строка каждого набора входных данных состоит из трех целых чисел \(n\), \(m\), \(k\) (\(1\le n\), \(m\), \(k \le 10^5\)), количество записей в дневнике, максимальное количество пинт, необходимое для дня молочного насыщения, и продолжительность свежести молока.

Затем следуют \(n\) строк каждого набора входных данных, каждая с двумя целыми числами \(d_i\) и \(a_i\) (\(1\le d_i\), \(a_i \le 10^6\)), день, в который было приобретено молоко, и количество приобретенных пинт. Они отсортированы по возрастанию значений \(d_i\), и все значения \(d_i\) различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество дней молочного насыщения.

Примечание

В первом наборе входных данных \(5\) пинт молока хороши в течение \(3\) дней до порчи.

Во втором наборе входных данных произойдёт следующее:

  • в день \(1\) он получит \(5\) пинт молока и выпьет \(3\) из них (останется \(2\) пинты с дня \(1\));
  • в день \(2\) он получит \(7\) пинт молока и выпьет \(3\) из них (останется \(2\) пинты с дня \(1\) и \(4\) пинты с дня \(2\));
  • в день \(3\) он выпьет \(3\) пинты с дня \(2\) (останется \(2\) пинты с дня \(1\) и \(1\) пинта с дня \(2\));
  • в день \(4\) молоко приобретённое в день \(1\) испортится и он выпьет \(1\) пинту с дня \(2\) (больше молока не осталось).

H. Стрельба из лука Робина Гуда

жадные алгоритмы разделяй и властвуй Структуры данных хэши *1900

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

Шериф Ноттингема организовал турнир по стрельбе из лука. Это финальный раунд, и Робин Гуд играет против Шерифа!

В ряд выставлено \(n\) мишеней, пронумерованных от \(1\) до \(n\). Когда игрок стреляет в мишень \(i\), его счет увеличивается на \(a_i\), и мишень \(i\) уничтожается. Игра состоит из ходов, и игроки поочередно делают свои ходы. Робин Гуд всегда начинает игру, затем Шериф и так далее. Игра продолжается до тех пор, пока все мишени не будут уничтожены. Оба игрока начинают со счетом \(0\).

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

Шериф Ноттингема подозревает, что он может проиграть игру! Этого не должно произойти, вы должны помочь Шерифу. Шериф задаст \(q\) запросов, каждый из которых будет указывать \(l\) и \(r\). Это означает, что игра будет проводиться только с мишенями \(l, l+1, \dots, r\), так как остальные будут удалены Шерифом перед началом игры.

Для каждого запроса \(l\), \(r\) определите, может ли Шериф не проиграть игру, когда рассматриваются только мишени \(l, l+1, \dots, r\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\), \(q\) (\(1 \le n,q \le 2\cdot10^5\)) — количество мишеней и количество запросов, которые задаст Шериф.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^6\)) — очки за поражение каждой мишени.

Затем следуют \(q\) строк, каждая из которых содержит два целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)) — диапазон мишеней, который рассматривается для каждого запроса.

Гарантируется, что сумма как \(n\), так и \(q\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите «YES», если Шериф не проиграет игру, когда рассматриваются только мишени \(l, l+1, \dots, r\), и «NO» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

B. Сверхскорость

Бинарный поиск дп жадные алгоритмы реализация Структуры данных *1900

В ряд стоят \(n\) городов, пронумерованных \(1, 2, \ldots, n\) слева направо.

  • В момент времени \(1\) вы захватываете ровно один город, называемый начальным городом.
  • В моменты времени \(2, 3, \ldots, n\) вы можете выбрать город, соседний с уже захваченным, и захватить его.

Вы выиграете, если для каждого \(i\) вы захватите город \(i\) в момент времени не позже, чем \(a_i\). Выигрышная стратегия может существовать, а может и не существовать, в том числе в зависимости от стартового города. Сколько стартовых городов позволяют вам выиграть?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество городов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — сроки завоевания городов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных города \(2\), \(3\) и \(4\) являются подходящими стартовыми городами.

Во втором наборе входных данных нет подходящих стартовых городов.

В третьем наборе входных данных единственным подходящим стартовым городом является город \(5\).

D. Максимум + минимум + количество

дп жадные алгоритмы матрицы реализация снм сортировки Структуры данных *2200

Дан массив целых положительных чисел \(a_1, a_2, \ldots, a_n\).

Вы можете раскрасить некоторые элементы массива в красный цвет, но при этом в нем не должно оказаться двух соседних красных элементов (т.е. для \(1 \leq i \leq n-1\) хотя бы один из \(a_i\) и \(a_{i+1}\) должен не быть красным).

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — заданный массив.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных вы можете раскрасить массив следующим образом: \([\color{red}{5}, 4, \color{red}{5}]\). Ваш счет составит \(\max([5, 5]) + \min([5, 5]) + \text{size}([5, 5]) = 5+5+2 = 12\). Это максимальный счет, который вы можете получить.

Во втором наборе входных данных вы можете раскрасить массив следующим образом: \([4, \color{red}{5}, 4]\). Ваш счет составит \(\max([5]) + \min([5]) + \text{size}([5]) = 5+5+1 = 11\). Это максимальный счет, который вы можете получить.

В третьем наборе входных данных вы можете раскрасить массив следующим образом: \([\color{red}{3}, 3, \color{red}{3}, 3, \color{red}{4}, 1, 2, \color{red}{3}, 5, \color{red}{4}]\). Ваш счет составит \(\max([3, 3, 4, 3, 4]) + \min([3, 3, 4, 3, 4]) + \text{size}([3, 3, 4, 3, 4]) = 4+3+5 = 12\). Это максимальный счет, который вы можете получить.

E1. Сложные отрезки (простая версия)

Бинарный поиск жадные алгоритмы математика разделяй и властвуй снм сортировки Структуры данных *3300

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

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

  • все подмножества имеют одинаковый размер; и
  • пара отрезков пересекается тогда и только тогда, когда эти два отрезка находятся в одном и том же подмножестве.

Вам даны \(n\) отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_n, r_n]\). Найдите максимальный размер сложного подмножества этих отрезков.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^4\)) — количество отрезков.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(l_1, l_2, \ldots, l_n\) (\(1 \le l_i \le 2n\)) — левые концы отрезков.

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(r_1, r_2, \ldots, r_n\) (\(l_i \leq r_i \le 2n\)) — правые концы отрезков.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимальный размер сложного подмножества заданных отрезков.

Примечание

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

Во втором наборе входных данных не существует подходящего разбиения для всех пяти отрезков. Корректное разбиение с четырьмя отрезками выглядит следующим образом: \(\{\{ [1, 5], [2, 4] \}, \{ [6, 9], [8, 10] \}\}\).

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

E2. Сложные отрезки (сложная версия)

Бинарный поиск жадные алгоритмы математика разделяй и властвуй снм сортировки Структуры данных *3400

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

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

  • все подмножества имеют одинаковый размер; и
  • пара отрезков пересекается тогда и только тогда, когда эти два отрезка находятся в одном и том же подмножестве.

Вам даны \(n\) отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_n, r_n]\). Найдите максимальный размер сложного подмножества этих отрезков.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество отрезков.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(l_1, l_2, \ldots, l_n\) (\(1 \le l_i \le 2n\)) — левые концы отрезков.

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(r_1, r_2, \ldots, r_n\) (\(l_i \leq r_i \le 2n\)) — правые концы отрезков.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимальный размер сложного подмножества заданных отрезков.

Примечание

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

Во втором наборе входных данных не существует подходящего разбиения для всех пяти отрезков. Корректное разбиение с четырьмя отрезками выглядит следующим образом: \(\{\{ [1, 5], [2, 4] \}, \{ [6, 9], [8, 10] \}\}\).

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

A. Значимое среднее

жадные алгоритмы математика сортировки Структуры данных *800

У Пака Чанека есть массив \(a\) из \(n\) целых положительных чисел. Поскольку в настоящее время он изучает, как вычислять среднее арифметическое двух чисел, он хочет попрактиковаться в этом на своем массиве \(a\).

Пока в массиве \(a\) есть хотя бы два элемента, Пак Чанек будет выполнять следующую трехшаговую операцию:

  1. Выбрать два различных индекса \(i\) и \(j\) (\(1 \leq i, j \leq |a|\); \(i \neq j\)), где \(|a|\) обозначает текущий размер массива \(a\).
  2. Добавить \(\lfloor \frac{a_i+a_j}{2} \rfloor\)\(^{\text{∗}}\) в конец массива.
  3. Удалить из массива элементы \(a_i\) и \(a_j\) и объединить оставшиеся части массива.

Например, предположим, что \(a=[5,4,3,2,1,1]\). Если мы выберем \(i=1\) и \(j=5\), то получим массив \(a=[4,3,2,1,3]\). Если мы выберем \(i=4\) и \(j=3\), то получим массив \(a=[5,4,1,1,2]\).

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

\(^{\text{∗}}\)\(\lfloor x \rfloor\) обозначает функцию округления вниз числа \(x\). Результатом этой функции является наибольшее целое число, которое меньше или равно \(x\). Например, \(\lfloor 6 \rfloor = 6\), \(\lfloor 2.5 \rfloor=2\), \(\lfloor -3.6 \rfloor=-4\) и \(\lfloor \pi \rfloor=3\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 50\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Обратите внимание, что сумма \(n\) по всем наборам входных данных не ограничена.

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимально возможное значение \(x\) после применения всех операций.

Примечание

В первом наборе входных данных массив изначально равен \(a=[1,7,8,4,5]\). Пак Чанек выполнит следующие операции:

  1. Выбрать \(i=1\) и \(j=2\), тогда \(a=[8,4,5,4]\).
  2. Выбрать \(i=3\) и \(j=2\), тогда \(a=[8,4,4]\).
  3. Выбрать \(i=2\) и \(j=3\), тогда \(a=[8,4]\).
  4. Выбрать \(i=1\) и \(j=2\), тогда \(a=[6]\).

После всех операций массив состоит из одного элемента \(x=6\). Можно доказать, что не существует последовательности операций, в результате которой число \(x\) будет больше \(6\).

C2. Координация презентации (сложная версия)

жадные алгоритмы Конструктив реализация сортировки Структуры данных *1900

Это сложная версия задачи. В двух версиях отличаются ограничения на \(q\) и ограничение по времени отличаются. В этой версии \(0 \leq q \leq 2 \cdot 10^5\). Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Команда, состоящая из \(n\) участников, пронумерованных от \(1\) до \(n\), должна представить слайд-шоу на большом собрании. Слайд-шоу содержит \(m\) слайдов.

Имеется массив \(a\) длины \(n\). Изначально участники собрания стоят в очереди в порядке \(a_1, a_2, \ldots, a_n\) от начала до конца. Слайд-шоу состоит из последовательного показа слайдов с \(1\) по \(m\). Каждый слайд будет представлен участником, стоящим в начале очереди. После представления каждого слайда вы можете переместить участника, стоящего в начале очереди, на любую позицию в очереди (без изменения порядка остальных участников). Например, предположим, что очередь участников имеет вид \([\color{red}{3},1,2,4]\). После того как участник \(3\) представит текущий слайд, вы можете изменить очередь участников на \([\color{red}{3},1,2,4]\), \([1,\color{red}{3},2,4]\), \([1,2,\color{red}{3},4]\) или \([1,2,4,\color{red}{3}]\).

Также имеется массив \(b\) длины \(m\). Слайд-шоу считается хорошим, если можно так перемещать участников после выступлений, чтобы слайд \(i\) был представлен участником \(b_i\) для всех \(i\) от \(1\) до \(m\).

Однако ваш назойливый начальник хочет сделать \(q\) обновлений массива \(b\). В \(i\)-м обновлении он выберет слайд \(s_i\) и участника \(t_i\) и присвоит \(b_{s_i} := t_i\). Заметим, что эти обновления постоянны, то есть изменения, внесенные в массив \(b\), будут применяться при обработке последующих обновлений.

Для каждого из \(q+1\) состояний массива \(b\) (начального состояния и после каждого из \(q\) обновлений) определите, является ли слайд-шоу хорошим.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(q\) (\(1 \le n, m \le 2 \cdot 10^5\), \(0 \leq q \leq 2 \cdot 10^5\)) — количество участников, количество слайдов и количество обновлений.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le n\)) — начальный порядок расположения участников от начала до конца очереди. Гарантируется, что каждое целое число от \(1\) до \(n\) встречается в \(a\) ровно один раз.

Третья строка каждого набора входных данных содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \le b_i \le n\)) — номера участников, которые должны представлять каждый слайд.

Каждая из следующих \(q\) строк содержит по два целых числа \(s_i\) и \(t_i\) (\(1 \le s_i \le m\), \(1 \le t_i \le n\)) — параметры обновления.

Гарантируется, что сумма \(n\), сумма \(m\) и сумма \(q\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q+1\) строку, соответствующих \(q+1\) состоянию массива \(b\). Выведите «YA», если слайд-шоу хорошее, и «TIDAK» в противном случае.

Вы можете выводить ответ в любом регистре (верхнем или нижнем). Например, строки «YA», «Ya», «ya» и «YA» будут распознаны как положительные ответы.

Примечание

В первом наборе входных данных изначально вам не нужно перемещать участников, так как оба слайда будут представлены участником \(1\), который уже находится в начале очереди. После этого присваивается \(b_1 := 2\), теперь слайд \(1\) должен быть представлен участником \(2\). Это невозможно, так как участник \(1\) представит слайд \(1\) первым. Затем устанавливается \(b_1 = 1\), \(b\) становится таким же, как и начальный \(b\), что делает слайд-шоу хорошим.

E1. Цифровая деревня (простая версия)

бпф графы Деревья дп жадные алгоритмы математика Перебор поиск в глубину и подобное реализация снм Структуры данных *2300

Это простая версия задачи. В трех версиях отличаются ограничения на \(n\) и \(m\). Вы можете совершать взломы только в том случае, если решены все версии задачи.

Пак Чанек устанавливает интернет-связь в деревне Кхунтиен. Деревню можно представить как связный простой граф с \(n\) домами и \(m\) интернет-кабелями, соединяющими дом \(u_i\) и дом \(v_i\), каждый с задержкой \(w_i\).

Существует \(p\) домов, которым требуется интернет. Пак Чанек может установить серверы не более чем в \(k\) домов. Дома, которым нужен интернет, будут подключены к одному из серверов. Однако, поскольку каждый кабель имеет свою задержку, задержка, которую испытывает дом \(s_i\), нуждающийся в интернете, будет равна максимальной задержке кабелей между этим домом и сервером, к которому он подключен.

Для каждого \(k = 1,2,\ldots,n\), помогите Пак Чанеку определить минимальную суммарную задержку, которая может быть достигнута для всех домов, требующих интернет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\), \(p\) (\(2 \le n \le 400\); \(n-1 \le m \le 400\); \(1 \le p \le n\)) — количество домов, количество кабелей и количество домов, которым нужен интернет.

Вторая строка каждого набора входных данных содержит \(p\) целых чисел \(s_1, s_2, \ldots, s_p\) (\(1 \le s_i \le n\)) — номера домов, которым нужен интернет. Гарантируется, что все элементы \(s\) различны.

В \(i\)-й из следующих \(m\) строк каждого набора входных данных содержатся три целых числа \(u_i\), \(v_i\) и \(w_i\) (\(1 \le u_i < v_i \le n\); \(1 \le w_i \le 10^9\)) — интернет-кабель, соединяющий дом \(u_i\) и дом \(v_i\) с задержкой \(w_i\). Гарантируется, что заданные ребра образуют простой связный граф.

Гарантируется, что сумма \(n^3\) и сумма \(m^3\) не превосходят \(10^8\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел: минимальное общее время ожидания, которое может быть достигнуто для всех домов, нуждающихся в интернете для каждого \(k = 1,2,\ldots,n\).

Примечание

В первом наборе входных данных для \(k=3\) одним из лучших решений является установка серверов в вершинах \(2\), \(6\) и \(8\) и получение следующей задержки:

  • задержка\((2) = 0\)
  • задержка\((5) = \max(3, 5) = 5\)
  • задержка\((6) = 0\)
  • задержка\((8) = 0\)
  • задержка\((9) = \max(2, 4) = 4\)

Таким образом, общая задержка составит \(9\).

E2. Цифровая деревня (сложная версия)

графы Деревья дп математика снм Структуры данных *2500

Это сложная версия задачи. В трех версиях отличаются ограничения на \(n\) и \(m\). Вы можете совершать взломы только в том случае, если решены все версии задачи.

Пак Чанек устанавливает интернет-связь в деревне Кхунтиен. Деревню можно представить как связный простой граф с \(n\) домами и \(m\) интернет-кабелями, соединяющими дом \(u_i\) и дом \(v_i\), каждый с задержкой \(w_i\).

Существует \(p\) домов, которым требуется интернет. Пак Чанек может установить серверы не более чем в \(k\) домов. Дома, которым нужен интернет, будут подключены к одному из серверов. Однако, поскольку каждый кабель имеет свою задержку, задержка, которую испытывает дом \(s_i\), нуждающийся в интернете, будет равна максимальной задержке кабелей между этим домом и сервером, к которому он подключен.

Для каждого \(k = 1,2,\ldots,n\), помогите Пак Чанеку определить минимальную суммарную задержку, которая может быть достигнута для всех домов, требующих интернет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\), \(p\) (\(2 \le n \le 5000\); \(n-1 \le m \le 5000\); \(1 \le p \le n\)) — количество домов, количество кабелей и количество домов, которым нужен интернет.

Вторая строка каждого набора входных данных содержит \(p\) целых чисел \(s_1, s_2, \ldots, s_p\) (\(1 \le s_i \le n\)) — номера домов, которым нужен интернет. Гарантируется, что все элементы \(s\) различны.

В \(i\)-й из следующих \(m\) строк каждого набора входных данных содержатся три целых числа \(u_i\), \(v_i\) и \(w_i\) (\(1 \le u_i < v_i \le n\); \(1 \le w_i \le 10^9\)) — интернет-кабель, соединяющий дом \(u_i\) и дом \(v_i\) с задержкой \(w_i\). Гарантируется, что заданные ребра образуют простой связный граф.

Гарантируется, что сумма \(n\) и сумма \(m\) не превосходят \(5000\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел: минимальное общее время ожидания, которое может быть достигнуто для всех домов, нуждающихся в интернете для каждого \(k = 1,2,\ldots,n\).

Примечание

В первом наборе входных данных для \(k=3\) одним из лучших решений является установка серверов в вершинах \(2\), \(6\) и \(8\) и получение следующей задержки:

  • задержка\((2) = 0\)
  • задержка\((5) = \max(3, 5) = 5\)
  • задержка\((6) = 0\)
  • задержка\((8) = 0\)
  • задержка\((9) = \max(2, 4) = 4\)

Таким образом, общая задержка составит \(9\).

E3. Цифровая деревня (экстремальная версия)

графы Деревья дп жадные алгоритмы математика поиск в глубину и подобное снм Структуры данных *2800

Это экстремальная версия задачи. В трех версиях отличаются ограничения на \(n\) и \(m\). Вы можете совершать взломы только в том случае, если решены все версии задачи.

Пак Чанек устанавливает интернет-связь в деревне Кхунтиен. Деревню можно представить как связный простой граф с \(n\) домами и \(m\) интернет-кабелями, соединяющими дом \(u_i\) и дом \(v_i\), каждый с задержкой \(w_i\).

Существует \(p\) домов, которым требуется интернет. Пак Чанек может установить серверы не более чем в \(k\) домов. Дома, которым нужен интернет, будут подключены к одному из серверов. Однако, поскольку каждый кабель имеет свою задержку, задержка, которую испытывает дом \(s_i\), нуждающийся в интернете, будет равна максимальной задержке кабелей между этим домом и сервером, к которому он подключен.

Для каждого \(k = 1,2,\ldots,n\), помогите Пак Чанеку определить минимальную суммарную задержку, которая может быть достигнута для всех домов, требующих интернет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\), \(p\) (\(2 \le n \le 2 \cdot 10^5\); \(n-1 \le m \le 2 \cdot 10^5\); \(1 \le p \le n\)) — количество домов, количество кабелей и количество домов, которым нужен интернет.

Вторая строка каждого набора входных данных содержит \(p\) целых чисел \(s_1, s_2, \ldots, s_p\) (\(1 \le s_i \le n\)) — номера домов, которым нужен интернет. Гарантируется, что все элементы \(s\) различны.

В \(i\)-й из следующих \(m\) строк каждого набора входных данных содержатся три целых числа \(u_i\), \(v_i\) и \(w_i\) (\(1 \le u_i < v_i \le n\); \(1 \le w_i \le 10^9\)) — интернет-кабель, соединяющий дом \(u_i\) и дом \(v_i\) с задержкой \(w_i\). Гарантируется, что заданные ребра образуют простой связный граф.

Гарантируется, что сумма \(n\) и сумма \(m\) не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел: минимальное общее время ожидания, которое может быть достигнуто для всех домов, нуждающихся в интернете для каждого \(k = 1,2,\ldots,n\).

Примечание

В первом наборе входных данных для \(k=3\) одним из лучших решений является установка серверов в вершинах \(2\), \(6\) и \(8\) и получение следующей задержки:

  • задержка\((2) = 0\)
  • задержка\((5) = \max(3, 5) = 5\)
  • задержка\((6) = 0\)
  • задержка\((8) = 0\)
  • задержка\((9) = \max(2, 4) = 4\)

Таким образом, общая задержка составит \(9\).

E2. Billetes MX (сложная версия)

Бинарный поиск графы Комбинаторика снм Структуры данных *2600

Это сложная версия задачи. В этой версии гарантируется, что \(q \leq 10^5\). Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Целочисленная сетка \(A\) с \(p\) строками и \(q\) столбцами называется красивой, если:

  • Все элементы сетки являются целыми числами от \(0\) до \(2^{30}-1\), и
  • Для любой подсетки XOR значений в углах равен \(0\). Формально, для любых четырех целых чисел \(i_1\), \(i_2\), \(j_1\), \(j_2\) (\(1 \le i_1 < i_2 \le p\); \(1 \le j_1 < j_2 \le q\)) должно выполняться \(A_{i_1, j_1} \oplus A_{i_1, j_2} \oplus A_{i_2, j_1} \oplus A_{i_2, j_2} = 0\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

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

Однако Монокарп считает, что эта задача слишком проста. Поэтому он выполнит \(q\) обновлений сетки. В каждом обновлении он будет выбирать незаполненную ячейку и присваивать ей целое число. Заметим, что эти обновления перманентны. То есть изменения, внесенные в сетку, будут применяться при обработке будущих обновлений.

Для каждого из \(q + 1\) состояния сетки (начального состояния и после каждого из \(q\) запросов) определите количество способов, которыми Поликарп может присвоить целые числа незаполненным ячейкам, чтобы сетка стала красивой. Поскольку это число может быть очень большим, от вас требуется только вывести их значения по модулю \(10^9+7\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит четыре целых числа \(n\), \(m\), \(k\) и \(q\) (\(2 \le n, m \le 10^5\); \(0 \le k, q \leq 10^5\)) — количество строк, количество столбцов, количество фиксированных ячеек и количество обновлений.

Следующие \(k\) строк содержат по три целых числа \(r\), \(c\) и \(v\) (\(1 \le r \le n, 1 \le c \le m\); \(0 \le v < 2^{30}\)) — изначально элементу \(G_{r, c}\) присвоено целое число \(v\).

Следующие \(q\) строк содержат по три целых числа \(r\), \(c\) и \(v\) (\(1 \le r \le n, 1 \le c \le m\); \(0 \le v < 2^{30}\)) — данное обновление присваивает элементу \(G_{r, c}\) целое число \(v\).

Гарантируется, что пары \((r,c)\) во всех присваиваниях различны.

Гарантируется, что суммы \(n\), \(m\), \(k\) и \(q\) по всем наборам входных данных не превосходят \(10^5\) соответственно.

Выходные данные

Для каждого набора входных данных выведите \(q + 1\) строку. В \(i\)-й строке вывода должен содержаться ответ для \(i\)-го состояния решетки по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных мы изначально имеем следующую сетку:

\(0\)\(6\)\(10\)
\(6\)\(0\)\(12\)
\(10\)\(12\)\(?\)

Можно доказать, что единственным допустимым значением для ячейки \((3, 3)\) является \(0\), поэтому первый ответ — \(1\). Для второго запроса ячейка не удовлетворяет условию, поэтому ответ — \(0\).

F. Холмы и ямы

жадные алгоритмы математика матрицы Структуры данных *3500

В пустынном городе с холмистым ландшафтом мэрия решила выровнять поверхность дороги, закупив самосвал. Дорога разделена на \(n\) участков, пронумерованных от \(1\) до \(n\) слева направо. Высота поверхности на \(i\)-м участке равна \(a_i\). Если высота \(i\)-го участка больше \(0\), то самосвал должен забрать песок с \(i\)-го участка дороги, а если высота \(i\)-го участка меньше \(0\), то самосвал должен засыпать песком яму на \(i\)-м участке дороги. Гарантируется, что изначальные высоты не равны \(0\).

Когда самосвал находится на \(i\)-м участке дороги, он может либо забрать оттуда \(x\) единиц песка, и тогда высота поверхности на \(i\)-м участке уменьшится на \(x\), либо засыпать туда \(x\) единиц песка (при условии, что у него в кузове сейчас есть хотя бы \(x\) единиц песка), и тогда высота поверхности на \(i\)-м участке дороги увеличится на \(x\).

Самосвал может начать свой путь на любом участке дороги. Перемещение на соседний слева или справа участок дороги занимает \(1\) минуту, при этом временем загрузки и разгрузки песка можно пренебречь. Кузов самосвала имеет бесконечную вместимость и изначально пуст.

Вам нужно найти минимальное время, за которое самосвал сможет выровнять песок так, чтобы высота на каждом участке стала равна \(0\). Обратите внимание, что после всех передвижений в кузове самосвала может остаться песок. Вам нужно решить эту задачу независимо, если оставить только участки с номерами от \(l_i\) до \(r_i\). При этом использовать песок вне отрезка нельзя.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 3 \cdot 10^5\)) — количество участков и количество запросов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\), \(a_i \neq 0\)) — изначальная высота на каждом участке.

\(i\)-я из следующих \(q\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — границы отрезка участков, для которого нужно определить минимальное время.

Гарантируется, что сумма \(n\) по всем наборам входных данных и сумма \(q\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите минимальное время, необходимое, чтобы выровнять песок на отрезке \([l_i, r_i]\), или \(-1\), если это невозможно.

Примечание

В первом наборе входных данных нужно добавить \(179\) единиц песка на единственном участке. Но забрать их неоткуда, поэтому это невозможно.

Во втором наборе входных данных:

  • В первом запросе самосвал может начать путь на втором участке. Он может забрать \(2\) единицы песка, после чего на втором участке высота станет равна \(0\). Затем самосвал может переехать на третий участок. Он может высыпать туда \(1\) единицу песка, после чего на третьем участке высота станет равна \(0\). Затем самосвал может переехать на четвёртый участок. Там он может забрать \(3\) единицы песка, после чего на четвёртом участке высота станет равна \(0\). Суммарно самосвал потратит на перемещения \(2\) минуты.
  • Во втором запросе самосвал может начать путь на четвёртом участке. Он может забрать \(3\) единицы песка, после чего на четвёртом участке высота станет равна \(0\). Затем самосвал может переехать на пятый участок. Он может высыпать туда \(1\) единицу песка, после чего на пятом участке высота станет равна \(0\). Затем самосвал может переехать на четвёртый участок, а потом на третий. Он может высыпать \(1\) единицу песка, после чего на третьем участке высота станет равна \(0\). Затем самосвал может переехать на второй участок. Он может забрать \(2\) единицы песка. Затем он может переехать на первый участок. Он может высыпать \(2\) единицы песка, после чего на первом участке высота станет равна \(0\). Суммарно самосвал потратит на перемещения \(5\) минут.
  • В третьем запросе самосвал не сможет сделать высоту на каждом участке равной \(0\).

D. Проверка характеристик

дп математика Перебор реализация Структуры данных *1800

Представьте себе игру, в которой вы играете за персонажа с двумя характеристиками: «Сила» и «Интеллект», которые изначально находятся на нулевом уровне.

В ходе игры вы получите \(m\) очков характеристик, которые позволят вам поднять их уровни — одно очко увеличивает одну из характеристик на один уровень. Но в процессе игры вы также сталкиваетесь с так называемыми «Проверками характеристик»: если ваша соответствующая характеристика достаточно высока, вы пройдете проверку; в противном случае вы провалите проверку.

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

Обратите внимание, что вы не можете изменить порядок записей.

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le m \le 5000\); \(m < n \le 2 \cdot 10^6\)) — количество записей в списке и общее количество очков, которые вы получите в ходе игры.

Во второй строке заданы \(n\) целых чисел \(r_1, r_2, \dots, r_n\) (\(-m \le r_i \le m\)), где \(r_i\) кодирует \(i\)-ю запись:

  • Если \(r_i = 0\), то \(i\)-я запись является записью о получении одного очка характеристик. Вы можете потратить его на повышение уровня либо Силы, либо Интеллекта;
  • Если \(r_i > 0\), то это проверка Интеллекта: если ваш уровень Интеллекта больше или равен \(|r_i|\), вы проходите проверку.
  • Если \(r_i < 0\), то это проверка Силы: если ваш уровень Силы больше или равен \(|r_i|\), вы проходите проверку.

Дополнительное ограничение на входные данные: в заданной последовательности \(r_1, r_2, \dots, r_n\) ровно \(m\) элементов, равных \(0\).

Выходные данные

Выведите одно целое число — максимальное количество проверок, которые вы можете пройти.

Примечание

В первом тесте оптимально вложить каждое очко в Силу, поэтому вы провалите \(2\) проверки Интеллекта, но пройдете \(3\) проверки Силы.

Во втором тесте вы провалите обе проверки, так как первое очко характеристик приходит только после проверок.

В третьем тесте одной из оптимальных стратегий является:

  1. вложить первое очко в Интеллект;
  2. вложить второе очко в Силу;
  3. вложить третье очко в Силу;
В результате вы пройдете \(2\) проверки Интеллекта \(r_3\) и \(r_9\) и \(2\) проверки Силы \(r_7\) и \(r_8\).

G. Переменный урон

Потоки Структуры данных *3000

Монокарп собирает армию в компьютерной игре, чтобы сразиться с драконом.

Армия состоит из двух частей: героев и защитных артефактов. У каждого героя один параметр — его здоровье. У каждого защитного артефакта тоже один параметр — его прочность.

Перед началом боя Монокарп раздает артефакты героям так, чтобы каждый герой получил не более одного артефакта.

Бой состоит из раундов, которые проходят следующим образом:

  • сначала дракон наносит каждому герою урон, равный \(\frac{1}{a + b}\) (вещественное число без округления), где \(a\) — количество живых героев, а \(b\) — количество активных артефактов;
  • после этого все герои со здоровьем \(0\) или меньше умирают;
  • наконец, некоторые артефакты деактивируются. Артефакт с прочностью \(x\) деактивируется, когда происходит одно из следующего: герой, держащий артефакт, либо умирает, либо получает суммарно \(x\) урона (от начала боя). Если артефакт не выдан ни одному из героев, он считается неактивным с самого начала битвы.

Бой заканчивается, если в живых не осталось ни одного героя.

Изначально армия пуста. Приходит \(q\) запросов: добавить в армию героя со здоровьем \(x\) или артефакт с прочностью \(y\). После каждого запроса найдите максимальное количество раундов, которые Монокарп может продержаться, если оптимально распределит артефакты.

Входные данные

В первой строке записано одно целое число \(q\) (\(1 \le q \le 3 \cdot 10^5\)) — количество запросов.

В \(i\)-й из следующих \(q\) строк записаны два целых числа \(t_i\) и \(v_i\) (\(t_i \in \{1, 2\}\); \(1 \le v_i \le 10^9\)) — тип запроса и величина параметра запроса. Если тип \(1\), то добавляется один герой со здоровьем \(v_i\). Если тип \(2\), то добавляется артефакт с прочностью \(v_i\).

Выходные данные

Выведите \(q\) целых чисел. После каждого запроса выведите максимальное количество раундов, которые Монокарп может продержаться, если оптимально распределит артефакты.

Примечание

Рассмотрим первый пример.

  • Добавляется артефакт с прочностью \(5\). Так как героев пока нет, бой сразу же заканчивается.
  • Добавляется герой со здоровьем \(4\). Монокарп может дать ему артефакт с прочностью \(5\). Сначала идут раунды, в которых герою наносится \(\frac{1}{1 + 1} = \frac{1}{2}\) урона. Через \(8\) таких раундов суммарно будет нанесено \(4\) урона, и герой умрет, а артефакт деактивируется. Больше в живых нет героев, так что бой заканчивается за \(8\) раундов.
  • Добавляется герой со здоровьем \(10\). Пусть теперь артефакт с прочностью \(5\) будет у этого героя. Тогда за первые \(12\) раундов героям будет нанесено \(12 \cdot \frac{1}{2 + 1} = 4\) урона, и первый герой умрет. У второго героя осталось \(6\) здоровья, а у артефакта \(1\) прочности. Теперь урон равен \(\frac{1}{2}\), поэтому еще за \(2\) раунда артефакт деактивируется. У второго героя осталось \(5\) здоровья. За еще \(5\) раундов умрет второй герой. Поэтому ответ равен \(12 + 2 + 5 = 19\).

C. Коллекционные фигурки

Бинарный поиск жадные алгоритмы Конструктив Перебор реализация Структуры данных *1500

Рядом с домом Монокарпа есть магазин, в котором продаются коллекционные фигурки. Скоро выйдет новый набор фигурок; в этом наборе содержится \(n\) фигурок, \(i\)-я фигурка стоит \(i\) монет и доступна для покупки с \(i\)-го дня по \(n\)-й день.

Для каждого из следующих \(n\) дней Монокарп знает, может ли он посетить магазин в этот день.

Каждый раз, когда Монокарп посещает магазин, он может купить любое количество фигурок, которые продаются в магазине (конечно, он не может купить фигурку, которая еще не доступна для покупки). Если Монокарп покупает хотя бы две фигурки в один день, он получает скидку, равную стоимости самой дорогой фигурки, которую он покупает (другими словами, он получает самую дорогую из фигурок, которые он покупает, бесплатно).

Монокарп хочет купить ровно одну \(1\)-ю фигурку, одну \(2\)-ю фигурку, ..., одну \(n\)-ю фигурку из набора. Он не может купить одну и ту же фигурку дважды. Какова минимальная сумма денег, которую он должен потратить?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • первая строка содержит одно целое число \(n\) (\(1 \le n \le 4 \cdot 10^5\)) — количество фигурок в наборе (и количество дней);
  • вторая строка содержит строку \(s\) (\(|s| = n\), каждый \(s_i\) равен либо 0, либо 1). Если Монокарп может посетить магазин в \(i\)-й день, то \(s_i\) равно 1; в противном случае \(s_i\) равно 0.

Дополнительные ограничения на входные данные:

  • в каждом наборе входных данных \(s_n\) равно 1, так что Монокарп всегда сможет купить все фигурки в \(n\)-й день;
  • сумма \(n\) по всем наборам входных данных не превышает \(4 \cdot 10^5\).
Выходные данные

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

Примечание

В первом наборе входных данных Монокарп покупает \(1\)-ю фигурку в \(1\)-й день и тратит \(1\) монету.

Во втором наборе входных данных Монокарп может купить \(1\)-ю и \(3\)-ю фигурки в \(3\)-й день, \(2\)-ю и \(4\)-ю фигурки в \(4\)-й день, а также \(5\)-ю и \(6\)-ю фигурки в \(6\)-й день. Тогда он потратит \(1+2+5=8\) монет.

В третьем наборе входных данных Монокарп может купить \(2\)-ю и \(3\)-ю фигурки в \(3\)-й день, а все остальные фигурки в \(7\)-й день. Тогда он потратит \(1+2+4+5+6 = 18\) монет.

D. Суммы на отрезках

Бинарный поиск дп математика реализация Структуры данных *1900

Дана последовательность целых чисел \([a_1, a_2, \dots, a_n]\). Обозначим \(s(l,r)\) как сумму элементов от \(a_l\) до \(a_r\) (т. е. \(s(l,r) = \sum\limits_{i=l}^{r} a_i\)).

Построим другую последовательность \(b\) размером \(\frac{n(n+1)}{2}\) следующим образом: \(b = [s(1,1), s(1,2), \dots, s(1,n), s(2,2), s(2,3), \dots, s(2,n), s(3,3), \dots, s(n,n)]\).

Например, если \(a = [1, 2, 5, 10]\), то \(b = [1, 3, 8, 18, 2, 7, 17, 5, 15, 10]\).

Вам даны \(q\) запросов. В \(i\)-м запросе вам даны два целых числа \(l_i\) и \(r_i\), и вам нужно вычислить \(\sum \limits_{j=l_i}^{r_i} b_j\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10 \le a_i \le 10\)).

Третья строка содержит одно целое число \(q\) (\(1 \le q \le 3 \cdot 10^5\)).

Затем следуют \(q\) строк, \(i\)-я из которых содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le \frac{n(n+1)}{2}\)).

Выходные данные

Выведите \(q\) целых числа, \(i\)-е из которых должно быть равно \(\sum \limits_{j=l_i}^{r_i} b_j\).

F. Мороженое в Бермарте

Деревья дп поиск в глубину и подобное разделяй и властвуй реализация Структуры данных *2700

В сети магазинов Бермарт продается мороженое. У каждого сорта мороженого есть два параметра: цена и вкусность.

Изначально есть один магазин с номером \(1\), в котором ничего не продаётся. Требуется обработать \(q\) запросов следующих типов:

  • \(1~x\) — открывается новый магазин, в котором продаются те же сорта мороженого, что и в магазине \(x\). Он получает первый свободный порядковый номер. Порядок появления сортов мороженого в новом магазине тот же, что и в магазине \(x\).
  • \(2~x~p~t\) — в магазине \(x\) в продаже появляется сорт мороженого с ценой \(p\) и вкусностью \(t\).
  • \(3~x\) — в магазине \(x\) исчезает из продажи сорт мороженого, который там появился раньше всего.
  • \(4~x~p\) — для магазина \(x\) надо найти максимальную суммарную вкусность поднабора сортов, которые там продаются, так, чтобы суммарная цена не превышала \(p\) (каждый сорт можно использовать в поднаборе не более одного раз).
Входные данные

В первой строке записано одно целое число \(q\) (\(1 \le q \le 3 \cdot 10^4\)) — количество запросов.

В каждой из \(q\) следующих строк записан очередной запрос в формате, описанном в условии:

  • \(1~x\);
  • \(2~x~p~t\) (\(1 \le p, t \le 2000\));
  • \(3~x\);
  • \(4~x~p\) (\(1 \le p \le 2000\)).

Дополнительные ограничения на входные данные:

  • \(x\) в каждом запросе не превышает текущего количества магазинов (то есть, \(1\) плюс количество запросов типа \(1\));
  • запрос типа \(3\) не применяется к магазину, в котором нет ни одного типа мороженого;
  • есть хотя бы один запрос типа \(4\).
Выходные данные

На каждый запрос типа \(4\) выведите одно целое число — для магазина \(x\) найдите максимальную суммарную вкусность поднабора сортов, которые там продаются, так, чтобы суммарная цена не превышала \(p\) (каждый сорт можно использовать в поднаборе не более одного раз).

C. Добавьте нули

графы дп жадные алгоритмы Перебор поиск в глубину и подобное Структуры данных *1500

Вам дан массив \(a\), изначально содержащий \(n\) целых чисел. За одну операцию вы можете сделать следующее:

  • Выбрать позицию \(i\) такую, что \(1 < i \le |a|\) и \(a_i = |a| + 1 - i\), где \(|a|\) — текущая длина массива.
  • Добавить \(i - 1\) нулей в конец \(a\).

Какова максимально возможная длина массива \(a\) после выполнения данной операции некоторое количество раз (возможно, нулевое)?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^{12}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможную длину \(a\) после выполнения некоторой последовательности операций.

Примечание

В первом наборе входных данных мы можем сначала выбрать \(i = 4\), так как \(a_4 = 5 + 1 - 4 = 2\). После этого массив станет равен \([2, 4, 6, 2, 5, 0, 0, 0]\). Затем мы можем выбрать \(i = 3\), так как \(a_3 = 8 + 1 - 3 = 6\). После этого массив станет равен \([2, 4, 6, 2, 5, 0, 0, 0, 0, 0]\), то есть будет иметь длину \(10\). Можно показать, что нельзя получить более длинный массив.

Во втором наборе входных данных мы можем выбрать \(i=2\), затем \(i=3\), затем \(i=4\). Итоговый массив будет равен \([5, 4, 4, 5, 1, 0, 0, 0, 0, 0, 0]\), и его длина будет равняться \(11\).

D2. Финальный диалог (сложная версия)

Бинарный поиск дп жадные алгоритмы реализация Структуры данных *2200

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

Даны массив \(a\) длины \(n\) и массив \(b\) длины \(m\) (\(b_i > b_{i+1}\) для всех \(1 \le i < m\)). Изначально значение \(k\) равно \(1\). Ваша цель — сделать массив \(a\) пустым, выполняя операции двух типов:

  • \(1\) тип: Если значение \(k\) меньше \(m\) и массив \(a\) не пуст, вы можете увеличить значение \(k\) на \(1\). Это не влечет за собой никаких затрат.
  • \(2\) тип: Удалить непустой префикс массива \(a\), такой, что его сумма не превосходит \(b_k\). Стоимость этой операции равна \(m - k\).

Вам нужно минимизировать суммарную стоимость последовательности операций, в результате которой массив \(a\) станет пустым. Если сделать массив пустым невозможно, выведите \(-1\). В противном случае выведите минимальную суммарную стоимость операций, а также количество последовательностей операций, имеющих минимальную стоимость. Так как это количество может быть очень большим, выведите остаток от его деления на \(10^9 + 7\).

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 3 \cdot 10^5\), \(\boldsymbol{1 \le n \cdot m \le 3 \cdot 10^5}\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Третья строка каждого набора входных данных содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \le b_i \le 10^9\)). Гарантируется, что \(b_i > b_{i+1}\) для всех \(1 \le i < m\).

Гарантируется, что сумма \(\boldsymbol{n \cdot m}\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если можно сделать \(a\) пустым, выведите два целых числа. Первое должно быть минимальной общей стоимостью операций, а второе — количеством последовательностей операций, которые достигают этой минимальной стоимости, по модулю \(10^9 + 7\).

Если не существует последовательности операций, которая делает \(a\) пустым, то выведите одно число \(-1\).

Примечание

В первом наборе входных данных существует \(3\) оптимальных последовательностей операций, которые имеют стоимость \(1\):

  • Все \(3\) последовательности начинаются с операции типа \(2\), удаляющей префикс \([9]\), чтобы сделать \(a = [3, 4, 3]\), и данная операция имеет стоимость \(1\). Затем мы выполняем операцию типа \(1\), чтобы увеличить значение \(k\) на \(1\). Все последующие операции теперь имеют стоимость \(0\).
  • Одна последовательность продолжается удалением префикса \([3, 4]\), затем \([3]\).
  • Другая последовательность продолжается удалением префикса \([3]\), затем \([4, 3]\).
  • Другая последовательность продолжается удалением префикса \([3]\), затем \([4]\), затем \([3]\).

Во втором наборе входных данных невозможно удалить ни одного префикса массива, так как \(a_1 > b_1\), поэтому массив \(a\) нельзя сделать пустым ни одной последовательностью операций.

D. Приключения Алисы в картах

графы дп жадные алгоритмы Конструктив реализация Структуры данных Тернарный поиск *2000

Алиса играет в карты с Дамой Червей, Королем Червей и Валетом Червей. В их карточной игре есть \(n\) различных типов карт. В данный момент у Алисы есть карта типа \(1\), и ей нужна карта типа \(n\), чтобы сбежать из Страны Чудес. У остальных игроков есть по одной карте каждого типа.

В этой карточной игре Алиса может обмениваться картами с тремя другими игроками. У каждого игрока есть свои предпочтения среди этих \(n\) типов, которые можно описать перестановками\(^{\text{∗}}\) \(q\), \(k\) и \(j\) для Дамы, Короля и Валета соответственно.

Игрок оценивает карту \(a\) больше, чем карту \(b\), если для их перестановки \(p\), \(p_a > p_b\). Тогда этот игрок готов обменять карту \(b\) с Алисой в обмен на карту \(a\). Предпочтения Алисы просты: она оценивает карту \(a\) больше, чем карту \(b\) если \(a > b\), и она будет обмениваться картами только в соответствии с этими предпочтениями.

Определите, может ли Алиса обменять карту типа \(1\) на карту типа \(n\), учитывая эти предпочтения. Если это возможно, приведите возможный набор обменов для этого.

\(^{\text{∗}}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2\le n\le 2\cdot 10^5\)) — количество типов карт.

Следующие три строки содержат предпочтения Дамы, Короля и Валета соответственно. Каждая из этих строк содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1\le p_i\le n\)) — перестановка, соответствующая предпочтениям игрока.

Сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных в первой строке выведите одну строку «YES» или «NO» (без кавычек), обозначающую, может ли Алиса обменяться на карту \(n\).

Если первая строка была «YES», то на следующей строке выведите \(k\) — количество обменов, которые сделает Алиса. На следующих \(k\) строках выведите через пробел символ \(c\in \{\texttt{q}, \texttt{k}, \texttt{j}\}\) и целое число \(x\), обозначающее, что Алиса обменивается с игроком \(c\), чтобы получить карту \(x\). Должно быть так, что на \(k\)-й строке \(x = n\). Если существует несколько решений, выведите любое из них.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ. То же самое касается символа \(c\), обозначающего игрока в обмене (\(\texttt{Q}, \texttt{K}, \texttt{J}\) будут приняты наряду с их строчными вариантами).

Примечание

В первом наборе входных данных Алиса может обменяться с Королем, чтобы получить карту \(2\). Затем она может обменяться с Дамой, чтобы получить карту \(3\).

Во втором наборе входных данных, хотя Алиса может обменяться с Дамой, чтобы получить карту \(3\), с Королем, чтобы получить карту \(2\), а затем с Валетом, чтобы получить карту \(4\), это не является допустимым решением, так как оно не соответствует предпочтениям Алисы. Мы можем показать, что нет способа для Алисы получить карту \(4\).

C. Новый рейтинг

Бинарный поиск дп жадные алгоритмы Структуры данных *1700

Привет, Codeforces Forcescode!
 

Кевин раньше был участником Codeforces. Недавно команда KDOI разработала новый сайт под названием Forcescode.

Кевин принял участие в \(n\) соревнованиях на Forcescode. В \(i\)-м соревновании его рейтинг выступления равен \(a_i\).

Теперь он взломал бэкенд Forcescode и выберет отрезок \([l,r]\) (\(1\le l\le r\le n\)), после чего он пропустит все соревнования в этом отрезке. После этого его рейтинг будет пересчитан следующим образом:

  • Изначально его рейтинг равен \(x=0\);
  • Для каждого \(1\le i\le n\), после \(i\)-го соревнования,
    • Если \(l\le i\le r\), это соревнование будет пропущено, и рейтинг не изменится;
    • В противном случае его рейтинг будет обновлен в соответствии со следующими правилами:
      • Если \(a_i>x\), его рейтинг \(x\) увеличится на \(1\);
      • Если \(a_i=x\), его рейтинг \(x\) останется без изменений;
      • Если \(a_i<x\), его рейтинг \(x\) уменьшится на \(1\).

Вам нужно помочь Кевину найти его максимальный возможный рейтинг после пересчета, если он оптимально выберет отрезок \([l,r]\). Обратите внимание, что Кевин должен пропустить как минимум одно соревнование.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 5\cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 3\cdot 10^5\)) — количество соревнований.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\le a_i\le n\)) — рейтинги выступления Кевина в соревнованиях.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных Кевин должен пропустить как минимум одно соревнование. Если он выберет любой отрезок длины \(1\), его рейтинг после пересчета будет равен \(5\).

Во втором наборе входных данных оптимальный выбор Кевина — отрезок \([3,5]\). Во время пересчета его рейтинг изменяется следующим образом:

\(\) 0 \xrightarrow{a_1=1} 1 \xrightarrow{a_2=2} 2 \xrightarrow{\mathtt{skip}} 2 \xrightarrow{\mathtt{skip}} 2 \xrightarrow{\mathtt{skip}} 2 \xrightarrow{a_6=3} 3 \xrightarrow{a_7=4} 4 \(\)

В третьем наборе входных данных Кевин должен пропустить единственное соревнование, поэтому его рейтинг останется равным \(0\).

В четвертом наборе входных данных оптимальный выбор Кевина — отрезок \([7,9]\). Во время пересчета его рейтинг изменяется следующим образом:

\(\) 0 \xrightarrow{a_1=9} 1 \xrightarrow{a_2=9} 2 \xrightarrow{a_3=8} 3 \xrightarrow{a_4=2} 2 \xrightarrow{a_5=4} 3 \xrightarrow{a_6=4} 4 \xrightarrow{\mathtt{skip}} 4 \xrightarrow{\mathtt{skip}} 4 \xrightarrow{\mathtt{skip}} 4 \(\)

В пятом наборе входных данных оптимальный выбор Кевина — отрезок \([5,9]\).

D. Классный граф

графы Деревья жадные алгоритмы Конструктив поиск в глубину и подобное снм Структуры данных *1900

Вам дан неориентированный граф с \(n\) вершинами и \(m\) рёбрами.

Вы можете выполнить следующую операцию не более чем \(2\cdot \max(n,m)\) раз:

  • Выберите три различные вершины \(a\), \(b\) и \(c\). Затем для каждого из рёбер \((a,b)\), \((b,c)\) и \((c,a)\) выполните следующее:
    • Если ребро не существует, добавьте его. В противном случае, если оно существует, удалите его.

Граф называется классным, если и только если выполняется одно из следующих условий:

  • Граф не имеет рёбер, или
  • Граф является деревом.

Вам нужно сделать граф классным, выполняя указанные выше операции. Обратите внимание, что вы можете использовать не более чем \(2\cdot \max(n,m)\) операций.

Можно показать, что всегда существует хотя бы одно решение.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(3\le n\le 10^5\), \(0\le m\le \min\left(\frac{n(n-1)}{2},2\cdot 10^5\right)\)) — количество вершин и количество рёбер.

Затем следуют \(m\) строк, \(i\)-я строка содержит два целых числа \(u_i\) и \(v_i\) (\(1\le u_i,v_i\le n\)) — две вершины, которые соединяет \(i\)-е ребро.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\), а сумма \(m\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Гарантируется, что в данном графе нет петель или кратных рёбер.

Выходные данные

Для каждого набора входных данных в первой строке выведите целое число \(k\) (\(0\le k\le 2\cdot \max(n, m)\)) — количество операций.

Затем выведите \(k\) строк, \(i\)-я строка содержит три различных целых числа \(a\), \(b\) и \(c\) (\(1\le a,b,c\le n\)) — три целых числа, которые вы выбрали в \(i\)-й операции.

Если существует несколько решений, вы можете вывести любое из них.

Примечание

В первом наборе входных данных граф уже классный, потому что рёбер нет.

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

В третьем наборе входных данных граф уже классный, потому что он является деревом.

В четвёртом наборе входных данных, после выполнения единственной операции, граф не имеет рёбер, поэтому он классный.

В пятом наборе входных данных:

ОперацияГраф до операцииГраф после операции
\(1\)
\(2\)
\(3\)

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

G. Сбалансированная задача

дп Структуры данных *3000

Существует массив \(a\), состоящий из \(n\) целых чисел. Изначально все элементы массива \(a\) равны \(0\).

Кевин может выполнять над массивом операции следующих двух типов:

  • Прибавление на префиксе — Кевин сначала выбирает индекс \(x\) (\(1\le x\le n\)), а затем для каждого \(1\le j\le x\) увеличивает \(a_j\) на \(1\);
  • Прибавление на суффиксе — Кевин сначала выбирает индекс \(x\) (\(1\le x\le n\)), а затем для каждого \(x\le j\le n\) увеличивает \(a_j\) на \(1\).

В стране KDOI люди считают, что целое число \(v\) является сбалансированным. Таким образом, Айрис даёт Кевину массив \(c\), состоящий из \(n\) целых чисел, и определяет красоту массива \(a\) следующим образом:

  • Изначально \(b=0\);
  • Для каждого \(1\le i\le n\), если \(a_i=v\), следует увеличить \(b\) на \(c_i\);
  • Красота массива \(a\) равна конечному значению \(b\).

Кевин хочет максимизировать красоту массива \(a\) после операций. Однако он уже выполнил \(m\) операций, когда был сонным. Теперь он может выполнить произвольное количество (возможно, ноль) новых операций.

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

Однако, чтобы убедиться, что вы не просто гадаете по костям, Кевин даст вам целое число \(V\), и вам нужно будет решить задачу для каждого \(1\le v\le V\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка входных данных содержит одно целое число \(t\) (\(1\le t\le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(V\) (\(1\le n, m\le 2\cdot 10^5\), \(1\le V\le 2000\)) — длина массива \(a\), количество начальных операций и число, которое вам дал Кевин.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1\le c_i\le 10^9\)) — элементы массива \(c\).

Затем следуют \(m\) строк, \(i\)-я из которых содержит символ \(op\) и целое число \(x\) (\(op=\mathtt{L}\) или \(\mathtt{R}\), \(1\le x\le n\)) — тип \(i\)-й операции и выбранный индекс.

  • Если \(op=\mathtt{L}\), то эта операция является прибавлением на префиксе по индексу \(x\);
  • Если \(op=\mathtt{R}\), то эта операция является прибавлением на суффиксе по индексу \(x\).

Гарантируется, что:

  • сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\);
  • сумма \(m\) по всем наборам входных данных не превышает \(2\cdot 10^5\);
  • сумма \(V^2\) по всем наборам входных данных не превышает \(4\cdot 10^6\).
Выходные данные

Для каждого набора входных данных выведите \(V\) целых числа в одной строке, где \(i\)-е целое число обозначает максимальную возможную красоту после того, как Кевин выполнит некоторые новые операции, когда \(v=i\).

Примечание

В первом наборе входных данных массив \(a\) под начальными операциями изменяется следующим образом: \([0, 0, 0] \xrightarrow{\mathtt{L}\ 3} [1, 1, 1] \xrightarrow{\mathtt{R}\ 3} [1, 1, 2] \xrightarrow{\mathtt{L}\ 1} [2, 1, 2]\).

  • Для \(v=1\) оптимально не выполнять никаких новых операций, и красота равна \(b=c_2=2\);
  • Для \(v=2\) оптимально выполнить операцию прибавления префикса по индексу \(2\). После этого массив \(a\) становится \([3,2,2]\), и красота равна \(b=c_2+c_3=6\).

Во втором наборе входных данных для \(v=1\) и \(v=2\) оптимально не выполнять никаких новых операций.

D. Любимая перестановка ЧТД

реализация сортировки Структуры данных *1700

ЧТД подарили перестановку\(^{\text{∗}}\) \(p\) длины \(n\). У него также есть строка \(s\) длины \(n\), содержащая только символы \(\texttt{L}\) и \(\texttt{R}\). ЧТД любит только те перестановки, которые отсортированы в неубывающем порядке. Чтобы отсортировать \(p\), он может выбирать любые из следующих операций и выполнять их любое количество раз:

  • Выбрать индекс \(i\) такой, что \(s_i = \texttt{L}\). Затем поменять местами \(p_i\) и \(p_{i-1}\). Гарантируется, что \(s_1 \neq \texttt{L}\).
  • Выбрать индекс \(i\) такой, что \(s_i = \texttt{R}\). Затем поменять местами \(p_i\) и \(p_{i+1}\). Гарантируется, что \(s_n \neq \texttt{R}\).

Ему также дается \(q\) запросов. В каждом запросе он выбирает индекс \(i\) и меняет \(s_i\) с \(\texttt{L}\) на \(\texttt{R}\) (или с \(\texttt{R}\) на \(\texttt{L}\)). Обратите внимание, что изменения постоянны.

После каждого запроса он спрашивает вас, можно ли отсортировать \(p\) в неубывающем порядке, выполнив вышеупомянутые операции любое количество раз. Обратите внимание, что перед каждым запросом перестановка \(p\) сбрасывается к своему исходному значению.

\(^{\text{∗}}\)Перестановка длины \(n\) — это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\), расположенных в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) — не перестановка (\(2\) дважды встречается в массиве), и \([1,3,4]\) — тоже не перестановка (\(n=3\), но в массиве есть \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(3 \leq n \leq 2 \cdot 10^5\), \(1 \leq q \leq 2 \cdot 10^5\)) — длина перестановки и количество запросов.

Следующая строка содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\), \(p\) — перестановка).

Следующая строка содержит \(n\) символов \(s_1s_2 \ldots s_n\). Гарантируется, что \(s_i\) — это либо \(\texttt{L}\), либо \(\texttt{R}\), \(s_1 = \texttt{R}\), а \(s_n = \texttt{L}\).

Следующие \(q\) строк содержат по одному целому числу \(i\) (\(2 \leq i \leq n-1\)), обозначающему, что \(s_i\) изменено с \(\texttt{L}\) на \(\texttt{R}\) (или с \(\texttt{R}\) на \(\texttt{L}\)). Запросы изменяют строку, то есть следующее изменение будет применяться к обновлённой строке.

Гарантируется, что сумма \(n\) и сумма \(q\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите «YES» (без кавычек), если возможно отсортировать перестановку, или «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных \(s = \texttt{RRRLL}\) после первого запроса. ЧТД может отсортировать \(p\) с помощью следующих операций:

  • Изначально, \(p = [1,4,2,5,3]\).
  • Выбрать \(i = 2\) и поменять местами \(p_2\) и \(p_{3}\). Теперь \(p = [1,2,4,5,3]\).
  • Выбрать \(i = 5\) и поменять местами \(p_5\) и \(p_{4}\). Теперь \(p = [1,2,4,3,5]\).
  • Выбрать \(i = 4\) и поменять местами \(p_4\) и \(p_{3}\). Теперь \(p = [1,2,3,4,5]\), то есть перестановка отсортирована в неубывающем порядке.

Можно показать, что невозможно отсортировать массив после выполнения трёх обновлений первого набора входных данных.

E. MEXимизируйте счёт

дп жадные алгоритмы Комбинаторика математика реализация Структуры данных *2200

Предположим, что мы разбиваем элементы массива \(b\) на \(k\) непустых мультимножеств \(S_1, S_2, \ldots, S_k\), где \(k\) — произвольное целое положительное число. Определим счёт \(b\) как максимальное значение \(\operatorname{MEX}(S_1)\)\(^{\text{∗}}\)\( + \operatorname{MEX}(S_2) + \ldots + \operatorname{MEX}(S_k)\) среди всех возможных разбиений \(b\) для любого целого числа \(k\).

Вашему завистнику дан массив \(a\) длины \(n\). Поскольку он знает, что вычислить счёт массива \(a\) для вас слишком просто, он просит вас вычислить сумму счётов всех \(2^n - 1\) непустых подпоследовательностей массива \(a\).\(^{\text{†}}\) Поскольку ответ может быть очень большим, выведите его по модулю \(998\,244\,353\).

\(^{\text{∗}}\)\(\operatorname{MEX}\) набора целых чисел \(c_1, c_2, \ldots, c_k\) определяется как наименьшее неотрицательное целое число \(x\), которое не встречается в наборе \(c\). Например, \(\operatorname{MEX}([0,1,2,2]) = 3\) и \(\operatorname{MEX}([1,2,2]) = 0\)

\(^{\text{†}}\)Последовательность \(x\) является подпоследовательностью последовательности \(y\), если \(x\) можно получить из \(y\), удалив несколько (возможно, ноль или все) элементов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длина \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i < n\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных мы должны рассмотреть семь подпоследовательностей:

  • \([0]\): Счёт равен \(1\).
  • \([0]\): Счёт равен \(1\).
  • \([1]\): Счёт равен \(0\).
  • \([0,0]\): Счёт равен \(2\).
  • \([0,1]\): Счёт равен \(2\).
  • \([0,1]\): Счёт равен \(2\).
  • \([0,0,1]\): Счёт равен \(3\).
Ответ для первого набора входных данных составляет \(1+1+2+2+2+3=11\).

В последнем наборе входных данных все подпоследовательности имеют счёт \(0\).

F. Орангутано-одобренный массив

Бинарный поиск дп жадные алгоритмы реализация Структуры данных *2400

Предположим, у вас есть массив \(b\). Изначально у вас также есть множество \(S\), которое содержит все различные элементы массива \(b\). Массив \(b\) называется орангутано-одобренным, если его можно сделать пустым, выполняя следующую операцию:

  • Выбрать индексы \(l\) и \(r\) (\(1 \leq l \leq r \leq |b|\)) такие, что \(v = b_l = b_{l+1} = \ldots = b_r\) и \(v\) присутствует в \(S\). Удалить \(v\) из \(S\), а также удалить все \(b_i\), для которых \(l \leq i \leq r\). Затем подвинуть элементы \(b_{r+1}, b_{r+2}, \ldots\) влево на позиции \(b_l, b_{l+1}, \ldots\) соответственно.

Вам дан массив \(a\) длины \(n\) и \(q\) запросов.

Каждый запрос состоит из двух индексов \(l\) и \(r\) (\(1 \le l \le r \le n\)), и вам нужно определить, является ли подмассив \(a_{l}, a_{l+1}, \ldots, a_r\) орангутано-одобренным.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \leq n,q \leq 2 \cdot 10^5\)) — длину \(a\) и количество запросов, соответственно.

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)) — элементы массива \(a\).

Следующие \(q\) строк содержат по два целых числа \(l\) и \(r\) — концы подмассивов для каждого запроса (\(1 \leq l \leq r \leq n\)).

Гарантируется, что сумма \(n\) и \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите «YES» (без кавычек), если подмассив от \(l\) до \(r\) является орангутано-одобренным, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом запросе первого набора входных данных ответ — YES.

  • Изначально \(S=\{1,2\}\) и \(b=[1,2,2,1]\).
  • Выберите \(l=2\) и \(r=3\). Поскольку \(b_2=b_3=2\) находится в \(S\), мы можем удалить \(b_2\) и \(b_3\) из массива, а также удалить \(2\) из \(S\). Множество \(S\) становится \(\{1\}\), а массив — \([1,1]\).
  • Выберите \(l=1\) и \(r=2\). Поскольку \(b_1=b_2=1\) находится в \(S\), мы можем удалить \(b_1\) и \(b_2\) из массива, а также удалить \(1\) из \(S\). Множество \(S\) становится \(\{\}\), а массив — \([]\).
  • Поскольку массив теперь пуст, мы можем сказать, что исходный массив — орангутано-одобренный

В первом запросе второго набора входных данных ответ — NO, потому что можно показать, что подмассив \([2,1,2,1]\) не может стать пустым ни при какой последовательности корректных операций.

D. Пенчик и пустынный кролик

Бинарный поиск дп жадные алгоритмы поиск в глубину и подобное реализация снм Структуры данных *1700

Пенчик бросил себе вызов — выжить под полуденным солнцем в Аравийской пустыне!

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

Кролик может перепрыгнуть с \(i\)-го дерева на \(j\)-е, если верно ровно одно из следующих условий:

  • \(j < i\) и \(a_j > a_i\): кролик может прыгнуть назад на более высокое дерево.
  • \(j > i\) и \(a_j < a_i\): кролик может прыгнуть вперёд на более низкое дерево.

Для каждого \(i\) от \(1\) до \(n\) определите максимальную высоту среди всех деревьев, которые может достичь кролик, если он начнёт с \(i\)-го дерева.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 5 \cdot 10^5\)) — количество деревьев.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — высоты деревьев.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел. \(i\)-е число должно равняться максимальной высоте среди всех деревьев, которые может достичь кролик, если он начнёт с дерева \(i\).

Примечание

В первом наборе входных данных высоты деревьев равны \(a = [2, 3, 1, 4]\).

  • Если кролик стартует с первого дерева, то он может перепрыгнуть на третье дерево, так как \(3 > 1\) и \(1 < 2\). Затем кролик может перепрыгнуть на второе дерево, так как \(2 < 3\) и \(3 > 1\). Можно доказать, что кролик не может допрыгнуть до четвёртого дерева; следовательно, максимальная высота дерева, до которого может допрыгнуть кролик, равна \(a_2 = 3\).
  • Если кролик стартует с четвёртого дерева, ему не нужно никуда прыгать, так как он уже находится на самом высоком дереве.

Во втором наборе входных данных кролик может прыгнуть на первое дерево независимо от того, с какого дерева он стартует.

В пятом наборе входных данных, если кролик начинает с пятого дерева, он может прыгнуть на четвёртое дерево. Затем кролик может перепрыгнуть на седьмое дерево и, наконец, достичь шестого дерева. Таким образом, максимальная высота дерева, до которого может добраться кролик, равна \(8\).

E. Деревья Пенчика и Хлои

Деревья дп жадные алгоритмы математика поиск в глубину и подобное реализация сортировки Структуры данных *2100

До отъезда Пенчика и Хлои в Сингапур оставалось всего несколько часов, и им не терпелось увидеть высоченные деревья в Сингапурском ботаническом саду! Пытаясь сдержать свое волнение, Пенчик смастерил дерево с корнями, чтобы занять Хлою и себя.

У Пенчика есть корневое дерево\(^{\text{∗}}\), состоящее из \(n\) вершин, пронумерованных от \(1\) до \(n\), с вершиной \(1\) в качестве корня. Хлоя может выбрать целое неотрицательное число \(d\), чтобы создать совершенное бинарное дерево\(^{\text{†}}\) глубины \(d\).

Поскольку Пенчик и Хлоя — хорошие друзья, Хлоя хочет, чтобы ее дерево было изоморфно\(^{\text{‡}}\) дереву Пенчика. Чтобы достичь этого, Хлоя может выполнить следующую операцию над своим деревом любое количество раз:

  • Выбрать ребро \((u,v)\), где \(u\) является родителем \(v\).
  • Удалить вершину \(v\) и все ребра, связанные с \(v\), а затем соединить всех бывших детей \(v\) непосредственно с \(u\).

В частности, операция над ребром \((u, v)\), где \(v\) — лист, удалит вершину \(v\) без добавления новых ребер.

Поскольку построение совершенного бинарного дерева может занять много времени, Хлоя хочет выбрать минимальное \(d\), такое, чтобы совершенное бинарное дерево глубины \(d\) можно было сделать изоморфным дереву Пенчика с помощью вышеописанной операции. Обратите внимание, что Хлоя не может менять корни деревьев.

\(^{\text{∗}}\)Деревом называется связный граф без циклов. Корневым деревом называется дерево, в котором одна из вершин специальная и называется корнем. Родителем вершины \(v\) называется первая вершина на простом пути от \(v\) до корня. У корня нет родителя. Ребенком вершины \(v\) называется любая вершина \(u\), для которой \(v\) является родителем. Листом называется любая вершина, у которой нет детей.

\(^{\text{†}}\)Полным бинарным деревом называется корневое дерево, в котором у каждой вершины \(0\) или \(2\) детей. Совершенное бинарное дерево — это полное бинарное дерево, в котором каждый лист находится на одинаковом расстоянии от корня. Глубина такого дерева равна расстоянию от корня до листа.

\(^{\text{‡}}\)Два дерева с корнями, равными \(r_1\) и \(r_2\) соответственно, считаются изоморфными, если существует такая перестановка вершин \(p\), что ребро \((u, v)\) существует в первом дереве тогда и только тогда, когда ребро \((p_u, p_v)\) существует во втором дереве, и \(p_{r_1} = r_2\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^6\)) — количество вершин в дереве Пенчика.

Вторая строка каждого набора входных данных содержит \(n-1\) целых чисел \(p_2, p_3, \ldots, p_n\) (\(1 \leq p_i \leq i-1\)) — родитель вершины \(i\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое число: минимальную глубину совершенного бинарного дерева Хлои.

Примечание

В первом наборе входных данных можно создать совершенное бинарное дерево глубины \(2\).

Рассмотрим выполнение операции на ребре \(AC\). Рёбра \(AC\), \(CF\) и \(CG\) удаляются, а рёбра \(AF\) и \(AG\) добавляются.

Полученное дерево изоморфно дереву, заданному на входе. Можно доказать, что никакая последовательность операций над бинарным деревом глубины менее \(2\) не может привести к дереву, изоморфному дереву, заданному на входе.

Во втором наборе входных данных дерево уже изоморфно совершенному бинарному дереву глубины \(3\).

D. Генокракен

графы Деревья жадные алгоритмы интерактив Конструктив реализация Структуры данных *1800

Это интерактивная задача.

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

Нервная система монстра может быть представлена как дерево\(^{\dagger}\) из \(n\) вершин (на самом деле, всё не должно постоянно напоминать деревья\(\ldots\)), пронумерованных от \(0\) до \(n-1\), с вершиной \(0\) в качестве корня.

Цель Гретель — узнать точную структуру нервной системы монстра. Более конкретно, она хочет узнать значения \(p_1, p_2, \ldots, p_{n-1}\) дерева, где \(p_i\) (\(0 \le p_i < i\)) является прямым предком вершины \(i\) (\(1 \le i \le n - 1\)).

Она не знает точно, как расположены вершины, но знает несколько приятных фактов:

  • Если мы удалим корневую вершину \(0\) и все смежные ребра, то это дерево превратится в лес, состоящий только из путей\(^{\ddagger}\). Каждая вершина, которая изначально была смежной с вершиной \(0\), будет концом какого-то пути.
  • Вершины нумеруются таким образом, что если \(1 \le x \le y \le n - 1\), то \(p_x \le p_y\).
  • Вершина \(1\) гарантированно имеет ровно две смежные вершины (включая вершину \(0\)).
Дерево на этой картинке не удовлетворяет условию, потому что если мы удалим вершину \(0\), то вершина \(2\) (которая изначально была смежной с вершиной \(0\)) не будет концом пути \(4-2-5\).Дерево на этой картинке не удовлетворяет условию, потому что должно выполняться \(p_3 \le p_4\).Дерево на этой картинке не удовлетворяет условию, потому что вершина \(1\) имеет только одну смежную вершину.

Гретель может делать запросы к защитной камере:

  • «? a b» (\(1 \le a, b < n\), \(a \ne b\)) — камера проверит, содержит ли простой путь между вершинами \(a\) и \(b\) вершину \(0\).

Однако, чтобы избежать неожиданных последствий от чрезмерной стимуляции существа, Гретель хочет сделать не более \(2n - 6\) запросов. Хотя Гретель одарена, она не может сделать всё сразу, так что можете ли вы протянуть ей руку помощи?

\(^{\dagger}\)Дерево — это связный граф, в котором каждая пара различных вершин имеет ровно один простой путь, соединяющий их.

\(^{\ddagger}\)Путь — это дерево, вершины которого могут быть записаны в порядке \(v_1, v_2, \ldots, v_k\) так, что рёбра имеют вид \((v_i, v_{i+1})\) (\(1 \le i < k\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(4 \le n \le 10^4\)) — количество вершин в нервной системе Генокракена.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^4\).

Протокол взаимодействия

Для каждого набора входных данных взаимодействие начинается с чтения целого числа \(n\).

Затем вы можете делать запросы следующего вида:

  • «? a b» (без кавычек) (\(1 \le a, b < n\), \(a \ne b\)).

После запроса прочитайте целое число \(r\) — ответ на ваш запрос. Вам разрешено использовать не более \(2n - 6\) запросов этого типа.

  • Если простой путь между вершинами \(a\) и \(b\) не содержит вершину \(0\), вы получите \(r = 0\).
  • Если простой путь между вершинами \(a\) и \(b\) содержит вершину \(0\), вы получите \(r = 1\).
  • В случае, если вы сделаете более \(2n-6\) запросов или сделаете некорректный запрос, вы получите \(r = -1\). После получения такого ответа ваша программа должна немедленно завершиться, чтобы получить вердикт «Неправильный ответ». В противном случае вы можете получить произвольный вердикт, потому что ваше решение продолжит чтение из закрытого потока.

Когда вы определите структуру, выведите строку в формате «! \(p_1 \space p_2 \ldots p_{n-1}\)» (без кавычек), где \(p_i\) (\(0 \le p_i < i\)) обозначает индекс прямого предка вершины \(i\). Этот запрос не учитывается в лимите \(2n - 6\) запросов.

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

После вывода любого запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Интерактор неадаптивный. Дерево не меняется в процессе взаимодействия.

Взломы

Для взлома используйте следующий формат:

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(4 \le n \le 10^4\)) — количество вершин в нервной системе Генокракена.

Вторая строка каждого набора входных данных содержит \(n-1\) целых чисел \(p_1, p_2, \ldots, p_{n-1}\) (\(0 \le p_1 \le p_2 \le \ldots \le p_{n-1} \le n - 2\), \(0 \le p_i < i\)) — прямые предки вершин \(1\), \(2\), ..., \(n-1\) в системе соответственно.

В каждом наборе входных данных значения \(p_1, p_2, \ldots, p_{n-1}\) должны обеспечивать следующее в дереве:

  • Если мы удалим корневую вершину \(0\) и все смежные ребра, то это дерево превратится в лес, состоящий только из путей. Каждая вершина, которая изначально была смежной с вершиной \(0\), будет концом какого-то пути.
  • Вершина \(1\) имеет ровно две смежные вершины (включая вершину \(0\)).

Сумма \(n\) по всем наборам входных данных не должна превышать \(10^4\).

Примечание

В первом наборе входных данных нервная система Генокракена образует следующее дерево:

  • Ответ на «? 2 3» равен \(1\). Это означает, что простой путь между вершинами \(2\) и \(3\) содержит вершину \(0\).

Во втором наборе входных данных нервная система Генокракена образует следующее дерево:

  • Ответ на «? 2 3» равен \(1\). Это означает, что простой путь между вершинами \(2\) и \(3\) содержит вершину \(0\).
  • Ответ на «? 2 4» равен \(0\). Это означает, что простой путь между вершинами \(2\) и \(4\) не содержит вершину \(0\).

В третьем наборе входных данных нервная система Генокракена образует следующее дерево:

E. Сбалансированный

жадные алгоритмы Конструктив математика реализация Структуры данных *2400

Дан циклический массив \(a\) из \(n\) элементов, где \(n\)нечетное. За одну операцию вы можете сделать следующее:

  • Выберите индекс \(1 \le i \le n\) и увеличьте \(a_{i - 1}\) на \(1\), \(a_i\) на \(2\) и \(a_{i + 1}\) на \(1\). Элемент перед первым элементом является последним элементом, так как это циклический массив.

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

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n < 2 \cdot 10^5\), \(n\)нечетное) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^{6}\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных:

  • Если невозможно сделать циклический массив сбалансированным, выведите \(-1\).
  • В противном случае выведите \(n\) целых чисел \(v_1, v_2, \ldots, v_n\) (\(0 \leq v_i \leq 10^{18}\)) — где \(v_i\) обозначает количество операций, примененных к индексу \(i\). Можно доказать, что если существует какое-то решение, то существует решение при данных ограничениях. Если существует несколько решений при данных ограничениях, выведите любое из них.
Примечание

В первом наборе входных данных:

  • После \(1\) операции, примененной к индексу \(i = 2\), массив \(a = [3, 3, 3]\).

Во втором наборе входных данных:

  • После \(2\) операций, примененных к индексу \(i = 1\), массив \(a = [5, 4, 5]\).
  • После \(1\) операции, примененной к индексу \(i = 2\), массив \(a = [6, 6, 6]\).

В третьем наборе входных данных:

  • После \(2\) операций, примененных к индексу \(i = 1\), массив \(a = [5, 4, 1, 2, 3]\).
  • После \(3\) операций, примененных к индексу \(i = 3\), массив \(a = [5, 7, 7, 5, 3]\).
  • После \(2\) операций, примененных к индексу \(i = 5\), массив \(a = [7, 7, 7, 7, 7]\).

D. Задание Косукэ

дп жадные алгоритмы математика снм Структуры данных *1300

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

Отрезок \([l,r]\) считается красивым, если \(a_l + a_{l+1} + \dots + a_{r-1} + a_r=0\).

Для фиксированного массива \(a\) ваша задача состоит в том, чтобы вычислить максимальное количество непересекающихся красивых сегментов.

Входные данные

Первая строка входных данных содержит число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Каждый набор состоит из \(2\) строк.

  • первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину массива.
  • Вторая строка содержит \(n\) целых чисел \(a_i\) (\(-10^5 \le a_i \le 10^5\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3\cdot 10^5\).

Выходные данные

Для каждого теста выведите одно целое число: максимальное количество непересекающихся красивых отрезков.

E. Сакурако, Косукэ и перестановка

графы жадные алгоритмы математика Перебор поиск в глубину и подобное снм Структуры данных *1400

Экзамены Сакурако закончились, она справилась на отлично. В награду она получила перестановку \(p\). Косукэ был не совсем доволен, потому что он провалил один экзамен и не получил подарок. Он решил пробраться в её комнату (спасибо за код от её замка) и испортить перестановку так, чтобы она стала простой.

Перестановка \(p\) считается простой, если для каждого \(i\) \((1\le i \le n)\) выполняется одно из условий:

  • \(p_i=i\)
  • \(p_{p_i}=i\)

Например, перестановки \([1, 2, 3, 4]\), \([5, 2, 4, 3, 1]\) и \([2, 1]\) являются простыми, а \([2, 3, 1]\) и \([5, 2, 1, 4, 3]\) — нет.

За одну операцию Косукэ может выбрать индексы \(i,j\) \((1\le i,j\le n)\) и поменять местами элементы \(p_i\) и \(p_j\).

Сакурако вот-вот вернется домой. Ваша задача — вычислить минимальное количество операций, которые необходимо выполнить Косукэ, чтобы сделать перестановку простой.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных описывается двумя строками.

  • Первая строка содержит одно целое число \(n\) (\(1\le n \le 10^6\)) — длину перестановки \(p\).
  • Вторая строка содержит \(n\) целых чисел \(p_i\) (\(1\le p_i\le n\)) — элементы перестановки \(p\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Гарантируется, что \(p\) является перестановкой.

Выходные данные

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

Примечание

В первом и втором примерах перестановки уже простые.

В четвёртом примере достаточно поменять местами \(p_2\) и \(p_4\). Таким образом перестановка станет равна \([2, 1, 4, 3]\) за \(1\) операцию.

G. Сакурако и Чефир

Деревья дп жадные алгоритмы поиск в глубину и подобное Структуры данных *2200

Дано дерево из \(n\) вершин с корнем в вершине \(1\). Гуляя по нему со своим котом Чефиром, Сакурако отвлеклась, и Чефир убежал.

Чтобы помочь Сакурако, Косукэ записал свои \(q\) предположений. В \(i\)-м предположении он считает, что Чефир потерялся в вершине \(v_i\) и имел \(k_i\) выносливости.

Также для каждого предположения Косукэ считает, что Чефир мог переместиться по рёбрам произвольное число раз:

  • из вершины \(a\) в вершину \(b\), если \(a\) является предком\(^{\text{∗}}\) \(b\), выносливость от этого не изменится;
  • из вершины \(a\) в вершину \(b\), если \(a\) не является предком \(b\), тогда выносливость Чефира понизится на \(1\).

Если выносливость Чефира равна \(0\), то он не сможет сделать перемещение второго типа.

Для каждого предположения ваша задача — вычислить расстояние до самой дальней вершины, в которую Чефир мог уйти от вершины \(v_i\), имея \(k_i\) выносливости.

\(^{\text{∗}}\)Вершина \(a\) является предком вершины \(b\), если кратчайший путь от \(b\) к корню проходит через \(a\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных описывается следующим образом:

  • Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.
  • Следующие \(n-1\) строки содержат ребра дерева. Гарантируется, что заданные ребра образуют дерево.
  • Следующая строка состоит из одного целого числа \(q\) \((1\le q\le 2 \cdot 10^5)\), которое обозначает количество предположений Косукэ.
  • Следующие \(q\) строк описывают предположения, которые сделал Косукэ, двумя целыми числами \(v_i\), \(k_i\) \((1\le v_i \le n, 0 \le k_i\le n)\).

Гарантируется, что сумма \(n\) и сумма \(q\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого теста и для каждого предположения выведите расстояние до самой дальней вершины, в которую Чефир мог пройти от начальной точки \(v_i\) имея \(k_i\) выносливости.

Примечание

В первом примере:

  • В первом запросе можно пройти из вершины \(5\) в вершину \(3\) (после этого выносливость уменьшится на \(1\) и станет равна \(0\)), после этого можно пройти в вершину \(4\);
  • Во втором запросе из вершины \(3\) имея \(1\) выносливости можно добраться только до вершин \(2\), \(3\), \(4\) и \(5\);
  • В третьем запросе из вершины \(2\) имея \(0\) выносливости можно добраться только до вершин \(2\), \(3\), \(4\) и \(5\);

B. Возрождение Рахша

жадные алгоритмы реализация Структуры данных *1000

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

Тело Рахша можно представить в виде последовательности пятен, представленных бинарной строкой \(s\) длины \(n\), где символ \(0\) означает слабое место, а \(1\) — сильное. Цель Рустама — убедиться, что ни один интервал из \(m\) последовательных пятен не является полностью слабым (все пятна обозначены \(0\)).

К счастью, Рустам обладает особой способностью под названием Тимар, унаследованной от его матери Рудабе при рождении. С помощью Тимар он может выбрать любой отрезок длины \(k\) и мгновенно усилить его (изменить каждый символ на этом отрезке на \(1\)). Ваша задача состоит в том, чтобы определить минимальное число раз, которое Рустаму нужно использовать Тимар, чтобы на теле Рахша не осталось последовательных полностью слабых участков длины \(m\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три числа \(n\), \(m\), \(k\) (\(1 \le m, k \le n \le 2 \cdot 10^5\)). Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\), состоящую из символов \(s_1s_2 \ldots s_n\) (\(s_i \in \{\)0,1\(\}\) для всех \(1 \le i \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное число раз, которое Рустаму необходимо использовать Тимар, чтобы поддерживать движение Рахша, гарантируя отсутствие последовательных полностью слабых участков длины \(m\).

Примечание

В первом наборе входных данных мы должны применить операцию к каждому символу 0.

Во втором наборе входных данных \(s\) уже удовлетворяет условию.

В третьем наборе входных данных мы можем выполнить операцию над интервалом \([3,4]\) для получения 001100.

D. Действительно, ещё одна задача о числах

Бинарный поиск жадные алгоритмы математика разделяй и властвуй реализация Структуры данных *1800

Three r there are's in strawberry.

Вам дан массив \(b\) длины \(m\). Вы можете выполнить следующую операцию любое количество раз (возможно, нулевое):

  • Выбрать два различных индекса \(i\) и \(j\), где \(\bf{1\le i < j\le m}\) и \(b_i\) является чётным числом, поделить \(b_i\) на \(2\) и умножить \(b_j\) на \(2\).

Ваша задача — максимизировать сумму массива после выполнения любого количества таких операций. Поскольку она может быть большой, выведите эту сумму по модулю \(10^9+7\).

Поскольку эта задача слишком простая, вам дается массив \(a\) длины \(n\), и вам нужно решить задачу для каждого префикса \(a\).

Другими словами, обозначив максимальную сумму \(b\) после выполнения любого количества таких операций как \(f(b)\), вам нужно вывести \(f([a_1])\), \(f([a_1,a_2])\), \(\ldots\), \(f([a_1,a_2,\ldots,a_n])\) по модулю \(10^9+7\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — начальные значения массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел, являющимися ответами для каждого префикса \(a\) по модулю \(10^9+7\).

Примечание

Для каждого префикса в первом наборе входных данных возможен следующий массив после применения операций:

  • \([1]\): сумма равна \(1\);
  • \([1, 2]\): сумма равна \(3\);
  • \([1, 1, 6]\): сумма равна \(8\);
  • \([1, 1, 3, 8]\): сумма равна \(13\);
  • \([1, 1, 3, 1, 40]\): сумма равна \(46\);
  • \([1, 1, 3, 1, 5, 48]\): сумма равна \(59\);
  • \([1, 1, 3, 1, 5, 3, 112]\): сумма равна \(126\);
  • \([1, 1, 3, 1, 5, 3, 7, 128]\): сумма равна \(149\);
  • \([1, 1, 3, 1, 5, 3, 7, 1, 1152]\): сумма равна \(1174\);
  • \([1, 1, 3, 1, 5, 3, 7, 1, 9, 1280]\): сумма равна \(1311\).

E. Пустить реки вспять

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *1600

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

Существует \(n\) стран, в каждой из которых ровно по \(k\) регионов. Для \(j\)-го региона \(i\)-й страны они вычислили значение \(a_{i,j}\), которое отражает количество воды в нём.

Мудрецы намереваются создать каналы между \(j\)-м регионом \(i\)-й страны и \(j\)-м регионом \((i + 1)\)-й страны для всех \(1 \leq i \leq (n - 1)\) и для всех \(1 \leq j \leq k\).

В силу того, что все \(n\) стран находятся на большом склоне, вода стекает в сторону страны с наибольшим номером. По прогнозу мудрецов, после создания системы каналов новое значение \(j\)-го региона \(i\)-й страны станет равно \(b_{i,j} = a_{1,j} | a_{2,j} | ... | a_{i,j}\), где \(|\) — операция побитового «ИЛИ».

После перераспределения воды мудрецы стремятся выбрать наиболее подходящую страну для проживания, поэтому они пришлют вам \(q\) запросов на рассмотрение.

Каждый запрос будет содержать \(m\) требований.

Каждое требование содержит три параметра: номер региона \(r\), знак \(o\)\(<\)» или «\(>\)») и значение \(c\). Если \(o\) = «\(<\)», то в \(r\)-м регионе выбранной вами страны новое значение должно быть строго меньше значения ограничения \(c\), а если \(o\) = «\(>\)» — строго больше.

Иными словами, выбранная вами страна \(i\) должна удовлетворять всем \(m\) требованиям. Если в очередном требовании \(o\) = «\(<\)», то должно выполняться \(b_{i,r} < c\), а если \(o\) = «\(>\)» — то \(b_{i,r} > c\).

В ответ на каждый запрос вам следует вывести одно целое число — номер подходящей страны. Если таких стран несколько, выведите наименьший из возможных. Если таких стран не существует, выведите \(-1\).

Входные данные

Первая строка содержит три целых числа \(n\), \(k\), и \(q\) (\(1 \leq n, k, q \leq 10^5\)) — количество стран, регионов и запросов соответственно.

Далее следует \(n\) строк, \(i\)-я из которых содержит \(k\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i,k}\) (\(1 \leq a_{i,j} \leq 10^9\)), где \(a_{i,j}\) — значение \(j\)-го региона \(i\)-й страны.

Далее описывается \(q\) запросов.

Первая строка каждого запроса содержит одно целое число \(m\) (\(1 \leq m \leq 10^5\)) — количество требований.

Затем идут \(m\) строк, содержащих значения целое число \(r\), символ \(o\) и целое число \(c\) (\(1 \leq r \leq k\), \(0 \leq c \leq 2 \cdot 10^9\)), где \(r\) и \(c\) — номер региона и значение, а \(o\) — символ «\(<\)» либо «\(>\)» — знак.

Гарантируется, что \(n \cdot k\) не превышает \(10^5\) и что сумма \(m\) по всем запросам также не превышает \(10^5\).

Выходные данные

Для каждого запроса на новой строке выведите целое число — наименьший номер подходящей страны, либо \(-1\), если такой страны не существует.

Примечание

В примере изначальные значения регионов имеют вид:

\(1\)\(3\)\(5\)\(9\)
\(4\)\(6\)\(5\)\(3\)
\(2\)\(1\)\(2\)\(7\)

После создания каналов новые значения будут выглядеть так:

\(1\)\(3\)\(5\)\(9\)
\(1 | 4\)\(3 | 6\)\(5 | 5\)\(9 | 3\)
\(1 | 4 | 2\)\(3 | 6 | 1\)\(5 | 5 | 2\)\(9 | 3 | 7\)
\(\downarrow\)
\(1\)\(3\)\(5\)\(9\)
\(5\)\(7\)\(5\)\(11\)
\(7\)\(7\)\(7\)\(15\)

В первом запросе необходимо вывести минимальный номер страны (т.е. строки), где после перераспределения воды в первом регионе (т.е. столбце) новое значение будет больше четырёх и меньше шести, а во втором — меньше восьми. Этим требованиям удовлетворяет только страна с номером \(2\).

Во втором запросе нет ни одной страны, удовлетворяющей заданным требованиям.

В третьем запросе подходит только страна с номером \(3\).

В четвёртом запросе все три страны удовлетворяют условиям, поэтому ответом является наименьший номер \(1\).

D. Акулий серфинг

жадные алгоритмы Структуры данных *1300

Муалани любит серфинг на своей акульей доске!

Путь серфинга Муалани можно смоделировать с помощью числовой прямой. Она начинает с позиции \(1\), а путь заканчивается на позиции \(L\). Когда она находится в позиции \(x\) с силой прыжка \(k\), она может прыгнуть в любую целую позицию в интервале \([x, x+k]\). Изначально ее сила прыжка равна \(1\).

Однако ее путь серфинга не совсем гладкий. На ее пути есть \(n\) препятствий. Каждое препятствие представлено отрезком \([l, r]\), что означает, что она не может прыгнуть на любую позицию в отрезке \([l, r]\).

Также на определенных позициях на пути есть \(m\) усилений. Усиление \(i\) расположено на позиции \(x_i\) и имеет значение \(v_i\). Когда Муалани находится на позиции \(x_i\), она может собрать усиление, чтобы увеличить свою силу прыжка на \(v_i\). На одной и той же позиции может быть несколько усилений. Когда она находится на позиции с несколькими усилениями, она может выбрать, взять или игнорировать каждое отдельное усиление. Ни одно усиление не находится в отрезке любого препятствия.

Каково минимальное количество усилений, которые она должна собрать, чтобы достичь позиции \(L\) и завершить путь? Если завершить путь невозможно, выведите \(-1\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(L\) (\(1 \leq n, m \leq 2 \cdot 10^5, 3 \leq L \leq 10^9\)) — количество препятствий, количество усилений и позицию конца.

Следующие \(n\) строк содержат по два целых числа \(l_i\) и \(r_i\) (\(2 \leq l_i \leq r_i \leq L-1\)) — границы отрезка для \(i\)-го препятствия. Гарантируется, что \(r_i + 1 < l_{i+1}\) для всех \(1 \leq i < n\) (т.е. все препятствия не перекрываются, отсортированы по возрастанию позиций, и конец предыдущего препятствия не является последовательным с началом следующего препятствия).

Следующие \(m\) строк содержат по два целых числа \(x_i\) и \(v_i\) (\(1 \leq x_i, v_i \leq L\)) — позицию и значение для \(i\)-го усиления. На одной и той же позиции \(x\) может быть несколько усилений. Гарантируется, что \(x_i \leq x_{i+1}\) для всех \(1 \leq i < m\) (т.е. усиления отсортированы по неубывания позиции) и ни одно усиление не находится в отрезке любого препятствия.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превышают \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество усилений, которые она должна собрать, чтобы достичь позиции \(L\). Если это невозможно, выведите \(-1\).

Примечание

В первом наборе входных данных она может собрать усиления \(1\), \(2\), \(3\) и \(5\), чтобы преодолеть все препятствия.

Во втором наборе входных данных она не может перепрыгнуть первое препятствие.

В четвертом наборе входных данных, собрав оба усиления, она сможет перепрыгнуть препятствие.

F. Пылающее Пламя

Бинарный поиск математика сортировки Структуры данных *2100

Вы получили нового ограниченного персонажа события Шилонен. Вы решаете использовать её в бою.

На линии находится \(n\) врагов. \(i\)-й враг слева имеет здоровье \(h_i\) и в данный момент находится на позиции \(x_i\). У Шилонен есть урон от атаки \(m\), и вы готовы победить врагов с её помощью.

У Шилонен есть мощная атака «удар по земле». Перед тем, как вы выполните какие-либо атаки, вы выбираете целое число \(p\) и размещаете Шилонен там (\(p\) может быть любой целой позицией, включая позицию с врагом в данный момент). После этого, за каждую атаку она наносит \(m\) урона врагу на позиции \(p\) (если таковой имеется), \(m-1\) урона врагам на позициях \(p-1\) и \(p+1\), \(m-2\) урона врагам на позициях \(p-2\) и \(p+2\), и так далее. Враги, находящиеся на расстоянии не менее \(m\) от Шилонен, не получают урона от атак.

Формально, если враг находится на позиции \(x\), она нанесет \(\max(0,m - |p - x|)\) урона этому врагу за каждую атаку. Обратите внимание, что вы не можете выбрать другое \(p\) для разных атак.

Среди всех возможных \(p\) выведите минимальное количество атак, которые Шилонен должна выполнить, чтобы победить как минимум \(k\) врагов. Если невозможно найти \(p\), при котором в конечном итоге будет побеждено как минимум \(k\) врагов, выведите \(-1\) вместо этого. Обратите внимание, что враг считается побежденным, если его здоровье достигает \(0\) или ниже.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) – количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \leq k \leq n \leq 10^5\), \(1 \leq m \leq 10^9\)).

Следующая строка содержит \(n\) целых чисел \(h_1, h_2, ..., h_n\) (\(1 \leq h_i \leq 10^9\)).

Последняя строка каждого набора содержит \(n\) целых чисел \(x_1, x_2, ..., x_n\) (\(1\leq x_i \leq 10^9\), \(x_i < x_{i+1}\) для всех \(1 \leq i < n\))

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите целое число на новой строке, минимальное количество атак, которые должны быть выполнены, чтобы победить как минимум \(k\) врагов. Если невозможно найти \(p\), при котором в конечном итоге будет побеждено как минимум \(k\) врагов, выведите \(-1\) вместо этого.

Примечание

В первом примере оптимально выбрать \(p=2\). За каждую атаку первый враг получает \(5-|2-1|=4\) урона, второй враг получает \(5\) урона, третий враг получает \(4\) урона, четвертый враг получает \(3\) урона, а пятый враг получает \(2\) урона. После \(2\) атак первые три врага будут побеждены. Можно показать, что невозможно победить \(3\) врага менее чем за \(2\) атаки, независимо от выбранного \(p\).

Во втором примере мы должны убить всех \(9\) врагов. Выбрав \(p=5\), все девять врагов будут побеждены за \(2\) атаки.

В третьем примере мы должны убить обоих врагов. Однако можно показать, что ни одно выбранное \(p\) не повредит обоих врагов одновременно, поэтому ответ будет \(-1\).

В четвертом примере выбор \(p=1\) позволит нам победить первого врага за \(6969697\) атак.

В пятом примере выбор \(p=10\) заставит каждого врага получать \(1\) урон за атаку. Оба врага будут побеждены за \(15\) атак.

G. Исследование Натлана

битмаски дп Комбинаторика математика Структуры данных теория чисел *2000

Вы исследуете потрясающий регион Натлан! Этот регион состоит из \(n\) городов, и каждый город имеет рейтинг привлекательности \(a_i\). Направленное ребро существует от города \(i\) к городу \(j\) тогда и только тогда, когда \(i < j\) и \(\gcd(a_i,a_j)\neq 1\), где \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) целых чисел \(x\) и \(y\).

Начав с города \(1\), ваша задача — определить общее количество различных путей, которыми вы можете добраться до города \(n\), по модулю \(998\,244\,353\). Два пути различны тогда и только тогда, когда множество посещённых городов различно.

Входные данные

Первая строка содержит целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — количество городов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(2 \leq a_i \leq 10^6\)) — привлекательность каждого города.

Выходные данные

Выведите общее количество различных путей, которыми вы можете добраться до города \(n\), по модулю \(998\,244\,353\).

Примечание

В первом примере пять путей следующие:

  • Город \(1\rightarrow\) Город \(5\)
  • Город \(1\rightarrow\) Город \(2\rightarrow\) Город \(5\)
  • Город \(1\rightarrow\) Город \(2\rightarrow\) Город \(3\rightarrow\) Город \(5\)
  • Город \(1\rightarrow\) Город \(2\rightarrow\) Город \(4\rightarrow\) Город \(5\)
  • Город \(1\rightarrow\) Город \(4\rightarrow\) Город \(5\)

Во втором примере два пути следующие:

  • Город \(1\rightarrow\) Город \(3\rightarrow\) Город \(5\)
  • Город \(1\rightarrow\) Город \(2\rightarrow\) Город \(3\rightarrow\) Город \(5\)

C. DIY

геометрия жадные алгоритмы сортировки Структуры данных *1400

You are given a list of \(n\) integers \(a_1, a_2, \dots, a_n\). You need to pick \(8\) elements from the list and use them as coordinates of four points. These four points should be corners of a rectangle which has its sides parallel to the coordinate axes. Your task is to pick coordinates in such a way that the resulting rectangle has the maximum possible area. The rectangle can be degenerate, i. e. its area can be \(0\). Each integer can be used as many times as it occurs in the list (or less).

Input

The first line contains one integer \(t\) (\(1 \le t \le 25\,000\)) — the number of test cases.

The first line of each test case contains one integer \(n\) (\(8 \le n \le 2 \cdot 10^5\)).

The second line of each test case contains \(n\) integers \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)).

Additional constraint on the input: the sum of \(n\) over all test cases does not exceed \(2 \cdot 10^5\).

Output

For each test case, print the answer as follows:

  • if it is impossible to construct a rectangle which meets the constraints from the statement, print a single line containing the word NO (case-insensitive);
  • otherwise, in the first line, print YES (case-insensitive). In the second line, print \(8\) integers \(x_1, y_1, x_2, y_2, x_3, y_3, x_4, y_4\) — the coordinates of the corners of the rectangle. You can print the corners in any order.

D. Divide OR Conquer

Бинарный поиск битмаски дп реализация Структуры данных *2400

You are given an array \([a_1, a_2, \ldots a_n]\) consisting of integers between \(0\) and \(10^9\). You have to split this array into several segments (possibly one) in such a way that each element belongs to exactly one segment.

Let the first segment be the array \([a_{l_1}, a_{l_1 + 1}, \ldots, a_{r_1}]\), the second segment be \([a_{l_2}, a_{l_2+ 1}, \ldots, a_{r_2}]\), ..., the last segment be \([a_{l_k}, a_{l_k+ 1}, \ldots, a_{r_k}]\). Since every element should belong to exactly one array, \(l_1 = 1\), \(r_k = n\), and \(r_i + 1 = l_{i+1}\) for each \(i\) from \(1\) to \(k-1\). The split should meet the following condition: \(f([a_{l_1}, a_{l_1 + 1}, \ldots, a_{r_1}]) \le f([a_{l_2}, a_{l_2+ 1}, \ldots, a_{r_2}]) \le \dots \le f([a_{l_k}, a_{l_k+1}, \ldots, a_{r_k}])\), where \(f(a)\) is the bitwise OR of all elements of the array \(a\).

Calculate the number of ways to split the array, and print it modulo \(998\,244\,353\). Two ways are considered different if the sequences \([l_1, r_1, l_2, r_2, \ldots, l_k, r_k]\) denoting the splits are different.

Input

The first line contains an integer \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — the length of the array \(a\).

The second line contains \(n\) integers \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10 ^9\)) — the elements of the given array.

Output

Print one integer — the number of ways to split the array, taken modulo \(998\,244\,353\).

Note

In the first two examples, every way to split the array is valid.

In the third example, there are three valid ways to split the array:

  • \(k = 3\); \(l_1 = 1, r_1 = 1, l_2 = 2, r_2 = 2, l_3 = 3, r_3 = 3\); the resulting arrays are \([3]\), \([4]\), \([6]\), and \(3 \le 4 \le 6\);
  • \(k = 2\); \(l_1 = 1, r_1 = 1, l_2 = 2, r_2 = 3\); the resulting arrays are \([3]\) and \([4, 6]\), and \(3 \le 6\);
  • \(k = 1\); \(l_1 = 1, r_1 = 3\); there will be only one array: \([3, 4, 6]\).

If you split the array into two arrays \([3, 4]\) and \([6]\), the bitwise OR of the first array is \(7\), and the bitwise OR of the second array is \(6\); \(7 > 6\), so this way to split the array is invalid.

E. Barrels

жадные алгоритмы математика Структуры данных *2900

Suppose you have \(n\) water barrels standing in a row, numbered from \(1\) to \(n\).

All barrels are equal and have a bottom area equal to one unit, so the volume of the water inside a barrel is equal to the height of the water column. Initially, the \(i\)-th barrel has \(v_i\) units of water.

Adjacent barrels are connected by pipes. In other words, for each \(i\) from \(1\) to \(n - 1\), barrels \(i\) and \(i + 1\) are connected by a single horizontal pipe at height \(h_i\). The widths of the pipes are negligible. These pipes allow water to flow between barrels.

Now you want to play with barrels. Your plan is to maximize the volume of the water in the first barrel by throwing clay into barrels. In one step, you can choose any barrel and throw one unit of clay into it. One unit of clay has the same volume as one unit of water. Clay is heavier than water and doesn't mix with it, so it falls to the bottom of the barrel, distributing evenly.

Clay has a sticky structure, so it seals pipes if the clay column is high enough. More formally, suppose the pipe is at height \(h\). If the height of the clay column is also \(\boldsymbol{h}\) (or lower), the pipe is working. But the moment you add more clay into the barrel, the pipe becomes sealed instantly, preventing any water from moving between barrels.

You have a mountain of clay, so you can repeat the step described above any number of times. However, between the steps, you have to wait until the water reaches the new equilibrium.

What is the maximum water volume you can collect in the first barrel?

Assume that the barrels are high enough, so the water doesn't overflow, and the pipe widths are negligible.

Input

The first line contains a single integer \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — the number of barrels.

The second line contains \(n\) integers \(v_1, v_2, \dots, v_n\) (\(0 \le v_i \le 10^6\)), where \(v_i\) is the initial water volume in the \(i\)-th barrel.

The third line contains \(n - 1\) integers \(h_1, h_2, \dots, h_{n - 1}\) (\(1 \le h_i \le 10^6\)), where \(h_i\) is the height of the pipe between the \(i\)-th and the \((i + 1)\)-st barrel.

Additional constraint on the input: the given water heights are in an equilibrium.

Output

Print a single number — the maximum volume of water in the first barrel. Your answer is considered correct if its absolute or relative error does not exceed \(10^{-6}\).

Formally, let your answer be \(a\), and the jury's answer be \(b\). Your answer is accepted if and only if \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

Note

An optimal strategy for the first example is shown in the picture below:

F. Alternative Platforms

бпф Комбинаторика математика сортировки Структуры данных *2500

Suppose you are working in the Ministry of Digital Development of Berland, and your task is to monitor the industry of video blogging.

There are \(n\) bloggers in Berland. Recently, due to the poor state of the main video platform in Berland, two alternative platforms were introduced. That's why bloggers started to reupload their videos to these alternative platforms. You've got the statistics that the \(i\)-th blogger uploaded \(v_i\) videos to the first alternative platform and \(r_i\) videos to the second alternative platform.

You think that a potential user will be upset if even at least one of his favorite bloggers doesn't upload anything. However, if a blogger uploads videos to both platforms, the user will watch that blogger on the platform where more videos are available. So, you've come up with the following function to estimate user experience. Suppose a user watches \(k\) bloggers \(b_1, b_2, \dots, b_k\); then, let user experience be \(\)E(b_1, \dots, b_k) = \max\left(\min_{i=1..k}{v[b_i]}, \min_{i=1..k}{r[b_i]}\right).\(\)

In order to get some statistics, you want to calculate the value \(\mathit{avg}_k\) that is equal to an average experience among all subsets of bloggers of size \(k\). Also, you have to calculate \(\mathit{avg}_k\) for each \(k\) from \(1\) to \(n\).

Since answers may be too large, print them modulo \(998\,244\,353\).

Input

The first line contains a single integer \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — the number of bloggers.

The second line contains \(n\) integers \(v_1, v_2, \dots, v_n\) (\(0 \le v_i \le 10^6\)), where \(v_i\) is the number of videos of the \(i\)-th blogger on the first alternative platform.

The third line contains \(n\) integers \(r_1, r_2, \dots, r_n\) (\(0 \le r_i \le 10^6\)), where \(r_i\) is the number of videos of the \(i\)-th blogger on the second alternative platform.

Output

Print \(n\) integers \(\mathit{avg}_1, \mathit{avg}_2, \dots, \mathit{avg}_n\).

It can be proven that \(\mathit{avg}_k\) may be represented as an irreducible fraction \(\dfrac{x}{y}\) where \(y \not\equiv 0 \pmod{998\,244\,353}\). So, print \(\mathit{avg}_k\) in a form \(x \cdot y^{-1} \bmod 998\,244\,353\).

Note

In the first example, \(332748119\) is \(\frac{4}{3}\). In the third example, \(199648873\) is \(\frac{12}{5}\).

I. Polyathlon

Бинарный поиск Строки строковые суфф. структуры Структуры данных хэши *2500

Berland is this year's host country of the International Collegiate Polyathlon Competition! Similar to biathlon being a competition of two sports, polyathlon is a competition of many sports. This year, there are \(m\) sports. Also, there are \(n\) participants in the event. The sports are numbered from \(1\) to \(m\), and the participants are numbered from \(1\) to \(n\).

Some participants are skilled in multiple sports. You are given a binary matrix \(n \times m\) such that the \(j\)-th character of the \(i\)-th row is 1 if the \(i\)-th participant is skilled in the \(j\)-th sport, and 0, otherwise. It's also known that, for each pair of participants, there exists at least one sport such that one of them is skilled in that sport and the other one isn't.

The order of sports in the competition is determined at the opening ceremony. Historically, it's done by the almighty Random Number Generator. A random number \(x\) from \(1\) to \(m\) is rolled. The competition then starts with the sport \(x\), then the sport \((x \bmod m + 1)\) is played, then the sport \(((x + 1) \bmod m + 1)\), and so on.

Each sport is played as follows. If all remaining participants (all participants which are not eliminated yet) are not skilled in that sport, everyone goes through to the next sport. Otherwise, all skilled participants go through to the next sport, and all unskilled participants are eliminated from the competition. Once there is a single participant remaining in the competition, the competition ends, and that participant is declared the winner.

As an organizer of the competition, you are curious of the possible outcomes of the competition beforehand (not that you are going to rig the random roll, how could you possibly think that...). For each sport \(x\), print the index of the winner if the competition starts with the sport \(x\).

Input

The first line contains two integers \(n\) and \(m\) (\(2 \le n, m \le 10^6\); \(n \le 2^m\); \(nm \le 2 \cdot 10^6\)) — the number of participants and the number of sports, respectively.

The \(i\)-th of the next \(n\) lines contains a binary string consisting of exactly \(m\) characters 0 or 1 — the skillset of the \(i\)-th participant. If the \(j\)-th character is 1, the \(i\)-th participant is skilled in the \(j\)-th sport. If it's 0, the \(i\)-th participant is not skilled in the \(j\)-th sport.

Additional constraint on the input: for each pair of participants, there exists at least one sport such that one of them is skilled in that sport and the other one isn't. In other words, all \(n\) binary strings are pairwise distinct.

Output

Print \(m\) integers. For each \(x\) from \(1\) to \(m\), print the index of the winner if the competition starts with the sport \(x\).

B. Маленький Слоник и карточки

Бинарный поиск Структуры данных *1500

Маленький Слоник любит играть с цветными карточками.

У него есть n карточек, каждая имеет ровно два цвета (цвет на передней стороне и цвет на задней стороне). Изначально все карточки лежат на столе передней стороной вверх. За один шаг Маленький Слоник может перевернуть на другую сторону любую карточку. Маленький Слоник считает набор карточек на столе веселым, если хотя бы половина карточек имеет одинаковый цвет (для каждой карточки рассматривается цвет стороны, которой она лежит вверх).

Помогите Маленькому Слонику найти минимальное количество шагов необходимых для превращения набора из n карточек в веселый.

Входные данные

В первой строке задано единственное целое число n (1 ≤ n ≤ 105) — количество карточек. Следующие n строк содержат описание всех карточек, по одной карточке на строку. Карточки описываются парой целых положительных чисел, не превосходящих 109, — цветами на обеих сторонах. Первое число в строке — это цвет на передней стороне карточки, второе — на задней. Цвет на передней стороне может совпадать с цветом на задней.

Числа в строках разделяются единичными пробелами.

Выходные данные

В единственной строке выведите единственное целое число — искомое минимальное количество шагов. Если превратить набор в веселый невозможно, выведите -1.

Примечание

В первом примере изначально лежат три карточки из цветами 4, 4, 7. Так как две из трех карточек имеют одинаковый цвет 4, менять ничего не нужно, поэтому ответ — 0.

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

E. Маленький Слоник и строки

реализация строковые суфф. структуры Структуры данных *2800

Маленький Слоник очень любит строки.

У него есть массив a из n строк, состоящих из строчных латинских букв. Пусть элементы массива пронумерованы от 1 до n, тогда элемент номер i обозначим ai. Для каждой строки ai (1 ≤ i ≤ n) Маленький Слоник хочет найти количество пар целых чисел l и r (1 ≤ l ≤ r ≤ |ai|) таких, что подстрока ai[l... r] является подстрокой как минимум k строк из массива a (включая i-ю строку).

Помогите Маленькому Слонику решить эту задачу.

Если вы не знакомы с основными обозначениями в строковых задачах, в примечании приведены соответствующие определения.

Входные данные

В первой строке задано два целых числа через пробел — n и k (1 ≤ n, k ≤ 105). В следующих n строках задан массив a. В i-ой строке записана непустая строка ai, состоящая из строчных латинских букв. Суммарная длина всех строк ai не превосходит 105.

Выходные данные

В единственной строке выведите n целых чисел разделенных единичными пробелами — i-е число является ответом для строки ai.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

Пусть задана строка a = a1a2... a|a|, тогда обозначим через |a| длину строки, а через aii-й символ строки.

Подстрокой a[l... r] (1 ≤ l ≤ r ≤ |a|) строки a называется строка alal + 1... ar.

Строка a является подстрокой строки b, если существует такая пара целых чисел l и r (1 ≤ l ≤ r ≤ |b|), что b[l... r] = a.

I. Auto Complete

Бинарный поиск Деревья реализация сортировки Строки Структуры данных хэши *2300

You are designing a snazzy new text editor, and you want to add a nifty auto-complete feature to help users save time. Here is how it will work: if a user types "App", your editor will magically suggest the word "Application"! Even better, users can personalize the words that auto-complete in your editor.

Your editor will support 4 kinds of operations (Let's say the current text in your editor is \(t\)):

  1. Add an auto complete pattern \(p_i\).
  2. Delete an auto complete pattern \(p_i\).
  3. Append a string \(s\) to the end of \(t\).
  4. Delete \(c\) characters from the end of \(t\). Note that if \(c\) is larger then the length of \(t\), delete all the characters from \(t\).

After each action, your editor should suggest an auto-complete candidate \(i\) that matches the following criteria:

  1. The string \(p_i\) has a prefix equal to \(t\).
  2. If there are multiple \(p_i\), pick the longest one.
  3. If there are still multiple \(p_i\), pick the one with the smallest lexicographic order.
  4. If there are still multiple \(p_i\), pick the one with the smallest ID.
To simplify the question, for each action, print the suggested auto complete pattern ID. If there's no match, print -1.

For example, let us say we have three candidates: "alice", "bob", and "charlie", with ID 1, 2, and 3. At first, there is nothing on the screen, so "charlie" (3) should be suggested because it is the longest. Then, let us say the user types "b". You should suggest "bob" (2) because it is the only one that starts with "b". Finally, let us say the user type "body". You should print -1 because there is no matched pattern.

Input

The first line contains an integer \(n\), followed by \(n\) lines, with each line containing an action.

There are four types of actions:

  1. \(i\) \(p_i\)
  2. \(i\)
  3. \(s\)
  4. \(c\)
The add actions are followed by an integer \(i\) and a pattern \(p_i\), which means the user wants to add a pattern with ID \(i\). The delete actions are followed by an integer \(i\), which means the user wants to delete \(p_i\) from the pattern set. The append actions are followed by a string \(s\), which means the user appends \(s\) to the end of \(t\). The backspace actions are followed by an integer \(c\), which means the user deletes \(c\) characters from the end of \(t\). All the parameters are splitted by a single space character.
  • \(1 \leq n \leq 10^6\)
  • The total number of characters in all \(p_i\) and \(s\) does not exceed \(2\times 10^6\).
  • \(1 \leq c \leq 2\times 10^6\)
  • The strings \(p_i\) and \(s\) may contain any printable characters, excluding all space characters (ASCII number in the range from \(33\) to \(126\)).
  • The ID \(i\) for each add operation is unique.
  • The ID \(i\) for each delete is guaranteed to be valid.
  • Each ID \(i\) satisfies \(0\le i \le n\).
Output

The program should output \(n\) lines. For each action, output an integer \(i\), which means that after the action, \(p_i\) is the suggested auto complete candidate. If there is no \(p_i\) that matches the requirement, output -1.

J. Bottle Arrangement

дп жадные алгоритмы разделяй и властвуй снм Структуры данных *2700

Image generated by ChatGPT 4o.

Mayaw works in a renowned Epah (aboriginal Taiwanese millet wine; Epah is the Pangcah term for aboriginal Taiwanese millet wine, named in the language of the Pangcah people, the largest Indigenous group in Taiwan) bar in the Fata'an Village. To showcase the depth of its collections, the bar has a two-row wine rack where each row can fit exactly \(n\) bottles. There are already \(n\) bottles placed on the back row of the rack, where the \(i\)-th bottle from left has height \(a_i\). The owner of the bar has another \(n\) bottles with distinct heights \(b_1, \ldots, b_n\) that he would like Mayaw to put on the first row. To ensure that all bottles on the rack are visible, the owner requires that each bottle on the back row should not be blocked by the one put in front of it. That is, if a bottle of height \(h\) is put on the \(i\)-th spot (from left) in the first row, then \(h\) must be less than \(a_i\). However, not all such arrangements are good for the owner. To pay tributes to the Maxi Mountain nearby, he additionally demands that the bottles in the front row should display a mountain-like shape. In particular, the heights of the bottles, when listing from left to right, should form a sequence that is first (non-strictly) increasing and then (non-strictly) decreasing.

Unfortunately, sometimes it is impossible to achieve owner's requirements. That is why Mayaw is also allowed to slightly reduce a bottle's height by removing its cap that has a height of \(1\). In other words, after the removal of the cap, the height of the bottle decreases by exactly \(1\). Of course, exposing the Epah inside the bottle to the open air is detrimental to its quality, and therefore it is desirable to remove as few bottle caps as possible.

Can you help Mayaw determine the minimum number of caps needed to be removed so that he can arrange the bottles in a way that satisfies the owner's requirements? Note that the positions of the bottles in the back row are fixed and Mayaw is not allowed to modify them.

Input

The first line contains an integer \(n\) which represents the number of bottles in each row. The second line contains \(n\) integers \(a_1, \ldots, a_n\), the height of the bottles in the back row. The third line contains \(n\) distinct integers \(b_1, \ldots, b_n\), the height of the bottles in the front row.

  • \(1 \leq n \leq 5 \times 10^5\)
  • \(1 \leq a_i, b_i \leq 10^9\)
  • All \(b_i\)'s are distinct.
Output

Output the minimum number of bottle caps needed to be removed so that Mayaw can arrange the bottles in the desired way. If it is impossible to achieve that (regardless of the number of caps removed), output -1 instead.

M. Selection Sort

Бинарный поиск жадные алгоритмы Структуры данных *2000

Every student enrolled in the algorithms course is required to submit an assignment this week. The task is to implement an \(O(n^2)\)-time algorithm to sort \(n\) given integers in non-decreasing order. Alice has already completed her assignment, and her implementation is shown below.

int alice_sort(int *s, int n){
for(int i = 0; i < n; ++i){
for(int j = i + 1; j < n; ++j){
if(s[i] > s[j]){
int swap = s[i];
s[i] = s[j];
s[j] = swap;
}
}
}
return 0;
}

While you have access to Alice's code, you prefer not to simply copy it. Instead, you want to use Alice's sorting function as a building block for your own solution. There are two ways as listed below you can utilize her function, but each of them can be applied at most once. The order in which these two operations are invoked can be arbitrary.

  • Prefix sort: choose a length \(i \in \{1, 2, \ldots, n\}\) and call \(\texttt{alicesort(}s, i\texttt{)}\). This sorts the first \(i\) elements in the array \(s\).
  • Suffix sort: choose a length \(i \in \{1, 2, \ldots, n\}\) and call \(\texttt{alicesort(}s+n-i, i\texttt{)}\). This sorts the last \(i\) elements in the array \(s\).

Due to the time complexity of the sorting algorithm, the cost of performing either a prefix or suffix sort is \(i^2\), where \(i\) is the length of the chosen subarray. Your goal is to determine the minimum cost to sort the input array \(s\) of \(n\) integers in non-decreasing order using Alice's function, following the rules mentioned above.

For example, Let \(s=[3,2,5,5,4,1]\). We can first perform a suffix sort of length \(4\), and the array becomes \([3,2,1,4,5,5]\). Then, we perform a prefix sort of length \(3\), and the array becomes \([1,2,3,4,5,5]\), which is a sorted array. The cost is \(4^2+3^2=25\). Here is another example, let \(s=[4,3,2,1]\). We can complete the sorting by performing only a prefix sort of length \(4\), and the cost is \(4^2=16\).

Input

The first line contains exactly one integer \(n\) which indicates the number of integers in the array \(s\). The second line contains the \(n\) integers in \(s=[s_0, s_1, \ldots, s_{n-1}]\).

  • \(1 \le n \le 10^6\)
  • For all \(i\) (\(0\le i < n\)), \(0\le s_i < 2^{31}-1\).
Output

Output an integer on a line, indicating the minimum cost to sort the input array \(s\) of \(n\) integers in non-decreasing order using Alice's function, following the rules mentioned above.

D. Рекомендации

реализация сортировки Структуры данных *1900

Предположим, вы работаете в некоем стриминговом сервисе. В сервисе присутствуют \(n\) активных пользователей и \(10^9\) треков, которые эти пользователи могут прослушивать. Пользователи могут ставить лайки трекам, и на основе лайков сервис должен рекомендовать им новые треки.

Треки пронумерованы от \(1\) до \(10^9\). Оказалось, что треки, которые нравятся \(i\)-му пользователю, образуют отрезок \([l_i, r_i]\).

Скажем, что пользователь \(j\) является предиктором для пользователя \(i\) (\(j \neq i\)), если пользователь \(j\) поставил лайки всем трекам, которые нравятся \(i\)-му пользователю (и, возможно, некоторым другим трекам тоже).

Также скажем, что трек сильно рекомендован для пользователя \(i\), если трек еще не понравился \(i\)-му пользователю, но он понравился каждому предиктору \(i\)-го пользователя.

Посчитайте количество сильно рекомендованных треков для каждого пользователя \(i\). Если у пользователя нет предикторов, то выведите \(0\) для него.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют сами \(t\) наборов.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество пользователей.

В следующих \(n\) строках задано по два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le 10^9\)) — отрезок треков, которые нравятся \(i\)-му пользователю.

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел, где \(i\)-е целое число — это количество сильно рекомендованных треков для \(i\)-го пользователя (или \(0\), если у пользователя нет предикторов).

Примечание

В первом наборе входных данных:

  • у первого пользователя нет предикторов;
  • у второго пользователя нет предикторов;
  • у третьего пользователя два предиктора: пользователи \(1\) и \(2\); только трек \(3\) (из тех, которые еще не понравились третьему пользователю) понравился им обоим.

Во втором наборе входных данных второй пользователь является предиктором для первого пользователя. Поэтому все треки, кроме \(42\)-го, сильно рекомендованы для первого пользователя.

В третьем наборе входных данных у первого пользователя два предиктора: пользователи \(2\) и \(3\), но нет трека, который понравился бы им и не понравился бы самому пользователю.

E. Пары вершин

Бинарный поиск Деревья жадные алгоритмы Перебор поиск в глубину и подобное разделяй и властвуй реализация Структуры данных *2900

Дано дерево, состоящее из \(2n\) вершин. Напомним, что деревом называется связный неориентированный граф, в котором нет циклов. На каждой вершине написано одно целое число от \(1\) до \(n\). Каждое число от \(1\) до \(n\) написано ровно на двух различных вершинах. У каждой вершины также есть стоимость — вершина \(i\) стоит \(2^i\).

Требуется выбрать в дереве такое подмножество вершин, что:

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

Среди всех таких подмножеств требуется найти такое, что суммарная стоимость вершин в нем минимальна. Обратите внимание, что не требуется минимизировать количество вершин в подмножестве.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Во второй строке записаны \(2n\) целых чисел \(a_1, a_2, \dots, a_{2n}\) (\(1 \le a_i \le n\)). Каждое число от \(1\) до \(n\) встречается ровно два раза.

В каждой из следующих \(2n-1\) строк записаны два целых числа \(v\) и \(u\) (\(1 \le v, u \le 2n\)) — ребра дерева. Данные ребра образуют валидное дерево.

Выходные данные

В первой строке выведите одно целое число \(k\) — количество вершин в подмножестве.

Во второй строке выведите \(k\) различных целых чисел от \(1\) до \(2n\) — номера вершин в выбранном подмножестве. Вершины можно выводить в произвольном порядке.

Примечание

На данных изображениях нарисованы ответы на первые два примера. В скобках около номеров вершин подписаны числа, написанные на них.

В первом примере есть такие валидные подмножества: \([2, 4, 5]\) (стоимость равна \(2^2 + 2^4 + 2^5 = 52\)), \([2, 4, 5, 6]\) (стоимость равна \(116\)), \([1, 6, 3]\) (стоимость равна \(74\)), \([2, 6, 3]\) (стоимость равна \(76\)) и многие другие.

Во втором примере стоимость подмножества \([4, 6, 3, 1]\) равна \(90\).

F. Два подотрезка

дп матрицы реализация Структуры данных *2600

Задано два целочисленных массива \(a\) и \(b\), оба размера \(n\).

Скажем, что стоимость подотрезка массива \([l, r]\) равна \(a_l + a_{l + 1} + \cdots + a_{r - 1} + a_r + b_l + b_r\). Если \(l=r\), то стоимость равна \(a_l + 2 \cdot b_l\).

Вам предстоит отвечать на запросы трех видов:

  • «\(1\) \(p\) \(x\)» — присвоить \(a_{p} := x\);
  • «\(2\) \(p\) \(x\)» — присвоить \(b_{p} := x\);
  • «\(3\) \(l\) \(r\)» — найти два непустых непересекающихся подотрезка у отрезка \([l, r]\) с максимальной суммарной стоимостью и вывести их суммарную стоимость.
Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)).

В третьей строке заданы \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(-10^9 \le b_i \le 10^9\)).

В четвертой строке задано одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)).

В следующих \(q\) строках заданы запросы: по одному в строке. Каждый запрос имеет один из трех типов:

  • «\(1\) \(p\) \(x\)» (\(1 \le p \le n\); \(-10^9 \le x \le 10^9\));
  • «\(2\) \(p\) \(x\)» (\(1 \le p \le n\); \(-10^9 \le x \le 10^9\));
  • «\(3\) \(l\) \(r\)» (\(1 \le l < r \le n\)).

Гарантируется, что есть хотя бы один запрос третьего типа.

Выходные данные

Для каждого запроса третьего типа выведите максимально возможную суммарную стоимость двух непустых непересекающихся подотрезков у отрезка \([l, r]\).

C. Суммы на отрезках

Бинарный поиск дп жадные алгоритмы математика Перебор Структуры данных *1600

Дан массив \(a\) из \(n\) чисел, где все элементы, кроме, возможно, одного, равны \(-1\) или \(1\). Оставшийся элемент \(x\) удовлетворяет условию \(-10^9 \le x \le 10^9\).

Найдите все возможные суммы подмассивов массива \(a\), включая пустой подмассив, сумма которого равна \(0\). Другими словами, найдите все такие числа \(x\), что у массива \(a\) есть хотя бы один подмассив (возможно, пустой) с суммой \(x\). Подмассивом называется непрерывный подотрезок массива.

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

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер массива;
  • вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — элементы массива \(a\). В массиве \(a\) существует не более одного элемента, не равного ни \(1\), ни \(-1\).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите две строки:

  • в первой строке выведите одно целое число — количество различных сумм на подмассивах;
  • во второй строке выведите сами суммы в порядке возрастания.

Каждую сумму следует выводить только один раз, даже если она достигается на нескольких подмассивах.

Примечание

Обозначим за \(a[i,j]\) подмассив массива \(a\) с \(i\)-й позиции по \(j\)-ю позицию.

В первом наборе входных данных примера из условия:

  • \(-1\) достигается на подмассиве \(a[2,2]\);
  • \(0\) достигается на пустом подмассиве;
  • \(1\) достигается на подмассиве \(a[4,4]\);
  • \(2\) достигается на подмассиве \(a[4,5]\);
  • \(9\) достигается на подмассиве \(a[2,3]\);
  • \(10\) достигается на подмассиве \(a[1,3]\);
  • \(11\) достигается на подмассиве \(a[3,4]\);
  • \(12\) достигается на подмассиве \(a[3,5]\).

E. Преобразование матриц

битмаски графы жадные алгоритмы Перебор поиск в глубину и подобное реализация Структуры данных *2300

Даны две матрицы \(A\) и \(B\) размером \(n \times m\), заполненные целыми числами от \(0\) до \(10^9\). Вы можете выполнять следующие операции над матрицей \(A\) в любом порядке любое количество раз:

  • &=: выбрать два целых числа \(i\) и \(x\) (\(1 \le i \le n\), \(x \ge 0\)) и заменить каждый элемент в строке \(i\) на результат побитового И между числом \(x\) и этим элементом. Формально, для каждого \(j \in [1, m]\) элемент \(A_{i,j}\) заменяется на \(A_{i,j} \text{ & } x\);
  • |=: выбрать два целых числа \(j\) и \(x\) (\(1 \le j \le m\), \(x \ge 0\)) и заменить каждый элемент в столбце \(j\) на результат побитового ИЛИ между числом \(x\) и этим элементом. Формально, для каждого \(i \in [1, n]\) элемент \(A_{i,j}\) заменяется на \(A_{i,j} \text{ | } x\);

В разных операциях можно выбирать разные значения \(x\).

Определите, возможно ли преобразовать матрицу \(A\) в матрицу \(B\) с помощью нескольких (возможно, нуля) указанных операций.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных задается следующим образом:

  • первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^3\); \(n \cdot m \le 10^3\)) — размеры матриц \(A\) и \(B\);
  • в следующих \(n\) строках содержится описание матрицы \(A\), где \(i\)-я строка содержит \(m\) целых чисел \(A_{i,1}, A_{i,2}, \dots, A_{i,m}\) (\(0 \le A_{i,j} \le 10^9\));
  • в следующих \(n\) строках содержится описание матрицы \(B\), где \(i\)-я строка содержит \(m\) целых чисел \(B_{i,1}, B_{i,2}, \dots, B_{i,m}\) (\(0 \le B_{i,j} \le 10^9\)).
Выходные данные

Для каждого набора входных данных выведите Yes, если можно преобразовать \(A\) в \(B\), или No в противном случае. Каждую букву можно выводить в любом регистре.

Примечание

Рассмотрим второй набор входных данных и приведем последовательность операций, позволяющих получить из матрицы \(A\) матрицу \(B\):

Изначально матрица выглядит так:

\(\begin{bmatrix} 10&10\\ 42&42\\ \end{bmatrix}\)

Применим операцию первого типа с параметрами \(i = 1\) и \(x = 0\). В результате получим матрицу:

\(\begin{bmatrix} 0&0\\ 42&42\\ \end{bmatrix}\)

Применим операцию первого типа с параметрами \(i = 2\) и \(x = 0\). В результате получим матрицу:

\(\begin{bmatrix} 0&0\\ 0&0\\ \end{bmatrix}\)

Применим операцию второго типа с параметрами \(j = 1\) и \(x = 21\). В результате получим матрицу:

\(\begin{bmatrix} 21&0\\ 21&0\\ \end{bmatrix}\)

Применим операцию второго типа с параметрами \(j = 2\) и \(x = 21\). В результате получим матрицу:

\(\begin{bmatrix} 21&21\\ 21&21\\ \end{bmatrix}\)

Таким образом, мы преобразовали матрицу \(A\) в матрицу \(B\).

G. Задача на запросы

Перебор реализация Структуры данных *3000

Дан массив \(a\), состоящий из \(n\) целых чисел. Вам нужно обработать \(q\) запросов двух типов:

  • \(1~p~x\) — присвоить элементу массива на позиции \(p\) значение \(x\);
  • \(2~l~r\) — подсчитать количество пар позиций \((i, j)\), где \(l \le i < j \le r\) и \(a_i \ne a_j\).

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

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)).

Третья строка содержит одно целое число \(q\) (\(1 \le q \le 3 \cdot 10^5\)) — количество запросов.

Каждая из следующих \(q\) строк описывает запрос в одном из следующих форматов:

  • \(1~p'~x'\) (\(0 \le p', x' \le n-1\));
  • \(2~l'~r'\) (\(0 \le l', r' \le n-1\)).

Запросы закодированы следующим образом: пусть \(\mathit{last}\) будет ответом на последний уже обработанный запрос второго типа (изначально \(\mathit{last} = 0\)).

  • если тип запроса — \(1\), то \(p = ((p' + \mathit{last}) \bmod n) + 1\), \(x = ((x' + \mathit{last}) \bmod n) + 1\);
  • если тип запроса — \(2\), то \(l = ((l' + \mathit{last}) \bmod n) + 1\), \(r = ((r' + \mathit{last}) \bmod n) + 1\). Если получилось так, что \(l > r\), поменяйте их значения местами.

Не забудьте обновить значение \(\mathit{last}\) после ответа на каждый запрос второго типа.

Дополнительное ограничение на входные данные: есть хотя бы один запрос второго типа.

Выходные данные

На каждый запрос второго типа выведите ответ — количество пар позиций \((i, j)\), где \(l \le i < j \le r\) и \(a_i \ne a_j\).

Примечание

В первом примере реальные запросы (после декодирования) такие:

  • 2 1 3
  • 1 1 3
  • 2 1 3
  • 1 2 3
  • 2 1 3

F. Легкая демоническая задача

Бинарный поиск математика Перебор Структуры данных теория чисел *1900

Для произвольной матрицы Robot определяет её красоту как сумму элементов в матрице.

Robot дает вам массив \(a\) длиной \(n\) и массив \(b\) длиной \(m\). Вы строите матрицу \(n\) на \(m\) \(M\), такую что \(M_{i,j}=a_i\cdot b_j\) для всех \(1 \leq i \leq n\) и \(1 \leq j \leq m\).

Затем Robot дает вам \(q\) запросов, каждый из которых состоит из одного целого числа \(x\). Для каждого запроса определите, возможно ли выполнить следующую операцию ровно один раз так, чтобы \(M\) имела красоту \(x\):

  1. Выберите целые числа \(r\) и \(c\) такие, что \(1 \leq r \leq n\) и \(1 \leq c \leq m\).
  2. Установите \(M_{i,j}\) в \(0\) для всех упорядоченных пар \((i,j)\) таких, что \(i=r\), \(j=c\) или оба.

Обратите внимание, что запросы не являются постоянными, что означает, что вы на самом деле не устанавливаете никакие элементы в \(0\) в процессе — вам только нужно вывести, возможно ли найти \(r\) и \(c\) так, чтобы, если вышеуказанная операция будет выполнена, красота матрицы будет равна \(x\). Также обратите внимание, что вы должны выполнять операцию для каждого запроса, даже если красота исходной матрицыуже равна \(x\).

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(q\) (\(1 \leq n,m \leq 2\cdot 10^5, 1 \leq q \leq 5\cdot 10^4\)) — длина \(a\), длина \(b\) и количество запросов соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq |a_i| \leq n\)).

Третья строка содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(0 \leq |b_i| \leq m\)).

Следующие \(q\) строк каждая содержит одно целое число \(x\) (\(1 \leq |x| \leq 2\cdot 10^5\)), красота матрицы, которую вы хотите достичь, установив все элементы в строке и столбце в \(0\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если существует способ выполнить вышеупомянутую операцию так, чтобы красота была равна \(x\), и «NO» (без кавычек) в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yES», «yes» и «Yes» будут распознаны как положительный ответ).

Примечание

Во втором примере матрица выглядит следующим образом:

0 -2 5 0 -3

0 4 -10 0 6

0 -6 15 0 -9

0 0 0 0 0

0 0 0 0 0

Выполнив операцию с \(r=4\) и \(c=2\), получим матрицу:

0 0 5 0 -3

0 0 -10 0 6

0 0 15 0 -9

0 0 0 0 0

0 0 0 0 0

которая имеет красоту \(4\). Таким образом, мы выводим YES.

В втором запросе, выбирая \(r=3\) и \(c=5\), получается матрица с красотой \(-3\).

В третьем запросе, выбирая \(r=3\) и \(c=3\), получается матрица с красотой \(5\).

H. Сложная демоническая задача

дп Конструктив математика реализация Структуры данных *2100

Swing открывает фабрику блинов! Хорошая фабрика блинов должна хорошо уметь разравнивать вещи, поэтому Swing собирается протестировать свое новое оборудование на 2D матрицах.

Swing дана матрица \(n \times n\) \(M\), содержащая положительные целые числа. У него есть \(q\) запросов, которые он хочет вам задать.

Для каждого запроса он дает вам четыре целых числа \(x_1\), \(y_1\), \(x_2\), \(y_2\) и просит вас разровнять подматрицу, ограниченную \((x_1, y_1)\) и \((x_2, y_2)\), в массив \(A\). Формально, \(A = [M_{(x1,y1)}, M_{(x1,y1+1)}, \ldots, M_{(x1,y2)}, M_{(x1+1,y1)}, M_{(x1+1,y1+1)}, \ldots, M_{(x2,y2)}]\).

Следующее изображение иллюстрирует разравнивание подматрицы, ограниченной красными пунктирными линиями. Оранжевые стрелки указывают направление, в котором элементы подматрицы добавляются в конец \(A\), а \(A\) показан внизу изображения.

После этого он спрашивает вас о значении \(\sum_{i=1}^{|A|} A_i \cdot i\) (сумма \(A_i \cdot i\) по всем \(i\)).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных.

Первая строка каждого теста содержит два целых числа \(n\) и \(q\) (\(1 \leq n \leq 2000, 1 \leq q \leq 10^6\)) — размер \(M\) и количество запросов.

Следующие \(n\) строк содержат по \(n\) целых чисел, \(i\)-я из которых содержит \(M_{(i,1)}, M_{(i,2)}, \ldots, M_{(i,n)}\) (\(1 \leq M_{(i, j)} \leq 10^6\)).

Следующие \(q\) строк содержат четыре целых числа \(x_1\), \(y_1\), \(x_2\) и \(y_2\) (\(1 \leq x_1 \leq x_2 \leq n, 1 \leq y_1 \leq y_2 \leq n\)) — границы запроса.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(2000\), а сумма \(q\) по всем тестовым случаям не превышает \(10^6\).

Выходные данные

Для каждого теста выведите результаты \(q\) запросов на новой строке.

Примечание

Во втором запросе первого набора входных данных, \(A = [9, 5, 5, 2]\). Поэтому сумма равна \(1 \cdot 9 + 2 \cdot 5 + 3 \cdot 5 + 4 \cdot 2 = 42\).

E. Narrower Passageway

Комбинаторика Структуры данных *2700

You are a strategist of The ICPC Kingdom. You received an intel that there will be monster attacks on a narrow passageway near the kingdom. The narrow passageway can be represented as a grid with \(2\) rows (numbered from \(1\) to \(2\)) and \(N\) columns (numbered from \(1\) to \(N\)). Denote \((r, c)\) as the cell in row \(r\) and column \(c\). A soldier with a power of \(P_{r, c}\) is assigned to protect \((r, c)\) every single day.

It is known that the passageway is very foggy. Within a day, each column in the passageway has a \(50\%\) chance of being covered in fog. If a column is covered in fog, the two soldiers assigned to that column are not deployed that day. Otherwise, the assigned soldiers will be deployed.

Define a connected area \([u, v]\) (\(u \leq v\)) as a maximal set of consecutive columns from \(u\) to \(v\) (inclusive) such that each column in the set is not covered in fog. The following illustration is an example of connected areas. The grayed cells are cells covered in fog. There are \(4\) connected areas: \([1, 2]\), \([4, 6]\), \([9, 9]\), and \([11, 11]\).

The strength of a connected area \([u, v]\) can be calculated as follows. Let \(m_1\) and \(m_2\) be the maximum power of the soldiers in the first and second rows of the connected area, respectively. Formally, \(m_r = \max (P_{r, u}, P_{r, u + 1}, \dots, P_{r, v})\) for \(r \in \{ 1, 2\}\). If \(m_1 = m_2\), then the strength is \(0\). Otherwise, the strength is \(\min (m_1, m_2)\).

The total strength of the deployment is the sum of the strengths for all connected areas. Determine the expected total strength of the deployment on any single day.

Input

The first line consists of an integer \(N\) (\(1 \leq N \leq 100\,000\)).

Each of the next two lines consists of \(N\) integers \(P_{r, c}\) (\(1 \leq P_{r, c} \leq 200\,000\)).

Output

Let \(M = 998\,244\,353\). It can be shown that the expected total strength can be expressed as an irreducible fraction \(\frac{x}{y}\) such that \(x\) and \(y\) are integers and \(y \not\equiv 0 \pmod{M}\). Output an integer \(k\) in a single line such that \(0 \leq k < M\) and \(k \cdot y \equiv x \pmod{M}\).

Note

Explanation for the sample input/output #1

There are \(8\) possible scenarios for the passageway.

Each scenario is equally likely to happen. Therefore, the expected total strength is \((0 + 5 + 10 + 5 + 5 + 0 + 5 + 0) / 8 = \frac{15}{4}\). Since \(249\,561\,092 \cdot 4 \equiv 15 \pmod{998\,244\,353}\), the output of this sample is \(249\,561\,092\).

Explanation for the sample input/output #2

The expected total strength is \(\frac{67}{16}\).

I. Microwavable Subsequence

Структуры данных *2100

You are given an array of \(N\) integers: \([A_1, A_2, \dots, A_N]\).

A subsequence can be derived from an array by removing zero or more elements without changing the order of the remaining elements. For example, \([2, 1, 2]\), \([3, 3]\), \([1]\), and \([3, 2, 1, 3, 2]\) are subsequences of array \([3, 2, 1, 3, 2]\), while \([1, 2, 3]\) is not a subsequence of array \([3, 2, 1, 3, 2]\).

A subsequence is microwavable if the subsequence consists of at most two distinct values and each element differs from its adjacent elements. For example, \([2, 1, 2]\), \([3, 2, 3, 2]\), and \([1]\) are microwavable, while \([3, 3]\) and \([3, 2, 1, 3, 2]\) are not microwavable.

Denote a function \(f(x, y)\) as the length of the longest microwavable subsequence of array \(A\) such that each element within the subsequence is either \(x\) or \(y\). Find the sum of \(f(x, y)\) for all \(1 \leq x < y \leq M\).

Input

The first line consists of two integers \(N\) \(M\) (\(1 \leq N, M \leq 300\,000\)).

The second line consists of \(N\) integers \(A_i\) (\(1 \leq A_i \leq M\)).

Output

Output a single integer representing the sum of \(f(x, y)\) for all \(1 \leq x < y \leq M\).

Note

Explanation for the sample input/output #1

The value of \(f(1, 2)\) is \(3\), taken from the subsequence \([2, 1, 2]\) that can be obtained by removing \(A_1\) and \(A_4\). The value of \(f(1, 3)\) is \(3\), taken from the subsequence \([3, 1, 3]\) that can be obtained by removing \(A_2\) and \(A_5\). The value of \(f(2, 3)\) is \(4\), taken from the subsequence \([3, 2, 3, 2]\) that can be obtained by removing \(A_3\). The value of \(f(1, 4)\), \(f(2, 4)\), and \(f(3, 4)\) are all \(1\).

Explanation for the sample input/output #2

The value of \(f(1, 2)\) and \(f(1, 3)\) are both \(1\), while the value of \(f(2, 3)\) is \(0\).

J. Xorderable Array

битмаски Структуры данных *2600

You are given an array \(A\) of \(N\) integers: \([A_1, A_2, \dots, A_N]\).

The array \(A\) is \((p, q)\)-xorderable if it is possible to rearrange \(A\) such that for each pair \((i, j)\) that satisfies \(1 \leq i < j \leq N\), the following conditions must be satisfied after the rearrangement: \(A_i \oplus p \leq A_j \oplus q\) and \(A_i \oplus q \leq A_j \oplus p\). The operator \(\oplus\) represents the bitwise xor.

You are given another array \(X\) of length \(M\): \([X_1, X_2, \dots, X_M]\). Calculate the number of pairs \((u, v)\) where array \(A\) is \((X_u, X_v)\)-xorderable for \(1 \leq u < v \leq M\).

Input

The first line consists of two integers \(N\) \(M\) (\(2 \leq N, M \leq 200\,000)\).

The second line consists of \(N\) integers \(A_i\) (\(0 \leq A_i < 2^{30})\).

The third line consists of \(M\) integers \(X_u\) (\(0 \leq X_u < 2^{30})\).

Output

Output a single integer representing the number of pairs \((u, v)\) where array \(A\) is \((X_u, X_v)\)-xorderable for \(1 \leq u < v \leq M\).

Note

Explanation for the sample input/output #1

The array \(A\) is \((1, 1)\)-xorderable by rearranging the array \(A\) to \([0, 0, 3]\).

Explanation for the sample input/output #2

The array \(A\) is \((12, 10)\)-xorderable by rearranging the array \(A\) to \([13, 0, 7, 24, 22]\).

B. В конец со штрафом

Бинарный поиск жадные алгоритмы сортировки Структуры данных *1600

Вам дан массив целых чисел \(a\) длиной \(n\). Вы можете выполнять следующую операцию ноль или более раз:

  • За одну операцию вы выбираете индекс \(i\) (\(1 \le i \le n\)), присваиваете \(a_i := a_i + 1\), и затем перемещаете \(a_i\) в конец массива (в самую правую позицию). Например, если \(a = [3, 5, 1, 9]\), и вы выбрали \(i = 2\), массив станет \([3, 1, 9, 6]\).

Найдите лексикографически наименьший\(^{\text{∗}}\) массив, который вы можете получить, выполняя эти операции.

\(^{\text{∗}}\)Массив \(c\) лексикографически меньше массива \(d\), если и только если выполняется одно из следующего:

  • \(c\) — префикс \(d\), но \(c \ne d\); или
  • в первой позиции, где \(c\) и \(d\) различны, в массиве \(c\) элемент меньше, чем соответствующий элемент в \(d\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 10^5\)), длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)), элементы массива.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите лексикографически наименьший массив, который вы можете получить.

C. Искатели приключений

Бинарный поиск жадные алгоритмы сортировки Структуры данных Тернарный поиск *2100

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

Карту Рима можно в этой задаче представить как плоскость, на которой в некоторых местах отмечены точки — города Римской империи.

Торговцы хотят выбрать некоторую разделяющую точку \((x_0, y_0)\). Затем в городе с координатами \((x_i, y_i)\) будет торговать только

  • первый торговец, если \(x_0 \le x_i\) и \(y_0 \le y_i\);
  • второй торговец, если \(x_0 > x_i\) и \(y_0 \le y_i\);
  • третий торговец, если \(x_0 \le x_i\) и \(y_0 > y_i\);
  • четвертый торговец, если \(x_0 > x_i\) и \(y_0 > y_i\).

Торговцы хотят выбрать точку \((x_0, y_0)\) так, чтобы максимизировать минимальное количество городов, которое достанется кому-либо из них торговцев (то есть максимально честно). Помогите им найти такую точку.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(4 \le n \le 10^5\)) — количество городов на карте.

Далее идут \(n\) строк, в каждой из которых записаны два целых числа \(x_i, y_i\) (\(-10^9 \le x_i, y_i \le 10^9\)) — координаты городов.

Обратите внимание, что некоторые точки могут совпадать. Это связано с тем, что некоторые города могут находиться настолько близко, что их невозможно разделить на карте в заданном масштабе.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

В первой строке выведите одно целое число \(k\) (\(0 \le k \le \frac{n}{4}\)) — максимально возможное количество городов, которое достанется каждому торговцу.

Во второй строке выведите два целых числа \(x_0\) и \(y_0\) (\(|x_0|, |y_0| \le 10^9\)) — координаты разделяющей точки. Если подходящих точек может быть несколько, то разрешается вывести любую из них.

F1. Яндексовая клинопись (простая версия)

жадные алгоритмы Конструктив Структуры данных *3300

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

Долгое время никто не мог расшифровать шумерскую клинопись. Все же она поддалась напору! Сегодня вам выпал шанс расшифровать Яндексовую клинопись.

Яндексовые клинописи задаются следующими правилами:

  1. Пустая строка является Яндексовой клинописью.
  2. Если вставить в Яндексовую клинопись три буквы «Y», «D» и «X» (каждую в одном экземпляре) таким образом, что после применения операции никакие две соседние буквы не стали равны, получится Яндексовая клинопись.
  3. Если строка не может быть получена с помощью описанных выше операций, она не является Яндексовой клинописью.

Вам задается шаблон. Шаблоном называется строка, состоящая из символов «Y», «D», «X» и «?».

Проверьте, существует ли способ заменить каждый знак вопроса на одну букву «Y», «D» или «X» так, чтобы получилась Яндексовая клинопись, и если он существует, выведите любой подходящий вариант, а также последовательность операций вставки, которая приводит к такой строке.

В этой версии задачи в шаблоне нет знаков вопроса.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор состоит из одной строки, содержащей шаблон длины \(n\) (\(3 \leq n < 2 \cdot 10^5\), \(n \bmod 3 = 0\)), состоящий только из символов «Y», «D», «X».

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственную строку, содержащую «NO», если не существует клинописи, подходящей под заданный шаблон.

Иначе, выведите на первой строке «YES», на второй — любую клинопись, которую можно получить. После вам необходимо вывести последовательность операций, приводящей к выведенной вами клинописи.

Последовательность операций описывается \(\frac{n}{3}\) тройками пар. Пара имеет вид c p, где \(c\) — один из символов «Y», «D» или «X», а \(p\) – позиция, на которую вставляется символ \(c\). Позиция для вставки – это количество символов, которое надо отступить от начала строки для вставки. Например, после вставки символа «D» в строку «YDX» с \(p=3\) получится строка «YDXD», а с \(p=0\) получится строка «DYDX». Заметьте, что индекс не может превышать текущую длину строки.

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

Примечание

Во втором примере строка изменяется следующим образом: \("" \to \mathtt{YDX} \to \mathtt{YDXDYX}\).

F2. Яндексовая клинопись (сложная версия)

жадные алгоритмы Конструктив реализация Структуры данных *3500

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

Долгое время никто не мог расшифровать шумерскую клинопись. Все же она поддалась напору! Сегодня вам выпал шанс расшифровать Яндексовую клинопись.

Яндексовые клинописи задаются следующими правилами:

  1. Пустая строка является Яндексовой клинописью.
  2. Если вставить в Яндексовую клинопись три буквы «Y», «D» и «X» (каждую в одном экземпляре) таким образом, что после применения операции никакие две соседние буквы не стали равны, получится Яндексовая клинопись.
  3. Если строка не может быть получена с помощью описанных выше операций, она не является Яндексовой клинописью.

Вам задается шаблон. Шаблоном называется строка, состоящая из символов «Y», «D», «X» и «?».

Проверьте, существует ли способ заменить каждый знак вопроса на одну букву «Y», «D» или «X» так, чтобы получилась Яндексовая клинопись, и если он существует, выведите любой подходящий вариант, а также последовательность операций вставки, которая приводит к такой строке.

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор состоит из одной строки, содержащей шаблон длины \(n\) (\(3 \leq n < 2 \cdot 10^5\), \(n \bmod 3 = 0\)), состоящий только из символов «Y», «D», «X» и «?».

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственную строку, содержащую «NO», если не существует клинописи, подходящей под заданный шаблон.

Иначе, выведите на первой строке «YES», на второй — любую клинопись, которую можно получить. После вам необходимо вывести последовательность операций, приводящей к выведенной вами клинописи.

Последовательность операций описывается \(\frac{n}{3}\) тройками пар. Пара имеет вид c p, где \(c\) — один из символов «Y», «D» или «X», а \(p\) – позиция, на которую вставляется символ \(c\). Позиция для вставки – это количество символов, которое надо отступить от начала строки для вставки. Например, после вставки символа «D» в строку «YDX» с \(p=3\) получится строка «YDXD», а с \(p=0\) получится строка «DYDX». Заметьте, что индекс не может превышать текущую длину строки.

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

Примечание

Во втором примере строка изменяется следующим образом: \("" \to \mathtt{YDX} \to \mathtt{YDXDYX}\).

D. Кевин и воспоминания о соревнованиях

Бинарный поиск жадные алгоритмы Перебор сортировки Структуры данных *1600

Кевин раньше попадал в воспоминания Рио, и в воспоминаниях Рио когда-то проводились серии соревнований. Кевин помнит всех участников и все задачи соревнований того времени, но он забыл конкретные раунды, распределение задач и точные рейтинги.

Всего есть \( m \) задач, при этом \( i \)-я задача имеет сложность \( b_i \). Пусть каждое соревнование состоит из \( k \) задач, в результате чего получается \( \lfloor \frac{m}{k} \rfloor \) соревнований. Это означает, что вы выбираете \( \lfloor \frac{m}{k} \rfloor \cdot k \) задач для соревнований в любом сочетании, при этом каждая задача выбирается не более одного раза, а оставшиеся \(m\bmod k\) задач остаются неиспользованными. Например, если \(m = 17\) и \(k = 3\), вы должны создать ровно \(5\) соревнований, состоящих из \(3\) задач каждое, и ровно \(2\) задачи останутся неиспользованными.

В соревнованиях участвовало всего \( n \) участников, причем Кевин был \(1\)-м участником. У \( i \)-го участника рейтинг \( a_i \). Во время соревнований участник решает все задачи, сложность которых не превышает его рейтинг, то есть \( i \)-й участник решает \( j \)-ю задачу тогда и только тогда, когда \( a_i \geq b_j \). В каждом соревновании ранг Кевина равен одному плюс количеству участников, которые решают больше задач, чем он.

Для каждого \( k = 1, 2, \ldots, m \) Кевин хочет знать минимальную сумму его рангов по всем \( \lfloor \frac{m}{k} \rfloor \) соревнованиям. Другими словами, для некоторого значения \(k\), после выбора задач для каждого соревнования, вы вычисляете ранг Кевина в каждом соревновании и суммируете эти ранги по всем \( \lfloor \frac{m}{k} \rfloor \) соревнованиям. Ваша цель — минимизировать это значение.

Обратите внимание, что соревнования для разных значений \(k\) независимы. Это означает, что для разных значений \(k\) вы можете независимо выбирать распределение задач в соревнованиях.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов \( t \) (\( 1 \le t \le 5\cdot 10^4 \)).

Первая строка каждого набора содержит два целых числа \( n \) и \( m \) (\( 1 \le n, m \leq 3\cdot 10^5 \)) — количество участников и количество задач.

Вторая строка каждого набора содержит \( n \) целых чисел \( a_1, a_2, \ldots, a_n \) (\( 0 \le a_i \le 10^9 \)) — рейтинг каждого участника.

Третья строка каждого набора содержит \( m \) целых чисел \( b_1, b_2, \ldots, b_m \) (\( 0 \le b_i \le 10^9 \)) — сложность каждой задачи.

Гарантируется, что сумма \( n \) и сумма \( m \) по всем тестам не превышают \( 3 \cdot 10^5 \).

Выходные данные

Для каждого набора выведите \(m\) целых чисел — минимальную сумму рангов Кевина для каждого \( k = 1, 2, \ldots, m\).

Примечание

Для первого набора:

Когда \(k=1\), поскольку каждое соревнование содержит только одну задачу, распределение на самом деле уникально. Например, в соревновании, которое включает только третью задачу (которая имеет сложность \(4\)), все участники, кроме \(2\)-го, могут ее решить. Поскольку никто не решает строго больше задач, чем Кевин, его ранг в этом соревновании равен \(1\). Аналогично, в всех \(4\) соревнованиях ранги Кевина равны \(1,3,1,2\), и сумма равна \(7\).

Когда \(k=2\), один из оптимальных способов — выбрать \(1\)-ю и \(3\)-ю задачи для формирования одного соревнования, а \(2\)-ю и \(4\)-ю — для другого. В первом соревновании \(4\) участника соответственно решают \(2,1,2,2\) задачи, поэтому ранг Кевина равен \(1\); во втором они соответственно решают \(0,0,2,1\), поскольку \(2\) участника (\(3\)-й и \(4\)-й) решают больше задач, чем Кевин, его ранг равен \(1+2=3\). Таким образом, ответ равен \(1+3=4\). Можно доказать, что нет способа достичь меньшей суммы.

Когда \(k=3\), мы можем просто выбрать \(1\)-ю, \(3\)-ю и \(4\)-ю задачи, чтобы сделать соревнование, и ранг Кевина равен \(2\), что является оптимальным.

Когда \(k=4\), поскольку есть только одно соревнование, распределение также уникально, и ранг Кевина равен \(3\).

F. Кевин и математический класс

Деревья дп математика Перебор разделяй и властвуй реализация Структуры данных *2500

Кевин — студент из Вечно Спящего Города, который в настоящее время посещает математический класс, где учитель задает ему упражнения на деление.

На доске написаны две строки положительных целых чисел, каждая из которых содержит \( n \) чисел. Первая строка — это \( a_1, a_2, \ldots, a_n \), а вторая строка — \( b_1, b_2, \ldots, b_n \).

Для каждого упражнения на деление Кевин может выбрать любой отрезок \( [l, r] \) и найти минимальное значение \( x \) среди \( b_l, b_{l+1}, \ldots, b_r \). Затем он изменит каждое \( a_i \) для \( l \leq i \leq r \) на округление вверх от \( a_i \), деленного на \( x \).

Формально, он выбирает два целых числа \( 1 \leq l \leq r \leq n \), устанавливает \( x = \min_{l \leq i \leq r} b_i \), и изменяет все \( a_i \) для \( l \leq i \leq r \) на \( \lceil \frac{a_i}{x} \rceil \).

Кевин может покинуть класс и вернуться домой, когда все \( a_i \) станут равны \( 1 \). Он стремится уйти и хочет узнать минимальное количество упражнений на деление, необходимых для достижения этого.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \( t \) (\( 1 \le t \le 10^4 \)).

Первая строка каждого набора входных данных содержит целое число \( n \) (\( 1 \le n \leq 2 \cdot 10^5 \)) — длина последовательностей \( a \) и \( b \).

Вторая строка каждого набора входных данных содержит \( n \) целых чисел \( a_1, a_2, \ldots, a_n \) (\( 1 \le a_i \le 10^{18} \)) — первая строка целых чисел на доске.

Третья строка каждого набора входных данных содержит \( n \) целых чисел \( b_1, b_2, \ldots, b_n \) (\( 2 \le b_i \le 10^{18} \)) — вторая строка целых чисел на доске.

Гарантируется, что сумма \( n \) по всем наборам входных данных не превышает \( 2 \cdot 10^5 \).

Выходные данные

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

Примечание

Для первого примера: \( [{\color{red}{5,4}},2]\xrightarrow[\min(b_1,b_2)=3]{\text{операция на отрезке }[1,2]}[{\color{red}{2,2,2}}]\xrightarrow[\min(b_1,b_2,b_3)=2]{\text{операция на отрезке }[1,3]}[1,1,1] \).

Для второго примера: \( [{\color{red}{3,6,1}},3,2]\xrightarrow[\min(b_1,b_2,b_3)=3]{\text{операция на отрезке }[1,3]}[1,{\color{red}{2,1,3}},2]\xrightarrow[\min(b_2,b_3,b_4)=2]{\text{операция на отрезке }[2,4]}[1,1,1,{\color{red}{2,2}}]\xrightarrow[\min(b_4,b_5)=2]{\text{операция на отрезке }[4,5]}[1,1,1,1,1] \).

H. Кевин и странная операция

дп Структуры данных *3100

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

  • Пусть текущая бинарная строка — это \( t \), длина которой равна \( \vert t \vert \). Выберите целое число \( 1 \leq p \leq \vert t \vert \). Для всех \( 1 \leq i < p \) одновременно выполните операцию \( t_i = \max(t_i, t_{i+1}) \), а затем удалите \( t_p \).

Например, пусть текущая бинарная строка — это 01001, и вы выбрали \( p = 4 \). Выполните \( t_i = \max(t_i, t_{i+1}) \) для \(t_1\), \(t_2\) и \( t_3 \), преобразовав строку в 11001, затем удалите \( t_4 \), в результате получится 1101.

Кевин находит эту странную операцию довольно интересной. Таким образом, он хочет спросить вас: начиная с бинарной строки \( s \), сколько различных непустых бинарных строк вы можете получить за произвольное количество операций (возможно, ноль)?

Поскольку ответ может быть очень большим, вам нужно вывести результат по модулю \(998\,244\,353\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t \le 10^4\)) — количество наборов входных данных.

Для каждого набора входных данных единственная строка содержит бинарную строку \( s \) (\( 1 \le \lvert s \rvert \le 10^6 \)).

Гарантируется, что сумма \(\lvert s \rvert\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число в отдельной строке  — количество различных непустых бинарных строк, которые вы можете получить, по модулю \(998\,244\,353\).

Примечание

В первом наборе все бинарные строки, которые вы можете получить, следующие: 11001, 1001, 1101, 001, 101, 111, 01, 11 и 1. Всего \( 9 \) строк.

F. MEX-ИЛИ-мания

битмаски Перебор реализация снм Структуры данных *2700

Последовательность чисел \(b_1, b_2, \ldots, b_n\) является хорошей, если \(\operatorname{mex}(b_1, b_2, \ldots, b_n) - (b_1 | b_2 | \ldots | b_n) = 1\). Здесь \(\operatorname{mex(c)}\) обозначает MEX\(^{\text{∗}}\) набора чисел \(c\), а \(|\) обозначает операцию побитового ИЛИ.

У Шохага есть целочисленная последовательность \(a_1, a_2, \ldots, a_n\). Он выполнит следующие \(q\) обновлений последовательности \(a\):

  • \(i\) \(x\) — увеличить \(a_i\) на \(x\).

После каждого обновления помогите Шохагу найти длину самого длинного хорошего подмассива\(^{\text{†}}\) массива \(a\).

\(^{\text{∗}}\)Наименьшее исключенное (MEX) набора чисел \(c_1, c_2, \ldots, c_k\) определяется как наименьшее неотрицательное целое число \(y\), которое не встречается в наборе чисел \(c\).

\(^{\text{†}}\)Массив \(d\) является подмассивом массива \(f\), если \(d\) может быть получен из \(f\) удалением нескольких (возможно, ни одного или всех) элементов с начала и нескольких (возможно, ни одного или всех) элементов с конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le n\)).

Следующие \(q\) строк каждого набора входных данных имеют следующий вид:

  • \(i\) \(x\) (\(1 \le i, x \le n\)) — это означает, что вы должны увеличить \(a_i\) на \(x\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\) и сумма \(q\) не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) строк — в \(i\)-й строке выведите длину самого длинного хорошего подмассива \(a\) после \(i\)-го обновления.

Примечание

В первом наборе входных данных после первого обновления массив становится \([0, 0, 1, 0, 1, 1]\). Весь массив является хорошим, так как \(\operatorname{mex}([0, 0, 1, 0, 1, 1]) - (0 | 0 | 1 | 0 | 1 | 1) = 2 - 1 = 1\).

После второго обновления массив становится равен \([0, 0, 3, 0, 1, 1]\), и его подмассив \([0, 1, 1]\) имеет максимальную длину среди всех хороших подмассивов.

Наконец, после третьего обновления массив становится равен \([0, 0, 3, 0, 1, 4]\), и два его подмассива \([0, 0]\) и \([0, 1]\) имеют максимальную длину среди всех хороших подмассивов.

F. Максимальное модульное равенство

математика разделяй и властвуй Структуры данных теория чисел *1700

Дан массив \(a\) длины \(n\) и \(q\) запросов вида \(l\), \(r\).

Для каждого запроса найдите такое максимальное \(m\), что все числа \(a_l\), \(a_{l+1}\), ..., \(a_r\) равны по модулю \(m\). Иными словами, \(a_l \bmod m = a_{l+1} \bmod m = \dots = a_r \bmod m\), где \(a \bmod b\) — это остаток от деления \(a\) на \(b\). В частности, если число \(m\) может быть бесконечно большим, выведите \(0\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\), \(q\) (\(1 \le n, q \le 2\cdot 10^5\)) — длину массива и количество запросов.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 10^9\)) — элементы массива.

В следующих \(q\) строках каждого набора вводится по два числа \(l\), \(r\) (\(1 \le l \le r \le n\)) — отрезок запроса.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\), как и сумма \(q\) не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого запроса выведите максимальное значение \(m\), описанное в условии.

Примечание

В первом запросе первого примера \(6 \bmod 3 = 3 \bmod 3 = 0\), можно показать, что для больших \(m\) нужное условие выполняться не будет.

В третьем запросе первого примера \(14 \bmod 4 = 2 \bmod 4 = 6 \bmod 4 = 2\), можно показать, что для больших \(m\) нужное условие выполняться не будет.

E. Лучшая цена

Бинарный поиск жадные алгоритмы Перебор сортировки Структуры данных *1600

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

Перед началом продаж магазину осталось определиться с ценой за одну елку (цена одинакова для всех покупателей). Для этого у магазина есть некоторая информация о каждом клиенте.

Для \(i\)-го клиента известно два целых числа \(a_i\) и \(b_i\), которые определяют его поведение:

  • если цена товара не более \(a_i\), то клиент купит елку и оставит положительный отзыв;
  • иначе, если цена товара не более \(b_i\), то клиент купит елку, но оставит отрицательный отзыв;
  • иначе клиент не будет покупать елку вообще.

Ваша задача — посчитать максимально возможный заработок магазина, если можно получить не более \(k\) отрицательных отзывов.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\); \(0 \le k \le n\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^9\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 2 \cdot 10^9\); \(a_i < b_i\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

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

Примечание

Рассмотрим пример из условия:

  • в первом наборе входных данных надо поставить цену, равную \(1\). Тогда оба клиента купят по одной елке и не оставят ни одного отрицательного отзыва;
  • во втором наборе входных данных надо поставить цену, равную \(5\). Тогда единственный клиент купит елку и оставит отрицательный отзыв;
  • в третьем наборе входных данных надо поставить цену, равную \(3\). Тогда все клиенты купят по одной елке, и магазин получит два отрицательных отзыва.
  • в четвертом наборе входных данных надо поставить цену, равную \(7\). Тогда два клиента купят по одной елке, и магазин получит один отрицательный отзыв.

B. Выдающийся импрессионист

Бинарный поиск жадные алгоритмы Перебор Структуры данных *1200

If it was so, then let's make it a deal...
— MayDay, Gentleness

К сожалению, даже после десяти лет копирования картин известных художников, Эрик все еще не смог стать искусным художником-импрессионистом. Он хочет что-то забыть, но феномен белого медведя продолжает нависать над ним.

Эрик до сих пор помнит \(n\) впечатлений в виде целочисленного массива. Он записал их как \(w_1, w_2, \ldots, w_n\). Однако у него плохая память на впечатления. Для каждого \(1 \leq i \leq n\) он только запомнил, что выполнялось условие \(l_i \leq w_i \leq r_i\).

Эрик считает, что впечатление \(i\) является уникальным тогда и только тогда, когда существует массив \(w_1, w_2, \ldots, w_n\), в котором \(w_i \neq w_j\) выполняется для всех \(1 \leq j \leq n\), где \(j \neq i\).

Пожалуйста, помогите Эрику определить, является ли впечатление \(i\) уникальным для каждого \(1 \leq i \leq n\), независимо для каждого \(i\). Возможно, ваше суждение поможет переписать финальную историю.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2\cdot 10^5\)) — количество впечатлений.

Далее следует \(n\) строк, \(i\)-я из которых содержит два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i \leq r_i \leq 2\cdot n\)) — минимально возможное значение и максимально возможное значение для \(w_i\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите бинарную строку \(s\) длины \(n\): для каждого \(1 \leq i \leq n\), если впечатление \(i\) уникально, то \(s_i=\texttt{1}\); в противном случае, \(s_i=\texttt{0}\). Выводите строку без пробелов.

Примечание

В первом наборе входных данных единственным возможным массивом \(w\) является \([1, 1]\), в котором ни \(1\), ни \(2\) впечатления не являются уникальными (поскольку \(w_1 = w_2\)).

Во втором наборе входных данных все впечатления могут быть уникальными:

  • Для \(i = 1\) мы можем сделать \(w\) равным \([1, 3, 2, 3]\), и в нём \(w_1 \neq w_2\), \(w_1 \neq w_3\) и \(w_1 \neq w_4\);
  • Для \(i = 2\) мы можем сделать \(w\) равным \([2, 3, 1, 2]\), и в нём \(w_2 \neq w_1\), \(w_2 \neq w_3\) и \(w_2 \neq w_4\);
  • Для \(i = 3\) мы можем сделать \(w\) равным \([1, 1, 3, 1]\);
  • Для \(i = 4\) мы можем сделать \(w\) равным \([2, 3, 3, 1]\).

В третьем наборе входных данных, для \(i = 4\) мы можем сделать \(w\) равным \([3, 2, 2, 1, 3, 2]\). Таким образом, впечатление \(4\) — уникально.

D. Оптимальность изысканных произведений

Бинарный поиск жадные алгоритмы математика расписания сортировки Структуры данных *1700

As a tester, when my solution has a different output from the example during testing, I suspect the author first.
— Chris, a comment

Хотя Ирис иногда ставит задачу, решение которой неверно, она по-прежнему настаивает на создании задач с помощью своего воображения; в конце концов, все мы упрямы... И, как всегда, Ирис поставила перед собой задачу, которую она решила неправильно, и Крис должен её спасать! Но в этот раз вы будете играть роль Криса:

  • Крису даны два массива \(a\) и \(b\), оба состоящие из \(n\) целых чисел.
  • Ирис интересуется наибольшим возможным значением \(P = \prod\limits_{i=1}^n \min(a_i, b_i)\) после произвольной перестановки \(b\). Обратите внимание, что она хочет только узнать максимальное значение \(P\), элементы самого массива \(b\) не переставляются.
  • Будет внесено \(q\) изменений. Каждое изменение может быть обозначено двумя целыми числами \(o\) и \(x\) (значение \(o\) может быть \(1\) или \(2\), \(1 \leq x \leq n\)). Если \(o = 1\), то Ирис увеличивает \(a_x\) на \(1\); в противном случае она увеличивает \(b_x\) на \(1\).
  • Ирис спрашивает у Криса максимальное значение \(P\) суммарно \(q + 1\) раз: один раз перед изменениями, затем после каждого изменения.
  • Поскольку \(P\) может быть очень большим, Крису нужно только вычислить его по модулю \(998\,244\,353\).

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

Обратите внимание: поскольку входные и выходные данные большие, вам, возможно, потребуется оптимизировать их для решения данной задачи.

Например, в C++ достаточно использовать следующие строки в начале функции main():

int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr); std::cout.tie(nullptr);
}
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \leq n \leq 2\cdot 10^5\), \(1 \leq q \leq 2\cdot 10^5\)) — длина массива и количество операций.

Вторая строка каждого набора входных данных содержит \(n\) целых числа \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 5\cdot 10^8\)) — массив \(a\).

Третья строка каждого набора входных данных содержит \(n\) целых числа \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq 5\cdot 10^8\)) — массив \(b\).

Затем следует \(q\) строк, каждая строка содержит два целых числа \(o\) и \(x\) (\(o \in \{1, 2\}\), \(1 \leq x \leq n\)), представляющие операцию.

Гарантируется, что и сумма \(n\), и сумма \(q\) по всем наборам входных данных не превосходят \(4\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите на одной строке \(q + 1\) целых числа — ответы Криса по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных:

  • Перед внесением изменений Крис может переставить \(b\) в таком порядке: \([1, 2, 3]\), и тогда \(P = \prod\limits_{i=1}^n \min(a_i, b_i) = 1 \cdot 1 \cdot 2 = 2\). Можно доказать, что это максимально возможное значение. Например, если Крис переставит \(b = [2, 3, 1]\), то \(P\) будет равно \(1 \cdot 1 \cdot 1 = 1 < 2\), что не является оптимальным.
  • После первого изменения Крис может переставить \(b\) в таком порядке: \([1, 2, 3]\), и тогда \(P = 1 \cdot 1 \cdot 3 = 3\), что является максимально возможным значением.
  • После второго изменения Крис может переставить \(b\) в таком порядке: \([2, 2, 3]\), и тогда \(P = 1 \cdot 1 \cdot 3 = 3\), что является максимально возможным значением.
  • После третьего изменения Крис может переставить \(b\) в таком порядке: \([2, 2, 3]\), и тогда \(P = 6\), что является максимально возможным значением.
  • После четвертого изменения Крис может переставить \(b\) в таком порядке:\([2, 2, 4]\), и тогда \(P = 6\), что является максимально возможным значением.

F. Искренний матричный комплемент

дп жадные алгоритмы математика Перебор реализация Структуры данных *2600

3, 2, 1, ... We are the — RiOI Team!
— Felix & All, Special Thanks 3
  • Питер: Хорошие новости! Моя задача T311013 была одобрена!
  • \(\delta\): Я рад, что у моего компьютера разрядилась батарея, иначе я бы поучаствовал в раунде wyrqwq и получил бы отрицательную дельту.
  • Феликс: [thumbs_up] Условие задачи про удалённую песню!
  • Аквавейв: Нужно ли мне оплакивать свою химию?
  • Е.Космос: что?
  • Трайн: Хлеб.
  • Ирис: И почему же я всегда только тестирую задачи?

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

У Аквавейва есть матрица \(A\) размера \(n\times m\), элементы которой могут быть только целыми числами в диапазоне \([1, k]\) включительно. В матрице некоторые ячейки уже заполнены целым числом, в то время как остальные в данный момент не заполнены и обозначаются числом \(-1\).

Вы собираетесь заполнить все незаполненные ячейки в \(A\). После этого пусть \(c_{u,i}\) будет обозначать количество вхождений элемента \(u\) в \(i\)-ю строку. Аквавейв определяет красоту матрицы следующим образом:

\(\)\sum_{u=1}^k \sum_{i=1}^{n-1} c_{u,i} \cdot c_{u,i+1}.\(\)

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2\cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \leq n \leq 2\cdot 10^5\), \(2 \leq m \leq 2\cdot 10^5\), \(n \cdot m \leq 6\cdot 10^5\), \(1 \leq k \leq n\cdot m\)) — количество строк и столбцов матрицы \(A\) и диапазон целых чисел в матрице соответственно.

Затем следуют \(n\) строк, \(i\)-я строка содержит \(m\) целых числа \(A_{i,1},A_{i,2},\ldots,A_{i,m}\) (\(1 \leq A_{i,j} \leq k\) или \(A_{i,j} = -1\)) — элементы в \(A\).

Гарантируется, что сумма \(n\cdot m\) по всем наборам входных данных не превосходит \(6\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможную красоту.

Примечание

В первом наборе входных данных матрица \(A\) уже определена. Её красота равняется

\(\)\sum_{u=1}^k \sum_{i=1}^{n-1} c_{u,i} \cdot c_{u,i+1} = c_{1,1}\cdot c_{1,2} + c_{1,2}\cdot c_{1,3} + c_{2,1}\cdot c_{2,2} + c_{2,2}\cdot c_{2,3} + c_{3,1}\cdot c_{3,2} + c_{3,2}\cdot c_{3,3} = 1\cdot 1 + 1\cdot 1 + 2\cdot 0 + 0\cdot 1 + 0\cdot 2 + 2\cdot 1 = 4.\(\)

Во втором наборе входных данных можно заполнить матрицу следующим образом:

\(\) \begin{bmatrix} 2 &3 &3 \\ 2 &2 &3 \end{bmatrix}, \(\)

и получить значение \(4\). Можно доказать, что это максимально возможный ответ, который можно получить.

В третьем наборе входных данных одной из возможных оптимальных конфигураций является:

\(\) \begin{bmatrix} 1 &1 &1 \\ 1 &2 &1 \\ 1 &1 &4 \end{bmatrix}. \(\)

В четвертом наборе входных данных одной из возможных оптимальных конфигураций является:

\(\) \begin{bmatrix} 1 &3 &2 &3 \\ 1 &3 &2 &1 \\ 3 &1 &5 &1 \end{bmatrix}. \(\)

В пятом наборе входных данных одной из возможных оптимальных конфигураций является:

\(\) \begin{bmatrix} 5 &5 &2 \\ 1 &8 &5 \\ 7 &5 &6 \\ 7 &7 &4 \\ 4 &4 &4 \end{bmatrix}. \(\)

I1. Ласковые массивы (простая версия)

дп жадные алгоритмы Структуры данных *2800

You are the beginning of the letter, the development of a poem, and the end of a fairy tale.
— ilem, Pinky Promise

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

Ирис хранит целочисленный массив \(a_1, a_2, \ldots, a_n\). Она знает, что этот массив обладает интересным свойством: максимальное абсолютное значение всех элементов меньше или равно сумме всех элементов, то есть \(\max(\lvert a_i\rvert) \leq \sum a_i\).

Ирис определяет скучность массива как максимальную сумму его подмассива\(^{\text{∗}}\).

Приближается день рождения Ирис, и Виктор собирается прислать ей ещё один массив \(b_1, b_2, \ldots, b_m\). По некоторым, казалось бы, очевидным причинам он решает, что массив \(b_1, b_2, \ldots, b_m\) должен обладать следующими свойствами.

  • \(a_1, a_2, \ldots, a_n\) должен быть подпоследовательностью\(^{\text{†}}\) из \(b_1, b_2, \ldots, b_m\).
  • Эти два массива имеют одинаковую сумму. То есть, \(\sum\limits_{i=1}^n a_i = \sum\limits_{i=1}^m b_i\).
  • Значение скучности массива \(b_1, b_2, \ldots, b_m\) является наименьшим из возможных.
  • Среди массивов с наименьшей скучностью длина массива \(b\) (т.е. \(m\)) является наименьшей из возможных. В этом случае Ирис поймёт его уважение как можно скорее!

Даже при таких ограничениях, как указано выше, всё равно существует слишком много возможных подарков. Поэтому Виктор просит вас вычислить значение \(\boldsymbol{m}\) любого массива \(b_1, b_2, \ldots, b_m\), удовлетворяющего всем вышеприведенным условиям. Он обещает вам: если вы успешно поможете ему, он поделится с вами кусочком праздничного торта Ирис.

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

Например, в C++ достаточно использовать следующие строки в начале функции main():

int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr); std::cout.tie(nullptr);
}

\(^{\text{∗}}\)Массив \(c\) является подмассивом массива \(d\), если \(c\) может быть получен из \(d\) удалением нескольких (возможно, ни одного или всех) элементов с начала и нескольких (возможно, ни одного или всех) элементов с конца.

\(^{\text{†}}\)Последовательность \(c\) является подпоследовательностью \(d\), если \(c\) может быть получена из \(d\) удалением нескольких (возможно, ни одного или всех) элементов на произвольных позициях.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 3\cdot 10^6\)) — длина массива \(a_1, a_2, \ldots, a_n\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)) — исходный массив. Гарантируется, что \(\max(\lvert a_i\rvert) \leq \sum a_i\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3\cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую целое число: длину \(m\) допустимого массива \(b\).

Примечание

В первом наборе входных данных, \(a=[1, 2, 3, 4]\). Единственным массивом \(b\), который удовлетворяет всем вышеприведенным свойствам, является \([1, 2, 3, 4]\), поэтому мы должны вывести \(4\).

Во втором наборе входных данных, \(a=[2, -3, 2, 2]\). Возможными массивами \(b\) являются \([1, 2, -3, 2, -1, 2]\) и \([2, 1, -3, 2, -1, 2]\), поэтому мы должны вывести \(6\).

I2. Ласковые массивы (сложная версия)

графы дп жадные алгоритмы кратчайшие пути математика Структуры данных *3500

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

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

Ирис хранит целочисленный массив \(a_1, a_2, \ldots, a_n\). Она знает, что этот массив обладает интересным свойством: максимальное абсолютное значение всех элементов меньше или равно сумме всех элементов, то есть \(\max(\lvert a_i\rvert) \leq \sum a_i\).

Ирис определяет скучность массива как максимальную сумму его подмассива\(^{\text{∗}}\).

Приближается день рождения Ирис, и Виктор собирается прислать ей ещё один массив \(b_1, b_2, \ldots, b_m\). По некоторым, казалось бы, очевидным причинам он решает, что массив \(b_1, b_2, \ldots, b_m\) должен обладать следующими свойствами.

  • \(a_1, a_2, \ldots, a_n\) должен быть подпоследовательностью\(^{\text{†}}\) из \(b_1, b_2, \ldots, b_m\).
  • Эти два массива имеют одинаковую сумму. То есть, \(\sum\limits_{i=1}^n a_i = \sum\limits_{i=1}^m b_i\).
  • Значение скучности массива \(b_1, b_2, \ldots, b_m\) является наименьшим из возможных.
  • Среди массивов с наименьшей скучностью длина массива \(b\) (т.е. \(m\)) является наименьшей из возможных. В этом случае Ирис поймёт его уважение как можно скорее!

Для массива \(b_1, b_2, \ldots, b_m\), удовлетворяющего условиям выше, Виктор определяет значение массива как количество вхождений массива \(a\) как подпоследовательности в массив \(b\). Другими словами, вычисляет количество массивов \(c_1, c_2, \ldots, c_{n}\) таких, что \(1\le c_1< c_2< \ldots< c_n\le m\), и для всех целых \(i\), удовлетворяющих \(1\le i\le n\), выполняется \(b_{c_{i}}=a_i\), и называет это число значением массива \(b\).

Даже при таких ограничениях, как указано выше, всё равно существует слишком много возможных подарков. Поэтому Виктор просит вас посчитать сумму значений подходящих массивов \(b_1, b_2, \ldots, b_m\), удовлетворяющих всем вышеприведенным условиям. Так как ответ может быть очень большим, Виктору нужно только это число по модулю \(998\,244\,353\). Он обещает вам: если вы успешно поможете ему, он поделится с вами кусочком праздничного торта Ирис.

\(^{\text{∗}}\)Массив \(c\) является подмассивом массива \(d\), если \(c\) может быть получен из \(d\) удалением нескольких (возможно, ни одного или всех) элементов с начала и нескольких (возможно, ни одного или всех) элементов с конца.

\(^{\text{†}}\)Последовательность \(c\) является подпоследовательностью \(d\), если \(c\) может быть получена из \(d\) удалением нескольких (возможно, ни одного или всех) элементов на произвольных позициях.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 3\cdot 10^6\)) — длина массива \(a_1, a_2, \ldots, a_n\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)) — исходный массив. Гарантируется, что \(\max(\lvert a_i\rvert) \leq \sum a_i\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3\cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую целое число: сумму значений подходящих массивов \(b_1, b_2, \ldots, b_m\) по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных \(a=[1, 2, 3, 4]\). Единственный возможный массив \(b\) — это \([1, 2, 3, 4]\), его значение равно \(1\).

Во втором наборе входных данных \(a=[2, -3, 2, 2]\). Возможными массивами \(b\) являются \([1, 2, -3, 2, -1, 2]\) и \([2, 1, -3, 2, -1, 2]\), их значения равны \(1\).

В третьем наборе \(a=[1, -2, 2, 1]\). Единственный подходящий массив \(b\) является \([1, 1, -2, 2, -1, 1]\). Его значение равно \(2\), так как мы можем выбрать массивы \(c=[1,3,4,6]\) или \([2,3,4,6]\). Таким образом, массив \(a\) встречается в \(b\) дважды, поэтому ответ \(2\).

E. Стога сена

жадные алгоритмы Конструктив Перебор сортировки Структуры данных *2800

В следующее новолуние вселенная сбросится, начиная с Флориды. Мужчина из Флориды должен остановить это, но сначала ему нужно найти важный артефакт.

Есть \(n\) стогов сена, пронумерованных от \(1\) до \(n\), где стог сена \(i\) содержит \(a_i\) тюков сена. Под одним из стогов сена возможно спрятана иголка, но вы не знаете, под каким именно. Ваша задача состоит в том, чтобы переместить тюки сена так, чтобы каждый стог сена был пустым хотя бы один раз, что позволит вам проверить, спрятана ли иголка под этим конкретным стогом сена.

Однако этот процесс не так прост. Как только стог сена \(i\) будет опустошен в первый раз, ему будет присвоено ограничение по высоте, и он больше не сможет содержать более \(b_i\) тюков сена. Более формально ход описывается следующим образом:

  • Выберите два стога сена \(i\) и \(j\). Если стог сена \(i\) не был опустошен ранее или в стоге сена \(i\) содержится строго меньше, чем \(b_i\) тюков сена, вы можете переместить ровно \(1\) тюк сена из стога \(j\) в стог \(i\).

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

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2\le n\le 5\cdot 10^5\)) — количество стогов сена.

В \(i\)-й из следующих \(n\) строк содержится по два целых числа \(a_i\) и \(b_i\) (\(1\le a_i, b_i\le 10^9\)) — начальное количество тюков сена в \(i\)-м стоге сена и предел высоты, который ему присваивается после того, как он опустошается в первый раз.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

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

Примечание

В первом наборе входных данных мы можем выполнить следующую последовательность действий:

  • Переместите \(3\) тюка из стога \(1\) в стог \(2\). Стог \(1\) теперь пуст, и ему присвоено ограничение по высоте, равное \(5\).
  • Переместите \(5\) тюков из стога \(2\) в стог \(1\). Стог \(2\) теперь пуст, и ему присвоено ограничение по высоте, равное \(4\).

Приведенная выше последовательность требует \(3 + 5 = 8\) ходов. Невозможно использовать менее \(8\) ходов, так как следующая последовательность ходов недопустима:

  • Переместите \(2\) тюка из стога \(2\) в стог \(1\). Стог \(2\) теперь пуст, и ему присвоено ограничение по высоте, равное \(4\).
  • Переместите \(4\) тюка из стога \(1\) в стог \(2\). В стоге \(1\) теперь \(1\) тюк, в то время как в стоге \(2\) находится \(4\) тюка.
  • Стог \(1\) нельзя очистить, так как высота стога \(2\) уже равна \(4\), поэтому больше нельзя перемещать тюки из стога \(1\) в стог \(2\).

Во втором наборе входных данных задача невыполнима. Это связано с тем, что ограничения по высоте обоих стогов слишком малы, и как только один из стогов опустошается, другой стог не может стать пустым из-за небольших ограничений по высоте.

В третьем наборе входных данных можно показать, что следующая последовательность ходов является оптимальной:

  • Переместите \(1\) тюк из стога \(1\) в стог \(3\). Стог \(1\) теперь пуст, и ему присвоено ограничение по высоте, равное \(3\).
  • Переместите \(3\) тюка из стога \(2\) в стог \(1\).
  • Переместите \(1\) тюк из стога \(2\) в стог \(3\). Стог \(2\) теперь пуст, и ему присвоено ограничение по высоте, равное \(3\).
  • Переместите \(3\) тюка из стога \(3\) в стог \(2\). Стог \(3\) теперь пуст, и ему присвоено ограничение по высоте, равное \(1\).

Приведенная выше последовательность требует \(1 + 3 + 1 + 3 = 8\) ходов.

D. Равные медианы

Бинарный поиск дп Комбинаторика Перебор разделяй и властвуй Структуры данных *2200

Массив \(b\) из \(m\) целых чисел называется хорошим, если после его сортировки выполняется \(b_{\left\lfloor \frac{m + 1}{2} \right\rfloor} = b_{\left\lceil \frac{m + 1}{2} \right\rceil}\). Другими словами, \(b\) является хорошим, если обе его медианы равны. В частности, если \(m\) нечетно, то \(\left\lfloor \frac{m + 1}{2} \right\rfloor = \left\lceil \frac{m + 1}{2} \right\rceil\), поэтому \(b\) гарантированно будет хорошим, если он имеет нечетную длину.

Вам дан массив \(a\) из \(n\) целых чисел. Вычислите количество хороших подмассивов\(^{\text{∗}}\) в \(a\).

\(^{\text{∗}}\)Массив \(x\) является подмассивом массива \(y\), если \(x\) может быть получен из \(y\) удалением нескольких (возможно, ни одного или всех) элементов с начала и нескольких (возможно, ни одного или всех) элементов с конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — длина массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le \color{red}{\textbf{10}}\)) — заданный массив.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество хороших подмассивов в \(a\).

Примечание

В первом наборе входных данных каждый подмассив является хорошим, поскольку все его элементы равны \(1\).

Во втором наборе входных данных примером хорошего подмассива является \(b = [10, 2, 3, 3]\). Если его отсортировать, то \(b = [2, 3, 3, 10]\), значит, \(b_{\left\lfloor \frac{4 + 1}{2} \right\rfloor} = b_{\left\lceil \frac{4 + 1}{2} \right\rceil} = b_2 = b_3 = 3\). Другим примером может быть \(b = [1, 10, 2]\). С другой стороны, \(b = [1, 10]\) не подходит, поскольку его две медианы равны \(1\) и \(10\), и они не равны.

D. Заказ мерча

жадные алгоритмы математика матрицы реализация Структуры данных *2000

«Т-поколение» решило закупить мерч на различные нужды, таким образом, у них есть \(n\) различных кофт, пронумерованных от \(1\) до \(n\). Где \(i\)-я кофта имеет размер \(a_i\). Теперь им нужно отправить какой-нибудь подотрезок кофт на олимпиаду. Необходимо, чтобы кофты подошли как можно большему количеству людей, но при том, чтобы не пришлось брать их слишком много.

Им нужно выбрать два индекса \(l\) и \(r\) (\(1 \le l \le r \le n\)) и максимизировать значение удобства, равное \(\)\operatorname{max} (a_l, a_{l + 1}, \ldots, a_r) - \operatorname{min} (a_l, a_{l + 1}, \ldots, a_r) - (r - l),\(\) то есть, разброс размеров минус количество кофт.

Иногда размеры кофт меняются, известно, что было \(q\) изменений размеров. В каждом изменении размер некоторой \(p\)-й кофты становится равным \(x\).

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — количество кофт и количество изменений размеров.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — размеры кофт.

В каждой из следующих \(q\) строк каждого набора входных данных содержатся два целых числа \(p\) и \(x\) (\(1 \le p \le n\), \(1 \le x \le 10^9\)) — очередное изменение размеров.

Гарантируется, что сумма значений \(n\) и сумма значений \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

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

Примечание

Рассмотрим первый пример.

  • До изменений можно взять все кофты, тогда значение удобства будет равно \(\operatorname{max} (a_1, a_2) - \operatorname{min} (a_1, a_2) - (2 - 1) = 10 - 1 - 1 = 8\).
  • После первого запроса размеры обеих кофт будут равны \(10\), можно взять только первую кофту и значение удобства будет равно \(10 - 10 - 0 = 0\).
  • После второго запроса размер первой кофты будет равен \(10\), а второй \(2\), можно взять все кофты и значение удобства будет равно \(\operatorname{max} (a_1, a_2) - \operatorname{min} (a_1, a_2) - (2 - 1) = 10 - 2 - 1 = 7\).

F. Линейка

Бинарный поиск дп сортировки Структуры данных *3300

В один из дней преподаватели «Т-поколения» решили приучить школьников к дисциплине, поэтому поставили их в ряд. Вам известно, что всего есть \(n\) школьников, у \(i\)-го по порядку школьника рост равен \(a_i\).

Школьникам комфортно, если для каждого \(i\) от \(1\) до \(n - 1\) выполняется следующее условие: \(a_i \cdot 2 \ge a_{i + 1}\). Изначально школьникам комфортно.

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

У преподавателей есть \(q\) вариантов того, сколько пицц они закажут. Для каждого варианта \(k_i\) ответьте на вопрос: какой максимальный рост \(\max(a_1, a_2, \ldots, a_n)\) можно получить, если школьники съедят не более \(k_i\) пицц.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 5 \cdot 10^4\)) — количество школьников и количество вариантов того, сколько пицц закажут преподаватели.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — высоты школьников. Гарантируется, что изначально школьникам комфортно.

Каждая из следующих \(q\) строк каждого набора входных данных содержит одно целое число \(k_i\) (\(1 \le k_i \le 10^9\)) — очередной вариант того, сколько максимум пицц могут съесть школьники.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^4\).

Гарантируется, что сумма значений \(q\) по всем наборам входных данных не превосходит \(5 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных для каждого варианта того, сколько максимум пицц могут съесть школьники, выведите максимальное значение \(\max(a_1, a_2, \ldots, a_n)\), которое можно получить, чтобы школьникам было комфортно.

Примечание

В первом запросе первого набора входных данных можно сначала дать \(3\) пиццы первому школьнику, а потом второму школьнику \(6\) пицц, тогда итоговый массив станет \([13, 26]\) (школьникам комфортно, так как \(13 \cdot 2 \ge 26\)), максимальный элемент в нем равен \(26\).

H. Перерыв и кофемашины

жадные алгоритмы математика Структуры данных *3500

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

Всего есть \(n+2\) кофемашины, которые находятся в последовательно расположенных комнатах вдоль длинного коридора. Кофемашины пронумерованы числами от \(0\) до \(n+1\), при чем сразу после начала перерыва у \(i\)-й кофемашины собралось \(a_i\) школьников.

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

  • В любой момент преподаватели могут выбрать комнату \(i\) (\(1 \le i \le n\)) и выключить там свет;
  • Если в этой комнате находилось \(x\) учеников, тогда после выключения света \(\lfloor \frac12 x \rfloor\) учеников отправятся в комнату \((i-1)\), а \(\lfloor \frac12 x \rfloor\) других школьников отправятся в комнату \((i+1)\).
  • Если \(x\) было нечетным, то один школьник остается в той же комнате.
  • После этого свет в комнате \(i\) включается обратно.

Преподаватели еще не решили, где они будут собирать школьников, а поэтому для каждого \(i\) от \(1\) до \(n\) вам следует определить, какое наибольшее количество школьников можно собрать около \(i\)-й кофемашины.

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

Обратите внимание, что значения \(a_0\) и \(a_{n+1}\) никак не влияют на ответ в задаче, поэтому их значения вам даны не будут.

Входные данные

В первой строке указано единственное число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных.

В первой строке каждого набора входных данных указано число \(n\) (\(1 \le n \le 10^6\)).

Во второй строке каждого набора указаны числа \(a_1, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — количество школьников у кофемашин с номерами \(1, 2, \ldots, n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите \(n\) чисел \(b_1, \ldots, b_n\), где \(b_i\) равно наибольшему количеству школьников, которое может оказаться у кофемашины с номером \(i\).

Примечание

Разберем первый тестовый пример:

  • Чтобы максимизировать количество школьников у \(1\)-й кофемашины, все, что нужно — это ничего не делать.
  • Чтобы максимизировать количество школьников у \(2\)-й кофемашины, достаточно один раз выключить свет в \(1\)-й комнате.

D. Граф и граф

графы жадные алгоритмы кратчайшие пути Структуры данных *1900

Вам даны два связных неориентированных графа с одинаковым количеством вершин. В обоих графах в какой-то вершине находится фишка. В первом графе фишка изначально находится в вершине \(s_1\), во втором графе фишка изначально находится в вершине \(s_2\). Далее бесконечное количество раз повторяются следующая операция:

  • Пусть сейчас в первом графе фишка находится в вершине \(v_1\), а во втором графе в вершине \(v_2\).
  • Выбирается какая-то вершина \(u_1\), смежная с \(v_1\), в первом графе.
  • Выбирается какая-то вершина \(u_2\), смежная с \(v_2\), во втором графе.
  • Фишки перемещаются в выбранные вершины: в первом графе фишка перемещается из \(v_1\) в \(u_1\), во втором графе из \(v_2\) в \(u_2\).
  • Стоимость такой операции равна \(|u_1 - u_2|\).

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(s_1\) и \(s_2\) (\(2 \le n \le 1000\), \(1 \le s_1, s_2 \le n\)) — количество вершин в каждом графе, номер вершины в первом графе, где изначально находится фишка, и номер вершины во втором графе, где изначально находится фишка.

Вторая строка каждого набора входных данных содержит одно целое число \(m_1\) (\(1 \le m_1 \le 1000\)) — количество рёбер в первом графе.

\(i\)-я из следующих \(m_1\) строк содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le n\), \(a_i \ne b_i\)) — номера концов \(i\)-го ребра в первом графе.

Следующая строка каждого набора входных данных содержит одно целое число \(m_2\) (\(1 \le m_2 \le 1000\)) — количество рёбер во втором графе.

\(j\)-я из следующих \(m_2\) строк содержит два целых числа \(c_j\) и \(d_j\) (\(1 \le c_j, d_j \le n\), \(c_j \ne d_j\)) — номера концов \(j\)-го ребра во втором графе.

Гарантируется, что сумма \(n\), сумма \(m_1\) и сумма \(m_2\) по всем наборам входных данных не превосходят \(1000\).

Гарантируется, что оба графа являются связными.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную суммарную стоимость всех операций или \(-1\), если это значение будет бесконечно большим.

Примечание

В первом наборе входных данных можно построить бесконечную последовательность переходов в вершины \(2, 3, 4, 1, 2, 3, 4, 1, \ldots\), по которой фишка может двигаться как в первом, так и во втором графе.

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

E2. Хватит гамать (сложная версия)

Конструктив Перебор Строки Структуры данных хэши *2900

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

Вам даны \(n\) массивов, каждый из которых имеет длину \(m\). Обозначим \(j\)-й элемент \(i\)-го массива как \(a_{i, j}\). Гарантируется, что все \(a_{i, j}\) попарно различны. За одну операцию вы можете сделать следующее:

  • Выбрать какое-то целое число \(i\) (\(1 \le i \le n\)) и целое число \(x\) (\(1 \le x \le 2 \cdot n \cdot m\)).
  • Для всех целых чисел \(k\) от \(i\) до \(n\) в порядке возрастания сделать следующее:
    1. Добавить элемент \(x\) в начало \(k\)-го массива.

    2. Присвоить \(x\) значение, равное последнему элементу в \(k\)-м массиве.

    3. Удалить последний элемент из \(k\)-го массива.

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

Также вам дано описание массивов, которые необходимо получить после всех операций. То есть после выполнения операций \(j\)-й элемент в \(i\)-м массиве должен быть равен \(b_{i, j}\). Гарантируется, что все \(b_{i, j}\) попарно различны.

Определите минимальное количество операций, которое необходимо выполнить, чтобы получить нужные массивы, а также выведите саму последовательность всех операций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 3 \cdot 10^5\)) — количество массивов и количество элементов в каждом массиве.

\(i\)-я из следующих \(n\) строк содержит \(m\) целых чисел \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, m}\) (\(1 \le a_{i, j} \le 2 \cdot n \cdot m\)) — элементы в \(i\)-м изначальном массиве. Гарантируется, что все \(a_{i, j}\) попарно различны.

\(i\)-я из следующих \(n\) строк содержит \(m\) целых чисел \(b_{i, 1}, b_{i, 2}, \ldots, b_{i, m}\) (\(1 \le b_{i, j} \le 2 \cdot n \cdot m\)) — элементы в \(i\)-м конечном массиве. Гарантируется, что все \(b_{i, j}\) попарно различны.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в первой строке единственное целое число — минимальное количество операций, которые необходимо выполнить.

Далее, для каждой операции выведите два целых числа \(i\) и \(x\) (\(1 \le i \le n\), \(1 \le x \le 2 \cdot n \cdot m\)) — номер массива, куда вставляется элемент, и значение элемента, соответственно.

Если существует несколько возможных последовательностей с минимальным количеством операций, выведите любую из них.

Примечание

В первом наборе входных данных подходит следующая последовательность из \(3\) операций:

  • Применим операцию к первому массиву с \(x = 1\). Тогда в начало первого массива добавится элемент \(1\), а значение \(x\) станет равным \(6\). Последний элемент удалится, и первый массив будет иметь вид \([1, 2]\). Далее, элемент \(x\) добавляется в начало второго массива, и значение \(x\) становится равным \(4\). Последний элемент второго массива удаляется, и оба массива имеют вид \([1, 2]\) и \([6, 3]\) соответственно после первой операции.
  • Применим операцию ко второму массиву с \(x = 8\). Тогда первый массив не изменится, и оба массива будут иметь вид \([1, 2]\) и \([8, 6]\) соответственно.
  • Применим операцию ко второму массиву при \(x = 7\), тогда оба массива будут иметь необходимый вид \([1, 2]\) и \([7, 8]\) соответственно.

Во втором наборе входных данных получить нужный массив можно только за \(5\) операций.

В третьем наборе входных данных подходит следующая последовательность из \(3\) операций:

  • Применим операцию с \(x = 11\) к первому массиву.
  • Применим операцию с \(x = 12\) ко второму массиву.
  • Применим операцию с \(x = 13\) к третьему массиву.

D. Кевин и числа

битмаски Структуры данных *1600

Кевин написал на доске \(n\) целых чисел — набор \(a\).

Кевин может выполнить следующую операцию любое число раз:

  • Выбрать на доске два целых числа \(x, y\), таких что \(|x - y| \leq 1\), стереть их, а затем написать на доске вместо них целое число \(x + y\).

Кевин хочет узнать, возможно ли преобразовать эти целые числа в набор \(b\) размера \(m\) с помощью некоторой последовательности операций.

Два набора \(a\) и \(b\) считаются одинаковыми тогда и только тогда, когда их мультимножества совпадают. Другими словами, для любого числа \(x\) количество его вхождений в \(a\) должно равняться количеству его вхождений в \(b\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1\leq m \leq n \leq 2\cdot 10^5\)) — длина \(a\) и длина \(b\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1\leq a_i \leq 10^9\)).

Третья строка содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(1\leq b_i \leq 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «Yes», если возможно преобразовать \(a\) в \(b\), и «No» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных вы можете стереть \(4, 5\) и записать \(9\).

Во втором наборе входных данных вы не можете стереть \(3, 6\).

В третьем наборе входных данных возможна такая последовательность операций:

  • Стереть \(2, 2\) и записать \(4\). Теперь на доске записаны \(1, 2, 4\).
  • Стереть \(1, 2\) и записать \(3\). Теперь на доске записаны \(3, 4\).

В четвертом наборе входных данных возможна такая последовательность операций:

  • Стереть \(1, 1\) и записать \(2\). Теперь на доске записаны \(2, 3, 3\).
  • Стереть \(2, 3\) и записать \(5\). Теперь на доске записаны \(3, 5\).

F2. Кевин и бинарная строка (сложная версия)

дп Структуры данных *3500

Это сложная версия задачи. Отличие между версиями заключается в том, что в этой версии строка \(t\) состоит из «0», «1» и «?». Вы можете делать взломы только в том случае, если решили все версии этой задачи.

У Кевина есть бинарная строка \(s\) длины \(n\). Кевин может выполнять следующую операцию:

  • Выбрать два соседних блока строки \(s\) и поменять их местами.

Блок — это максимальная по включению подстрока\(^{\text{∗}}\) из одинаковых символов. Формально, обозначим подстроку \(s_l s_{l+1} \ldots s_r\) как \(s[l,r]\). Тогда \(s[l,r]\) является блоком, если выполняются все условия:

  • \(l=1\) или \(s_l\not=s_{l-1}\).
  • \(s_l=s_{l+1} = \ldots = s_{r}\).
  • \(r=n\) или \(s_r\not=s_{r+1}\).

Соседними блоками являются два блока \(s[l_1,r_1]\) и \(s[l_2,r_2]\), для которых \(r_1+1=l_2\).

Например, если \(s=\mathtt{000}\,\mathbf{11}\,\mathbf{00}\,\mathtt{111}\), Кевин может выбрать два блока \(s[4,5]\) и \(s[6,7]\) и поменять их местами, преобразовав \(s\) в \(\mathtt{000}\,\mathbf{00}\,\mathbf{11}\,\mathtt{111}\).

Дана строка \(t\) длины \(n\), состоящая из символов «0», «1» и «?». Кевин хочет определить минимальное количество операций, необходимых для получения строки, для которой выполняется следующее условие: для любого индекса \(i\) (\(1\le i\le n\)), если \(t_i\not=\) '?', то \(s_i=t_i\). Если это невозможно, выведите \(-1\).

\(^{\text{∗}}\)Строка \(a\) является подстрокой строки \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов с начала и нескольких (возможно, ни одного или всех) символов с конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит строку \(s\), состоящую из «0» и «1».

Вторая строка каждого набора входных данных содержит строку \(t\), состоящую из «0», «1» и «?».

Гарантируется, что \(s\) и \(t\) имеют одинаковую длину.

Гарантируется, что сумма длин \(s\) по всем наборам входных данных не превосходит \(4\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное необходимое количество операций. Если это невозможно, выведите \(-1\).

Примечание

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

Во втором наборе первого примера можно применить такую последовательность операций:

  • Переставить блоки \([2, 2], [3, 3]\): \(s\) станет \(\mathtt{001101}\).
  • Переставить блоки \([3, 4], [5, 5]\): \(s\) станет \(\mathtt{000111}\).
  • Переставить блоки \([1, 3], [4, 6]\): \(s\) станет \(\mathtt{111000}\).

В первом наборе второго примера можно применить такую последовательность операций:

  • Переставить блоки \([1, 1], [2, 2]\): \(s\) станет \(\mathtt{100101}\).
  • Переставить блоки \([4, 4], [5, 5]\): \(s\) станет \(\mathtt{100011}\).

E1. Игра (простая версия)

графы Деревья жадные алгоритмы игры поиск в глубину и подобное Структуры данных *2000

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

Чирно и Дайёсей играют в игру с деревом\(^{\text{∗}}\) из \(n\) вершин, корнем которого является вершина \(1\). Значение \(i\)-й вершины равно \(w_i\). Они по очереди делают ходы; первым ходит Чирно.

На каждом ходу, предполагая, что противник выбрал \(j\) на последнем ходу, игрок может выбрать любую оставшуюся вершину \(i\), удовлетворяющую условию \(w_i>w_j\), и удалить поддерево\(^{\text{†}}\) вершины \(i\). В частности, Чирно может выбрать любую вершину и удалить её поддерево на первом ходу.

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

\(^{\text{∗}}\)Деревом называется связный граф без циклов.

\(^{\text{†}}\)Вершина \(u\) принадлежит поддереву вершины \(i\), если любой путь от \(1\) до \(u\) проходит через \(i\).

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 4\cdot 10^5\)) — количество вершин в дереве.

Вторая строка содержит \(n\) целых чисел \(w_1,w_2,\ldots,w_n\) (\(1 \le w_i \le n\)) — значения вершин.

Следующие \(n-1\) строк содержат ребра дерева. \(i\)-я строка содержит два целых числа \(u_i,v_i\) (\(1\le u_i,v_i \le n\), \(u_i \neq v_i\)) — ребро, соединяющее \(u_i\) и \(v_i\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(4\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку.

Если Чирно может выиграть, выведите любую вершину, которую она может выбрать на первом ходу.

В противном случае выведите «0» (без кавычек).

Примечание

В первом наборе входных данных:

  1. Если Чирно выберет \(1\) или \(3\) на первом ходу, Дайёсей не сможет сделать ход, поэтому Дайёсей выигрывает.
  2. Если Чирно выберет \(2\) или \(4\) на первом ходу, Дайёсей сможет выбрать только \(3\), но после этого Чирно не сможет сделать ход, поэтому Чирно выигрывает.

Таким образом, все возможные вершины, которые может выбрать Чирно — это \(2\) и \(4\).

Во втором наборе входных данных, независимо от того, какую вершину выберет Чирно, Дайёсей не сможет сделать ход, поэтому Дайёсей выигрывает.

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

В пятом наборе входных данных все возможные вершины, которые может выбрать Чирно на первом ходу — это \(3,4,6,7\) и \(10\).

E2. Игра (сложная версия)

графы Деревья игры поиск в глубину и подобное реализация Структуры данных *3000

Это сложная версия задачи. Отличие между версиями заключается в том, что в этой версии вам нужно найти все возможные вершины, которые может выбрать Чирно. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Чирно и Дайёсей играют в игру с деревом\(^{\text{∗}}\) из \(n\) вершин, корнем которого является вершина \(1\). Значение \(i\)-й вершины равно \(w_i\). Они по очереди делают ходы; первым ходит Чирно.

На каждом ходу, предполагая, что противник выбрал \(j\) на последнем ходу, игрок может выбрать любую оставшуюся вершину \(i\), удовлетворяющую условию \(w_i>w_j\), и удалить поддерево\(^{\text{†}}\) вершины \(i\). В частности, Чирно может выбрать любую вершину и удалить её поддерево на первом ходу.

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

\(^{\text{∗}}\)Деревом называется связный граф без циклов.

\(^{\text{†}}\)Вершина \(u\) принадлежит поддереву вершины \(i\), если любой путь от \(1\) до \(u\) проходит через \(i\).

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 4\cdot 10^5\)) — количество вершин в дереве.

Вторая строка содержит \(n\) целых чисел \(w_1,w_2,\ldots,w_n\) (\(1 \le w_i \le n\)) — значения вершин.

Следующие \(n-1\) строк содержат ребра дерева. \(i\)-я строка содержит два целых числа \(u_i,v_i\) (\(1\le u_i,v_i \le n\), \(u_i \neq v_i\)) — ребро, соединяющее \(u_i\) и \(v_i\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(4\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку.

Если Чирно может выиграть, выведите несколько чисел. Первое число \(k\) обозначает количество возможных вершин, которые она может выбрать на первом ходу. Следующие \(k\) чисел обозначают данные вершины в порядке возрастания.

В противном случае выведите «0» (без кавычек).

Примечание

В первом наборе входных данных:

  1. Если Чирно выберет \(1\) или \(3\) на первом ходу, Дайёсей не сможет сделать ход, поэтому Дайёсей выигрывает.
  2. Если Чирно выберет \(2\) или \(4\) на первом ходу, Дайёсей сможет выбрать только \(3\), но после этого Чирно не сможет сделать ход, поэтому Чирно выигрывает.

Таким образом, все возможные вершины, которые может выбрать Чирно — это \(2\) и \(4\).

Во втором наборе входных данных, независимо от того, какую вершину выберет Чирно, Дайёсей не сможет сделать ход, поэтому Дайёсей выигрывает.

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

В пятом наборе входных данных все возможные вершины, которые может выбрать Чирно на первом ходу — это \(3,4,6,7\) и \(10\).

B. Обновление подпоследовательности

жадные алгоритмы Конструктив сортировки Структуры данных *1100

После того как Маленький Джон несколько сотен раз одалживал у тетушки шурупы для расширения, она решила прийти и забрать неиспользованные.

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

Вам дана последовательность целых чисел \(a_1, a_2, \ldots, a_n\) и отрезок \([l,r]\) (\(1 \le l \le r \le n\)).

Вы должны выполнить следующую операцию над последовательностью ровно один раз.

  • Выберите любую подпоследовательность\(^{\text{∗}}\) последовательности \(a\) и разверните её. Обратите внимание, что подпоследовательность не обязательно должна быть непрерывной.

Формально, выберите любое количество индексов \(i_1,i_2,\ldots,i_k\) так, чтобы \(1 \le i_1 < i_2 < \ldots < i_k \le n\). Затем одновременно измените \(i_x\)-й элемент на оригинальное значение \(i_{k-x+1}\)-го элемента для всех \(1 \le x \le k\).

Найдите минимальное значение \(a_l+a_{l+1}+\ldots+a_{r-1}+a_r\) после выполнения операции.

\(^{\text{∗}}\)Последовательность \(b\) является подпоследовательностью \(a\), если \(b\) может быть получена из \(a\) удалением нескольких (возможно, ни одного или всех) элементов на произвольных позициях.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(l\), \(r\) (\(1 \le l \le r \le n \le 10^5\)) — длина \(a\) и отрезок \([l,r]\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_{i} \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам тестовых данных не превышает \(10^5\).

Выходные данные

Для каждого тестового случая выведите минимальное значение \(a_l+a_{l+1}+\ldots+a_{r-1}+a_r\) в отдельной строке.

Примечание

Во втором тестовом случае массив \(a=[1,2,3]\), а интервал \([2,3]\).

После выбора подпоследовательности \(a_1,a_3\) и её разворота, последовательность становится \([3,2,1]\). Затем сумма \(a_2+a_3\) становится равной \(3\). Можно показать, что минимально возможное значение суммы равно \(3\).

C. Удалить ровно две

графы Деревья дп жадные алгоритмы Перебор поиск в глубину и подобное сортировки Структуры данных *1600

Недавно Маленький Джон получил дерево от своей тёти, чтобы украсить свой дом. Но, как кажется, одного дерева недостаточно, чтобы украсить весь дом. У Маленького Джона появилась идея. Может быть, он сможет удалить несколько вершин из дерева. Это превратит его в большее количество деревьев! Верно?

Вам дано дерево\(^{\text{∗}}\), состоящее из \(n\) вершин. Вы должны выполнить следующую операцию ровно дважды.

  • Выберите вершину \(v\);
  • Удалите все рёбра, соединённые с вершиной \(v\), а также саму вершину \(v\).

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

Две вершины \(x\) и \(y\) находятся в одной компоненте связности тогда и только тогда, когда существует путь от \(x\) до \(y\). Граф с \(0\) вершинами имеет \(0\) компонент связности по определению.\(^{\text{†}}\)

\(^{\text{∗}}\)Деревом называется связный граф без циклов.

\(^{\text{†}}\)Но считается ли такой граф связным?..

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Каждая из следующих \(n-1\) строк содержит два целых числа \(u_i\) и \(v_i\), обозначающие две вершины, соединённые ребром (\(1 \le u_i,v_i \le n\), \(u_i \neq v_i\)). Гарантируется, что данные рёбра образуют дерево.

Гарантируется, что сумма \(n\) по всем тестам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого теста выведите максимальное количество компонент связности в отдельной строке.

Примечание

В первом примере удаление вершины дважды сделает граф пустым. По определению количество компонент связности в графе с \(0\) вершинами равно \(0\). Поэтому ответ равен \(0\).

Во втором примере удаление двух вершин \(1\) и \(2\) оставляет \(2\) компоненты связности. Поскольку невозможно создать \(3\) компоненты связности с \(2\) вершинами, ответ равен \(2\).

В третьем примере удаление двух вершин \(1\) и \(5\) оставляет \(4\) компоненты связности, которые являются \(\left\{ 2,4\right\}\), \(\left\{ 3\right\}\), \(\left\{ 6\right\}\) и \(\left\{ 7\right\}\). Можно показать, что невозможно получить \(5\) компонент связности. Поэтому ответ равен \(4\).

D. Игра с треугольниками

Бинарный поиск геометрия жадные алгоритмы математика Перебор реализация Структуры данных Тернарный поиск *2000

Даже маленькому Джону нужны деньги, чтобы купить дом. Но он недавно потерял работу; как же он теперь заработает деньги? Конечно, играя в игру, которая дает ему деньги в качестве награды! Ну, может быть, не в те игры, о которых вы думаете.

На плоскости есть \(n+m\) различных точек \((a_1,0), (a_2,0), \ldots, (a_{n},0), (b_1,2), (b_2,2), \ldots, (b_{m},2)\). Изначально ваш счет равен \(0\). Чтобы увеличить свой счет, вы можете выполнить следующую операцию:

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

Пусть \(k_{\max}\) — максимальное количество операций, которое можно выполнить. Например, если нельзя выполнить эту операцию ни разу, то \(k_\max\) равно \(0\). Кроме того, определим \(f(k)\) как максимальный возможный счет, который можно получить, выполнив операцию ровно \(k\) раз. Здесь \(f(k)\) определено для всех целых чисел \(k\), таких что \(0 \le k \le k_{\max}\).

Найдите значение \(k_{\max}\) и найдите значения \(f(x)\) для всех целых чисел \(x=1,2,\ldots,k_{\max}\) независимо.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le {3 \cdot 10^4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n,m \le 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) попарно различных целых чисел \(a_1,a_2,\ldots,a_{n}\) — точки на \(y=0\) (\(-10^9 \le a_i \le 10^9\)).

Третья строка каждого набора входных данных содержит \(m\) попарно различных целых чисел \(b_1,b_2,\ldots,b_{m}\) — точки на \(y=2\) (\(-10^9 \le b_i \le 10^9\)).

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превышают \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, учитывая, что максимальное количество операций равно \(k_{\max}\), вы должны вывести не более двух строк:

  • Первая строка содержит значение \(k_{\max}\);
  • Вторая строка содержит \(k_{\max}\) целых числа, обозначающих \(f(1),f(2),\ldots,f(k_{\max})\). Вы можете опустить эту строку, если \(k_{\max}\) равно \(0\).

Обратите внимание, что в условиях этой задачи можно показать, что все значения \(f(x)\) являются целыми числами, не превышающими \(10^{16}\).

Примечание

В первом наборе входных данных есть \(1+3=4\) точки \((0,0),(0,2),(1,2),(-1,2)\).

Можно показать, что вы не можете выполнить две или более операций. Значение \(k_{\max}\) равно \(1\), и вас просят только о значении \(f(1)\).

Вы можете выбрать \((0,0)\), \((-1,2)\) и \((1,2)\) в качестве трех вершин треугольника. После этого ваш счет увеличивается на площадь треугольника, которая равна \(2\). Затем три точки удаляются с плоскости. Можно показать, что максимальное значение вашего счета после выполнения одной операции равно \(2\). Следовательно, значение \(f(1)\) равно \(2\).

В пятом наборе входных данных есть \(8+2=10\) точек.

Можно показать, что вы не можете выполнить три или более операций. Значение \(k_{\max}\) равно \(2\), и вас просят о значениях \(f(1)\) и \(f(2)\).

Чтобы максимизировать счет с помощью только одной операции, вы можете выбрать три точки \((198\,872\,582,0)\), \((-1\,000\,000\,000,2)\) и \((1\,000\,000\,000,2)\). Затем три точки удаляются с плоскости. Можно показать, что максимальное значение вашего счета после выполнения одной операции равно \(2\,000\,000\,000\). Следовательно, значение \(f(1)\) равно \(2\,000\,000\,000\).

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

  • Выберите три точки \((-509\,489\,796,0)\), \((553\,177\,666,0)\) и \((-1\,000\,000\,000,2)\). Три точки удаляются.
  • Выберите три точки \((-400\,714\,529,0)\), \((564\,040\,265,0)\) и \((1\,000\,000\,000,2)\). Три точки удаляются.

Тогда счет после двух операций становится \(2\,027\,422\,256\). Можно показать, что максимальное значение вашего счета после выполнения ровно двух операций равно \(2\,027\,422\,256\). Следовательно, значение \(f(2)\) равно \(2\,027\,422\,256\).

E. Треугольное дерево

Деревья дп жадные алгоритмы поиск в глубину и подобное Структуры данных *2300

Однажды в деревне выросло гигантское дерево. Маленький Джон, со своим детским орлом, решил сделать его своим домом. Маленький Джон построит конструкцию на дереве из оцинкованной квадратной стали. Однако он не знал, что не сможет построить то, что физически невозможно.

Вам дано корневое дерево\(^{\text{∗}}\), содержащее \(n\) вершин, с корнем в вершине \(1\). Пара вершин \((u,v)\) называется хорошей парой, если \(u\) не является предком\(^{\text{†}}\) \(v\), и \(v\) не является предком \(u\). Для любых двух вершин \(\text{dist}(u,v)\) определяется как количество рёбер на уникальном простом пути от \(u\) до \(v\), а \(\text{lca}(u,v)\) определяется как их наименьший общий предок.

Функция \(f(u,v)\) определяется следующим образом.

  • Если \((u,v)\) — это хорошая пара, то \(f(u,v)\) — это количество различных целых значений \(x\), таких что существует невырожденный треугольник\(^{\text{‡}}\) с длинами сторон \(\text{dist}(u,\text{lca}(u,v))\), \(\text{dist}(v,\text{lca}(u,v))\) и \(x\).
  • В противном случае \(f(u,v)\) равно \(0\).

Вам необходимо посчитать следующее значение: \(\)\sum_{i = 1}^{n-1} \sum_{j = i+1}^n f(i,j).\(\)

\(^{\text{∗}}\)Деревом называется связный граф без циклов. Корневым деревом называется дерево, в котором одна из вершин специальная и называется корнем.

\(^{\text{†}}\)Предком вершины \(v\) называется любая вершина на пути от \(v\) до корня, включая корень, но не включая \(v\). У корня нет предков.

\(^{\text{‡}}\)Треугольник с длинами сторон \(a\), \(b\), \(c\) является невырожденным, если \(a+b > c\), \(a+c > b\), \(b+c > a\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)).

Каждая из следующих \(n-1\) строк содержит два целых числа \(u_i\) и \(v_i\), обозначающие две вершины, соединенные ребром (\(1 \le u_i,v_i \le n\), \(u_i \neq v_i\)). Гарантируется, что заданные рёбра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ на новой строке.

Примечание

В первом наборе входных данных единственной хорошей парой \((i,j)\), удовлетворяющей \(i<j\), является \((2,3)\). Здесь \(\text{lca}(2,3)\) равен \(1\), а два расстояния равны \(1\) и \(1\).

Существует только одно значение \(x\) для двух длин сторон \(1\) и \(1\), а именно \(1\). Поэтому ответ для первого набора входных данных равен \(1\).

Во втором примере нет хорошей пары. Поэтому ответ для второго теста равен \(0\).

В третьем примере хорошими парами \((i,j)\), удовлетворяющими \(i<j\), являются следующие:

  • \((2,5)\): \(\text{lca}(2,5)\) равен \(1\), расстояния равны \(1\) и \(1\). Существует только одно возможное значение \(x\), а именно \(1\).
  • \((3,4)\): \(\text{lca}(3,4)\) равен \(2\), расстояния равны \(1\) и \(1\). Существует только одно возможное значение \(x\), а именно \(1\).
  • \((3,5)\): \(\text{lca}(3,5)\) равен \(1\), расстояния равны \(2\) и \(1\). Существует только одно возможное значение \(x\), а именно \(2\).
  • \((4,5)\): \(\text{lca}(4,5)\) равен \(1\), расстояния равны \(2\) и \(1\). Существует только одно возможное значение \(x\), а именно \(2\).

Поэтому ответ для третьего примера равен \(1+1+1+1=4\).

F1. Считать не весело (Простая версия)

графы Деревья дп Комбинаторика математика поиск в глубину и подобное реализация снм Структуры данных хэши *2400

Это простая версия задачи. Отличие между версиями заключается в том, что в этой версии ограничения на \(t\) и \(n\) меньше. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Теперь Маленький Джон богат, и поэтому он наконец-то покупает дом, достаточно большой, чтобы вместить его и его любимую скобочную последовательность. Но каким-то образом он оказался с большим количеством скобок! Разочарованный, он пробивает потолок с помощью «ладони Будды».

Скобочная последовательность называется правильной, если она может быть построена по следующей формальной грамматике:

  1. Пустая последовательность \(\varnothing\) сбалансирована.
  2. Если скобочная последовательность \(A\) правильная, то \(\mathtt{(}A\mathtt{)}\) также является правильной.
  3. Если скобочные последовательности \(A\) и \(B\) правильные, то и их конкатенированная последовательность \(A B\) также правильная.

Например, последовательности «(())()», «()», «(()(()))» и пустая последовательность являются правильными, в то время как «(()» и «(()))(» — нет.

Дана правильная скобочная последовательность \(s\), пара индексов \((i,j)\) (\(i<j\)) называется хорошей, если \(s_i\) — это «(», а \(s_j\) — это «)», и две скобки добавляются одновременно в соответствии с правилом 2 при построении последовательности \(s\). Например, последовательность «(())()» имеет три разные хорошие пары: \((1,4)\), \((2,3)\) и \((5,6)\). Можно показать, что любая правильная скобочная последовательность из \(2n\) скобок содержит ровно \(n\) различных пар скобок, и использование любого порядка правил для построения одной и той же последовательности скобок приведет к одному и тому же набору пар скобок.

Эмили будет играть в игру по угадыванию скобок с Джоном. Игра проходит следующим образом.

Изначально у Джона есть правильная скобочная последовательность \(s\), содержащая \(n\) различных пар скобок, которая не известна Эмили. Джон говорит Эмили значение \(n\) и просит Эмили угадать последовательность.

На протяжении \(n\) ходов Джон дает Эмили следующие подсказки на каждом ходе:

  • \(l\;r\): Последовательность \(s\) содержит пару скобок \((l,r)\).

Гарантируется, что подсказки, которые Джон дает Эмили, попарно различны и не противоречат друг другу.

В какой-то момент Эмили может быть уверена, что правильная скобочная последовательность, удовлетворяющая подсказкам, данным до сих пор, уникальна. Например, предположим, что Эмили знает, что \(s\) имеет \(3\) хорошие пары, и она содержит пару скобок \((2,5)\). Из \(5\) правильных скобочных последовательностей с \(3\) хорошими парами существует только одна такая последовательность «((()))» с парой скобок \((2,5)\). Следовательно, можно увидеть, что Эмили не всегда нужно \(n\) ходов, чтобы угадать \(s\).

Чтобы как можно раньше узнать содержимое \(s\), Эмили хочет знать количество различных правильных скобочных последовательностей, которые соответствуют подсказкам после каждого хода. Конечно, это не легкая задача для Эмили, особенно когда ей дано настолько много хороших пар. Теперь ваша очередь помочь Эмили. Учитывая подсказки, вы должны найти ответ до всех ходов и после каждого хода. Поскольку ответы могут быть огромными, вам нужно найти их по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 5000\)) — количество хороших пар.

Затем каждая из следующих \(n\) строк содержит два целых числа \(l_i\) и \(r_i\), представляющих \(i\)-ю подсказку (\(1 \le l_i < r_i \le 2n\)).

Подсказки в одном наборе входных данных попарно различны и не противоречат друг другу.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5000\).

Выходные данные

Для каждого набора выведите \(n+1\) целых числа в одной строке:

  • Первое целое число — это ответ до всех подсказок, по модулю \(998\,244\,353\).
  • Для всех \(i \ge 1\), \(i+1\)-е целое число — это ответ после \(i\)-й подсказки, по модулю \(998\,244\,353\).
Примечание

Первый пример из примера объясняется в описании задачи.

Третий пример из примера объясняется следующим образом.

Можно показать, что существует \(132\) сбалансированных последовательностей скобок с \(6\) парами скобок. Ответы после каждой подсказки следующие:

  1. Вам дана хорошая пара \((2,3)\). Существует \(42\) правильных скобочных последовательностей, имеющих хорошую пару \((2,3)\).
  2. Вам дана хорошая пара \((1,6)\). Существует \(5\) правильных скобочных последовательностей, имеющих хорошие пары \((2,3)\), \((1,6)\).
  3. Вам дана хорошая пара \((7,8)\). Существуют \(2\) правильных скобочных последовательностей, имеющих три хорошие пары. Это строки «(()())()(())» и «(()())()()()», соответственно.
  4. Вам дана хорошая пара \((9,12)\). Существует только одна правильная скобочная последовательность, содержащая четыре хорошие пары. Таким образом, содержимое \(s\) имеет вид «(()())()(())».

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

F2. Считать не весело (Сложная версия)

графы Деревья Комбинаторика поиск в глубину и подобное реализация снм Структуры данных *2700

Это сложная версия задачи. Отличие между версиями заключается в том, что в этой версии ограничения на \(t\) и \(n\) больше. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Теперь Маленький Джон богат, и поэтому он наконец-то покупает дом, достаточно большой, чтобы вместить его и его любимую скобочную последовательность. Но каким-то образом он оказался с большим количеством скобок! Разочарованный, он пробивает потолок с помощью «ладони Будды».

Скобочная последовательность называется правильной, если она может быть построена по следующей формальной грамматике:

  1. Пустая последовательность \(\varnothing\) сбалансирована.
  2. Если скобочная последовательность \(A\) правильная, то \(\mathtt{(}A\mathtt{)}\) также является правильной.
  3. Если скобочные последовательности \(A\) и \(B\) правильные, то и их конкатенированная последовательность \(A B\) также правильная.

Например, последовательности «(())()», «()», «(()(()))» и пустая последовательность являются правильными, в то время как «(()» и «(()))(» — нет.

Дана правильная скобочная последовательность \(s\), пара индексов \((i,j)\) (\(i<j\)) называется хорошей, если \(s_i\) — это «(», а \(s_j\) — это «)», и две скобки добавляются одновременно в соответствии с правилом 2 при построении последовательности \(s\). Например, последовательность «(())()» имеет три разные хорошие пары: \((1,4)\), \((2,3)\) и \((5,6)\). Можно показать, что любая правильная скобочная последовательность из \(2n\) скобок содержит ровно \(n\) различных пар скобок, и использование любого порядка правил для построения одной и той же последовательности скобок приведет к одному и тому же набору пар скобок.

Эмили будет играть в игру по угадыванию скобок с Джоном. Игра проходит следующим образом.

Изначально у Джона есть правильная скобочная последовательность \(s\), содержащая \(n\) различных пар скобок, которая не известна Эмили. Джон говорит Эмили значение \(n\) и просит Эмили угадать последовательность.

На протяжении \(n\) ходов Джон дает Эмили следующие подсказки на каждом ходе:

  • \(l\;r\): Последовательность \(s\) содержит пару скобок \((l,r)\).

Гарантируется, что подсказки, которые Джон дает Эмили, попарно различны и не противоречат друг другу.

В какой-то момент Эмили может быть уверена, что правильная скобочная последовательность, удовлетворяющая подсказкам, данным до сих пор, уникальна. Например, предположим, что Эмили знает, что \(s\) имеет \(3\) хорошие пары, и она содержит пару скобок \((2,5)\). Из \(5\) правильных скобочных последовательностей с \(3\) хорошими парами существует только одна такая последовательность «((()))» с парой скобок \((2,5)\). Следовательно, можно увидеть, что Эмили не всегда нужно \(n\) ходов, чтобы угадать \(s\).

Чтобы как можно раньше узнать содержимое \(s\), Эмили хочет знать количество различных правильных скобочных последовательностей, которые соответствуют подсказкам после каждого хода. Конечно, это не легкая задача для Эмили, особенно когда ей дано настолько много хороших пар. Теперь ваша очередь помочь Эмили. Учитывая подсказки, вы должны найти ответ до всех ходов и после каждого хода. Поскольку ответы могут быть огромными, вам нужно найти их по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)) — количество хороших пар.

Затем каждая из следующих \(n\) строк содержит два целых числа \(l_i\) и \(r_i\), представляющих \(i\)-ю подсказку (\(1 \le l_i < r_i \le 2n\)).

Подсказки в одном наборе входных данных попарно различны и не противоречат друг другу.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора выведите \(n+1\) целых числа в одной строке:

  • Первое целое число — это ответ до всех подсказок, по модулю \(998\,244\,353\).
  • Для всех \(i \ge 1\), \(i+1\)-е целое число — это ответ после \(i\)-й подсказки, по модулю \(998\,244\,353\).
Примечание

Первый пример из примера объясняется в описании задачи.

Третий пример из примера объясняется следующим образом.

Можно показать, что существует \(132\) сбалансированных последовательностей скобок с \(6\) парами скобок. Ответы после каждой подсказки следующие:

  1. Вам дана хорошая пара \((2,3)\). Существует \(42\) правильных скобочных последовательностей, имеющих хорошую пару \((2,3)\).
  2. Вам дана хорошая пара \((1,6)\). Существует \(5\) правильных скобочных последовательностей, имеющих хорошие пары \((2,3)\), \((1,6)\).
  3. Вам дана хорошая пара \((7,8)\). Существуют \(2\) правильных скобочных последовательностей, имеющих три хорошие пары. Это строки «(()())()(())» и «(()())()()()», соответственно.
  4. Вам дана хорошая пара \((9,12)\). Существует только одна правильная скобочная последовательность, содержащая четыре хорошие пары. Таким образом, содержимое \(s\) имеет вид «(()())()(())».

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

F. Скибидус и slay

графы Деревья жадные алгоритмы поиск в глубину и подобное Структуры данных *1700

Определим мажорирующий элемент последовательности из \(k\) элементов как уникальное значение, которое появляется строго более чем \(\left \lfloor {\frac{k}{2}} \right \rfloor\) раз. Если такое значение не существует, то последовательность не имеет мажорирующего элемента. Например, последовательность \([1,3,2,3,3]\) имеет мажорирующий элемент \(3\), потому что оно появляется \(3 > \left \lfloor {\frac{5}{2}} \right \rfloor = 2\) раза, но \([1,2,3,4,5]\) и \([1,3,2,3,4]\) не имеют мажорирующего элемента.

Скибидус нашел дерево\(^{\text{∗}}\) из \(n\) вершин и массив \(a\) длиной \(n\). Вершина \(i\) имеет значение \(a_i\), написанное на ней, где \(a_i\) — это целое число в диапазоне \([1, n]\).

Для каждого \(i\) от \(1\) до \(n\) определите, существует ли нетривиальный простой путь\(^{\text{†}}\) такой, что \(i\) является мажорирующим элементом последовательности целых чисел, написанных на вершинах, которые образуют путь.

\(^{\text{∗}}\)Деревом называется связный граф без циклов.

\(^{\text{†}}\)Последовательность вершин \(v_1, v_2, ..., v_m\) (\(m \geq 2\)) образует нетривиальный простой путь, если \(v_i\) и \(v_{i+1}\) соединены ребром для всех \(1 \leq i \leq m - 1\) и все \(v_i\) попарно различны. Обратите внимание, что путь должен состоять как минимум из \(2\) вершин.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 5 \cdot 10^5\))  — количество вершин.

Вторая строка каждого набора содержит \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le n\))  — целые числа, написанные на вершинах.

Каждая из следующих \(n-1\) строк содержит два целых числа \(u_i\) и \(v_i\), обозначающих две вершины, соединенные ребром (\(1 \le u_i,v_i \le n\), \(u_i \neq v_i\)).

Гарантируется, что данные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем тестам не превышает \(5 \cdot 10^5\).

Выходные данные

Для каждого теста выведите двоичную строку \(s\) длиной \(n\) на отдельной строке. \(s_i\) должно вычисляться следующим образом:

  • Если существует нетривиальный путь, содержащий \(i\) как мажорирующий элемент, то \(s_i\) равно '1';
  • В противном случае \(s_i\) равно '0'.
Примечание

В первом примере нет нетривиального пути с \(1\), \(2\) или \(3\) в качестве мажорирующего элемента, поэтому выводимая двоичная строка — «000».

Во втором примере \(1\rightarrow 2\rightarrow 4\) — это нетривиальный путь с \(3\) в качестве мажорирующего элемента.

H. Бро считает себя избранным

дп Комбинаторика математика матрицы разделяй и властвуй Структуры данных *2200

Скибидус думает, что он избранный! Он доказал это, решив эту сложную задачу. Сможете ли вы?

Дана двоичная строка\(^{\text{∗}}\) \(t\), \(f(t)\) определяется как минимальное количество смежных подстрок, каждая из которых состоит из одинаковых символов, на которые можно разбить \(t\). Например, \(f(\texttt{00110001}) = 4\), потому что \(t\) можно разбить как \(\texttt{[00][11][000][1]}\), где каждый сегмент в скобках состоит из одинаковых символов.

Скибидус даёт вам двоичную строку \(s\) и \(q\) запросов. В каждом запросе один символ строки переворачивается (т.е. \(\texttt{0}\) меняется на \(\texttt{1}\), а \(\texttt{1}\) меняется на \(\texttt{0}\)), изменения сохраняются после обработки запроса. После каждого запроса выведите сумму по всем \(f(b)\), где \(b\) — это непустая подпоследовательность\(^{\text{†}}\) строки \(s\), по модулю \(998\,244\,353\).

\(^{\text{∗}}\)Двоичная строка состоит только из символов \(\texttt{0}\) и \(\texttt{1}\).

\(^{\text{†}}\)Подпоследовательность строки — это строка, которую можно получить, удалив несколько (возможно, ноль) символов из оригинальной строки.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит двоичную строку \(s\) (\(1 \leq |s| \leq 2 \cdot 10^5\)).

Следующая строка каждого набора содержит целое число \(q\) (\(1 \leq q \leq 2 \cdot 10^5\)) — количество запросов.

Следующая строка содержит \(q\) целых чисел \(v_1, v_2, \ldots, v_q\) (\(1 \leq v_i \leq |s|\)), обозначающих, что \(s_{v_i}\) переворачивается в \(i\)-м запросе.

Гарантируется, что сумма \(|s|\) и сумма \(q\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел в одной строке — ответ после каждого запроса по модулю \(998\,244\,353\).

Примечание

В первом тестовом случае \(s\) становится \(\texttt{001}\) после первого запроса. Давайте посчитаем ответ для каждой подпоследовательности:

  • \(f(s_1) = f(\texttt{0}) = 1\)
  • \(f(s_2) = f(\texttt{0}) = 1\)
  • \(f(s_3) = f(\texttt{1}) = 1\)
  • \(f(s_1 s_2) = f(\texttt{00}) = 1\)
  • \(f(s_1 s_3) = f(\texttt{01}) = 2\)
  • \(f(s_2 s_3) = f(\texttt{01}) = 2\)
  • \(f(s_1 s_2 s_3) = f(\texttt{001}) = 2\)

Сумма этих значений равна \(10\), по модулю \(998\,244\,353\).

B. Белая магия

дп жадные алгоритмы Конструктив реализация Структуры данных *1900

Назовём последовательность чисел \(a_1, a_2, \ldots, a_n\) магической, если для всех \(1 \leq i \leq n-1\) верно, что: \(\operatorname{min}(a_1, \ldots, a_i) \geq \operatorname{mex}(a_{i+1}, \ldots, a_n)\). В частности, любая последовательность длины \(1\) является магической.

Наименьшее исключенное (MEX) набора чисел \(a_1, a_2, \ldots, a_k\) определяется как наименьшее неотрицательное целое число \(t\), которое не встречается в наборе чисел \(a\).

Вам дана последовательность \(a\) из \(n\) целых неотрицательных чисел. Найдите максимально возможную длину магической подпоследовательности\(^{\text{∗}}\) последовательности \(a\).

\(^{\text{∗}}\)Последовательность \(a\) является подпоследовательностью \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) элементов на произвольных позициях.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длину последовательности \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)) — элементы последовательности \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — максимально возможную длину магической подпоследовательности последовательности \(a\).

Примечание

В первом наборе входных данных сама последовательность \([4, 3, 2, 1, 0]\) является магической, так как:

  • \(\operatorname{min}(4) = 4, \operatorname{mex}(3, 2, 1, 0) = 4\). \(4 \geq 4\)
  • \(\operatorname{min}(4, 3) = 3, \operatorname{mex}(2, 1, 0) = 3\). \(3 \geq 3\)
  • \(\operatorname{min}(4, 3, 2) = 2, \operatorname{mex}(1, 0) = 2\). \(2 \geq 2\)
  • \(\operatorname{min}(4, 3, 2, 1) = 1, \operatorname{mex}(0) = 1\). \(1 \geq 1\)

Во втором наборе входных данных последовательность \([4, 3, 3, 2, 1, 0]\) не является магической, так как \(\operatorname{min}(4, 3) = 3, \operatorname{mex}(3, 2, 1, 0) = 4\), \(3 < 4\). Но подпоследовательность \([4, 3, 2, 1, 0]\) этой последовательности является магической, поэтому ответ \(5\).

E. Тропический сезон

Бинарный поиск жадные алгоритмы реализация Структуры данных *3300

Перед вами находятся \(n\) бочек бесконечной вместимости. В \(i\)-й бочке изначально находится \(a_i\) килограмм воды. В этой задаче мы считаем, что все бочки сами по себе весят одинаково.

Вам известно, что на поверхности ровно одной из бочек распределено небольшое количество тропического яда, общий вес нанесённого яда составляет \(0.179\) килограмм. Но вы не знаете, на какой именно бочке находится яд. Ваша задача определить эту ядовитую бочку.

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

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

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

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

Однако в ядовитую бочку наливать воду можно, её вы не касаетесь.

Другими словами, вы можете выбрать числа \(i, j, x\) (\(i \neq j, 1 \leq i, j \leq n, 0 < x \leq a_i\), бочка под номером \(i\) не является ядовитой) и выполнить \(a_i := a_i - x\), \(a_j := a_j + x\). Где \(x\) не обязательно является целым числом.

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

Также мы просим вас обработать \(q\) запросов. В каждом запросе либо удаляется одна из имеющихся бочек, либо добавляется дополнительная бочка с каким-то количеством воды. После каждого запроса надо ответить, возможно ли гарантированно определить ядовитую бочку, если известно, что она ровно одна?

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^6\)) — объёмы воды в имеющихся бочках.

В следующих \(q\) строках вводятся запросы, по одному в строке. Каждый запрос имеет вид, либо + x, либо - x, что означает, соответственно, добавление и удаление бочки с \(x\) килограммами воды. Гарантируется, что при запросе - x одна из имеющихся бочек имеет объём \(x\), а также, что по ходу запросов всегда остаётся хотя бы одна бочка. Во всех запросах выполняется \(1 \leq x \leq 10^6\).

Выходные данные

Выведите \(q+1\) строку, ответ на задачу до всех запросов и после каждого запроса. Если возможно определить ядовитую бочку, выведите «Yes», иначе «No».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом тесте, до всех запросов, веса бочек \([2, 2, 4, 11]\). Вы можете посмотреть на значение сравнения первой и второй бочки. Если результат не равенству, можно однозначно заключить, что бочка с большим весом — ядовитая. Если же результат равенству, обе бочки неядовиты. Тогда можно перелить всё содержимое первой бочки во вторую. После чего во второй и в третьей бочки будет по \(4\) килограмма воды. Посмотрим на значение сравнения второй и третьей бочки. Если результат не равенству, бочка с большим весом — ядовитая. Иначе, обе бочки не ядовитые. И единственная бочка, которая может быть ядовитой — бочка 4. Итого с такой стратегией, мы можем безопасно определить ядовитую бочку.

E. Братья по крови

Бинарный поиск Деревья поиск в глубину и подобное Структуры данных *2100

Поликарп раздобыл дерево родственных связей. Найденное дерево описывает родственные связи n человек, пронумерованных от 1 до n. Каждый человек в этом дереве имеет не более одного непосредственного предка.

Назовем человека a 1-прародителем человека b, если a является непосредственным предком b.

Назовем человека a k-прародителем (k > 1) человека b, если у человека b есть 1-прародитель, и a является (k - 1)-прародителем 1-прародителя b.

В найденном дереве родственные связи не образуют циклов. Другими словами не существует человека, который непосредственно или косвенно является собственным прародителем (то есть является x-прародителем самого себя, для некоторого x, x > 0).

Назовем двух людей x и y (x ≠ y) p-юродными братьями (p > 0), если существует человек z, который является p-прародителем x и p-прародителем y.

Поликарп очень сильно интересуется сколько у кого и каких братьев. Он записал на листочке m пар чисел vi, pi. Помогите ему для каждой пары vi, pi узнать, сколько у человека vi pi-юродных братьев.

Входные данные

В первой строке входных данных записано единственное целое число n (1 ≤ n ≤ 105) — количество людей в дереве. В следующей строке записано n целых чисел через пробел r1, r2, ..., rn, где ri (1 ≤ ri ≤ n) — номер непосредственного предка человека номер i или 0 если у человека номер i нет непосредственного предка. Гарантируется, что родственные связи не образуют циклов.

В третьей строке записано единственное целое число m (1 ≤ m ≤ 105) — количество записей Поликарпа. В m следующих строках записаны пары целых чисел через пробел. В i-ой строке записаны числа vi, pi (1 ≤ vi, pi ≤ n).

Выходные данные

Выведите m целых чисел, разделенных пробельными символами, — ответы на записи Поликарпа. Ответы для записей выводите в том порядке, в котором записи встречаются во входных данных.

E. Две перестановки

Строки Структуры данных хэши *2700

Рубик очень увлекается перестановками чисел.

Перестановкой a длины n назовем последовательность, состоящую из n различных чисел от 1 до n. Элемент номер i (1 ≤ i ≤ n) перестановки будем обозначать ai.

Фурик решил сделать Рубику подарок и придумал для него новую задачу про перестановки. Фурик говорит Рубику две перестановки чисел: перестановку a длиной n и перестановку b длиной m. Рубик должен дать ответ на задачу: сколько существует различных целых чисел d таких, что последовательность c (c1 = a1 + d, c2 = a2 + d, ..., cn = an + d) длины n является подпоследовательностью b.

Последовательность a называется подпоследовательностью последовательности b, если найдутся такие индексы i1, i2, ..., in (1 ≤ i1 < i2 < ... < in ≤ m), что a1 = bi1, a2 = bi2, ..., an = bin, где n — длина последовательности a, а m — длина последовательности b.

Вам заданы перестановки a и b, помогите Рубику решить описанную задачу.

Входные данные

В первой строке содержатся два целых числа n и m (1 ≤ n ≤ m ≤ 200000) — размеры заданных перестановок. Во второй строке содержатся n различных целых чисел — перестановка a, в третьей m различных целых чисел — перестановка b. Числа в строках разделяются пробелами.

Выходные данные

В единственной строке выведите ответ на задачу.

E. Инопланетная ДНК

Деревья снм Структуры данных *2800

Профессор Байтоцы проводит опыты над инопланетными ДНК. Он обнаружил, что эта ДНК подвержена повторяющимся мутациям — каждая мутация проходит одинаково: некоторая непрерывная подпоследовательность инопланетной ДНК активируется, копируется, после чего копия подпоследовательности искажается и вставляется сразу после неискаженной подпоследовательности в ДНК. Искаженная копия активированной непрерывной подпоследовательности образуется следующим образом: сначала соединяются все элементы подпоследовательности на четных позициях, далее к ним присоединяются все элементы подпоследовательности на нечетных позициях. Таким образом, если активированная подпоследовательность состоит из 11 элементов и имеет вид s1s2... s11, то ее искаженная копия выглядит как s2s4s6s8s10s1s3s5s7s9s11.

Например, если исходная последовательность была «ACTGG», а мутация произошла на отрезке [2, 4] (то есть активирована подпоследовательность «CTG»), то мутировавшая ДНК выглядит так: «ACTGTCGG». Искаженная копия активированной подпоследовательности выделена жирным шрифтом.

Профессор Байтоцы записал исходную последовательность ДНК и затронувшую ее последовательность мутаций. Теперь он просит Вас восстановить первые k элементов последовательности ДНК после всех мутаций.

Входные данные

В первой строке входного файла содержится исходная последовательность ДНК, состоящая из не более чем 3·106 символов «A», «C», «T» и «G».

Во второй строке записано единственное целое число k (1 ≤ k ≤ 3·106).

В третьей строке записано единственное целое число n (0 ≤ n ≤ 5000) — количество мутаций. Следующие n строк описывают мутации в хронологическом порядке — каждая мутация описывается двумя целыми числами li и ri (1 ≤ li ≤ ri ≤ 109), что означает, что непрерывная подпоследовательность ДНК [li, ri] активировалась и скопировалась, при этом ее копия исказилась и присоединилась.

Гарантированно, что входные данные корректны, то есть, никакая мутация не происходит на несуществующей подпоследовательности ДНК, и что итоговая последовательность ДНК содержит не меньше k элементов.

Считается, что элементы последовательности ДНК нумеруются, начиная с 1, и что запись [l, r] обозначает непрерывную подпоследовательности последовательности ДНК, состоящую из r - l + 1 элементов, начинающуюся в l-ом элементе последовательности ДНК и заканчивающуюся в r-ом элементе последовательности ДНК.

Выходные данные

Выведите единственную строку, которая содержит первые k букв из мутировавшей последовательности ДНК.

Примечание

Во втором примере после первой мутации последовательность превратилась в «ACCAGTACGT». После второй — в «ACCAGTACCGACATCGT».

E. Стоянка

Структуры данных *2200

Автомобильная стоянка в городе N представляет собой n парковочных мест, расположенных в ряд. Парковочные места пронумерованы от 1 до n слева направо.

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

Считается, что расстояние между i-м и j-м парковочными местами равно 4·|i - j| метров.

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

Входные данные

В первой строке записаны через пробел два целых числа n и m (1 ≤ n, m ≤ 2·105) — количество парковочных мест и количество записей соответственно.

В следующих m строках заданы описания записей, одна запись в строке. В i-й строке даны числа ti, idi (1 ≤ ti ≤ 2; 1 ≤ idi ≤ 106). Если ti равно 1, то соответствующая запись информирует о приезде автомобилиста с номером idi на стоянку. Если ti равно 2, то соответствующая запись информирует об отъезде автомобилиста с номером idi со стоянки.

Записи о приезде на стоянку и об отъезде со стоянки автомобилистов заданы в хронологическом порядке. Все события происходили последовательно, никакие два события не происходили одновременно.

Гарантируется, что все записи корректны:

  • каждый автомобилист не более одного раза приезжал на стоянку и не более одного раза уезжал со стоянки,
  • не бывает записи об отъезде автомобилиста, который еще не приехал на стоянку,
  • автомобилистов на стоянке не более n в любой момент времени.

Считайте, что автомобилистам присвоены произвольные номера от 1 до 106, все присвоенные номера — различны. Первоначально все парковочные места на стоянке свободны.

Выходные данные

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

B. Маленький Слоник и массив

Конструктив Структуры данных *1800

Маленький Слоник любит играть с массивами. У него есть массив a, состоящий из n целых положительных чисел, пронумерованных от 1 до n. Обозначим число с номером i через ai.

Дополнительно у Маленького Слоника есть m запросов к массиву, каждый запрос описывается парой целых чисел lj и rj (1 ≤ lj ≤ rj ≤ n). Для каждого запроса lj, rj Маленькому Слонику необходимо посчитать количество таких чисел x, что число x встречается ровно x раз среди чисел alj, alj + 1, ..., arj.

Помогите Маленькому Слонику посчитать ответы на все запросы.

Входные данные

В первой строке записаны через пробел два целых числа n и m (1 ≤ n, m ≤ 105) — размер массива a и количество запросов к нему. В следующей строке записаны n целых положительных чисел через пробел a1, a2, ..., an (1 ≤ ai ≤ 109). Следующие m строк содержат описания запросов, по одному на строку. В j-ой из этих строк содержится описание j-го запроса — два целых числа через пробел lj и rj (1 ≤ lj ≤ rj ≤ n).

Выходные данные

В m строках выведите m целых чисел — ответы на запросы. В j-ой строке должен содержаться ответ на j-ый запрос.

C. Маленький Слоник и сдвиги

Структуры данных *2100

У Маленького Слоника есть две перестановки a и b длины n, состоящие из чисел от 1 до n, включительно. Обозначим i(1 ≤ i ≤ n) элемент перестановки a через ai, j(1 ≤ j ≤ n) элемент перестановки b — через bj.

Расстоянием между перестановками a и b будем называть минимальную абсолютную величину разности между позициями вхождений некоторого числа в a и в b. Более формально, это такое минимальное |i - j|, что ai = bj.

Циклическим сдвигом номер i (1 ≤ i ≤ n) перестановки b из n элементов называется перестановка bibi + 1... bnb1b2... bi - 1. Всего у перестановки существует n циклических сдвигов.

Маленькому Слонику интересно, для каждого циклического сдвига перестановки b, какое расстояние между этим циклическим сдвигом и перестановкой a?

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 105) — размер перестановок. Во второй строке записана перестановка an различных чисел от 1 до n, включительно. Числа разделены единичными пробелами. В третьей строке записана перестановка b в аналогичном формате.

Выходные данные

В n строках выведите n целых чисел — ответы для каждого циклического сдвига. Ответы для сдвигов выводите в порядке нумерации циклических сдвигов перестановки b, то есть сначала для 1-го циклического сдвига, потом для 2-го, и так далее.

E. Маленький Слоник, а также инверсии

Структуры данных *2400

У Маленького Слоника есть массив a, состоящий из n целых положительных чисел, пронумерованных от 1 до n. Обозначим число с номером i через ai.

Маленький Слоник хочет посчитать количество таких пар целых чисел l и r, что 1 ≤ l < r ≤ n и последовательность b = a1a2... alarar + 1... an имеет не более k инверсией.

Инверсией в последовательности b называется пара элементов последовательности b, которые после стабильной сортировки последовательности поменяют свой относительный порядок. Другими словами, инверсия это пара целых чисел i и j таких, что 1 ≤ i < j ≤ |b| и bi > bj, где |b| — длина последовательности b, а bj — ее j-ый элемент.

Помогите Маленькому Слонику посчитайте количество описанных пар.

Входные данные

В первой строке записаны два целых числа n и k (2 ≤ n ≤ 105, 0 ≤ k ≤ 1018) — размер массива a и максимально допустимое количество инверсий, соответственно. В следующей строке записаны n целых положительных чисел, разделенных единичными пробелами, a1, a2, ..., an (1 ≤ ai ≤ 109) — элементы массива a.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

В единственную строку выведите целое число — ответ на задачу.

B. Космические таблицы

реализация Структуры данных *1300

У Ассоциации Свободных Метеоров (АСМ) возникла проблема: поскольку метеоры движутся, во Вселенско-Космическую Описательную Шуточную Программу (ВКОШП) необходимо добавить специальный модуль, обрабатывающий это движение.

ВКОШП хранит некоторую секретную информацию о метеорах в виде таблицы n × m, в ячейках которой находятся целые числа. В связи со сменой порядка метеоров во Вселенной в главный модуль ВКОШП поступают следующие запросы:

  • Запрос на обмен местами двух строк таблицы;
  • Запрос на обмен местами двух столбцов таблицы;
  • Запрос на получение секретного числа в определенной клетке таблицы.

Поскольку главный модуль ВКОШП является критичным, то написание функционала работы с таблицей решили поручить вам.

Входные данные

В первой строке через пробел записаны три целых числа n, m и k (1 ≤ n, m ≤ 1000, 1 ≤ k ≤ 500000) — количество строк, столбцов таблицы и количество запросов соответственно.

В следующих n строках записаны по m чисел через пробел — изначальное состояние таблицы. Каждое число p в таблице целое и удовлетворяет неравенству 0 ≤ p ≤ 106.

В следующих k строках записаны запросы в формате «si xi yi», где si — один из символов «с», «r» или «g», а xi, yi — два целых числа.

  • Если si = «c», то текущий запрос — запрос на обмен столбцов с номерами xi и yi местами (1 ≤ x, y ≤ m, x ≠ y);
  • Если si = «r», то текущий запрос — запрос на обмен строк с номерами xi и yi местами (1 ≤ x, y ≤ n, x ≠ y);
  • Если si = «g», то текущий запрос — запрос на получение числа, стоящего в xi-ой строке в yi-ом столбце (1 ≤ x ≤ n, 1 ≤ y ≤ m).

Считайте, что строки таблицы нумеруются сверху вниз от 1 до n, а столбцы слева направо от 1 до m.

Выходные данные

Для каждого запроса на получение числа (si = «g») выведите требуемое число. Ответы на запросы выводите в том порядке, в котором запросы заданы во входных данных.

Примечание

Давайте посмотрим, как изменяется таблица во втором тестовом примере.

После выполнения первой операции таблица примет следующий вид:

2 1 4

1 3 5

После выполнения второй операции она примет такой вид:

1 3 5

2 1 4

На третий запрос (какое число стоит в первом ряду в третьем столбце) ответом будет 5.

A. Скобочная последовательность

Разбор выражений реализация Структуры данных *1700

Скобочной последовательностью называется строка, состоящая только из символов «(», «)», «[» и «]».

Правильной скобочной последовательностью называется скобочная последовательность, которую можно преобразовать в корректное арифметическое выражение путем вставок между ее символами символов «1» и «+». Например, скобочные последовательности «()[]», «([])» — правильные (полученные выражения: «(1)+[1]», «([1+1]+1)»), а «](» и «[» — нет. Пустая строка является правильной скобочной последовательностью по определению.

Подстрокой s[l... r] (1 ≤ l ≤ r ≤ |s|) строки s = s1s2... s|s| (где |s| — длина строки s) называется строка slsl + 1... sr. Пустая подстрока по определению считается подстрокой любой строки.

Вам дана не обязательно правильная скобочная последовательность. Найдите ее подстроку, которая является правильной скобочной последовательностью и при этом содержит как можно больше скобок «[».

Входные данные

В первой и единственной строке записана скобочная последовательность — строка, состоящая только из символов «(», «)», «[» и «]». Гарантируется, что строка непустая и ее длина не превышает 105 символов.

Выходные данные

В первой строке выведите единственное целое число — количество скобок «[» в оптимальной подстроке. Во второй строке выведите саму подстроку. Если существует несколько оптимальных подстрок выведите любую.

B. Две строки

дп Строки Структуры данных *1900

Подпоследовательностью длины |x| строки s = s1s2... s|s| (где |s| — длина строки s) называется строка x = sk1sk2... sk|x| (1 ≤ k1 < k2 < ... < k|x| ≤ |s|).

Вам даны две строки — s и t. Рассмотрим все подпоследовательности строки s, совпадающие со строкой t. Верно ли, что каждый символ строки s находится хотя бы в одной из этих подпоследовательностей? Другими словами, верно ли, что для всех i (1 ≤ i ≤ |s|), существует такая подпоследовательность x = sk1sk2... sk|x| строки s, что x = t и для некоторого j (1 ≤ j ≤ |x|) kj = i.

Входные данные

В первой строке записана строка s, во второй — t. Каждая строка состоит только из строчных латинских букв. Заданные строки непустые, длина каждой строки не превышает 2·105.

Выходные данные

Выведите «Yes» (без кавычек), если каждый символ строки s находится хотя бы в одной из описанных подпоследовательностей, или «No» (без кавычек) в противном случае.

Примечание

В первом примере строка t может входить в строку s как подпоследовательность тремя способами: abab, abab и abab. При этом каждый символ строки s попадает хотя бы в одно вхождение.

Во втором примере 4-й символ строки s не попадает ни в одно вхождение строки t.

В третьем примере нет ни одного вхождения строки t в строку s.

C. Юбилей

математика матрицы реализация Структуры данных теория чисел *2400

Меньше 60 лет осталось до того, как исполнится 900 лет со дня рождения известного итальянского математика Леонардо Фибоначчи. Безусловно, к такому важному юбилею надо заранее основательно подготовиться.

Дима убежден, что неплохо было бы к знаменательной дате научиться решать следующую задачу: дано множество A, состоящее из чисел l, l + 1, l + 2, ..., r; рассмотрим все его k-элементные подмножества; для каждого такого подмножества найдем наибольший общий делитель чисел Фибоначчи с порядковыми номерами, заданными элементами подмножества. Среди всех найденных наибольших общих делителей Диму интересует самый большой.

Дима просил напомнить, что числа Фибоначчи — элементы числовой последовательности, в которой F1 = 1, F2 = 1, Fn = Fn - 1 + Fn - 2 для n ≥ 3.

У Димы впереди еще больше полувека, чтобы решить поставленную задачу, а у Вас всего два часа. Посчитайте остаток от деления искомого наибольшего общего делителя на m.

Входные данные

В первой строке записаны четыре целых числа через пробел m, l, r и k (1 ≤ m ≤ 109; 1 ≤ l < r ≤ 1012; 2 ≤ k ≤ r - l + 1).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите единственное целое число — остаток от деления искомого наибольшего общего делителя на m.

E. Путь благородного рыцаря

Деревья Структуры данных *2900

В Берляндии каждый феодал владеет ровно одним замком, а каждый замок принадлежит ровно одному феодалу.

Каждый феодал, кроме одного (короля), находится в подчинении у другого феодала. Вассалов (подчиненных) у феодала может быть любое количество.

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

Каждый год в Берляндии может случиться ровно одно из двух событий.

  1. На замок номер с напали варвары. Известно, что за всю историю Берляндии варвары никогда не нападали на один и тот же замок дважды.
  2. Благородный рыцарь отправился в путешествие из замка a в замок b (причем по такому пути, что каждый замок встречается на нем не более одного раза).

Остановимся подробнее на втором событии. Поскольку путь из a в b предстоит неблизкий, то, возможно, рыцарь захочет остановиться в замке, лежащем на его пути, чтобы отдохнуть. Но он может сделать остановку не в каждом замке: благородство не позволяет ему находиться в замке, оскверненном невыветрившимся духом врага. Замок считается оскверненным тогда и только тогда, когда на него совершалось нападение после года y. Поэтому выбор рыцаря остановится на k-м замке, лежащем на его пути, считая от a (сами замки a и b в счет не идут), на который не совершалось нападений в годы с y + 1 по текущий.

Рыцари плохо помнят, в какие годы и на какие замки совершались нападения, поэтому они обратились к придворному ученому, то есть к Вам, за помощью. Вам задана последовательность событий в истории Берляндии, сообщите каждому рыцарю, в каком городе ему следует остановиться, или огорчите его известием о том, что на пути из a в b меньше k городов, удовлетворяющих его требованиям, а потому отдыхать рыцарю не придется.

Входные данные

В первой строке входных данных записано целое число n (2 ≤ n ≤ 105) — количество феодалов.

В следующей строке записаны n целых чисел через пробел: i-е число равно номеру феодала, которому подчинен i-й, или 0, если номер i имеет король.

В третьей строке записано целое число m (1 ≤ m ≤ 105) — количество событий в истории Берляндии.

Далее идет m строк, описывающих события. В i-й из этих строк (нумерация ведется с 1) находится описание события, произошедшего в год i. Каждое событие характеризуется типом ti (1 ≤ ti ≤ 2). Описание события первого типа (нападение на замок): два целых числа, записанных через пробел, ti ci (ti = 1; 1 ≤ ci ≤ n), где ci — номер замка, на который напали варвары в i-ый год. Описание события второго типа (путешествие рыцаря): пять целых чисел, записанных через пробел, ti ai bi ki yi (ti = 2; 1 ≤ ai, bi, ki ≤ nai ≠ bi; 0 ≤ yi < i), где ai — номер замка, из которого отправляется в путь рыцарь, bi — номер замка, в который едет рыцарь, ki и yik и y из описания второго события.

Считайте, что феодалы пронумерованы от 1 до n. Гарантируется, что среди феодалов ровно один король. Гарантируется, что для событий первого типа все ci различны.

Выходные данные

Для каждого события второго типа выведите целое число — номер замка, в котором должен остановиться на отдых рыцарь, или -1, если ему придется проделать путь из ai в bi без остановок. Разделяйте ответы пробельными символами.

Ответы выводите в том порядке, в котором события второго типа заданы во входных данных.

Примечание

В первом примере на пути рыцаря из замка 1 в замок 3 лежит только замок 2. Когда рыцарь проделает путь 1 - 3 в первый раз, замок 2 не будет осквернен врагом, поэтому именно в нем рыцарь и остановится. Во второй год замок 2 станет осквернен, а потому в следующие два года рыцарю будет негде остановиться (так как ему важно, чтобы замок не был осквернен, начиная с годов 1 и 2, соответственно). В пятый год рыцарь не будет считать замок 2 оскверненным, а потому вновь остановится в нем.

D. Зигзаг

Структуры данных *2100

Придворный волшебник Зигзаг хочет прославиться как великий математик. Для этого ему нужна своя теорема, как у Коши, или своя сумма, как у Минковского. Но больше всего ему хочется иметь свою последовательность, как у Фибоначчи, и свою функцию, как у Эйлера.

Последовательностью Зигзага с коэффициентом зигзаговости z будем называть бесконечную последовательность Siz (i ≥ 1; z ≥ 2), которая определяется следующим образом:

  • Siz = 2, при ;
  • , при ;
  • , при .

Операция обозначает взятие остатка от деления числа x на число y. Например, начало последовательности Si3 (зигзаговости 3) выглядит так: 1, 2, 3, 2, 1, 2, 3, 2, 1.

Пусть задан массив a, состоящий из n целых чисел. Обозначим элемент номер i (1 ≤ i ≤ n) массива за ai. Функцией Зигзага будем называть функцию: , где l, r, z удовлетворяют неравенствам 1 ≤ l ≤ r ≤ n, z ≥ 2.

Чтобы лучше познакомиться с последовательностью и функцией Зигзага, волшебник Зигзаг предлагает Вам реализовать следующие операции над заданным массивом a.

  1. Операция присвоения. Параметры операции: (p, v). Операция обозначает присвоение p-му элементу массива значения v. После применения операции значение элемента ap массива равно v.
  2. Операция Зигзага. Параметры операции: (l, r, z). Операция обозначает вычисление функции Зигзага Z(l, r, z).

Познайте магическую силу зигзагов, реализуйте описанные операции.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество элементов в массиве a. Во второй строке через пробел записаны n целых чисел: a1, a2, ..., an (1 ≤ ai ≤ 109) — элементы массива.

В третьей строке записано целое число m (1 ≤ m ≤ 105) — количество операций. В следующих m строках записаны описания операций. Описание операции начинается с целого числа ti (1 ≤ ti ≤ 2) — типа операции.

  • Если ti = 1 (операция присвоения), то далее в строке через пробел записаны два целых числа: pi, vi (1 ≤ pi ≤ n; 1 ≤ vi ≤ 109) — параметры операции присвоения.
  • Если ti = 2 (операция Зигзага), то далее в строке через пробел записаны три целых числа: li, ri, zi (1 ≤ li ≤ ri ≤ n; 2 ≤ zi ≤ 6) — параметры операции Зигзага.

Операции необходимо выполнять в том порядке, в котором они заданы во входных данных.

Выходные данные

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

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

Пояснение к примеру:

  • Результат первой операции Z(2, 3, 2) = 3·1 + 1·2 = 5.
  • Результат второй операции Z(1, 5, 3) = 2·1 + 3·2 + 1·3 + 5·2 + 5·1 = 26.
  • После выполнения третьей операции массив a равен: 2, 3, 5, 5, 5.
  • Результат четвертой операции Z(1, 5, 3) = 2·1 + 3·2 + 5·3 + 5·2 + 5·1 = 38.

B. Планеты

Бинарный поиск графы кратчайшие пути Структуры данных *1700

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

Всего в галактике находится n планет, пронумерованных числами от 1 до n. Джек находится на планете с номером 1, а Апофис высадится на планете с номером n. Между некоторыми парами планет можно перемещаться через звездные врата (перемещение возможно в обоих направлениях); перемещение занимает положительное и, возможно, для разных пар планет неодинаковое количество секунд. Джек начинает свое путешествие в момент времени 0.

Может оказаться, что на планету, где сейчас находится Джек, через звездные врата прибывают другие путешественники, в этом случае Джек должен подождать ровно 1 секунду, прежде чем сам сможет воспользоваться звездными вратами. То есть, если в момент времени t на планету прибывает другой путешественник, то Джек может пройти через врата только в момент времени t + 1, если только в момент времени t + 1 на ту же планету не прибывают еще путешественники.

Зная информацию о времени перемещения между планетами, а также о моментах времени, когда Джек не сможет пользоваться звездными вратами на конкретных планетах, определите наименьшее время, за которое он сможет попасть на планету с номером n.

Входные данные

Первая строка содержит два целых числа, разделенные пробелом: n (2 ≤ n ≤ 105), количество планет в галактике, и m (0 ≤ m ≤ 105), количество пар планет, между которыми можно перемещаться сквозь звездные врата. Далее следуют m строк, в каждой из них содержится три целых числа: i-ая строка содержит номера планет ai и bi (1 ≤ ai, bi ≤ n, ai ≠ bi), между которыми есть связь через звездные врата, и целочисленное время (в секундах) перемещения между этими планетами ci (1 ≤ ci ≤ 104). Гарантируется, что между любой парой планет существует не более одного перехода, образованного звездными вратами.

Далее следуют n строк: i-тая строка содержит целое число ki (0 ≤ ki ≤ 105), которое обозначает количество моментов времени, в которые на планету с номером i прибывают другие путешественники. Далее через пробел следуют ki упорядоченных по возрастанию различных целых чисел tij (0 ≤ tij < 109). Число tij обозначает, что в момент времени tij (в секундах) на планету i прибывает другой путешественник. Гарантируется, что сумма всех ki не превышает 105.

Выходные данные

Выведите единственное число — наименьшее количество времени, которое понадобится Джеку, чтобы попасть с планеты 1 на планету n. Если Джек не сможет попасть на планету n ни за какое время, выведите число -1.

Примечание

В первом примере у Джека три выбора, куда переместиться с планеты 1. Если он переместится сразу на планету 4, то потратит 8 секунд. Если он переместится на планету 3, то потратит 3 секунды, но, поскольку в моменты времени 3 и 4 на планету 3 прибывают другие путешественники, то он сможет отправиться на планету 4 только в момент времени 5, затратив в сумме 8 секунд. Если же Джек переместится на планету 2, а потом на планету 4, то потратит в сумме всего лишь 2 + 5 = 7 секунд.

Во втором примере с планеты 1 на планету 3 нельзя попасть, перемещаясь через звездные врата.

E. Кактус

графы Деревья дп поиск в глубину и подобное Структуры данных *2100

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

Простым циклом в неориентированном графе назовем последовательность различных вершин v1, v2, ..., vt (t > 2) такую, что для любого i (1 ≤ i < t) существует ребро между вершинами vi и vi + 1, а также существует ребро между вершинами v1 и vt.

Простым путем в неориентированном графе назовем последовательность не обязательно различных вершин v1, v2, ..., vt (t > 0) такую, что для любого i (1 ≤ i < t) существует ребро между вершинами vi и vi + 1, причем каждое ребро встречается не более одного раза. Будем говорить, что простой путь v1, v2, ..., vt начинается в вершине v1 и заканчивается в вершине vt.

Вам задан граф, состоящий из n вершин и m ребер, который является вершинным кактусом. Также есть список из k пар интересных вершин xi, yi, для которых Вы захотели узнать следующую информацию — сколько различных простых путей начинается в вершине xi и заканчивается в вершине yi. Два простых пути будем считать различными, если различаются множества ребер, которые в них входят.

Для каждой пары интересных вершин посчитайте количество различных простых путей между ними. Поскольку это количество может быть достаточно большим, требуется посчитать остаток от деления этого числа на 1000000007 (109 + 7).

Входные данные

В первой строке через пробел записаны два целых числа n, m (2 ≤ n ≤ 105; 1 ≤ m ≤ 105) — количество вершин и ребер в графе соответственно. В следующих m строках задано описание ребер: в i-той строке через пробел записаны два целых числа ai, bi (1 ≤ ai, bi ≤ n) — номера вершин, которые соединяет i-тое ребро.

Во следующей строке записано единственное целое число k (1 ≤ k ≤ 105) — количество пар интересных вершин. В следующих k строках задан список пар интересных вершин: в i-ой строке через пробел записаны два целых числа xi, yi (1 ≤ xi, yi ≤ nxi ≠ yi) — номера интересных вершин в i-ой паре.

Гарантируется, что заданный граф является вершинным кактусом. Гарантируется, что в графе отсутствуют петли и кратные ребра. Считайте, что вершины графа некоторым образом пронумерованы от 1 до n.

Выходные данные

Выведите k строк: в i-ой строке выведите единственное число — остаток от деления количества различных простых путей, начинающихся в xi и заканчивающихся в yi, на 1000000007 (109 + 7).

D. Забор

Бинарный поиск строковые суфф. структуры Структуры данных *2900

У Джона Доу есть кривой забор, состоящий из n прямоугольных досок выстроенных в ряд слева направо: i-тая (1 ≤ i ≤ n) по порядку (слева направо) доска имеет ширину 1 и высоту hi. Будем считать, что i-тая (1 ≤ i ≤ n) по порядку (слева направо) доска имеет номер i.

Кусок забора от l до r (1 ≤ l ≤ r ≤ n) — это последовательность досок с номерами от l до r включительно, то есть, доски с номерами l, l + 1, ..., r. Шириной куска забора от l до r называется величина r - l + 1.

Два куска забора от l1 до r1 и от l2 до r2 называются подходящими, если выполняются следующие условия:

  • куски не пересекаются, то есть, нет ни одной доски, такой, что она содержится в обоих кусках забора;
  • куски имеют одинаковую ширину;
  • для любого i (0 ≤ i ≤ r1 - l1) выполняется hl1 + i + hl2 + i = hl1 + hl2.

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

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество досок в заборе. Во второй строке через пробел записаны n целых чисел h1, h2, ..., hn (1 ≤ hi ≤ 109) — высоты досок забора.

В третьей строке записано целое число q (1 ≤ q ≤ 105) — количество запросов. В следующих q строках через пробел записаны два целых числа li и ri (1 ≤ li ≤ ri ≤ n) — границы i-го куска забора.

Выходные данные

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

C. Циклическая Задача

Строки строковые суфф. структуры Структуры данных *2700

Несколько дней назад WJMZBMR научился быстро отвечать на запрос «сколько раз строка x встречается в строке s», путем предварительной обработки строки s. Но сейчас он хочет немного усложнить этот запрос.

Итак, его новый запрос: «сколько последовательных подстрок s циклически изоморфны данной строке x». Вам дана строка s и n строк xi, для каждой строки xi найдите количество последовательных подстрок s, циклически изоморфных строке xi.

Две строки называются циклически изоморфными, если одну из них можно получить из другой путем вращения. Здесь под вращением имеется в виду перемещение некоторого количества подряд идущих символов (возможно, это количество равняется нулю) из начала строки в конец строки в том же порядке. Например, строку «abcde» можно вращением превратить в строку «deabc». Мы можем взять символы «abc» из начала строки и поставить их в конец после «de».

Входные данные

Первая строка содержит непустую строку s. Длина строки s не превышает 106 символов.

Вторая строка содержит целое число n (1 ≤ n ≤ 105) — количество запросов. Затем следуют n строк: в i-ой из них записана строка xi — строка для i-го запроса. Общая длина xi не превышает 106 символов.

В этой задаче строки состоят только из строчных букв латинского алфавита.

Выходные данные

Для каждого запроса xi выведите единственное целое число — количество последовательных подстрок в s, которые циклически изоморфны xi. Выводите ответы на запросы в том порядке, в котором запросы заданы во входных данных.

D. Ленточное Программирование

реализация Структуры данных *2900

Существует язык программирования, в котором каждая программа представлена непустой последовательностью символов «<» и «>» и цифр. Объясним, как работает интерпретатор этого языка программирования. Программа интерпретируется посредством движения указателя команды (IP), который состоит из двух частей.

  • Указатель текущего символа (CP);
  • Указатель направления (DP), который может указывать налево или направо;

Изначально CP указывает на крайний левый символ в последовательности, а DP указывает направо.

Мы повторяем следующие шаги до тех пор, пока CP впервые укажет куда-то за пределы последовательности.

  • Если CP указывает на цифру, то интерпретатор выводит эту цифру. Затем CP перемещается на один шаг согласно направлению DP. После этого значение написанной в последовательности цифры уменьшается на один. Если выведенная цифра была 0, значит, ее нельзя уменьшить. Поэтому она удаляется из последовательности, и длина последовательности уменьшается на один.
  • Если CP указывает на «<» или «>», то направление DP меняется на «влево» или «вправо», соответственно. Затем CP двигается на один шаг согласно DP. Если новый символ, на который указывает CP — это «<» или «>», то предыдущий символ будет удален из последовательности.

Если в какой-то момент выполнения программы CP выходит за пределы последовательности, то выполнение программы завершается.

Очевидно, что любая программа на этом языке завершается после некоторого количества шагов.

У Вас есть последовательность s1, s2, ..., sn, состоящая из символов «<», «>» и чисел. Вы должны ответить на q запросов. Каждый запрос характеризуется двумя целыми числами l и r и спрашивает, сколько раз будет выведена каждая цифра, если мы запустим последовательность sl, sl + 1, ..., sr как независимую программу на описанном языке.

Входные данные

В первой строке входных данных содержатся два целых числа n и q (1 ≤ n, q ≤ 105) — длина последовательности s и количество запросов.

Вторая строка содержит s, последовательность из «<», «>» и цифр (0..9), записанных слева направо. Заметьте, что символы s не разделяются пробелами.

Каждая из следующих q строк содержит по два целых числа li и ri (1 ≤ li ≤ ri ≤ n)i-ый запрос.

Выходные данные

Для каждого запроса выведите 10 целых чисел, записанных через пробел: x0, x1, ..., x9, где xi равняется количеству выведенных цифр i при выполнении соответствующей программы из запроса. Выводите ответы на запросы в том порядке, в каком запросы даны во входных данных.

F. TorCoder

Структуры данных *2600

Мальчик Лео не пропускает ни одного раунда соревнований TorCoder. На последнем TorCoder раунде под номером 100666 Лео столкнулся со следующей задачей. Задана строка s, состоящая из n строчных букв латинского алфавита, а также m запросов. Каждый запрос характеризуется парой целых чисел li, ri (1 ≤ li ≤ ri ≤ n).

Будем считать, что буквы строки пронумерованы от 1 до n слева направо, то есть s = s1s2... sn.

После каждого запроса необходимо поменять местами буквы строки s, с номерами от li до ri включительно так, чтобы подстрока (li, ri) стала палиндромом. Если существует несколько таких перестановок букв, нужно выбрать ту, в которой подстрока (li, ri) будет лексикографически наименьшей. Если не существует ни одной такой перестановки — запрос нужно проигнорировать (то есть никак не менять строку s).

Всем известно, что на раундах TorCoder ограничения на размер входных строк и массивов никогда не превышают 60, поэтому Лео с легкостью решил эту задачу. Вам же нужно решить эту задачу на несколько больших ограничениях. По заданной строке s и m запросам, выведите строку, которая получится в результате применения всех m запросов к строке s.

Входные данные

В первой строке входных данных находится два целых числа n и m (1 ≤ n, m ≤ 105) — длина строки и количество запросов.

Во второй строке находится строка s, состоящая из n строчных латинских букв.

В каждой из следующих m строк находится пара чисел li, ri (1 ≤ li ≤ ri ≤ n) — очередной запрос, который нужно применить к строке.

Выходные данные

В единственной строке выведите результат применения m запросов к строке s. Выполняйте запросы, в том порядке, в котором они заданы во входных данных.

Примечание

Подстрокой (li, ri) 1 ≤ li ≤ ri ≤ n) строки s = s1s2... sn длины n называется последовательность символов slisli + 1...sri.

Строка называется палиндромом, если она читается одинаково слева направо и справа налево.

Строка x1x2... xp лексикографически меньше строки y1y2... yq, если либо p < q и x1 = y1, x2 = y2, ... , xp = yp, либо существует такое число r (r < p, r < q), что x1 = y1, x2 = y2, ... , xr = yr и xr + 1 < yr + 1.

B. Friends

Бинарный поиск битмаски математика Структуры данных *2700

You have n friends and you want to take m pictures of them. Exactly two of your friends should appear in each picture and no two pictures should contain the same pair of your friends. So if you have n = 3 friends you can take 3 different pictures, each containing a pair of your friends.

Each of your friends has an attractiveness level which is specified by the integer number ai for the i-th friend. You know that the attractiveness of a picture containing the i-th and the j-th friends is equal to the exclusive-or (xor operation) of integers ai and aj.

You want to take pictures in a way that the total sum of attractiveness of your pictures is maximized. You have to calculate this value. Since the result may not fit in a 32-bit integer number, print it modulo 1000000007 (109 + 7).

Input

The first line of input contains two integers n and m — the number of friends and the number of pictures that you want to take.

Next line contains n space-separated integers a1, a2, ..., an (0 ≤ ai ≤ 109) — the values of attractiveness of the friends.

Output

The only line of output should contain an integer — the optimal total sum of attractiveness of your pictures.

E. XOR на отрезке

битмаски Структуры данных *2000

Вам задан массив a, состоящий из n целых чисел a1, a2, ..., an. С этим массивом разрешается выполнять две операции:

  1. Вычислить сумму текущих элементов массива на отрезке [l, r], то есть посчитать значение al + al + 1 + ... + ar.
  2. Применить операцию xor с заданным числом x к каждому элементу массива на отрезке [l, r], то есть выполнить . Эта операция изменяет ровно r - l + 1 элементов массива.

Выражение означает применение побитовой операции xor к числам x и y. Данная операция существует во всех современных языках программирования, например, в языках C++ и Java она обозначена как «^», в Pascal — как «xor».

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

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 105) — размер массива. Во второй строке через пробел заданы целые числа a1, a2, ..., an (0 ≤ ai ≤ 106) — исходный массив.

В третьей строке задано целое число m (1 ≤ m ≤ 5·104) — количество операций с массивом. В i-ой из следующих m строк сперва записано целое число ti (1 ≤ ti ≤ 2) — тип i-го запроса. Если ti = 1, то это запрос суммы, если ti = 2, то это запрос на изменение элементов массива. Если i-ая операция типа 1, то далее следуют два целых числа li, ri (1 ≤ li ≤ ri ≤ n). Если i-ая операция типа 2, то далее следуют три целых числа li, ri, xi (1 ≤ li ≤ ri ≤ n, 1 ≤ xi ≤ 106). Числа в строках разделены одиночными пробелами.

Выходные данные

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

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

D. Кубики

геометрия дп Структуры данных *2700

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

Город в основании представляет собой квадрат размера n × n, разделенный на единичные квадратики. Стороны квадрата параллельны осям координат, противоположные углы квадрата имеют координаты (0, 0) и (n, n). На каждом из единичных квадратиков Петя построил башню из деревянных кубиков. Сторона деревянного кубика также имеет единичную длину.

После этого Петя отошел от своего творения на бесконечно большое расстояние и посмотрел на него в направлении вектора v = (vx, vy, 0). Петю интересует сколько различных кубиков видно из этого положения. Помогите ему, найдите это количество.

Каждый кубик включает в себя свою границу. Считается, что кубик видно, если существует луч, выходящий из некоторой точки p, принадлежащей кубику, в направлении вектора  - v, который не содержит точек, принадлежащих другим кубикам.

Входные данные

В первой строке записаны три целых числа n, vx и vy (1 ≤ n ≤ 103, |vx|, |vy| ≤ |104|, |vx| + |vy| > 0).

В следующих n строках записано по n целых чисел: j-ое число в i-ой строке aij (0 ≤ aij ≤ 109, 1 ≤ i, j ≤ n), обозначает высоту башни в кубиках, стоящую на единичном квадратике с противоположными углами в точках (i - 1, j - 1) и (i, j).

Выходные данные

Выведите единственное целое число — количество видимых кубиков.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

E. Матрица

Структуры данных *3000

Рассмотрим квадратную матрицу размера n × n, состоящую из единиц и нулей.

Будем считать матрицу хорошей, если она удовлетворяет следующему условию: в каждой строке матрицы все единицы идут подряд. То есть каждая строка имеет вид 00...0011...1100...00 (или же просто состоит из нулей, если в ней нет единиц).

Дана матрица a размера n × n, состоящая из единиц и нулей. Определите, можно ли из нее получить хорошую матрицу b с помощью перестановки столбцов, или нет.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 500) — размер матрицы a.

В каждой из n последующих строк записано по n символов «0» и «1» — матрица a. Обратите внимание, символы записаны без разделителей.

Выходные данные

Выведите «YES» в первой строке, если возможно так переставить столбцы матрицы a, чтобы получилась хорошая матрица b. В следующих n строках выведите хорошую матрицу b. Если существует несколько ответов, разрешается вывести любой.

Если получить хорошую матрицу невозможно, выведите «NO».

E. Братья по крови возвращаются

Бинарный поиск дп поиск в глубину и подобное сортировки Структуры данных *2400

Поликарп раздобыл дерево родственных связей. Найденное дерево описывает родственные связи n человек, пронумерованных от 1 до n. Каждый человек в этом дереве имеет не более одного непосредственного предка. Также каждый человек в дереве имеет имя, имена не обязательно уникальные.

Назовем человека с номером a 1-прародителем человека с номером b, если человек с номером a является непосредственным предком человека с номером b.

Назовем человека с номером a k-прародителем (k > 1) человека с номером b, если у человека с номером b есть 1-прародитель, и человек с номером a является (k - 1)-прародителем 1-прародителя человека с номером b.

В найденном дереве родственные связи не образуют циклов. Другими словами не существует человека, который непосредственно или косвенно является собственным прародителем (то есть является x-прародителем самого себя, для некоторого x, x > 0).

Назовем человека с номером a k-сыном человека с номером b, если человек с номером b является k-предком человека с номером a.

Поликарп очень сильно интересуется сколько у кого и каких сыновей. Он записал на листочке m пар чисел vi, ki. Помогите ему для каждой пары vi, ki узнать, сколько существует различных имен, среди всех имен ki-сыновей человека с номером vi.

Входные данные

В первой строке входных данных записано единственное целое число n (1 ≤ n ≤ 105) — количество людей в дереве. В следующих n строках записано описание людей в дереве. В i-той из этих строк записаны через пробел строка si и целое число ri (0 ≤ ri ≤ n), где si — имя человека с номером i, а ri — номер непосредственного предка человека с номером i или 0 если у человека с номером i нет непосредственного предка.

В следующей строке записано единственное целое число m (1 ≤ m ≤ 105) — количество записей Поликарпа. В m следующих строках записаны пары целых чисел через пробел. В i-ой строке записаны числа vi, ki (1 ≤ vi, ki ≤ n).

Гарантируется, что родственные связи не образуют циклов. Имена всех людей непустые строки, состоящие из не более чем 20 строчных латинских букв.

Выходные данные

Выведите m целых чисел, разделенных пробельными символами, — ответы на записи Поликарпа. Ответы для записей выводите в том порядке, в котором записи встречаются во входных данных.

D. Ежик и звезды

геометрия дп математика сортировки Структуры данных *2700

По вечерам Ежик ходил к Медвежонку в гости считать звезды. Они усаживались на бревнышке и, прихлебывая чай, смотрели на звездное небо. Оно висело над крышей, прямо за печной трубой. Справа от трубы были звезды Медвежонка, а слева — Ежика. Обычно, Ежик просто считал все звезды, поэтому он знает, что всего их n. В этот раз он решил немного усложнить себе задачу. Он мысленно ввел систему координат: начало координат положил в точке пересечения крыши и трубы, ось OX направил вдоль крыши влево, ось OY — вдоль трубы вверх (см. рисунок). Ежик проводит два луча из начала координат под углами α1 и α2 к оси OX.

Теперь он выбирает любую из звезд, лежащих строго между этими лучами. После этого он опять проводит лучи, выходящие из этой звезды, под теми же углами α1 и α2 к оси OX и выбирает очередную звезду, лежащую строго между новыми лучами. Так он повторяет до тех пор, пока между лучами, выходящими из очередной звезды, есть еще звезды, которые он может выбрать.

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

Ваша задача — найти наибольшее количество звезд m, которое может содержать цепочка, полученная Ежиком.

Обратите внимание, что цепочка обязательно должна начинаться в точке начала координат, которая не учитывается при подсчете количества звезд m в цепочке.

Входные данные

В первой строке дано целое число n (1 ≤ n ≤ 105) — количество звезд. Во второй строке в виде обыкновенных дробей вам даны отношения «a/b c/d», такие что и (0 ≤ a, b, c, d ≤ 105; ; ; ). Заданные числа a, b, c, d — целые.

В следующих n строках даны пары целых чисел xi, yi (1 ≤ xi, yi ≤ 105)— координаты звезд.

Гарантируется, что все звезды имеют различные координаты.

Выходные данные

В единственной строке выведите число m — ответ на задачу.

Примечание

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

C. Текстовый редактор

графы жадные алгоритмы кратчайшие пути поиск в глубину и подобное Структуры данных *1600

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

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

Опишем его вопрос более формально: для набора текста Вася использует текстовый редактор. Он уже написал n строчек, в i-й строке написано ai символов (включая пробелы). Если в некоторой строке записано k символов, то всего в этой строке существует (k + 1) позиция, в которой может находиться курсор: перед каким-то символом или после всех символов (в конце строки). Таким образом, положение курсора задается парой чисел (r, c), где r — номер строки, а c — позиция курсора в ней (позиции нумеруются с единицы от начала строки).

Для перемещения курсора Вася не использует мышь. Он использует клавиши «Вверх», «Вниз», «Вправо» и «Влево». При нажатии на каждую из этих клавиш курсор перемещается следующим образом. Пусть до нажатия соответствующей клавиши курсор находился в позиции (r, c), тогда после нажатия клавиши:

  • «Вверх»: если курсор находился в первой строке (r = 1), то он не перемещается. Иначе он перемещается на предыдущую строку (с номером r - 1) в ту же позицию. При этом, если предыдущая строка короткая, то есть курсор не может находиться в ней в позиции c, то курсор перемещается на последнюю позицию строки с номером r - 1;
  • «Вниз»: если курсор находился в последней строке (r = n), то он не перемещается. Иначе он перемещается на следующую строку (с номером r + 1) в ту же позицию. При этом, если следующая строка короткая, то есть курсор не может находиться в ней в позиции c, то курсор перемещается на последнюю позицию строки с номером r + 1;
  • «Вправо»: если курсор может переместиться вправо в текущей строке (c < ar + 1), то он перемещается вправо (в позицию c + 1). Иначе он находится в конце строки и, при нажатии клавиши «Вправо», никуда не перемещается;
  • «Влево»: если курсор может переместиться влево в текущей строке (c > 1), то он перемещается влево (в позицию c - 1). Иначе он находится в начале строки и, при нажатии клавиши «Влево», никуда не перемещается.

Вам задано количество строк в текстовом файле и количество символов, записанное в каждой строке этого файла. Найдите наименьшее количество нажатий описанных выше клавиш, требуемое для того, чтобы переместить курсор из положения (r1, c1) в положение (r2, c2).

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 100) — количество строк в файле. Во второй строке записано n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 105), разделенных одиночными пробелами. В третьей строке записано четыре целых числа r1, c1, r2, c2 (1 ≤ r1, r2 ≤ n, 1 ≤ c1 ≤ ar1 + 1, 1 ≤ c2 ≤ ar2 + 1).

Выходные данные

Выведите единственное число — наименьшее количество нажатий, требуемое для того, чтобы переместить курсор из положения (r1, c1) в положение (r2, c2).

Примечание

В первом примере в редакторе записаны четыре строки. Обозначим цифрами возможные позиции курсора в строке. Буквой s обозначим начальную позицию курсора, буквой t — конечную. Тогда все возможные положения курсора в текстовом редакторе описываются следующей таблицей.

123

12

123s567

1t345

Один из возможных ответов в данном примере: «Влево», «Вниз», «Влево».

E. Принтер

Бинарный поиск реализация сортировки Структуры данных *2200

Рассмотрим сетевой принтер, который функционирует следующим образом. Он начинает работать в момент времени 0. Каждую секунду он может напечатать одну страницу текста. В некоторые моменты времени на принтер поступают задания на печать. Известно, что на принтер поступило n заданий. Пронумеруем задания последовательными целыми числами от 1 до n. Тогда задание с номером i характеризуется тремя целыми числами: ti — временем поступления задания, si — объемом задания (в страницах) и pi — приоритетом задания. Приоритеты всех заданий различны.

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

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

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 50000). Следующие n строк описывают задания. В i-й из этих строк записаны три целых числа ti, si и pi, разделенные одиночными пробелами (0 ≤ ti ≤ 109, 1 ≤ si, pi ≤ 109). Ровно для одного из заданий (пусть его номер x) вместо приоритета записано число -1. Все приоритеты различны. В последней строке записано целое число T — время завершения печати последней страницы задания с номером x (1 ≤ T ≤ 1015). Числа ti не обязательно различны. Задания записаны во входных данных в произвольном порядке.

Выходные данные

В первой строке выведите целое число px — приоритет задания с номером x (1 ≤ px ≤ 109, помните, что все приоритеты должны быть различны). Далее выведите n целых чисел, в i-ое из которых обозначает время завершения печати последней страницы задания с номером i.

Гарантируется, что хотя бы одно решение существует. Если решений несколько, выведите любое из них.

Примечание

Рассмотрим первый тестовый пример. Пусть неизвестный приоритет равен 4, тогда посекундное описание действий принтера:

  • начало 1-ой секунды (момент времени 0). В очереди задание номер 2. Начинает печататься первая страница этого задания;
  • начало 2-ой секунды (момент времени 1). В очереди задания номер 2 и 3. Начинает печататься первая страница задания номер 3;
  • начало 3-ой секунды (момент времени 2). В очереди задания номер 2 и 3. Начинает печататься вторая страница задания номер 3;
  • начало 4-ой секунды (момент времени 3). В очереди задания номер 2 и 3. Начинает печататься третья (последняя) страница задания номер 3. Таким образом, к концу 4-ой секунды это задание будет напечатано;
  • начало 5-ой секунды (момент времени 4). В очереди задания номер 2 и 1. Начинает печататься первая страница задания номер 1;
  • начало 6-ой секунды (момент времени 5). В очереди задания номер 2 и 1. Начинает печататься вторая страница задания номер 1;
  • начало 7-ой секунды (момент времени 6). В очереди задания номер 2 и 1. Начинает печататься третья (последняя) страница задания номер 1. Таким образом, к концу 7-ой секунды это задание будет напечатано;
  • начало 8-ой секунды (момент времени 7). В очереди задание номер 2. Начинает печататься вторая (последняя) страница задания номер 2. Таким образом, к концу 8-ой секунды это задание будет напечатано.

В итоге, задание номер 1 напечатано к концу 7-ой секунды, как и требовалось. А задания 2 и 3 напечатаны к концу 8-ой и 4-ой секунды соответственно.

E. Счастливые массивы

Структуры данных *2400

Маленький Максим любит интересные задачи. Одной из таких задач он решил поделиться с Вами.

Изначально имеется массив a, состоящий из n нулей. Элементы массива индексируются, начиная с 1. Далее поступают запросы на изменение массива a. Каждый запрос характеризуются двумя целыми числами vi, ti. В ответ на запрос нужно сделать vi-тый элемент массива равным ti (avi = ti; 1 ≤ vi ≤ n).

Максим считает, что некоторые пары целых чисел (x, y) — хорошие, а некоторые — нет. Массив a, состоящий из n целых чисел, Максим считает счастливым, если для всех целых i, (1 ≤ i ≤ n - 1) пара целых чисел (ai, ai + 1) — хорошая. Обратите внимание, что порядок чисел в парах важен, то есть, в частности, (1, 2) ≠ (2, 1).

После каждого запроса на изменение массива a Максим хочет знать, сколько существует способов заменить все нули в массиве a на целые числа от одного до трех так, что полученный массив (без нулей) будет счастливым. Конечно, разные нули можно заменять на разные числа.

Максим сообщил Вам последовательность запросов, а также все пары чисел, которые он считает счастливыми. Помогите Максиму, решите для него эту задачу.

Входные данные

В первой строке заданы целые числа n и m (1 ≤ n, m ≤ 77777) — количество элементов в массиве и количество команд.

В следующих трех строках задана матрица w, состоящая только из нулей и единиц; j-тое число в i-той из этих строк — wi, j. Если wi, j = 1 (1 ≤ i, j ≤ 3), то пара (i, j) — хорошая, иначе — нет. Матрица не обязана быть симметричной относительно главной диагонали.

В следующих m строках заданы пары чисел vi, ti (1 ≤ vi ≤ n, 0 ≤ ti ≤ 3) — запросы на изменение массива.

Выходные данные

Выведите m целых чисел — i-тое число, должно быть равно количеству способов заменить все нули в массиве a (измененного после i-того запроса) на целые числа от одного до трех так, что полученный массив (без нулей) будет счастливым. Числа разделяйте пробельными символами. Так как ответы могут получаться достаточно большими, выводите их остаток от деления на 777777777.

E. Жадный Лифт

реализация Структуры данных *2200

В m-этажном (m > 1) офисе международной корпорации CodeForces установили новейшую систему управления лифтом. Она работает следующим образом.

Все этажи офиса последовательно пронумерованы целыми числами от 1 до m. В момент времени t = 0 лифт находится на первом этаже, лифт пустой и никто не ждет лифта на других этажах. Далее, в моменты времени ti (ti > 0) к лифту подходят люди. Для простоты будем считать, что один человек пользуется лифтом только один раз в рассматриваемый промежуток времени. Для каждого человека известно 3 параметра: момент времени, в который человек подходит к лифту, этаж, на котором человек находится изначально, и этаж, на который он хочет попасть.

Передвижение лифта между этажами происходит следующим образом. В момент времени t (t ≥ 0, t — целое) лифт всегда находится на каком-то этаже. Лифт сначала выпускает всех людей, которые находятся в лифте и хотят попасть на текущий этаж. Затем он впускает всех людей, которые ждут лифта на текущем этаже. Если человек подходит к лифту ровно в момент времени t, то он успевает в него сесть. Можно считать, что все эти действия (посадка и высадка из лифта) совершаются мгновенно. После этого лифт решает, в каком направлении ему переместиться, и в момент времени (t + 1) лифт попадает на выбранный этаж.

Лифт выбирает направление движения по следующему алгоритму.

  • Если лифт пустой, и в текущий момент времени ни на одном этаже никто его не ждет, то лифт остается на текущем этаже.
  • Иначе, пусть лифт находится на этаже номер x (1 ≤ x ≤ m). Тогда лифт вычисляет «приоритеты» направлений pup и pdown: pup — это сумма количества людей, которые ждут лифт на этажах с номерами больше x, и количества людей в лифте, которые хотят попасть на этаж с номером больше x; pdown — это сумма количества людей, которые ждут лифт на этажах с номерами меньше x, и количества людей в лифте, которые хотят попасть на этаж с номером меньше x. Если pup ≥ pdown, то лифт поднимается на один этаж выше текущего (то есть с этажа x на этаж x + 1), иначе лифт опускается на один этаж ниже текущего (то есть с этажа x на этаж x - 1).

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

Входные данные

В первой строке заданы два целых числа, разделенных пробелом: n, m (1 ≤ n ≤ 105, 2 ≤ m ≤ 105) — количество людей и этажей в здании соответственно.

В следующих n строках содержатся по три целых числа, разделенных пробелами: ti, si, fi (1 ≤ ti ≤ 109, 1 ≤ si, fi ≤ m, si ≠ fi) — момент времени, когда i-тый человек начнет ждать лифта, номер этажа, на котором изначально находится i-тый человек, и номер этажа, на который он хочет попасть.

Выходные данные

Выведите n строк. В i-той строке выведите единственное целое число — момент времени, в который i-тый человек попадет на нужный ему этаж. Люди пронумерованы в том порядке, в котором они заданы во входных данных.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом примере лифт действовал следующим образом:

  • t = 1. Лифт находится на этаже номер 1. Лифт пуст. На этаже номер 2 ждет один человек. pup = 1 + 0 = 1, pdown = 0 + 0 = 0, pup ≥ pdown. Значит, лифт перемещается на этаж номер 2.
  • t = 2. Лифт находится на этаже номер 2. В лифт заходит один человек, который хочет попасть на этаж номер 7. pup = 0 + 1 = 1, pdown = 0 + 0 = 0, pup ≥ pdown. Значит, лифт перемещается на этаж номер 3.
  • t = 3. Лифт находится на этаже номер 3. В лифте находится один человек, который хочет попасть на этаж номер 7. На этажах с номерами 4 и 6 лифт ждут два человека. pup = 2 + 1 = 3, pdown = 0 + 0 = 0, pup ≥ pdown. Значит, лифт перемещается на этаж номер 4.
  • t = 4. Лифт находится на этаже номер 4. В лифте находится один человек, который хочет попасть на этаж номер 7. В лифт заходит один человек, который хочет попасть на этаж номер 8. На этаже с номером 6 лифт ждет один человек. pup = 1 + 2 = 3, pdown = 0 + 0 = 0, pup ≥ pdown. Значит, лифт перемещается на этаж номер 5.
  • t = 5. Лифт находится на этаже номер 5. В лифте находятся два человека, которые хотят попасть на этажи с номерами 7 и 8 соответственно. На этаже с номером 6 лифт ждет один человек. pup = 1 + 2 = 3, pdown = 0 + 0 = 0, pup ≥ pdown. Значит, лифт перемещается на этаж номер 6.
  • t = 6. Лифт находится на этаже номер 6. В лифте находятся два человека, которые хотят попасть на этажи с номерами 7 и 8 соответственно. В лифт заходит один человек, который хочет попасть на этаж номер 5. pup = 0 + 2 = 2, pdown = 0 + 1 = 1, pup ≥ pdown. Значит, лифт перемещается на этаж номер 7.
  • t = 7. Лифт находится на этаже номер 7. Из лифта выходит человек, который хотел попасть на этаж номер 7. В лифте находятся два человека, которые хотят попасть на этажи с номерами 8 и 5 соответственно. pup = 0 + 1 = 1, pdown = 0 + 1 = 1, pup ≥ pdown. Значит, лифт перемещается на этаж номер 8.
  • t = 8. Лифт находится на этаже номер 8. Из лифта выходит человек, который хотел попасть на этаж номер 8. В лифте находится один человек, который хочет попасть на этаж номер 5. pup = 0 + 0 = 0, pdown = 0 + 1 = 1, pup < pdown. Значит, лифт перемещается на этаж номер 7.
  • t = 9. Лифт находится на этаже номер 7. В лифте находится один человек, который хочет попасть на этаж номер 5. pup = 0 + 0 = 0, pdown = 0 + 1 = 1, pup < pdown. Значит, лифт перемещается на этаж номер 6.
  • t = 10. Лифт находится на этаже номер 6. В лифте находится один человек, который хочет попасть на этаж номер 5. pup = 0 + 0 = 0, pdown = 0 + 1 = 1, pup < pdown. Значит, лифт перемещается на этаж номер 5.
  • t = 11. Лифт находится на этаже номер 5. Из лифта выходит человек, который хотел попасть на этаж номер 5. Лифт пуст и никто его не ждет, а значит, лифт остается на этаже номер 5.

E. Маленький Слоник и дерево

Деревья поиск в глубину и подобное Структуры данных *2400

Маленький Слоник очень любит деревья, а особенно корневые.

У него есть дерево, состоящее из n вершин (вершины пронумерованы от 1 до n), с корнем в вершине с номером 1. В каждой вершине дерева хранится некоторый список чисел, который изначально пуст.

Маленький Слоник хочет выполнить m операций. На i-той операции (1 ≤ i ≤ m) он сначала добавляет число i в списки всех вершин поддерева с корнем в вершине с номером ai, а потом добавляет число i в списки всех вершин поддерева с корнем в вершине bi.

После выполнения всех операций, Маленький Слоник для каждой вершины i хочет посчитать число ci — количество целых чисел j (1 ≤ j ≤ nj ≠ i) таких, что в списках i-той и j-той вершины есть хотя бы одно общее число.

Помогите Маленькому Слонику, посчитайте числа ci за него.

Входные данные

В первой строке заданы два целых числа n и m (1 ≤ n, m ≤ 105) — количество вершин дерева и количество операций.

Каждая из следующих n - 1 строк содержит два целых числа, разделенных пробелом, ui и vi (1 ≤ ui, vi ≤ n, ui ≠ vi), которые обозначают, что существует ребро между вершинами с номерами ui и vi.

Каждая из следующих m строк содержит два целых числа, разделенных пробелом, ai и bi (1 ≤ ai, bi ≤ n, ai ≠ bi), которые обозначают номера вершин в i-той операции.

Гарантируется, что заданный граф являет неориентированным деревом.

Выходные данные

В единственной строке выведите n целых чисел через пробел — c1, c2, ..., cn.

E. Разделение королевства

Бинарный поиск Перебор Структуры данных *2500

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

Правит Флатландией Король Круг IV. У Круга IV есть 9 сыновей. Каждому из своих сыновей Круг хочет отдать во владение часть Флатландии. Для этого он хочет провести четыре различные прямые, так, что две из них параллельны оси Ox, а другие две параллельны оси Oy. При этом ни одна прямая не должна проходить через какой-либо город. Таким образом Флатландия будет разделена на 9 частей, а каждому сыну будет отдана ровно одна из этих частей. Немного подумав и оценив послушность сыновей, Круг IV решил, что i-тому сыну должна достаться часть Флатландии, на которой находится ровно ai городов.

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

Входные данные

В первой строке находится целое число n (9 ≤ n ≤ 105) — количество городов во Флатландии. В следующих n строках находятся по два целых числа, разделенных пробелом: xi, yi ( - 109 ≤ xi, yi ≤ 109) — координаты i-того города. Никакие два города не находятся в одной точке. В последней строке находится девять чисел, разделенных пробелами: .

Выходные данные

Если решения не существует, то выведите единственное целое число -1.

Иначе, в первой строке выведите два различных вещественных числа, разделенных пробелом: x1, x2 — абсциссы прямых, параллельных оси Oy, а во второй строке выведите два различных вещественных числа, разделенных пробелом: y1, y2 — ординаты прямых, параллельных оси Ox. Если решений несколько выведите любое.

При проверке ответа, считается, что город лежит на прямой, если расстояние от города до прямой не превышает 10 - 6. Две прямые считаются одинаковыми, если расстояние между ними не превышает 10 - 6.

Примечание

Решение для первого теста показано ниже:

Решение для второго теста показано ниже:

Для третьего теста решения не существует.

E. Ромб

дп Перебор Структуры данных *2500

Вам дана таблица размера n × m. На пересечении i-ой строки (1 ≤ i ≤ n) и j-ого столбца (1 ≤ j ≤ m) стоит целое неотрицательное число ai, j. Кроме того, Вам дано целое неотрицательное число k.

Вам необходимо найти такую пару целых чисел (a, b), которая удовлетворяет условиям:

  • k ≤ a ≤ n - k + 1;
  • k ≤ b ≤ m - k + 1;
  • обозначим максимум функции среди всех целых x и y, которые удовлетворяют неравенствам k ≤ x ≤ n - k + 1 и k ≤ y ≤ m - k + 1, через mval; для искомой пары чисел должно выполняться равенство f(a, b) = mval.
Входные данные

В первой строке даны три разделенных пробелами целых числа n, m и k (1 ≤ n, m ≤ 1000, ). Далее в n строках находятся по m целых чисел: j-ое число в i-ой строке равно ai, j (0 ≤ ai, j ≤ 106).

Числа в строках разделяются пробелами.

Выходные данные

Выведите искомую пару целых чисел a и b. Числа разделяйте пробелом.

Если существует несколько правильных ответов, разрешается вывести любой из них.

A. Спастись от камней

Конструктив реализация Структуры данных *1200

Жила-была себе мирно в лесу Белка Лисска, но беды приходят неожиданно. С горы падают камни. Изначально Белка Лисска находится на интервале [0, 1]. Потом упадут n камней, а Лисска будет убегать от камней. Камни последовательно пронумерованы от 1 до n в порядке их падения.

Камни всегда падают точно в центр интервала Лисски. Когда Лисска занимает интервал [k - d, k + d] и камень падает в точку k, белочка бежит налево или направо. Если она убежит налево, ее новый интервал будет [k - d, k]. Если побежит направо, ее новый интервал будет [k, k + d].

Вам дана строка s длины n. В строке s i-ый символ — это либо «l», либо «r», то есть, когда падает i-ый камень, Лиска побежит налево или направо, соответственно. Найдите последовательность номеров камней слева направо после того, как упадут все n камней.

Входные данные

Во входных данных содержится единственная строка. Единственная строка содержит строку s (1 ≤ |s| ≤ 106). Каждый символ в s будет либо «l», либо «r».

Выходные данные

Выведите n строк — в i-ой строке надо вывести номер i-го слева камня.

Примечание

В первом примере расположения камней 1, 2, 3, 4, 5 будут , соответственно. Поэтому надо вывести последовательность: 3, 5, 4, 2, 1.

E. Деревья у дороги

дп Структуры данных *3000

Белка Лисска любит орехи. Лисска просит вас посадить ореховые деревья.

Есть n мест (пронумерованных от 1 до n с запада на восток), где можно посадить дерево вдоль улицы. Деревья вырастают на один метр за месяц. В начале каждого месяца вы должны обрабатывать один запрос. Запрос может быть одного из следующих двух типов:

  1. Посадить дерево высотой h в месте с номером p.
  2. Срубить x-ое существующее (не срубленное) дерево с запада (где x в 1-индексации). Когда мы срубаем дерево, оно падает вниз и занимает все доступное пространство на месте, где оно стояло. Таким образом, ни одно дерево в этом месте больше посадить нельзя.

После обработки каждого запроса, вы должны вывести длину самой длинной возрастающей подпоследовательности. Подмножество существующих деревьев называется возрастающей подпоследовательностью, если высоты деревьев в нем строго возрастают с запада на восток (например, самое западное дерево в наборе должно иметь самую маленькую высоту). Длина возрастающей подпоследовательности — это количество деревьев в ней.

Обратите внимание, что Лисске не нравятся деревья одинаковой высоты, поэтому гарантируется, что в любой момент времени нет двух деревьев одинаковой высоты.

Входные данные

В первой строке записаны два целых числа: n и m (1  ≤ n ≤ 105; 1 ≤ m ≤ 2·105) — количество мест для деревьев и количество запросов.

В следующих m строках записана информация о запросах в следующем формате:

  • Если тип i-ого запроса — 1, то i-ая строка содержит три целых числа: 1, pi, и hi (1 ≤ pi ≤ n, 1 ≤ hi ≤ 10), где pi — место нового дерева, а hi — изначальная высота нового дерева.
  • Если тип i-ого запроса — 2, то i-ая строка содержит два целых числа: 2 и xi (1 ≤ xi ≤ 10), где xi — это номер дерева, которое мы хотим срубить.

Гарантируется, что входные данные корректны, то есть:

  • Для запросов 1 типа pi будут попарно различны.
  • Для запросов 2 типа xi не будут превышать текущего количества деревьев.
  • В любой момент времени никакие два дерева не имеют одинаковые высоты.

В каждой строке целые числа разделены одиночными пробелами.

Выходные данные

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

Примечание

Вы можете видеть состояние улицы после каждого запроса на следующей анимации:

Если Ваш браузер не поддерживает анимацию png, посмотрите версию в gif здесь: http://212.193.37.254/codeforces/images/162/roadtree.gif

E. Опять запросы к массиву...

математика Структуры данных *2500

Дан массив, состоящий из n целых чисел: a1, a2, ..., an. Вам необходимо быстро выполнять запросы двух типов:

  1. Присвоить всем элементам от l до r включительно значение x. После такого запроса значения элементов массива al, al + 1, ..., ar становятся равны x.
  2. Посчитать и вывести сумму , где k не превосходит 5. Так как значение суммы может оказаться достаточно большим, нужно выводить остаток от его деления на 1000000007 (109 + 7).
Входные данные

В первой строке записано два целых числа n и m (1 ≤ n, m ≤ 105) — количество чисел в массиве и количество запросов соответственно. Во второй строке записано n целых чисел: a1, a2, ..., an (0 ≤ ai ≤ 109) — начальные значения элементов массива.

Далее следует m запросов, по одному в каждой строке:

  1. Запрос на присвоение имеет следующий формат: «», (1 ≤ l ≤ r ≤ n; 0 ≤ x ≤ 109).
  2. Запрос на подсчет суммы имеет следующий формат: «», (1 ≤ l ≤ r ≤ n; 0 ≤ k ≤ 5).

Все числа во входных данных целые.

Выходные данные

В ответ на каждый запрос на подсчет суммы выведите одно целое число — требуемую сумму по модулю 1000000007 (109 + 7).

D. Максимальный водопад

графы дп сортировки Структуры данных *2600

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

Стена имеет высоту t. К ней прикреплены n панелей. Каждая панель представляет собой горизонтальный отрезок на высоте hi, который начинается с li и заканчивается в ri. Панель номер i соединяет точки стены (li, hi) и (ri, hi). Верхняя часть стены считается панелью, соединяющей точки (  -  109,  t) и (109,  t). Аналогично, нижняя часть стены соединяет точки (  -  109,  0) и (109,  0). Никакие две панели не имеют общую точку.

Эмускальд знает, что для того, чтобы водопад выглядел эффектно, он может течь с панели i на панель j (), только если выполнены следующие условия:

  1. max(li, lj) < min(ri, rj) (горизонтальные проекции панелей перекрываются);
  2. hj < hi (панель j ниже панели i);
  3. нет такой панели k (hj < hk < hi), что первые два условия выполняются для пар панелей (i, k) и (k, j).

Тогда поток по равняется min(ri, rj) - max(li, lj), длине пересечения их горизонтальных проекций.

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

  1. водопад состоит из одного пути панелей ;
  2. поток водопада равняется минимальному потоку на пути .

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

Помогите Эмускальду поддержать свою репутацию и найдите значение максимально возможного потока воды в некотором водопаде.

Входные данные

Первая строка входных данных состоит из двух целых чисел n и t (1 ≤ n ≤ 105, 2 ≤ t ≤ 109), записанных через пробел — количество панелей, не считая верхнюю и нижнюю панели, и высота стены. Каждая из последующих n строк содержит по три целых числа через пробел hi, li и ri (0 < hi < t,  - 109 ≤ li < ri ≤ 109) — высота, левый и правый концы отрезка i-ой панели.

Гарантируется, что никакие две панели не имеют общих точек.

Выходные данные

Выведите единственное целое число — максимально возможную величину потока воды в искомом водопаде.

Примечание

Первый тест соответствует картинке.

B. Обсуждения

жадные алгоритмы реализация Структуры данных *1400

Эмускальд подсел на Codeforces — теперь он постоянно обновляет главную страницу, чтобы не пропустить никаких изменений в списке прямого эфира. Ему нравится читать обсуждения (треды), каждое обсуждение состоит из нескольких сообщений.

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

Эмускальд дочитал все свои открытые обсуждения. Теперь он обновляет главную страницу, надеясь найти еще немного новых сообщений. Обновив станицу, Эмускальд заметил, что новые обсуждения не появились в списке, а на i-м месте в списке стоит обсуждение, которое занимало ai-ое место до обновления. Эмускальд не хочет терять времени на перечитывание старых сообщений, поэтому он хочет открыть только обсуждения с новыми сообщениями.

Помогите Эмускальду узнать количество обсуждений, которые наверняка содержат новые сообщения. Обсуждение x наверняка содержит новое сообщение, если не существует такой последовательности публикаций новых сообщений, для которой выполняются оба следующих условия:

  1. обсуждение x не обновлено (в нем не опубликовано новое сообщение);
  2. порядок 1, 2, ..., n обсуждений в списке меняется на a1, a2, ..., an.
Входные данные

Первая строка входных данных содержит целое число n, количество обсуждений (1 ≤ n ≤ 105). В следующей строке записан список из n целых чисел a1, a2, ..., an через пробел, где ai (1 ≤ ai ≤ n) — это старое положение i-ого обсуждения в новом списке. Гарантируется, что все ai различны.

Выходные данные

Выведите единственное целое число — количество обсуждений, которые наверняка содержат новое сообщение.

Примечание

В первом тесте обсуждения 2 и 5 поставлены перед обсуждением 1, значит, в этих обсуждениях должны быть новые сообщения. Обсуждения 1, 3 и 4 могут не содержать новых сообщений, если новые сообщения есть только в обсуждениях 2 и 5.

Во втором тесте может вообще не быть новых сообщений, потому что порядок обсуждений не изменился.

В третьем тесте только в обсуждении a4 может не быть новых сообщений.

D. Хорошие подстрочки

Строки Структуры данных *1800

Вам дана строка s, состоящая из строчных латинских букв. Некоторые из латинских букв являются хорошими, остальные — плохими.

Подстрокой s[l...r] (1 ≤ l ≤ r ≤ |s|) строки s  =  s1s2...s|s| (где |s| — длина строки s) называется строка slsl + 1...sr.

Подстроку s[l...r] назовем хорошей, если среди букв sl, sl + 1, ..., sr не более k являются плохими (смотрите пояснения к примерам для лучшего понимания).

Ваша задача — найти количество различных хороших подстрок данной строки s. Две подстроки s[x...y] и s[p...q] различны, если различно их содержимое, то есть s[x...y] ≠ s[p...q].

Входные данные

Первая строка входных данных — это непустая строка s, состоящая из строчных латинских букв, длиной не более 1500 символов.

Вторая строка входных данных — это строка из символов «0» и «1» длиной ровно 26 символов. Если i-ый символ этой строки равен «1», то i-ая буква латинского алфавита является хорошей, иначе — плохой. То есть первый символ этой строки соответствует букве «a», второй — букве «b» и так далее.

В третьей строке входных данных записано единственное целое число k (0 ≤ k ≤ |s|) — максимальное допустимое количество плохих символов в хорошей подстроке.

Выходные данные

Выведите единственное целое число — количество различных хороших подстрок строки s.

Примечание

В первом примере хорошими подстроками являются: «a», «ab», «b», «ba», «bab».

Во втором примере хорошими подстроками являются: «a», «aa», «ac», «b», «ba», «c», «ca», «cb».

C. Дима и лесенка

реализация Структуры данных *1500

У Димы есть лесенка, которая состоит из n ступенек. Первая ступенька имеет высоту a1, вторая — a2, последняя — an (1 ≤ a1 ≤ a2 ≤ ... ≤ an).

Дима решил поиграться с лесенкой, поэтому он бросает сверху на лесенку прямоугольные коробки: i-тая коробка имеет ширину wi и высоту hi. Каждую коробку Дима бросает вертикально вниз на первые wi ступенек лесенки, то есть коробка покрывает ступеньки с номерами 1, 2, ..., wi. Каждая брошенная коробка летит вертикально вниз, до тех пор пока не случится хотя бы одно их двух следующих событий:

  • низ коробки коснется верха одной из ступенек;
  • низ коробки коснется верха одной из уже брошенных коробок.

Учитывается только касание горизонтальных сторон ступенек и коробок, при этом касание углами не учитывается. В частности из этого следует, что коробка шириной wi не может коснуться ступеньки с номером wi + 1.

Вам задано описание лесенки и последовательность, в которой Дима кидал коробки на нее. Для каждой коробки определите, на какой высоте окажется низ этой коробки после приземления. Считайте, что очередная коробка бросается уже после приземления предыдущей.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество ступенек у лесенки. Во второй строке задана неубывающая последовательность, состоящая из n целых чисел, a1, a2, ..., an (1 ≤ ai ≤ 109ai ≤ ai + 1).

В следующей строке задано целое число m (1 ≤ m ≤ 105) — количество коробок. В каждой из следующих m строк записана пара целых чисел wi, hi (1 ≤ wi ≤ n; 1 ≤ hi ≤ 109) — размер i-той брошенной коробки.

Числа в строках разделяются пробелами.

Выходные данные

Выведите m целых чисел — для каждой коробки высоту, на которой окажется низ этой коробки после приземления. Ответы для коробок выводите в порядке, в котором коробки заданы во входных данных.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на C++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

На картинке изображен первый тестовый пример.

E. Зеркальная комната

реализация Структуры данных *3000

Представьте таблицу размера n × m, где некоторые ячейки заблокированы. У ячейки в верхнем левом углу координаты — (1, 1), а у ячейки в правом нижнем углу — (n, m). Всего в таблице существуют k заблокированных ячеек, остальные ячейки — пустые. Вы пускаете луч лазера из центра пустой ячейки (xs, ys) в одном из диагональных направлений (то есть северо-восток, северо-запад, юго-запад или юго-восток). Если луч попадает в заблокированную ячейку или на границу таблицы, то он отражается. Поведение отражения луча в разных ситуациях показано на рисунке ниже.

Заметим, что через некоторое время луч попадает в бесконечный цикл. Посчитайте количество пустых ячеек, через которые луч проходит хотя бы однажды. Считается, что луч проходит через ячейку, если он проходит через ее центр.

Входные данные

Первая строка входных данных содержит три целых числа n, m и k (1 ≤ n, m ≤ 105, 0 ≤ k ≤ 105). Каждая из следующих k строк содержит два целых числа xi и yi (1 ≤ xi ≤ n, 1 ≤ yi ≤ m), числа обозначают положение i-ой заблокированной ячейки.

Последняя строка содержит два целых числа xs, ys (1 ≤ xs ≤ n, 1 ≤ ys ≤ m) и направление луча, равное «NE», «NW», «SE» или «SW». Эти строки соответствуют направлениям ( - 1, 1), ( - 1,  - 1), (1, 1), (1,  - 1).

Гарантируется, что никакие две блокируемые ячейки не имеют одинаковых координат.

Выходные данные

В единственной строке выходных данных выведите количество пустых ячеек, через которые луч проходит хотя бы раз.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

C. Девочка и максимальная сумма

жадные алгоритмы реализация сортировки Структуры данных *1500

Девочка очень любит задачи про запросы на массиве.

Однажды ей попалась довольно известная задача: дан массив из \(n\) элементов (элементы массива проиндексированы от 1); также есть \(q\) запросов, каждый из которых задается парой целых чисел \(l_i\), \(r_i\) \((1 \le l_i \le r_i \le n)\). Для каждого запроса необходимо найти сумму всех элементов массива с индексами от \(l_i\) до \(r_i\) включительно.

Такая задача показалась Девочке довольно скучной. Она решила, что перед тем, как отвечать на запросы, она перемешает элементы массива, причем так, чтобы сумма ответов на все запросы была максимально возможной. Ваша задача — найти значение этой максимальной суммы.

Входные данные

Первая строка содержит два целых числа \(n\) (\(1 \le n \le 2\cdot10^5\)) и \(q\) (\(1 \le q \le 2\cdot10^5\)), разделенных пробелом — количество элементов в массиве и количество запросов, соответственно.

Следующая строка содержит \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 2\cdot10^5\)), разделенных пробелами — элементы массива.

Каждая из следующих \(q\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)), разделенных пробелом — \(i\)-й запрос.

Выходные данные

В единственной строке выведите целое число — максимальную сумму ответов на запросы после перемешивания элементов массива.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

E. Девочка и задача про дерево

графы Деревья Структуры данных *2100

Девочка очень любит задачи про деревья. Вот одна из них.

Дерево — это неориентированный связный граф без циклов. Степень вершины x в дереве — это количество вершин y дерева таких, что каждая из них связана с вершиной x каким-то ребром дерева.

Рассмотрим дерево, состоящее из n вершин. Будем считать, что вершины этого дерева пронумерованы от 1 до n. Рассматриваемое дерево обладает следующим свойством: каждая вершина, кроме вершины с номером 1, имеет степень не более 2.

Изначально в каждой вершине дерева записано число 0. Ваша задача — быстро выполнять запросы двух типов:

  • Запрос вида: 0 v x d. В ответ на запрос нужно добавить x ко всем числам, записанным в вершинах, которые находятся на расстоянии не более чем d от вершины с номером v. Расстоянием между двумя вершинами будем считать количество ребер на кратчайшем пути между ними.
  • Запрос вида: 1 v. В ответ на запрос нужно вывести текущее число, записанное в вершине с номером v.
Входные данные

В первой строке заданы числа n (2 ≤ n ≤ 105) и q (1 ≤ q ≤ 105) — количество вершин дерева и количество запросов, соответственно.

Каждая из следующих n  -  1 строк содержит два целых числа ui и vi (1 ≤ ui, vi ≤ n, ui ≠ vi), которые обозначают, что существует ребро между вершинами с номерами ui и vi. Описание каждого ребра встречается во входных данных ровно один раз. Гарантируется, что заданный граф — дерево, обладающее свойством, которое описано в условии.

Следующие q строк описывают запросы.

  • Запрос на добавление имеет следующий формат: 0 v x d (1 ≤ v ≤ n, 1 ≤ x ≤ 104, 1 ≤ d < n).
  • Запрос на вывод значения, записанного в вершине, имеет следующий формат: 1 v (1 ≤ v ≤ n).

Числа в строках разделяются одиночными пробелами.

Выходные данные

Для каждого запроса на вывод значения, записанного в вершине, выведите целое число — ответ на запрос.

D. Не бойтесь, ДравДэ добрый

Бинарный поиск дп Структуры данных хэши *2400

Колонна из n грузовиков, направляющаяся из города «Z» в город «З» подошла к туннелю, известному, как туннель Ужаса. Страшные слухи ходили среди водителей грузовиков о монстре ДравДэ, который охотится в этом туннеле. Некоторые водители боялись ехать первыми, некоторые последними, но рассмотрим более общий случай. Каждый грузовик характеризуется четырьмя числами:

  • v — ценность этого грузовика, его пассажиров и груза
  • c — количество пассажиров в грузовике, считая водителя
  • l — суммарное количество человек, которое должно ехать впереди этого грузовика, чтобы водитель смог побороть страх («если монстр появится спереди, то он съест сначала их»)
  • r — суммарное количество человек, которое должно ехать позади этого грузовика, чтобы водитель смог побороть страх («если монстр появится сзади, то он съест сначала их»).

Так как дорога узкая, то от появления ДравДэ сбоку никак не спастись. Более того, нельзя даже перестроить колонну. Относительный порядок машин изменить невозможно, но можно любую машину убрать из колонны, оставив её перед туннелем на неопределенный срок. Ваша задача, как начальника колонны, состоит в том, чтобы убрать некоторые грузовики так, чтобы оставшаяся колонна могла ехать и сумма ценностей проехавших грузовиков была максимальна.

Входные данные

В первой строке входного файла задано целое число n (1 ≤ n ≤ 105) — количество грузовиков в колонне. В следующих n строках содержится по четыре числа. Числа в i-той строке: vi, ci, li, ri (1 ≤ vi ≤ 104, 1 ≤ ci ≤ 105, 0 ≤ li, ri ≤ 105) — описывают i-й грузовик. Грузовики нумеруются с 1, считая от головы колонны.

Выходные данные

В первой строке выведите число k — количество грузовиков, которые проедут через туннель. Во второй строке выведите k чисел — номера этих грузовиков в порядке возрастания. Не забудьте, что относительный порядок грузовиков менять нельзя. Если решений несколько, выведите любое.

B. Байк и максимальный XOR

реализация Структуры данных *1800

Байк очень любит искать второй максимальный элемент в последовательности. Вторым максимальным элементом в последовательности различных чисел x1, x2, ..., xk (k > 1) называется такой максимальный элемент xj, что выполняется неравенство: .

Счастливым числом последовательности различных целых положительных чисел x1, x2, ..., xk (k > 1) называется число, равное побитовому исключающему ИЛИ максимального элемента последовательности и второго максимального элемента последовательности.

Вам задана последовательность различных целых положительных чисел s1, s2, ..., sn (n > 1). Обозначим за s[l..r] (1 ≤ l < r ≤ n) последовательность sl, sl + 1, ..., sr. Ваша задача — среди всех счастливых чисел последовательностей s[l..r] найти максимальное.

Обратите внимание, что, так как все числа в последовательности s различны, все заданные определения имеют смысл.

Входные данные

В первой строке записано целое число n (1 < n ≤ 105). В следующей строке записаны n различных целых чисел s1, s2, ..., sn (1 ≤ si ≤ 109).

Выходные данные

Выведите единственное целое число — максимальное счастливое число среди всех счастливых чисел последовательностей s[l..r].

Примечание

В первом тестовом примере Вы можете выбрать s[4..5] = {4, 3}, счастливое число равно (4 xor 3)  =  7. Также можно выбрать s[1..2].

Во втором тестовом примере Вы должны выбрать s[2..5] = {8, 3, 5, 7}.

D. Максимальная сумма k подотрезков

графы Потоки реализация Структуры данных *2800

Рассмотрим последовательность целых чисел a1, a2, ..., an. Вам требуется выполнять запросы двух типов:

  • Формат запроса «0 i val». В ответ на запрос нужно выполнить присвоение: ai = val.
  • Формат запроса «1 l r k». В ответ на запрос нужно вывести максимальную сумму не более чем k непересекающихся подотрезков последовательности al, al + 1, ..., ar. Формально, вам нужно выбрать не более чем k пар целых чисел (x1, y1), (x2, y2), ..., (xt, yt) (l ≤ x1 ≤ y1 < x2 ≤ y2 < ... < xt ≤ yt ≤ rt ≤ k) таких, чтобы сумма ax1 + ax1 + 1 + ... + ay1 + ax2 + ax2 + 1 + ... + ay2 + ... + axt + axt + 1 + ... + ayt была как можно больше. Обратите внимание, что требуется выбрать не более чем k подотрезков. В частности, можно выбрать 0 подотрезков. В таком случае описанная сумма считается равной нулю.
Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество чисел в последовательности. В следующей строке записаны n целых чисел a1, a2, ..., an (|ai| ≤ 500).

В третьей строке записано целое число m (1 ≤ m ≤ 105) — количество запросов. В следующих m строках записаны запросы в формате, описанном в условии.

Для всех запросов на изменение элемента выполняются ограничения: 1 ≤ i ≤ n, |val| ≤ 500.

Для всех запросов на подсчет максимальной суммы не более чем k непересекающихся подотрезков выполняются ограничения: 1 ≤ l ≤ r ≤ n, 1 ≤ k ≤ 20. Гарантируется, что количество запросов на подсчет максимальной суммы не более чем k непересекающихся подотрезков не превышает 10000.

Выходные данные

Для каждого запроса на подсчет максимальной суммы не более чем k непересекающихся подотрезков выведите ответ — максимальную сумму. Ответы на запросы выводите в порядке следования запросов во входных данных.

Примечание

В первом запросе первого примера можно выбрать единственную пару (1, 9). Таким образом, описанная сумма будет равна 17.

Взгляните на второй запрос первого примера. Как выбрать два подотрезка? (1, 3) и (7, 9)? Нет, конечно: сумма (1, 3) и (7, 9) равняется 20, в то время как при оптимальном выборе (1, 7) и (9, 9) сумма равняется 25.

Ответ на третий запрос равняется 0, мы предпочитаем ничего не выбирать, если на данном интервале все числа отрицательные.

E. Трансформация последовательности

дп математика Перебор реализация Структуры данных *3000

Вам задана неубывающая последовательность x1, x2, ..., xn (1 ≤ x1 ≤ x2 ≤ ... ≤ xn ≤ q). Также Вам заданы два целых числа a и b (a ≤ ba·(n - 1) < q).

Ваша задача преобразовать последовательность x1, x2, ..., xn в некоторую последовательность y1, y2, ..., yn (1 ≤ yi ≤ qa ≤ yi + 1 - yi ≤ b). Определим стоимость преобразования как сумму: . Требуется выбрать такую последовательность y, что описанная стоимость преобразования минимальна.

Входные данные

В первой строке заданы четыре целых числа n, q, a, b (2 ≤ n ≤ 6000; 1 ≤ q, a, b ≤ 109a·(n - 1) < qa ≤ b).

Во второй строке задана неубывающая последовательность целых чисел x1, x2, ..., xn (1 ≤ x1 ≤ x2 ≤ ... ≤ xn ≤ q).

Выходные данные

В первой строке выведите n вещественных чисел — искомую последовательность y1, y2, ..., yn (1 ≤ yi ≤ qa ≤ yi + 1 - yi ≤ b). Во второй строке выведите минимальную стоимость преобразования, то есть .

Если существует несколько оптимальных ответов, можно вывести любой из них.

Ответ будет считаться правильным, если относительная или абсолютная погрешность не будет превышать 10 - 6.

E. Максимизация Сосиски

битмаски Деревья Структуры данных *2200

Необъяснимый народ эти битландцы. У них свои проблемы и свои решения. Свои мысли и свои убеждения, свои ценности и свои идеалы. Свои тарелки и свои сосиски!

В Битландии сосиска — это массив целых чисел! Аппетитность сосиски равна побитовому исключающему ИЛИ (операция xor) всех элементов сосиски.

Как-то раз, когда Mr. Bitkoch (местный повар) уже закрывал свой ресторан BitRestaurant, BitHaval и BitAryo (самые известные жители Битландии) зашли в ресторан и заказали по сосиске.

У Mr. Bitkoch осталась ровно одна сосиска. Поэтому он решил отрезать начало сосиски (сколько-то, возможно ноль, первых чисел массива) и отдать его BitHaval-у, BitAryo же достанется некоторый конец сосиски (сколько-то, возможно ноль, последних чисел массива). Обратите внимание, что оба куска сосиски одновременно или по отдельности могут быть пустыми. Конечно, отрезанные куски не должны пересекаться (никакой элемент массива не может содержаться в обоих кусках).

Удовольствие, которое получат BitHaval и BitAryo от ужина, равно побитовому исключающему ИЛИ аппетитностей их сосисок. Аппетитность пустой сосиски равна нулю.

Найдите способ отрезать BitHaval-у и BitAryo по куску сосиски, чтобы максимизировать их удовольствие от ужина.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105).

В следующей строке записано n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 1012) — сосиска, которая осталась у Mr. Bitkoch.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите единственное целое число — максимальное удовольствие, которое могут получить BitHaval и BitAryo от ужина.

A. Коровки и последовательность

Конструктив реализация Структуры данных *1600

Бесси с коровками играют с последовательностями, и им нужна Ваша помощь. Игра начинается с последовательности, изначально содержащей только одно число 0, во время игры коровки выполняют n операций. Операции бывают следующих типов:

  1. Прибавить целое число xi к каждому из ai первых элементов последовательности.
  2. Добавить целое число ki к концу последовательности (размер последовательности увеличивается на 1).
  3. Удалить последний элемент последовательности. Таким образом, размер последовательности уменьшается на один. Обратите внимание, что эту операцию можно выполнить, только если в последовательности есть по меньшей мере два элемента.

После каждой операции коровкам интересно знать среднее арифметическое всех чисел в последовательности. Помогите им!

Входные данные

Первая строка содержит единственное целое число n (1 ≤ n ≤ 2·105) — количество операций. Следующие n строк описывают операции. Каждая строка начинается с целого числа ti (1 ≤ ti ≤ 3), обозначающего тип операции (см. выше). Если ti = 1, то за ним последуют два целых числа ai, xi (|xi| ≤ 103; 1 ≤ ai). Если ti = 2, то за ним последует единственное целое число ki (|ki| ≤ 103). Если ti = 3, то за ним ничего не последует.

Гарантируется, что все операции корректны (не затрагивают несуществующих элементов) и что в последовательности всегда будет хотя бы одно целое число.

Выходные данные

Выведите n строк, в каждой должно содержаться среднее арифметическое всех чисел в последовательности после выполнения соответствующей операции.

Ответ считается корректным, если абсолютная или относительная погрешность не превышает 10 - 6.

Примечание

Во втором примере последовательность преобразуется следующим образом:

E. Коровки играют в теннис

Комбинаторика математика Структуры данных *2800

Фермер Джон устраивает турнир по теннису среди своих n коровок. У каждой коровки есть умение si, и никакие две коровки не обладают одинаковым умением. На протяжении турнира, каждая коровка играет с каждой другой коровкой ровно один раз, в таком поединке коровка с большим умением побеждает коровку с меньшим умением.

Однако Фермер Джон беспокоится, что турнир уничтожит самооценку самых слабых коровок, которые проиграют большую часть своих матчей... И вот он решил немного поменять результаты. Ровно k раз он возьмет два целых числа ai, bi (ai < bi) и поменяет все результаты матчей коровок с умениями от ai до bi, включительно. Таким образом, для каждой пары x, y он поменяет результат матча между коровками x и y (то есть, если матч выиграла x, то после изменения будет считаться, что победила y и наоборот). Возможно, Фермер Джон поменяет результат какого-то одного матча несколько раз. Обратите внимание, что ai и bi могут быть не равны умению той или иной коровки.

Фермер Джон хочет вычислить, насколько сбалансированными будут результаты турнира. Для этого он хочет посчитать количество троек коровок (p, q, r), для которых в итоге будет считаться, что коровка p выиграла у коровки q, коровка q выиграла у коровки r, а коровка r выиграла у коровки p. Помоги ему вычислить это количество.

Обратите внимание, что две тройки считаются различными тогда, когда они не содержат одинаковый набор коровок (то есть, некоторая коровка есть в одной тройке и отсутствует в другой).

Входные данные

В первой строке содержатся два целых числа через пробел, n и k (3 ≤ n ≤ 105; 0 ≤ k ≤ 105). В следующей строке содержатся n различных целых чисел, s1, s2, ..., sn (1 ≤ si ≤ 109), числа обозначают умения коровок. В каждой из следующих k строк находятся два целых числа через пробел, ai и bi (1 ≤ ai < bi ≤ 109) — изменения, которые фермер Джон внес в результаты в порядке применения изменений.

Выходные данные

Выведите единственное целое число — количество троек коровок (p, q, r), для которых в итоге будет считаться, что коровка p выиграла у коровки q, коровка q выиграла у коровки r, а коровка r выиграла у коровки p.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом примере (коровка 3 > коровка 1), (коровка 3 > коровка 2), а (коровка 2 > коровка 1). Однако фермер подменит результаты матчей между коровками номер 1 и 2 и коровками номер 2 и 3, так что теперь результаты показывают, что (коровка 1 > коровка 2), (коровка 2 > коровка 3), а (коровка 3 > коровка 1). Таким образом, коровки номер 1, 2, и 3 формируют сбалансированный треугольник.

D. Туристы

сортировки Структуры данных *2600

Двойная туристическая тропа, расположенная в одном из парков города Крайняя Туле, работает по следующему принципу:

  • Вводится декартова система координат.
  • В некоторые моменты времени из точек ( - 1, 0) и (1, 0) одновременно выходят два туриста. Первый — из точки ( - 1, 0), второй — из точки (1, 0).
  • Оба туриста в паре движутся с одинаковой скоростью 1 (единица длины в секунду), первый — вдоль прямой x =  - 1, второй — вдоль прямой x = 1, оба — в положительном направлении оси Oy.
  • В некоторые моменты времени появляются перегородки. Перегородка (li, ri) — это отрезок между точками (0, li) и (0, ri). Каждая перегородка появляется мгновенно.

Правительство Крайней Туле хочет узнать для каждой пары туристов, выходящих одновременно, сколько времени (в секундах) они не будут видеть друг друга. Два туриста не видят друг друга, если отрезок, соединяющий их положения на плоскости, пересекает хотя бы одну перегородку. Два отрезка пересекаются, если они имеют хотя бы одну общую точку. Считается, что концы отрезков принадлежат отрезкам.

Помогите правительству, посчитайте требуемые времена. Обратите внимание, что перегородки могут пересекаться (любым способом), накладываться или совпадать.

Входные данные

В первой строке записаны через пробел два целых числа n и m (1 ≤ n, m ≤ 105) — количество пар туристов и количество возводимых перегородок. В следующих m строках располагается по три целых числа li, ri и ti, разделенные пробелом (0 ≤ li < ri ≤ 109, 0 ≤ ti ≤ 109) — границы перегородки и время ее появления. В последней строке записаны через пробел в строго возрастающем порядке n различных целых чисел q1, q2, ..., qn (0 ≤ qi ≤ 109) — времена выхода пар туристов.

Все времена заданы в секундах.

Выходные данные

Для каждой пары выведите в отдельной строке единственное целое число — время в секундах, в течение которого туристы из соответствующей пары не будут видеть друг друга. Выводите эти числа в том же порядке, в каком пары заданы во входных данных.

C. Почтовые штампы

графы поиск в глубину и подобное реализация Структуры данных *1700

Однажды Васе в руки попалось бумажное письмо в конверте. Вася знает, что когда работники Берляндской почты пересылают письмо напрямую из города «A» в город «B» они ставят на него либо штамп «A B», либо «B A». К сожалению, часто невозможно напрямую переслать письмо из города отправителя в город получателя, поэтому письмо пересылается через некоторые промежуточные города. Работники почты никогда не пересылают письмо по циклу, то есть письмо не может побывать в одном городе дважды. Вася уверен, что при каждой пересылке они исправно ставят штампы.

На конверте Васиного письма n почтовых штампов. Он понимает, что возможных маршрута следования письма всего два. Но штампов очень много, и Вася не может сам определить ни один из этих маршрутов. Поэтому он просит вас помочь ему. Найдите один из возможных маршрутов следования письма.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — числа почтовых штампов на конверте. Далее следует n строк по два целых числа — описания штампов. Каждый штамп описывается номерами городов, между которыми письмо пересылалось. Номера городов — целые числа от 1 до 109. Номера всех городов различны. Каждой пересылке письма соответствует ровно один почтовый штамп. Гарантируется, что описанные штампы соответствуют корректному маршруту следования письма из одного города в некоторый другой.

Выходные данные

Выведите n + 1 число — номера городов в одном из двух возможных маршрутов в порядке следования письма.

D. Компоненты связности

дп поиск в глубину и подобное снм Структуры данных *1900

В уже известной нам некоторой большой корпорации, в которой работает системный администратор Поликарп, компьютерная сеть состоит n компьютеров и m кабелей, которые соединяют некоторые пары компьютеров. Другими словами, компьютерная сеть может быть представлена некоторым неориентированным графом из n вершин и m ребер. Пронумеруем компьютеры целыми числами от 1 до n, пронумеруем кабели целыми числами от 1 до m.

Поликарпу поручили ответственное задание — проверить надежность компьютерной сети его корпорации. Для этого Поликарп решил провести серию из k экспериментов с компьютерной сетью, где i-ый эксперимент заключается в следующем:

  1. Временно отсоединить кабели с номерами от li до ri, включительно (остальные кабели остаются подсоединенными).
  2. Посчитать количество компонент связности в графе, который определяет компьютерную сеть в настоящий момент.
  3. Подсоединить отключенные кабели с номерами от li до ri (то есть восстановить исходную сеть).

Помогите Поликарпу провести все эксперименты и для каждого из них выведите количество компонент связности в графе, который определяет компьютерную сеть во время данного эксперимента. Изолированную вершину нужно считать отдельной компонентой.

Входные данные

В первой строке через пробел заданы два целых числа n, m (2 ≤ n ≤ 500; 1 ≤ m ≤ 104) — количество компьютеров и количество кабелей соответственно.

Далее в m строках задано описание кабелей. В i-ой строке через пробел задана пара целых чисел xi, yi (1 ≤ xi, yi ≤ nxi ≠ yi) — номера компьютеров, которые соединяет i-ый кабель. Обратите внимание, что пара компьютеров может быть соединена несколькими кабелями.

В следующей строке задано единственное целое число k (1 ≤ k ≤ 2·104) — количество экспериментов. Далее в k строках задано описание экспериментов. В i-ой строке через пробелы заданы числа li, ri (1 ≤ li ≤ ri ≤ m) — номера кабелей, которые Поликарп отсоединяет во время i-го эксперимента.

Выходные данные

Выведите k чисел, в которых i-ое число обозначает количество компонент связности графа, который определяет компьютерную сеть во время i-го эксперимента.

E. Копирование данных

Структуры данных *1900

Очень часто приходится копировать большие объемы данных. Такая операция может потребовать больших затрат компьютерных ресурсов. В связи с этим, в этой задаче вам предлагается придумать способ быстрого копирования некоторой части одного массива чисел в другой.

Более формально, вам задано два массива целых чисел a1, a2, ..., an и b1, b2, ..., bn длины n. Также есть m запросов двух типов:

  1. Скопировать подотрезок массива a длины k, начиная с позиции x, в массив b, начиная с позиции y, то есть выполнить by + q = ax + q для всех целых q (0 ≤ q < k). Операция задана корректно — оба подотрезка целиком содержатся в массивах a и b соответственно.
  2. Определить значение в позиции x массива b, то есть найти значение bx.

Для каждого запроса второго типа выведите результат — значение соответствующего элемента массива b.

Входные данные

В первой строке через пробел заданы два целых числа n и m (1 ≤ n, m ≤ 105) — количество элементов в массивах и количество запросов соответственно. Во второй строке задан массив целых чисел a1, a2, ..., an (|ai| ≤ 109). В третьей строке задан массив целых чисел b1, b2, ..., bn (|bi| ≤ 109).

В следующих m строках заданы описания запросов. В i-ой строке сначала задано целое число ti — тип i-го запроса (1 ≤ ti ≤ 2). Если ti = 1, то i-ый запрос обозначает операцию копирования, если ti = 2, то i-ый запрос обозначает взятие значения в массиве b. Если ti = 1, то после типа запроса записаны три целых числа xi, yi, ki (1 ≤ xi, yi, ki ≤ n) — параметры запроса копирования. Если ti = 2, то следом, после типа запроса, в строке записано целое число xi (1 ≤ xi ≤ n) — позиция в массиве b.

Все числа в строках разделены одиночными пробелами. Гарантируется, что все запросы корректны, то есть границы копирования не выходят за границы массивов a и b.

Выходные данные

Для каждого запроса второго типа в отдельную строку выведите результат.

E. Близкие вершины

Деревья разделяй и властвуй Структуры данных *2700

Дано взвешенное дерево из n вершин. Каждое ребро имеет неотрицательный вес. Длиной пути между двумя вершинами дерева называется количество ребер в пути. Весом пути называется суммарный вес всех входящих в него ребер.

Две вершины называются близкими, если существует путь между двумя этими вершинами длины не более l и также существует путь между ними веса не более w. Посчитайте количество пар вершин v, u (v < u), таких, что вершины v и u близкие.

Входные данные

В первой строке записаны три целых числа n, l и w (1 ≤ n ≤ 105, 1 ≤ l ≤ n, 0 ≤ w ≤ 109). Далее в n - 1 строках дано описание ребер дерева. В i-той строке записано два целых числа pi, wi (1 ≤ pi < (i + 1), 0 ≤ wi ≤ 104), которые обозначают, что i-ое ребро соединяет вершину (i + 1) и pi и имеет вес wi.

Считайте, что вершины дерева пронумерованы от 1 до n некоторым образом.

Выходные данные

Выведите единственное целое число — количество близких пар.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

A. Егор и массив

реализация Структуры данных *1400

У Егора есть массив a = a1, a2, ..., an и m операций. Каждая операция имеет вид: li, ri, di, (1 ≤ li ≤ ri ≤ n). Применить операцию i к массиву значит, элементы массива c номерами li, li + 1, ..., ri, увеличить на величину di.

Егор записал на листочке бумаги k запросов. Каждый запрос имеет вид: xi, yi, (1 ≤ xi ≤ yi ≤ m), что означает, что нужно применить к массиву операции с номерами xi, xi + 1, ..., yi.

Сейчас Егор хочет узнать, какой будет массив a после выполнения всех запросов. Помогите Егору.

Входные данные

В первой строке заданы целые числа n, m, k (1 ≤ n, m, k ≤ 105). Во второй строке заданы n целых чисел: a1, a2, ..., an (0 ≤ ai ≤ 105) — изначальный массив.

В следующих m строках заданы операции, операция с номером i записана тремя целыми числами: li, ri, di, (1 ≤ li ≤ ri ≤ n), (0 ≤ di ≤ 105).

В следующих k строках заданы запросы, запрос с номером i записан двумя целыми числами: xi, yi, (1 ≤ xi ≤ yi ≤ m).

Числа в строках разделяются одиночными пробелами.

Выходные данные

В единственную строку выведите n целых чисел a1, a2, ..., an — массив, который получит Егор после применения всех запросов. Выведенные числа разделяйте пробелами.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на C++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

E. Ярослав и точки

Структуры данных *2500

У Ярослава есть n точек, лежащих на оси Ox. Координата первой точки — x1, второй — x2, ..., n-ой — xn. Сейчас Ярослав хочет выполнить m запросов, каждый из которых одного из двух следующих типов:

  1. Переместить pj-тую точку из позиции xpj в позицию xpj + dj. При этом гарантируется, что после выполнения запроса ни у каких двух точек координаты не совпадут.
  2. Посчитать сумму расстояний между всеми парами точек, которые лежат на отрезке [lj, rj] (lj ≤ rj). Другими словами, требуется посчитать сумму: .

Помогите Ярославу.

Входные данные

В первой строке содержится целое число n — количество точек (1 ≤ n ≤ 105). Во второй строке содержатся различные целые числа x1, x2, ..., xn — координаты точек (|xi| ≤ 109).

В третьей строке содержится целое число m — количество запросов (1 ≤ m ≤ 105). В следующих m строках содержатся запросы. В j-той строке сначала записано целое число tj (1 ≤ tj ≤ 2) — тип запроса. Если tj = 1, то далее записаны два целых числа pj и dj (1 ≤ pj ≤ n, |dj| ≤ 1000). Если tj = 2, то далее записаны два целых числа lj и rj ( - 109 ≤ lj ≤ rj ≤ 109).

Гарантируется, что в каждый момент времени координаты всех точек различны.

Выходные данные

Для каждого запроса второго типа выведите ответ в отдельной строке. Ответы выводите в порядке следования запросов во входных данных.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на C++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

E. Загадочные письмена

Структуры данных *3000

Белые мишки обнаружили гигантскую круглую плавающую льдину, а на ней были начертаны какие-то загадочные письмена. На льду выцарапано n линий. Каждая линия соединяет две точки на границе льдины (назовем эти точки конечными точками). Конечные точки пронумерованы по окружности как 1, 2, ..., 2n против часовой стрелки. Никакие две линии не имеют общей конечной точки.

Сейчас группа из 6 белых медведей (Алиса, Роберт, Каролина, Девид, Эвелина, Франк) собираются рыть берлоги в конечных точках. Каждому мишке хочется вырыть берлогу и жить в ней. Никакие два медведя не могут вырыть берлоги в одной и той же точке. Но вот Алиса и Роберт — суеверная парочка. Они верят, что эти линии начертали пришельцы (или люди, но для белых медведей это примерно одно и то же) — поэтому у линий есть определенная энергетическая сила. Следовательно, они хотят вырыть берлоги в двух концах, соединенных одной линией. То же самое относится к Каролине и Дэвиду, Эвелине и Франку.

Расстояние между двумя берлогами X и Y высчитывается как один плюс минимальное количество других берлог, мимо которых надо пройти, чтобы дойти от X до Y по границе льдины (конечные точки без берлог не берутся в расчет).

Чтобы все было по-честному, расстояние между тремя парочками должно быть одинаковым (то есть, расстояние между Алисой и Робертом, Каролиной и Дэвидом и расстояние между Эвелиной и Франком одинаковые).

Рисунки ниже показывают две разных схемы, где конечные точки обозначаются точками на окружности. Схема слева не подходит. Несмотря на то, что каждая парочка (A и B, C и D, E и F) соединена линией, нарушено условие расстояния. Расстояние между A и B равняется 2 (можно дойти от A до B через F по часовой стрелке). Расстояние от E до F также равняется 2. Однако расстояние от C до D равняется 1 (можно пройти от C до D против часовой стрелки и не пройти мимо какой-либо другой берлоги). Справа показана верная схема. Все три пары имеют одинаковое расстояние 1.

Посчитайте, сколькими способами можно вырыть берлоги по данным требованиям. Два способа считаются одинаковыми, если использован один и тот же набор 6 конечных точек.

Входные данные

Первая строка содержит целое число n (3 ≤ n ≤ 105) — количество линий.

Каждая из следующих n строк содержит два целых числа ai, bi (1 ≤ ai, bi ≤ 2n), означающих, что на льду начертана линия, соединяющая ai–тую и bi–тую конечные точки.

Гарантируется, что никакая конечная точка не принадлежит двум разным линиям.

Выходные данные

Выведите количество способов вырыть берлоги.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

Второй пример описывает рисунок из условия задачи.

E. Хитрый и умный пароль

Бинарный поиск жадные алгоритмы Конструктив Строки Структуры данных хэши *2800

В эпоху своей молодости герой нашего рассказа Царь Цопа решил, что все его личные данные не очень хорошо скрыты от посторонних глаз, а для монарха это недопустимо. Поэтому он придумал хитрый и умный пароль (лишь спустя много лет Цопа узнал, что его пароль — это палиндром нечетной длины), а затем зашифровал все свои данные.

Как известно, монархи в душе такие же люди, как и все остальные смертные, и поэтому чтобы не забыть свой хитрый и умный пароль, Цопа решил записать его на бумажку. Зная, что опасно хранить пароль в таком виде, он решил его зашифровать следующим образом: с конца и с начала своего пароля-палиндрома он отрезал по x символов (x может быть равно 0, и 2x строго меньше, чем длина пароля). У него получились 3 части пароля. Назовем их prefix, middle и suffix соответственно, причем prefix и suffix имеют одинаковую, возможно нулевую, длину, а middle — всегда нечётной длины. Из этих трех частей он сделал строку A + prefix + B + middle + C + suffix, где A, B и C — некоторые придуманные Цопой строки (возможно нулевой длины), а « + » означает операцию конкатенации («склеивания» строк).

Прошло много лет, и буквально вчера Царь Цопа нашел бумажку, где был записан его пароль, зашифрованный описанным выше способом. Сам пароль, а также строки A, B и C давно уже забыты, и поэтому Цопа просит вас найти пароль максимальной длины, который мог бы быть придуман, зашифрован и записан Цопой.

Входные данные

Входные данные представляют собой единственную строку из прописных латинских букв длиной от 1 до 105 символов.

Выходные данные

В первую строку выведите одно целое число k — количество непустых частей пароля в получившемся у вас ответе (). Далее выведите k строк по два целых числа xi и li — позицию начала и длину соответствующей части пароля. Пары выводите в порядке возрастания xi. Числа в паре при выводе разделяйте одним пробелом.

Позиция начала xi — целое число от 1 до длины входной строки. Никакая длина li не может быть равна 0, так как части пароля нулевой длины выводить не нужно. Среднее из чисел li обязательно должно быть нечётным.

Если решений несколько, выведите любое. Учтите, что ваша задача — максимизировать не k, а сумму li.

D. Ярослав и делители

Структуры данных *2200

У Ярослава есть массив p = p1, p2, ..., pn (1 ≤ pi ≤ n), состоящий из n различных целых чисел. Также есть m запросов:

  • Запрос номер i представляется в виде пары целых чисел li, ri (1 ≤ li ≤ ri ≤ n).
  • Ответом на запрос li, ri является количество пар целых чисел q, w (li ≤ q, w ≤ ri) таких, что pq является делителем pw.

Помогите Ярославу, ответьте на все его запросы.

Входные данные

В первой строке записаны целые числа n и m (1 ≤ n, m ≤ 2·105). Во второй строке записаны n различных целых чисел p1, p2, ..., pn (1 ≤ pi ≤ n). В следующих m строках заданы запросы Ярослава. В i-той строке записаны целые числа li, ri (1 ≤ li ≤ ri ≤ n).

Выходные данные

Выведите m целых чисел — ответы на запросы Ярослава в порядке их следования во входных данных.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на C++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

B. Оптимизатор

жадные алгоритмы сортировки Структуры данных *2100

Оперативная память процесса — это последовательность байт, которые пронумерованы по порядку от 1 до n. Программа Поликарпа состоит из инструкций типа «memset», то есть операций заполнения ячеек памяти (байтов) на отрезке некоторым значением. Подробнее, его программа исключительно состоит из m инструкций вида «set13 a_i l_i». Инструкция i заполняет непрерывный участок памяти длины li, начинающийся с ячейки номер ai, (то есть ячейки с номерами ai, ai + 1, ..., ai + li - 1) значениями 13.

Задача оптимизатора программы Поликарпа — выбросить максимальное количество инструкций из его программы так, чтобы оставшиеся инструкции установили значение 13 в тех и только тех байтах памяти, что и программа до оптимизации. Ваша задача — реализовать оптимизатор такой программы.

Входные данные

В первой строке записаны целые числа n и m (1 ≤ n ≤ 2·106, 1 ≤ m ≤ 2·105) — количество байт (ячеек памяти) и количество инструкций в программе Поликарпа. Далее следуют m строк, каждая из которых содержит пару целых чисел ai, li (1 ≤ ai ≤ n, 1 ≤ li ≤ n - ai + 1).

Выходные данные

В первую строку выведите искомое максимальное количество инструкций, которые можно удалить из программы. Во вторую строку выведите номера инструкций. Инструкции нумеруются от 1 до m в порядке их появления во входных данных. Если решений несколько, выведите любое.

B. Транспортировка кошек

дп Структуры данных *2400

Zxr960115 содержит большое хозяйство. Он кормит m милых кошечек и держит у себя p кормильщиков. Через ферму проходит прямая дорога, а вдоль дороги расположено n холмов, пронумерованных от 1 до n, слева направо. Расстояние от холма i до i - 1 равняется di метров. Кормильщики живут на холме 1.

Однажды кошечкам захотелось порезвиться и они разбежались. Кошка i пошла к холму hi, дошла до него в момент времени ti, а затем стала ждать кормильщика на холме hi. Кормильщики должны собрать всех разбежавшихся кошек. Каждый кормильщик идет прямо от холма номер 1 до холма номер n, не останавливаясь у какого-либо холма, и собирает всех кошек, ожидающих на каждом холме. Кормильщики двигаются со скоростью 1 в единицу времени и достаточно сильны, чтобы собрать сколько угодно кошек.

Например, пусть имеется два холма (d2 = 1) и одна кошечка, которая дошла до холма 2 (h1 = 2) в момент времени 3. Тогда, если кормильщик отправится за кошками от холма 1 в момент времени 2 или 3, то он сможет забрать эту кошку. Но если он отправится от холма 1 в момент времени 1, то он не сможет этого сделать. Если кормильщик отправится за кошкой в момент времени 2, то кошка будет ждать его 0 единиц времени, если же он отправится в момент времени 3, то кошка будет ждать его 1 единицу времени.

Ваша задача — составить расписание отправки от холма 1 для кормильщиков так, чтобы общее время ожидания кошек до того как их заберут было минимальным.

Входные данные

В первой строке входных данных содержится три целых числа n, m, p (2 ≤ n ≤ 105, 1 ≤ m ≤ 105, 1 ≤ p ≤ 100).

Во второй строке содержится n - 1 положительных целых чисел d2, d3, ..., dn (1 ≤ di < 104).

В каждой из следующих m строк содержится по два целых числа hi и ti (1 ≤ hi ≤ n, 0 ≤ ti ≤ 109).

Выходные данные

Выведите целое число, минимальную сумму времен ожидания всех кошек.

Пожалуйста, не используйте спецификатор %lld для чтения и записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

C. Достать сокровище

графы кратчайшие пути Перебор Структуры данных *2500

Рейнбоу выстроил h ячеек в ряд и пронумеровал их от 1 до h слева направо. В n из этих ячеек находится сокровище. Будем называть каждую из этих n ячеек «ячейка с сокровищами». «Ячейка с сокровищами» номер i — это ai-ая ячейка, в ней лежат сокровища на ci долларов.

Сейчас Фреда встала в первую ячейку. В любой момент она может пройти k ячеек вперед или вернуться в первую ячейку. Это значит, что Фреда может дойти до 1-ой, (k + 1)-ой, (k + 1)-ой, (k + 1)-ой ячеек и так далее.

Рейнбоу дала Фреде m операций. Каждая операция относится к одному из следующих трех типов:

  1. Добавить способ перемещения x: в любой момент времени можно также пройти на x ячеек вперед. Например, в самом начале у Фреды есть только один способ перемещения k. Если в какой-то момент времени у Фреды есть способы перемещения a1, a2, ..., ar, то она может дойти до любой ячейки вида , где vi — некоторое целое неотрицательное число.
  2. Уменьшить цену сокровища в x-ой «ячейке с сокровищами» на y долларов. Иными словами, выполнить присвоение cx = cx - y.
  3. Узнать стоимость самого ценного сокровища среди ячеек, до которых может дойти Фреда. Если Фреда не может дойти ни до одной ячейки с сокровищами, то считается, что стоимость самого ценного сокровища в таком случае равна 0 и дальше ничего не происходит. Иначе, Фреда забирает самое ценное сокровище из соответствующей ячейки. Если существует несколько «ячеек с сокровищами», которые содержат самое ценное сокровище, то нужно выбрать ту, номер которой минимален (такая ячейка не обязательно имеет минимальный номер, потому что нумерации ячеек и «ячеек с сокровищами» независимы). После этой операции количество ячеек, в которых содержится сокровище, становится на единицу меньше.

Фреда как программист просит Вас написать программу, которая выполнит каждую операцию.

Входные данные

Первая строка содержит четыре целых числа: h (1 ≤ h ≤ 1018), n, m (1 ≤ n, m ≤ 105) и k (1 ≤ k ≤ 104).

Каждая из следующих n строк содержит два целых числа: ai (1 ≤ ai ≤ h), ci (1 ≤ ci ≤ 109). Это означает, что i-ая «ячейка с сокровищами» — это ai-ая ячейка и в ней лежит сокровище на ci долларов. Все ai различны.

Каждая из следующих m строк записана в одном из следующих трех форматов:

  • «1 x» — операция типа 1, 1 ≤ x ≤ h;
  • «2 x y» — операция типа 2, 1 ≤ x ≤ n, 0 ≤ y < cx;
  • «3» — операция типа 3.

Максимальное количество операций типа 1 — 20. Гарантируется, что в любой момент стоимость сокровища в любой ячейке с сокровищем положительна. Гарантируется, что все операции корректны (никакая операция не может уменьшить стоимость уже взятого сокровища).

Пожалуйста, не используйте спецификатор %lld, для чтения 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Для каждой операции типа 3, выведите целое число, указывающее на ценность (в долларах) самого ценного сокровища среди «ячеек c сокровищами», которые Фреда может достать. Если такого сокровища нет, выведите 0.

Примечание

В примере дано 10 ячеек и 3 «ячейки с сокровищами». Первая — это ячейка 5, в ней лежит сокровище на 50 долларов. Вторая — это ячейка 7, в ней лежит сокровище на 60 долларов. Третья — это ячейка 8, в ней лежит сокровище на 100 долларов.

Сначала Фреда может дотянуться только до ячеек 1, 3, 5, 7 и 9. Первая операция уменьшает стоимость в долларах второй «ячейки с сокровищами» с 60 до 55. После этого самое ценное сокровище среди доступных ей «ячеек с сокровищами» — это max(50, 55) = 55. После третьей операции она может двигаться на 3 ячейки вперед с каждым шагом, таким образом она может достигнуть ячеек 1, 3, 4, 5, 6, 7, 8, 9, 10. Значит, четвертая операция забирает сокровище стоимостью 100 долларов.

Обратите внимание, что она забрала сокровище стоимостью 55 и 100 долларов, следовательно, ответ последней операцией она забирает сокровище стоимостью 50 долларов.

D. Куб на отрезке

математика Структуры данных *2600

Пока Тайни учит вычислительную геометрию, он в то же время изучает и полезную структуру данных, которая называются деревом отрезков или деревом интервалов. Он едва разобрался, что к чему, когда возникла следующая задача:

Дана последовательность целых чисел a1, a2, ..., an. Надо выполнить q запросов, каждый запрос относится к одному из двух следующих типов:

  1. Даны два целых числа, l и r (1 ≤ l ≤ r ≤ n), найдите сумму всех элементов в последовательности al, al + 1, ..., ar.
  2. Даны два целых числа, l и r (1 ≤ l ≤ r ≤ n), возведите каждый элемент в последовательности al, al + 1, ..., ar в куб. То есть выполните присвоения al = al3, al + 1 = al + 13, ..., ar = ar3.

Для каждого запроса типа 1 выведите ответ на него.

Сам Тайни, конечно, никак не додумается — так что он просит Вас помочь ему. При этом, Тайни обожает простые числа. Поэтому он сказал Вам, что, так как ответ может быть слишком большим, его стоит выводить по модулю 95542721 (это число является простым).

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105), обозначающее длину последовательности. Во второй строке записано n целых чисел через пробел a1, a2, ..., an (0 ≤ ai ≤ 109).

В третьей строке записано целое число q (1 ≤ q ≤ 105), обозначающее количество запросов. Затем следуют q строк. В каждой строке записано по три целых числа ti (1 ≤ ti ≤ 2), li, ri (1 ≤ li ≤ ri ≤ n), где ti обозначает тип запроса, а li и ri — параметры запроса, соответственно.

Выходные данные

Для каждого запроса 1 типа выведите ответ в отдельной строке.

Обратите внимание, что каждое выведенное число должно быть неотрицательным и должно быть меньше 95542721.

E. Илья и два числа

жадные алгоритмы Конструктив снм Структуры данных *2300

Илья в последнее время начал увлекаться археологией. Недавно он нашел два числа, записанных в системе счисления по основанию m. Каждое из найденных чисел состояло ровно из n цифр. Илья сразу начал искать информацию об этих числах, он узнал, что числа — это часть шифра, а тот, кто разгадает шифр, обретет невиданное сокровище.

После длительных исследований Илья понял: чтобы разгадать шифр, нужно сделать следующее:

  • Переставить цифры в первом числе некоторым образом, аналогично, переставить цифры во втором числе некоторым образом. В результате этой операции у чисел могут появиться лидирующие нули.
  • Поцифренно сложить числа по модулю m. Другими словами, нужно получить третье число, длины n, каждая цифра которого, есть сумма соответствующих цифр найденных чисел. Например, пусть есть два числа, записанных в троичной системе счисления, 001210 и 012111, тогда, если их сложить поцифренно по модулю 3, получится число 010021.
  • Ключ к шифру — это максимально возможное число, которое можно получить на предыдущем шаге.

Помогите Илье, найдите ключ к шифру.

Входные данные

В первой строке записано два целых числа n, m (1 ≤ n, m ≤ 105, m > 1). Во второй строке записано первое найденное число, в третьей строке записано второе найденное число.

Числа записываются как последовательность цифр в системе счисления по основанию m. Каждая цифра — это целое число от 0 до m - 1. Цифры в строке записаны в порядке от старших разрядов к младшим.

Заданные числа могут содержать лидирующие нули.

Выходные данные

Выведите n цифр в системе счисления по основанию m — полученное третье число. Цифры выводите в порядке от старших разрядов к младшим.

C. Сережа и подпоследовательности

дп Структуры данных *2000

У Сережи есть последовательность, состоящая из n целых положительных чисел, a1, a2, ..., an.

Сначала Сережа записал на клетчатом листке бумаги все различные непустые неубывающие подпоследовательности последовательности a. Потом для каждой из последовательностей, записанных на клетчатом листке, Сережа записал на линованном листке все последовательности, которые ее не превышают.

Последовательность целых положительных чисел x = x1, x2, ..., xr не превышает последовательность целых положительных чисел y = y1, y2, ..., yr, если выполняются неравенства: x1 ≤ y1, x2 ≤ y2, ..., xr ≤ yr.

Сейчас Сережа интересуется, сколько последовательностей записано на листке в линию. Помогите Сереже, найдите остаток от деления описанного количества на 1000000007 (109 + 7).

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 105). Во второй строке содержится n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 106).

Выходные данные

В единственную строку выведите остаток от деления ответа на задачу на число 1000000007 (109 + 7).

D. Сережа и прямые

Бинарный поиск геометрия сортировки Структуры данных *2500

Сережа разместил n точек на плоскости. Сейчас Сережа хочет разместить на плоскости две прямые, пересекающиеся под прямым углом, так, чтобы одна из прямых пересекала ось Ox под углом 45 градусов, а максимальное из расстояний от точек до прямых было бы минимально.

В данной задаче мы считаем, что расстояние между точками (x1, y1) и (x2, y2) равно |x1 - x2| + |y1 - y2|. Расстояние от точки до прямых — это минимальное из расстояний от точки до некоторой точки, принадлежащей одной из прямых.

Помогите Сереже, найдите максимальное расстояние от точек до оптимально расположенных прямых.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 105). В следующих n строках заданы координаты точек. В i-той строке записаны два целых числа xi, yi (|xi|, |yi| ≤ 109).

Выходные данные

В единственную строку выведите единственное вещественное число — ответ на задачу. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не превышает 10 - 6.

E1. Задание на лето

Перебор Структуры данных *1500

К своим трем годам Умный Бобер в совершенстве овладел всеми арифметическими операциями, а от своего учителя по математике одаренный ученик получил следующее домашнее задание на лето:

Дана последовательность целых чисел a1, a2, ..., an. Необходимо последовательно произвести над ней m операций следующего вида:

  1. Для заданных чисел xi и vi присвоить элементу axi значение vi.
  2. Для заданных чисел li и ri необходимо вычислить сумму , где f0 = f1 = 1 и при i ≥ 2: fi = fi - 1 + fi - 2.
  3. Для тройки чисел li ri di необходимо для всех x (li ≤ x ≤ ri) увеличить значение ax на di.

Этим летом Умный Бобер решил отправиться в тур по великим озерам Канады, потому просит Вас помочь ему в решении данной задачи.

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n, m ≤ 2·105) — количество чисел в последовательности и количество операций соответственно. Вторая строка содержит n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 105). Далее идет m строк, каждая из которых описывает операцию. Каждый строка начинается с целого числа ti (1 ≤ ti ≤ 3) — тип операции:

  • если ti = 1, то далее идет два целых числа xi vi (1 ≤ xi ≤ n, 0 ≤ vi ≤ 105);
  • если ti = 2, то далее идет два целых числа li ri (1 ≤ li ≤ ri ≤ n);
  • если ti = 3, то далее идет три целых числа li ri di (1 ≤ li ≤ ri ≤ n, 0 ≤ di ≤ 105).

Ограничения на входные данные для получения 30 баллов (подзадача E1):

  • Гарантируется, что n не превышает 100, m не превышает 10000 и не будет запросов 3-го типа.

Ограничения на входные данные для получения 70 баллов (подзадачи E1+E2):

  • Гарантируется, что будут запросы только 1-го и 2-го типа.

Ограничения на входные данные для получения 100 баллов (подзадачи E1+E2+E3):

  • Дополнительные ограничения отсутствуют.
Выходные данные

Для каждого запроса второго типа выведите вычисленную сумму по модулю 1000000000 (109).

B. Психи - в шеренгу!

реализация Структуры данных *1900

Дана шеренга из n психов. Каждому психу дан идентификатор — уникальное целое число от 1 до n. На каждом ходе каждый псих, имеющий идентификатор больше, чем у психа справа (если такой есть) убивает своего соседа справа в шеренге. Обратите внимание, что псих может убить и быть убитым на одном и том же ходе.

Вам дано исходное расположение психов в шеренге. Подсчитайте, сколько необходимо ходов до момента времени, после которого никто никого не будет убивать. Прочитайте пояснение к тестовому примеру, чтобы лучше понять условие.

Входные данные

В первой строке входных данных записано целое число n, обозначающее количество психов, (1 ≤ n ≤ 105). Во второй строке записан список из n различных целых чисел от 1 до n, включительно — идентификаторы психов в шеренге слева направо.

Числа в строках разделяются одиночными пробелами.

Выходные данные

Выведите количество ходов, после которых шеренга не будет меняться.

Примечание

В первом примере шеренга психов меняется так: [10 9 7 8 6 5 3 4 2 1]  →  [10 8 4]  →  [10]. Итого, есть два хода.

E. Пинг-Понг

Структуры данных *3000

В этой задаче в каждый момент времени у Вас есть набор интервалов. Вам разрешено перейти от интервала (a, b) из набора к интервалу (c, d) из набора тогда и только тогда, когда c < a < d или c < b < d. Считается, что путь от интервала I1 к интервалу I2 существует, если есть последовательность переходов, начинающихся с I1, таких, что можно добраться до I2.

Ваша программа должна обрабатывать запросы двух следующих типов:

  1. «1 x y» (x < y) — добавьте новый интервал (x, y) в набор интервалов. Длина нового интервала гарантированно строго больше длин всех предыдущих интервалов.
  2. «2 a b» (a ≠ b) — ответьте на вопрос: есть ли путь от a-го (один-индексация) добавленного интервала до b-го (один-индексация) добавленного интервала?

Выполните все запросы. Считайте, что изначально в вашем наборе нет ни одного интервала.

Входные данные

Первая строка содержит целое число n (1 ≤ n ≤ 105), обозначающее количество запросов. Каждая из следующих строк содержит запрос в формате, описанном выше. Все числа во входных данных целые и не превосходят по модулю 109.

Гарантируется, что все запросы корректные.

Выходные данные

Для каждого запроса второго типа выведите «YES» или «NO» в отдельной строке в зависимости от ответа на вопрос.

E. Ciel и гондолы

дп разделяй и властвуй Структуры данных *2600

Лиса Ciel зашла в парк аттракционов. И вот, она в очереди на колесо обозрения. В очереди стоит n людей (хотя нет, скорее лис): мы будем считать, что первая лиса стоит в начале очереди, а n-ая лиса стоит в хвосте очереди.

Всего имеется k гондол, мы распределяем лис по гондолам следующим образом:

  • Когда подплывает первая гондола, q1 лис переходят из начала очереди в подплывшую гондолу.
  • Затем, когда подплывает вторая гондола, q2 лис из начала оставшейся очереди переходит в эту гондолу.

        ...

  • Оставшиеся qk лис идут с последнюю (k-ую) гондолу.

Обратите внимание, что числа q1, q2, ..., qk должны быть положительные. Из условия следует, что и qi > 0.

Вы знаете как лисам не хочется задерживаться в гондолах с незнакомцами. Итак, Ваша задача — найти оптимальный способ размещения (то есть определить оптимальную последовательность q), чтобы угодить всем. Для каждой пары лис i и j задано значение uij, обозначающее степень незнакомости. Можете считать, что uij = uji для всех i, j (1 ≤ i, j ≤ n) и что uii = 0 для всех i (1 ≤ i ≤ n). Тогда значение незнакомости в гондоле определяется как сумма значений незнакомости между всеми парами лис, которые находятся в этой гондоле. Общее значение незнакомости определяется как сумма значений незнакомости по всем гондолам.

Помогите лисе Ciel найти минимальное возможное значение общей незнакомости при некотором оптимальном распределении лис по гондолам.

Входные данные

В первой строке даны два целых числа n и k (1 ≤ n ≤ 4000 and 1 ≤ k ≤ min(n, 800)) — количество лис в очереди и количество гондол. В следующих n строках записано по n целых чисел — матрица u, (0 ≤ uij ≤ 9, uij = uji и uii = 0).

Пожалуйста, используйте методы быстрого чтения (например, для Java используйте BufferedReader вместо Scanner).

Выходные данные

Выведите целое число — минимальное возможное значение общей незнакомости.

Примечание

В первом примере можно распределить лис вот так: {1, 2} идут в одну гондолу, {3, 4, 5} идут в другую гондолу.

Во втором примере оптимальное распределение таково: {1, 2, 3} | {4, 5, 6} | {7, 8}.

C. Две перестановки

Структуры данных *2400

Вам даны две перестановки p и q, состоящие из n элементов, и m запросов вида: l1, r1, l2, r2 (l1 ≤ r1l2 ≤ r2). Ответом на запрос является количество целых чисел от 1 до n, таких что их позиция в первой перестановке находится в отрезке [l1, r1] (границы отрезка включаются), а позиция во второй перестановке — в отрезке [l2, r2] (границы отрезка включаются).

Перестановкой, состоящей из n элементов, называется последовательность n различных целых чисел, каждое из которых не меньше 1 и не больше n.

Позицией числа v (1 ≤ v ≤ n) в перестановке g1, g2, ..., gn называется такое число i, что gi = v.

Входные данные

В первой строке находится одно целое число n (1 ≤ n ≤ 106) — количество элементов в обеих перестановках. В следующей строке находятся n чисел, разделенных пробелами: p1, p2, ..., pn (1 ≤ pi ≤ n) — элементы первой перестановки. В следующей строке находится вторая перестановка q1, q2, ..., qn в таком же формате.

В следующей строке находится одно целое число m (1 ≤ m ≤ 2·105) — количество запросов.

В следующих m строках находятся описания запросов по одному в строке. Описание i-того запроса состоит из четырех целых чисел: a, b, c, d (1 ≤ a, b, c, d ≤ n). Параметры запроса l1, r1, l2, r2 получаются из чисел a, b, c, d следующим образом:

  1. Введем переменную x. Если запрос первый, то она равна 0, иначе она равна ответу на предыдущий запрос плюс один.
  2. Введем функцию f(z) = ((z - 1 + x) mod n) + 1.
  3. Положим l1 = min(f(a), f(b)), r1 = max(f(a), f(b)), l2 = min(f(c), f(d)), r2 = max(f(c), f(d)).
Выходные данные

Для каждого запроса выведите одно целое число в отдельной строке — ответ на запрос.

B. Максимальная абсурдность

дп реализация Структуры данных *1500

В Берляндии продолжаются реформы. К примеру, на вчерашнем заседании парламент Берляндии принял целых n законов (каждому из них присвоен уникальный номер от 1 до n). Сегодня все эти законы лежат на столе у президента Берляндии дяди Вовы, которому они были переданы на подпись.

В этот раз дядя Вова планирует подписать 2k законов. Он решил выбрать ровно два непересекающихся отрезка целых чисел от 1 до n длиной k и подписать все законы, номера которых попадают в эти отрезки. Более формально, дядя Вова выберет два целых числа a, b (1 ≤ a ≤ b ≤ n - k + 1, b - a ≥ k) и подпишет все законы с номерами, лежащими в отрезках [aa + k - 1] и [bb + k - 1] (концы отрезков включаются).

При выборе подписываемых законов дядя Вова, разумеется, будет руководствоваться мнением общества. Всеберляндский центр изучения общественного мнения (ВЦИОМ) провел опросы среди населения и на их основе предоставил президенту отчет, в котором для каждого закона указана его средняя абсурдность с точки зрения респондентов. Как истинный патриот, дядя Вова хочет подписать законы, имеющие максимальную суммарную абсурдность. Помогите ему.

Входные данные

В первой строке записаны два целых числа n и k (2 ≤ n ≤ 2·105, 0 < 2k ≤ n) — количество законов, принятых парламентом, и длина одного отрезка в списке законов соответственно. В следующей строке записано n целых чисел x1, x2, ..., xn — абсурдность каждого из законов (1 ≤ xi ≤ 109).

Выходные данные

Выведите два целых числа a, b — начальные номера законов в отрезках, которые следует выбрать дяде Вове (это значит, что президент подпишет законы с номерами из отрезков [aa + k - 1] и [bb + k - 1]). Если существует несколько решений, выведите то, в котором число a минимально. Если вариантов подписания по-прежнему несколько, выведите тот, в котором число b минимально.

Примечание

В первом примере дядя Вова подпишет законы с номерами из отрезков [1;2] и [4;5]. Суммарная абсурдность подписанных законов составит 3 + 6 + 1 + 6 = 16.

Во втором примере дядя Вова подпишет законы с номерами из отрезков [1;2] и [3;4]. Суммарная абсурдность подписанных законов составит 1 + 1 + 1 + 1 = 4.

C. Месть студентов

жадные алгоритмы сортировки Структуры данных *2200

Нелегка студенческая жизнь. На собственном опыте пришлось прочувствовать это некоторым студентам Берляндского университета. За два года обучения возникла у них стойкая неприязнь к заведующей одной из кафедр. В самом деле, то группы переформирует, то запретит ставить студентам автоматы, то совершит еще какой-нибудь отвратительный поступок. Решили студенты, что все это не должно сойти заведующей с рук...

Благодаря связям в ректорате студентам стало известно, что на следующем заседании ректората будет рассмотрено n приказов, касающихся заведующей, при этом принято из них будет ровно p. Для каждого приказа определено две величины: ai — количество седых волос, которое прибавится на голове у заведующей, если она выполнит этот приказ, и bi — недовольство ректората тем, что данный приказ не будет выполнен. Студенты могут добиться того, чтобы в ректорате были приняты любые выбранные ими p приказов. Студенты знают, что из числа этих p приказов заведующая выполнит ровно k, причем она будет выбирать их таким образом, чтобы минимизировать в первую очередь суммарное недовольство ректората ее действиями, а во вторую — количество седых волос, которое прибавится у нее на голове.

Студенты хотят выбрать p приказов так, чтобы на голове у заведующей прибавилось как можно больше седых волос. Если при этом есть несколько вариантов принятия приказов, то в интересах студентов максимизировать недовольство ректората действиями заведующей. Помогите им.

Входные данные

В первой строке записаны три целых числа n (1 ≤ n ≤ 105), p (1 ≤ p ≤ n), k (1 ≤ k ≤ p) — количество приказов, которые будут рассмотрены ректоратом, количество приказов, которые будут приняты ректоратом, и количество приказов, которые будут выполнены заведующей, соответственно. Каждая из следующих n строк содержит два целых числа ai и bi (1 ≤ ai, bi ≤ 109), описывающих соответствующий приказ.

Выходные данные

Выведите в произвольном порядке p различных целых чисел — номера приказов, которые необходимо принять, чтобы осуществить замысел студентов. Приказы нумеруются от 1 до n согласно порядку их следования во входных данных. Если оптимальных решений несколько, можно вывести любое.

Примечание

В первом примере одно из оптимальных решений — это принятие приказов 1, 2, 3. В этом случае заведующая выполнит приказы с номерами 1 и 2. У нее на голове прибавится 10 седых волос, а недовольство ректората ее действиями будет равно 3. Отметим, что такого же результата можно достичь, приняв вместо приказа 3 приказ 4.

Во втором примере заведующая сможет выполнить все приказы, поэтому студентам лучше всего принимать приказы с максимальной суммой ai. На голове у заведующей прибавится 58 седых волос, а недовольство ректората будет равно 0.

E. Оптимизировать!

Структуры данных *2600

Манао решает задачу со следующим условием:

Он придумал решение, которое выдает правильные ответы, но работает слишком медленно. Вам дан псевдокод его решения, где функция getAnswer вычисляет ответ на задачу:


getAnswer(a[1..n], b[1..len], h)
answer = 0
for i = 1 to n-len+1
answer = answer + f(a[i..i+len-1], b, h, 1)
return answer

f(s[1..len], b[1..len], h, index)
if index = len+1 then
return 1
for i = 1 to len
if s[index] + b[i] >= h
mem = b[i]
b[i] = 0
res = f(s, b, h, index + 1)
b[i] = mem
if res > 0
return 1
return 0

Ваша задача — помочь Манао прооптимизировать его алгоритм.

Входные данные

В первой строке через пробел записаны целые числа n, len и h (1 ≤ len ≤ n ≤ 150000; 1 ≤ h ≤ 109). Во второй строке через пробел записано len целых чисел b1, b2, ..., blen (1 ≤ bi ≤ 109). В третьей строке через пробел записано n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109).

Выходные данные

Выведите единственное целое число — ответ на задачу, которую решает Манао.

D. Ксюша и битовые операции

Деревья Структуры данных *1700

У начинающего программиста Ксюши есть последовательность a, состоящая из 2n неотрицательных целых чисел: a1, a2, ..., a2n. Сейчас Ксюша изучает битовые операции. Чтобы лучше понять как они работают, Ксюша решила подсчитать некоторое значение v по a.

А именно, значение v считается в несколько итераций. На первой итерации, Ксюша записывает новую последовательность a1 or a2, a3 or a4, ..., a2n - 1 or a2n, состоящую из 2n - 1 элементов. Другими словами, она записывает побитовое ИЛИ соседних элементов последовательности a. На второй итерации, Ксюша записывает побитовое исключающее ИЛИ соседних элементов полученной после первой итерации последовательности. На третьей итерации Ксюша записывает побитовое ИЛИ соседних элементов последовательности, полученной после второй итерации. И так далее операции побитовое исключающее ИЛИ и побитовое ИЛИ чередуются. В конце концов получится последовательность, состоящая из одного элемента, этот элемент и равен v.

Рассмотрим пример, пусть последовательность a = (1, 2, 3, 4). Тогда запишем все преобразования (1, 2, 3, 4)  →  (1 or 2 = 3, 3 or 4 = 7)  →  (3 xor 7 = 4), в итоге v = 4.

Вам задана изначальная последовательность Ксюши. Но посчитать значение v по заданной последовательности было бы слишком просто, поэтому Вам дополнительно заданы m запросов. Каждый запрос — это пара целых чисел p, b. Запрос p, b означает, что нужно выполнить присвоение ap = b. После каждого запроса, нужно вывести новое значение v посчитанное по новой последовательности a.

Входные данные

В первой строке записаны два целых числа n и m (1 ≤ n ≤ 17, 1 ≤ m ≤ 105). В следующей строке записаны 2n целых чисел a1, a2, ..., a2n (0 ≤ ai < 230). В каждой из следующих m строк записаны запросы. В i-ой строке записаны целые числа pi, bi (1 ≤ pi ≤ 2n, 0 ≤ bi < 230)i-ый запрос.

Выходные данные

Выведите m целых чисел — i-ое число обозначает значение v посчитанное для последовательности a после выполнения i-ого запроса.

Примечание

Для справок по битовым операциям вы можете использовать информацию по ссылке: http://ru.wikipedia.org/wiki/Битовые_операции

D. Граф сортировки пузырьком

Бинарный поиск дп Структуры данных *1500

Яхуб недавно освоил сортировку пузырьком, алгоритм, с помощью которого можно отсортировать по возрастанию перестановку, состоящую из n элементов, a1, a2, ... an. Яхубу этот алгоритм показался очень скучным, поэтому он изобрел свой собственный граф. Этот граф (назовем его G) изначально состоит из n вершин и 0 ребер. При запуске сортировки пузырьком ребра добавляются в граф так, как показано в приведенном ниже алгоритме (псевдокод).


procedure bubbleSortGraph()
построить граф G с n вершинами и 0 ребрами
repeat
swapped = false
for i = 1 to n - 1 (обе границы включительно) do:
if a[i] > a[i + 1] then
добавить неориентированное ребро в G между вершинами a[i] и a[i + 1]
swap( a[i], a[i + 1] ) /* поменять местами a[i] и a[i + 1] */
swapped = true
end if
end for
until not swapped
/* повторять цикл пока перестановка не станет отсортированной */
end procedure

Независимое множество в графе — это такое множество вершин в графе, в котором никакие две вершины не являются смежными (следовательно, между вершинами независимого множества нет ребер). Максимальное независимое множество — это такое независимое множество, у которого наибольшая мощность (размер). Вам дана перестановка, вычислите размер максимального независимого множества графа G, если мы построим его процедурой bubbleSortGraph, передав в качестве перестановки a заданную перестановку.

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 100000). В следующей строке записано n различных целых чисел a1, a2, ..., an (1 ≤ ai ≤ n).

Выходные данные

В первой строке выведите единственное целое число — ответ на задачу.

Примечание

Рассмотрим пример. Сортировка пузырьком поменяет элементы 3 и 1. В граф добавится ребро (1, 3). Теперь перестановка имеет вид [1, 3, 2]. Затем сортировка пузырьком поменяет элементы 3 и 2. В граф добавится ребро (2, 3). Теперь перестановка отсортирована. Построенный граф состоит из 3 вершин и 2 ребер: (1, 3) и (2, 3). Максимальное независимое множество в нем [1, 2].

D. Яхуб и Xor'ы

Структуры данных *2500

Яхубу не нравятся лирические отступления, так что он прямо скажет, что от Ваc требуется в данной задаче.

Дана матрица a, состоящая из n строк и n столбцов. Изначально все элементы в матрице равны 0. Как строки, так и столбцы матрицы 1-индексированные, то есть, строки нумеруются числами 1, 2, ..., n, и столбцы нумеруются числами 1, 2, ..., n. Обозначим элемент матрицы, который стоит на пересечении i-ой строки и j-ого столбца, как ai, j.

Будем называть подматрицей (x0, y0, x1, y1) элементы матрицы ai, j, такие, что выполняются два неравенства: x0 ≤ i ≤ x1, y0 ≤ j ≤ y1.

Напишите программу, которая выполняет операции двух следующих типов:

  1. Query(x0, y0, x1, y1): вывести xor всех элементов подматрицы (x0, y0, x1, y1).
  2. Update(x0, y0, x1, y1, v): каждый элемент подматрицы (x0, y0, x1, y1) xor-ится со значением v, то есть элемент подматрицы b заменяется на b xor v.
Входные данные

Первая строка содержит два целых числа: n (1 ≤ n ≤ 1000) и m (1 ≤ m ≤ 105). Целое число m обозначает количество операций, которые нужно выполнить. Каждая из m следующих строк содержит пять или шесть целых чисел, в зависимости от типа текущей операции.

Если i-ая операция из входных данных — это query (запрос), первое число i-ой строки будет равно 1. За единицей будут идти четыре целых числа x0, y0, x1, y1. Если же i-ая операция — это операция update, первое число в i-ой строке будет равно 2. За двойкой будут идти пять целых чисел x0, y0, x1, y1, v.

Гарантируется, что для каждой операции update выполняется следующее неравенство: 0 ≤ v < 262. Гарантируется, что для каждой операции выполняются следующие неравенства: 1 ≤ x0 ≤ x1 ≤ n, 1 ≤ y0 ≤ y1 ≤ n.

Выходные данные

Для каждой операции query выведите результат в отдельной строке.

Примечание

После первых 3-x операций, матрица будет выглядеть следующим образом:


1 1 2
1 1 2
3 3 3

Чтобы выполнить четвертую операцию нужно посчитать 1 xor 2 xor 3 xor 3 = 3.

Чтобы выполнить пятую операцию нужно посчитать 1 xor 3 = 2.

E. Ксюша и дерево

Деревья разделяй и властвуй Структуры данных *2400

У программиста Ксюши есть дерево, состоящее из n вершин. Будем считать, что вершины дерева пронумерованы от 1 до n. Также будем считать, что первоначально вершина номер 1 покрашена в красный цвет, а остальные вершины покрашены в синий цвет.

Расстоянием между двумя вершинами дерева v и u будем называть количество ребер в кратчайшем пути между v и u.

Ксюше нужно научиться быстро выполнять запросы двух видов:

  1. покрасить заданную синюю вершину в красный цвет;
  2. посчитать, какая красная вершина ближе всего к заданной и вывести кратчайшее расстояние до ближайшей красной вершины.

Ваша задача — написать программу, которая будет выполнять описанные запросы.

Входные данные

В первой строке записаны два целых числа n и m (2 ≤ n ≤ 105, 1 ≤ m ≤ 105) — количество вершин в дереве и количество запросов. В следующих n - 1 строках заданы ребра дерева, в i-ой строке записана пара целых чисел ai, bi (1 ≤ ai, bi ≤ n, ai ≠ bi) — очередное ребро дерева.

В следующих m строках заданы запросы. Каждый запрос задан как пара целых чисел ti, vi (1 ≤ ti ≤ 2, 1 ≤ vi ≤ n). Если ti = 1, то в ответ на запрос нужно покрасить синюю вершину vi в красный цвет. Если ti = 2, то в ответ на запрос нужно вывести кратчайшее расстояние от некоторой красной вершины до вершины vi.

Гарантируется, что заданный граф является деревом и что запросы корректны.

Выходные данные

Для каждого запроса второго типа выведите ответ на отдельной строке.

B. Переменный ток

жадные алгоритмы реализация Структуры данных *1600

Безумный ученый Майк только что завершил сборку новой установки для поиска внеземного разума! Он так торопился запустить ее в первый раз, что подключил провода питания не глядя и принялся за опыты. Впоследствии Майк заметил, что эти провода переплелись между собой и что их теперь придется распутывать.

Установку питают два провода: «плюс» и «минус», которые идут по полу от стены (слева) до самой установки (справа). Как в стене, так и в установке на одинаковой высоте имеется по два контакта, к которым в каком-то порядке подключены провода. Провода считаются запутанными, если есть места, где один провод проходит над другим. Например, на картинке ниже таких мест четыре (вид сверху):

Майк знает, в какой последовательности провода проходят друг над другом. Он также заметил, что слева провод «плюс» всегда подключен к верхнему контакту (так, как на картинке). Майк хотел бы распутать провода, не отсоединяя их от контактов и не трогая саму установку. Определите, удастся ли ему это сделать. Считайте, что провода можно передвигать как угодно, что провода могут произвольно растягиваться, но не могут рваться.

Для лучшего понимания задачи рекомендуется прочитать пояснения ко всем тестовым примерам.

Входные данные

В единственной строке ввода дана последовательность символов «+» и «-» длиной n (1 ≤ n ≤ 100000). На i-той (1 ≤ i ≤ n) позиции последовательности находится символ «+», если на i-том шаге от стены провод «плюс» проходит над проводом «минус», и символ «-» иначе.

Выходные данные

Выведите «Yes» (без кавычек), если провода можно распутать, или же «No» (без кавычек), если провода распутать нельзя.

Примечание

Первый пример соответствует картинке, приведенной в условии. Чтобы распутать провода, можно сначала «плюс» отвести вниз, избавившись от двух пересечений в середине, а потом провести его под «минусом», убрав и пересечения по краям.

Во втором примере провод «плюс» делает один полный оборот вокруг «минуса». Следовательно, распутать провода нельзя:

В третьем примере провод «плюс» просто два раза подряд проходит сверху над «минусом». Приподняв и переместив «плюс» выше, провода можно распутать:

В четвертом примере «минус» один раз проходит над «плюсом». Не трогая саму установку, нельзя сделать так, чтобы провода не проходили один на другим:

D. Водяное дерево

графы Деревья поиск в глубину и подобное Структуры данных *2100

Безумный ученый Майк построил корневое дерево, которое состоит из n вершин. Каждая вершина представляет собой резервуар, который может быть либо пуст, либо заполнен водой.

Вершины дерева пронумерованы числами от 1 до n. Корень дерева находится в вершине 1. Резервуары детей каждой вершины расположены ниже резервуара этой вершины, при этом вершина соединена с каждым из детей трубой, по которой вниз может стекать вода.

Майк хочет выполнять с деревом следующие операции:

  1. Заполнить водой вершину v. Тогда v и все ее потомки (дети, дети детей, и так далее) заполняются водой.
  2. Опустошить вершину v. Тогда v и все ее предки становятся пустыми.
  3. Определить, заполнена ли вершина v водой в данный момент.

Изначально все вершины дерева пусты.

Майк уже составил полный список операций, которые он хочет выполнить по порядку. Перед испытанием дерева Майк решил провести симуляцию этих действий. Помогите Майку определить, какие результаты он получит в результате выполнения всех операций.

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 500000) — количество вершин в дереве. В каждой из следующих n - 1 строк через пробел записаны по два целых числа ai, bi (1 ≤ ai, bi ≤ n, ai ≠ bi) — ребра дерева.

В следующей строке дано целое число q (1 ≤ q ≤ 500000) — количество операций. В каждой из следующих q строк через пробел записано по два целых числа ci (1 ≤ ci ≤ 3), vi (1 ≤ vi ≤ n), где ci обозначает номер типа операции (согласно нумерации в условии), а vi обозначает вершину, над которой проводится операция.

Гарантируется, что данный граф является деревом.

Выходные данные

Для каждой операции типа 3 выведите на отдельной строке 1, если вершина заполнена, и 0, если вершина пуста. Ответы на запросы выводите в том порядке, в котором запросы даны во входных данных.

C. Суммы подмножеств

Перебор Структуры данных *2500

Дан массив a1, a2, ..., an и m множеств S1, S2, ..., Sm индексов элементов этого массива. Введем обозначение, Sk = {Sk, i} (1 ≤ i ≤ |Sk|), другими словами Sk, i — это некоторый элемент множества Sk.

В задаче нужно ответить на q запросов. Каждый запрос имеет один из следующих типов:

  1. Найти сумму элементов с индексами из множества Sk: . Формат запроса — «? k».
  2. Добавить число x ко всем элементам с индексами из множества Sk: aSk, i заменяется на aSk, i + x для всех i (1 ≤ i ≤ |Sk|). Формат запроса — «+ k x».

После каждого запроса первого типа, выведите искомую сумму.

Входные данные

В первой строке записаны целые числа n, m, q (1 ≤ n, m, q ≤ 105). В следующей строке записаны n целых чисел a1, a2, ..., an (|ai| ≤ 108) — элементы массива a.

Каждая из следующих m строк описывает одно множество индексов. В k-ой строке сначала записано целое положительное число, обозначающее количество элементов в множестве (|Sk|), а затем даны |Sk| различных целых чисел Sk, 1, Sk, 2, ..., Sk, |Sk| (1 ≤ Sk, i ≤ n) — элементы множества Sk.

В следующих q строках заданы запросы. Каждый запрос имеет вид «? k» или «+ k x» и находится на отдельной строчке. Для всех запросов выполняются ограничения: 1 ≤ k ≤ m, |x| ≤ 108. Запросы заданы в том порядке, в котором их нужно выполнять.

Гарантируется, что сумма размеров всех множеств Sk не превосходит 105.

Выходные данные

После каждого запроса первого типа, выведите искомую сумму в отдельной строке.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

B. Раскраска забора

дп жадные алгоритмы реализация Структуры данных *1700

Игорь влюбился в Таню. Чтобы показать, насколько сильно он ее любит, Игорь хочет написать на заборе число напротив дома Тани. Игорь считает, что чем больше число он напишет, тем больше у него шансов покорить Таню.

К сожалению, Игорь смог добыть только v литров краски. Сделав расчеты, Игорь решил, что на цифру d ему понадобится ad литров краски. К тому же до Игоря дошли слухи, что Таня терпеть не может нули. Поэтому Игорь не будет их использовать в написании числа.

Помогите Игорю определить максимальное число, которое он может написать на заборе.

Входные данные

В первой строке записано целое число v (0 ≤ v ≤ 106). Во второй строке записано девять положительных целых чисел a1, a2, ..., a9 (1 ≤ ai ≤ 105).

Выходные данные

Выведите самое большое число, которое удастся написать Игорю на заборе. Если краски не хватит ни на одну цифру (Игорь не сможет ничего написать) выведите -1.

E. Парад

сортировки Структуры данных *2100

Ни один день победы в Берляндии не обходился без парада военной техники. Этот год не является исключением. В связи с этим подготовка уже идёт полным ходом. Танки уже строятся в одну колонну, артиллерийские установки готовы стрелять, солдаты маршируют на главной площади... А у генерала военно-воздушных сил Генералова опять неприятности. За последний год в Берляндии полным ходом шло строительство небоскрёбов, поэтому самолётам теперь не так просто летать по городу. Было решено, что все самолёты будут лететь строго с юга на север, при этом на всём пути самолёта не должно встретиться ни одного небоскрёба, иначе праздник закончится трагически. В министерстве строительства были получены данные об n небоскрёбах (остальные здания достаточно маленькие и самолётам не помешают). Если смотреть на город с юга на север как на плоскость, то i-ое здание представляет собой прямоугольник высоты hi. Его самая западная точка имеет абсциссу li, а самая восточная точка — ri. Рельеф местности в городе плоский, поэтому основания всех зданий находятся на одном уровне. Ваша задача, как главного программиста министерства обороны, по данным о небоскрёбах найти огибающую ломаную, то есть такую что:

  • Если смотреть на город с юга на север как на плоскость, то любая часть любого здания будет находиться внутри или на границе области, ограниченной ломаной вместе с поверхностью земли.
  • Ломаная начинается и заканчивается на уровне поверхности земли, т.е. на высоте 0.
  • Звенья ломаной параллельны осям координат, т.е. могут быть только вертикальными или горизонтальными.
  • Вершины ломаной должны иметь целочисленные координаты.
  • На виде города с юга на север ломаная (вместе с поверхностью земли) ограничивает минимально возможную площадь.
  • Ломаная должна иметь наименьшую длину среди всех ломаных, ограничивающих вместе с поверхностью земли наименьшую площадь.
  • Последовательные звенья ломаной должны быть перпендикулярны.
Рисунок ко второму примеру (в правой части отмечена искомая огибающая ломаная).
Входные данные

В первой строке входного файла задано целое число n (1 ≤ n ≤ 100000). Следующие n строк содержат по три целых числа hi, li, ri (1 ≤ hi ≤ 109,  - 109 ≤ li < ri ≤ 109).

Выходные данные

В первой строке выведите целое число m — количество вершин огибающей ломаной. Следующие m строк должны содержать по 2 целых числа — позицию и высоту вершины ломаной. Вершины ломаной выдавайте в порядке обхода ломаной с запада на восток. Помните, что первая и последняя вершины ломаной должны располагаться на высоте 0.

D. Поиск сов

Бинарный поиск геометрия сортировки Структуры данных хэши *2400

Император Палпатин очень любит сов. У Императора есть чертеж новой Звезды Смерти, на котором нарисовано n различных отрезков и m различных окружностей. Будем полагать, что отрезки пронумерованы от 1 до n некоторым образом, и окружности пронумерованы от 1 до m некоторым образом.

Совой, по мнению Палпатина, является совокупность пары различных окружностей (i, j) (i < j) и одного отрезка k такая, что:

  1. окружности i и j симметричны относительно прямой, содержащей отрезок k;
  2. окружности i и j не имеют общих точек;
  3. окружности i и j имеют одинаковый радиус;
  4. отрезок k пересекается с отрезком, соединяющем центры окружностей i и j.

Помогите Палпатину, посчитайте количество различных сов на рисунке.

Входные данные

В первой строке записаны два целых числа — n и m (1 ≤ n ≤ 3·105, 2 ≤ m ≤ 1500).

Далее в n строках записаны по четыре целых числа x1, y1, x2, y2 — координаты двух концов текущего отрезка. Гарантируется, что каждый отрезок имеет положительную длину.

Затем в m строках записаны по три целых числа xi, yi, ri — координаты центра и радиус i-ой окружности. Все координаты — целые числа, не превосходящие 104 по абсолютной величине. Радиус — целое положительное число, не превосходящее 104.

Гарантируется, что все отрезки и все окружности являются различными.

Выходные данные

Выведите единственное число — ответ на задачу.

Пожалуйста, не используйте спецификатор %lld для вывода 64-битных чисел на С++. Рекомендуется использовать поток cout или спецификатор %I64d.

Примечание

Это сова из первого примера. Она сидит и ждет, когда вы ее посчитаете.

D. Джефф и удаление периодов

Структуры данных *2700

Рассмотрим последовательность, состоящую из n целых чисел: a1, a2, ..., an. Джефф умеет выполнять следующую операцию с последовательностью a:

  • выбрать три целых числа v, t, k (1 ≤ v, t ≤ n; 0 ≤ kv + tk ≤ n), такие что av = av + t, av + t = av + 2t, ..., av + t(k - 1) = av + tk;
  • удалить элементы av, av + t, ..., av + tk из последовательности, при этом оставшиеся элементы последовательности нумеруются заново a1, a2, ..., an - k - 1;
  • перемешать элементы новой последовательности a.

Красота последовательности a — это минимальное количество операций, с помощью которых можно удалить все ее элементы.

Джефф записал последовательность из m целых чисел b1, b2, ..., bm. Теперь Джеффа интересуют q вопросов. Каждый из вопросов задается двумя целыми числами li, ri (1 ≤ li ≤ ri ≤ m). Ответ на i-ый вопрос: значение красоты последовательности bli, bli + 1, ..., bri. Вам задана последовательность b и вопросы. Помогите Джеффу, ответьте на его вопросы.

Входные данные

Первая строка содержит целое число m (1 ≤ m ≤ 105). Следующая строка содержит m целых чисел b1, b2, ..., bm (1 ≤ bi ≤ 105).

Во третьей строке записано целое число q (1 ≤ q ≤ 105) — количество вопросов. Следующие q строк содержат пары чисел, i-ая из них содержит пару целых чисел li, ri (1 ≤ li ≤ ri ≤ m) — описание i-го вопроса.

Выходные данные

В q строках выведите ответы на вопросы Джеффа. Ответы на вопросы выводите в том порядке, в котором они следуют во входных данных.

A. Рыцарский турнир

снм Структуры данных *1500

Ура! Король Берлядии Берл II устраивает рыцарский турнир. Король уже разослал послание всем рыцарям королевства, а они, в свою очередь, дали согласие на участие в этом грандиозном событии.

Что же касается вас, то вы — простой крестьянин. Не удивительно, что рыцарский турнир вы проспали (ведь он проводился в выходной), и теперь вам очень хочется узнать его результаты. В этот раз рыцарский турнир в Берляндии проходил следующим образом:

  • В турнире принимали участие n рыцарей. Каждому рыцарю был присвоен уникальный номер — целое число от 1 до n.
  • Турнир проводился в m сражений, в i-ом сражении все еще не выбывшие рыцари с номерами не меньше li и не больше ri боролись за право продолжить участие в турнире.
  • После i-го сражения среди всех рыцарей, которые боролись, победил только один — рыцарь с номером xi, он продолжил участие в турнире. Остальные рыцари выбыли из турнира.
  • Победитель самого последнего (m-го) сражения (рыцарь с номером xm) был объявлен победителем всего турнира.

Вы узнали у своих друзей информацию про все сражения, и теперь для каждого рыцаря вам интересно знать, каким рыцарем он был побежден. Считается, что рыцарь с номером a победил рыцаря с номером b, если было такое сражение, в котором боролись оба этих рыцаря, а победителем из этого сражения вышел рыцарь с номером a.

Напишите программу, вычисляющую для каждого рыцаря, каким рыцарем он был побежден.

Входные данные

В первой строке записано два целых числа n, m (2 ≤ n ≤ 3·105; 1 ≤ m ≤ 3·105) — количество рыцарей и количество сражений. В каждой из следующих m строк записано три целых числа li, ri, xi (1 ≤ li < ri ≤ nli ≤ xi ≤ ri) — описание i-го сражения.

Гарантируется, что входные данные корректны и соответствуют условию задачи. Гарантируется, что в каждом сражении участвовали как минимум два рыцаря.

Выходные данные

Выведите n целых чисел. Если i-ый рыцарь был побежден, то i-ое число должно быть равно номеру рыцаря, который победил рыцаря с номером i. Если i-ый рыцарь является победителем турнира, то i-ое число должно быть равно 0.

Примечание

Рассмотрим первый тестовый пример. В первом сражении бились рыцари 1 и 2, победил рыцарь 1. Во втором сражении бились рыцари 1 и 3, победил рыцарь 3. В последнем сражении бились рыцари 3 и 4, победил рыцарь 4.

D. Пара чисел

Бинарный поиск математика Перебор Структуры данных *2000

У Семена есть массив a1, a2, ..., an, состоящий из n целых положительных чисел. Сегодня Семен попросил вас найти пару целых чисел l, r (1 ≤ l ≤ r ≤ n) такую, что выполнены следующие условия:

  1. существует целое число j (l ≤ j ≤ r), такое что все числа al, al + 1, ..., ar нацело делятся на aj;
  2. величина r - l принимает максимально возможное значение среди всех пар, для которых верно условие 1;

Помогите Семену, найдите требуемую пару чисел (l, r). Если таких пар несколько, требуется найти все.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 3·105).

Во второй строке записаны n целых чисел через пробел a1, a2, ..., an (1 ≤ ai ≤ 106).

Выходные данные

В первой строке выведите два целых числа — сколько пар нашлось и максимальное значение r - l. Во второй строке выведите все значения l из оптимальных пар в порядке возрастания.

Примечание

В первом примере пара чисел подходящая, поскольку числа 6, 9, 3 делятся на 3.

Во втором примере все числа делятся на число 1.

В третьем примере все числа простые, поэтому условиям 1 и 2 удовлетворяют только пары чисел (1, 1), (2, 2), (3, 3), (4, 4), (5, 5).

C. Сортировка вставками

дп математика реализация Структуры данных *1900

Петя — начинающий программист. Он уже освоил базовые возможности языка C++ и приступил к изучению алгоритмов. Первым алгоритмом, с которым он познакомился, стала сортировка вставками. Петя уже написал код, реализующий этот алгоритм и сортирующий по неубыванию заданный целочисленный ноль-индексированный массив a размера n.

for (int i = 1; i < n; i = i + 1)
{
int j = i;
while (j > 0 && a[j] < a[j - 1])
{
swap(a[j], a[j - 1]); // поменять местами элементы a[j] и a[j - 1]
j = j - 1;
}
}

Петя подает на вход этого алгоритма исключительно массивы, являющиеся перестановками чисел от 0 до n - 1. Он уже выбрал перестановку, которую хочет отсортировать, но решил предварительно поменять местами какие-то два её элемента. Петя хочет выбрать эти элементы таким образом, чтобы количество вызовов функции swap, выполняемых сортировкой, было минимальным. Помогите Пете определить, каким количеством способов можно выполнить обмен с соблюдением этого требования.

Гарантируется, что во входной перестановке всегда можно поменять местами два элемента таким образом, чтобы уменьшилось количество вызовов функции swap.

Входные данные

В первой строке записано единственное целое число n (2 ≤ n ≤ 5000) — количество чисел в перестановке. Во второй строке содержатся n различных целых чисел от 0 до n - 1 включительно — сама перестановка.

Выходные данные

Выведите два целых числа: минимальное количество вызовов функции swap и количество таких пар (i, j), что обмен элементов входной перестановки с индексами i и j позволяет достичь этого минимального количества вызовов.

Примечание

В первом примере подходят пары (0, 3) и (0, 4).

Во втором примере подходят пары (0, 4), (1, 4), (2, 4) и (3, 4).

D. Дураки и дороги

графы жадные алгоритмы поиск в глубину и подобное снм Структуры данных *2100

На уроках географии в школе Вам наверняка рассказывали о Стране Дураков. В частности, Вы должны знать, что внутреннее устройство Страны Дураков не менялось на протяжении многих столетий. Страна состоит из n городов, некоторые пары которых соединены двусторонними дорогами, причем каждая из дорог характеризуется величиной li — своей длиной.

Так и жили бы дураки, но недавно в результате государственного переворота в стране поменялся король — им стал медведь Василий. Василий разделил города страны на области таким образом, что между любыми двумя городами из одной области существует путь по дорогам страны, а между двумя городами из разных областей такого пути нет. После этого Василий решил провести дорожную реформу: построить в стране ровно p новых дорог. Строительство одной дороги происходит следующим образом:

  1. Выбирается пара различных городов u, v, которые будет соединять новая дорога (при этом возможно, что между этими городами уже существует дорога).
  2. Определяется длина новой дороги: если города u, v относятся к различным областям, то длина вычисляется как min(109, S + 1) (S — суммарная длина всех дорог, существующих в соединяемых областях), иначе длина полагается равной 1000.
  3. Между выбранными городами строится дорога указанной длины. Если новая дорога соединяла различные области, то после ее строительства эти две области будут объединены в одну.

Василий хочет, чтобы после проведения дорожной реформы страна состояла ровно из q областей. Ваша задача — разработать для медведя Василия такой план строительства дорог, удовлетворяющий этому требованию, чтобы суммарная длина построенных дорог была минимально возможной.

Входные данные

В первой строке записано четыре целых числа n (1 ≤ n ≤ 105), m (0 ≤ m ≤ 105), p (0 ≤ p ≤ 105), q (1 ≤ q ≤ n) — количество городов в Стране Дураков, количество существующих дорог, количество дорог, которые планируется построить, и требуемое количество областей.

В следующих m строках описываются дороги, существующие на момент начала реформы. Каждая из этих строк содержит три целых числа xi, yi, li: xi, yi — номера городов, которые соединяет дорога (1 ≤ xi, yi ≤ n, xi ≠ yi), li — ее длина (1 ≤ li ≤ 109). Обратите внимание, что одна и та же пара городов может быть соединена несколькими дорогами.

Выходные данные

Если невозможно требуемым образом построить дороги, выведите единственную строку «NO» (без кавычек). В противном случае выведите в первую строку слово «YES» (без кавычек), а в следующих p строках приведите план строительства дорог. Каждая строка плана должна состоять из двух различных целых чисел, задающих номера городов, которые соединяет очередная дорога. Дороги в плане должны следовать в том порядке, в котором их нужно строить. Если существует несколько оптимальных решений, можно вывести любое.

Примечание

Рассмотрим первый пример. До начала реформы Страна Дураков состоит из четырех областей. Первая область включает в себя города 1, 2, 3, вторая — города 4 и 6, третья — города 5, 7, 8, четвертая — город 9. Суммарная длина дорог, существующих в этих областях, составляет 11, 20, 5 и 0 соответственно. Согласно плану, первой строится дорога длины 6 между городами 5 и 9, а второй — дорога длины 23 между городами 1 и 9. Таким образом, суммарная длина построенных дорог составляет 29.

E. Два круга

Перебор реализация Структуры данных *2500

Пусть задана таблица n × m, заполненная целыми числами. Клетку в i-ой строке и j-ом столбце будем обозначать (i, j). Таким образом, (1, 1) является левой верхней клеткой таблицы, а (n, m) — правой нижней. Назовем кругом радиуса r с центром в клетке (i0, j0) множество таких клеток (i, j), что . Будем рассматривать только такие круги, которые не выходят за пределы таблицы, то есть у которых r + 1 ≤ i0 ≤ n - r и r + 1 ≤ j0 ≤ m - r.

Круг радиуса 3 с центром в (4, 5).

Найдите два таких непересекающихся круга заданного радиуса r, что сумма чисел в клетках, принадлежащим этим кругам, максимальна. Два круга пересекаются, если найдется клетка, принадлежащая обоим кругам. Поскольку может быть более одного способа выбрать пару кругов с максимальной суммой, то нас будет интересовать еще и количество таких пар. Посчитайте количество неупорядоченных пар кругов, то есть, к примеру, пара кругов радиуса 2 с центрами в (3, 4) и (7, 7) это та же самая пара, что и пара кругов радиуса 2 с центрами в (7, 7) и (3, 4).

Входные данные

В первой строке записано три целых числа n, m и r (2 ≤ n, m ≤ 500, r ≥ 0). Каждая из следующих n строк содержит по m целых чисел в диапазоне от 1 до 1000 — элементы таблицы. Строки таблицы перечислены сверху вниз, элементы в строках — слева направо. Гарантируется, что существует хотя бы один круг радиуса r, не выходящий за пределы таблицы.

Выходные данные

Выведите два числа — максимальную сумму чисел в клетках, которые находятся в двух непересекающихся кругах, и количество пар непересекающихся кругов с максимальной суммой. Если не существует ни одной пары непересекающихся кругов, то выведите 0 0.

A. Матрица

Комбинаторика реализация Структуры данных *1600

Дана строка из десятичных цифр s. Определим bij = si·sj. Найдите в матрице b количество таких прямоугольников, что сумма bij для всех клеток (i, j), являющихся элементами прямоугольника, в каждом прямоугольнике равна a.

Прямоугольником в матрице называется четверка чисел (x, y, z, t) (x ≤ y, z ≤ t). Элементами прямоугольника называются все клетки (i, j), такие, что x ≤ i ≤ y, z ≤ j ≤ t.

Входные данные

В первой строке записано целое число a (0 ≤ a ≤ 109), во второй строке записана строка из десятичных цифр s (1 ≤ |s| ≤ 4000).

Выходные данные

Выведите единственное целое число — ответ на задачу.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

D. Дима и граф-ловушка

Бинарный поиск кратчайшие пути поиск в глубину и подобное снм Структуры данных *2000

Дима и Инна обожают проводить время вместе. Только Сережа почему-то не обожает уходить из собственной комнаты. Но Дима и Инна так любят друг друга, что решили пойти на криминал...

Дима сконструировал граф-ловушку и под предлогом: «Сереж, смотри какой у меня граф классный!», — толкнул соседа в первую вершину.

Граф-ловушка — это неориентированный граф, состоящий из n вершин и m ребер. Ребру с номером k Дима сопоставил диапазон целых чисел от lk до rk (lk ≤ rk). Чтобы выйти из графа ловушки, Сережа первоначально (перед началом пути) должен выбрать некоторое целое число (обозначим его x), после этого Сережа должен пройти путь от стартовой вершины с номером 1 до конечной вершины с номером n. При этом Сережа может пройти по ребру k только в том случае, если lk ≤ x ≤ rk.

Сережа — математик. Он определил лояльность какого-то пути из 1-ой вершины в n-ую, как количество целых чисел x, выбрав которые первоначально, можно пройти этот путь. Помогите Сереже найти путь, обладающий максимальной лояльностью, и поскорее вернуться в комнату!

Входные данные

Первая строка входных данных содержит два целых числа n и m (2 ≤ n ≤ 103, 0 ≤ m ≤ 3·103). Далее следует m строк, описывающих ребра. Каждая строка содержит четыре целых числа ak, bk, lk и rk (1 ≤ ak, bk ≤ n, 1 ≤ lk ≤ rk ≤ 106). Числа обозначают, что в графе-ловушке k-ое ребро соединяет вершины ak и bk, этому ребру сопоставлен диапазон целых чисел от lk до rk.

Обратите внимание, заданный граф может иметь петли и кратные ребра.

Выходные данные

В единственной строке выходных данных выведите целое положительное число — максимальную лояльность, среди всех путей из первой вершины в n-ую. Если таких путей не существует, или максимальная лояльность равна 0, то в единственной строке выведите «Nice work, Dima!» без кавычек.

Примечание

Пояснение к примеру 1

У нас есть всего 2 способа попасть из вершины 1 в вершину 4: сперва нужно обязательно пройти по ребру 1-2 с диапазоном [1-10], затем, по одному из двух ребер 2-4.

Одно из них содержит диапазон [3-5], то есть мы можем пройти с числами 3, 4, 5. Лояльность такого пути — 3.

Если же идти по ребру 2-4 с диапазоном [2-7], то мы сможем пройти с числами 2, 3, 4, 5, 6, 7. Лояльность — 6. Это и есть ответ.

Ребро 1-2 не влияет на лояльность пути, так как его диапазон содержит в себе диапазоны следующих в пути ребер.

A. Сережа и алгоритм

реализация Структуры данных *1500

Сережа любит самые разные алгоритмы. Недавно он придумал новый алгоритм, на вход которому подается строка. Обозначим входную строку алгоритма как q = q1q2... qk. Алгоритм состоит из двух шагов:

  1. Найти любую непрерывную подпоследовательность (подстроку) из трех символов строки q, которая не равна ни одной из строк «zyx», «xzy», «yxz». Если q не содержит ни одной такой подпоследовательности, завершить алгоритм, иначе перейти к шагу 2.
  2. Переставить буквы в найденной подпоследовательности случайным образом, перейти к шагу 1.

Сережа считает, что алгоритм корректно работает на строке q, если существует хоть какая-то ненулевая вероятность того, что алгоритм завершится. Если же алгоритм в любом случае будет работать бесконечно долго на строке, считается, что он работает некорректно на ней.

Сережа хочет протестировать свой алгоритм. Для этого у него есть строка s = s1s2... sn, состоящая из n символов. Мальчик проводит серию из m тестов. В качестве i-го теста он подает на вход алгоритму строку slisli + 1... sri (1 ≤ li ≤ ri ≤ n). К сожалению, его реализация алгоритма работает слишком долго, поэтому Сережа обратился к вам за помощью. Для каждого теста (li, ri) определите, отработает алгоритм корректно на этом тесте или нет.

Входные данные

В первой строке содержится непустая строка s, ее длина (n) не превосходит 105. Гарантируется, что строка s состоит только из символов: 'x', 'y', 'z'.

Вторая строка содержит целое число m (1 ≤ m ≤ 105) — количество тестов. Следующие m строк содержат сами тесты. В i-ой строке записана пара целых чисел li, ri (1 ≤ li ≤ ri ≤ n).

Выходные данные

Для каждого теста выведите «YES» (без кавычек), если алгоритм работает корректно на соответствующем тесте и «NO» (без кавычек) в противном случае.

Примечание

В первом тесте в первом и втором тесте алгоритм всегда закончит работу за один шаг. В четвертом запросе можно получить строку «xzyx», на которой алгоритм закончит работу. В остальных запросах алгоритм работает некорректно.

B. Сережа и анаграммы

Бинарный поиск Структуры данных *1900

У Сережи есть две последовательности a и b, a также число p. Последовательность a состоит из n целых чисел a1, a2, ..., an. Аналогично, последовательность b состоит из m целых чисел b1, b2, ..., bm. Как обычно, Сережа изучает имеющиеся у него последовательности. Сегодня он хочет найти количество позиций q (q + (m - 1)·p ≤ nq ≥ 1) таких, что последовательность b можно получить из последовательности aq, aq + p, aq + 2p, ..., aq + (m - 1)p перестановкой ее элементов.

Сереже нужно бежать в тренажерный зал, поэтому он попросил вас найти все описанные позиции q.

Входные данные

В первой строке содержатся три целых числа n, m и p (1 ≤ n, m ≤ 2·105, 1 ≤ p ≤ 2·105). В следующей строке содержатся n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109). В следующей строке содержатся m целых чисел b1, b2, ..., bm (1 ≤ bi ≤ 109).

Выходные данные

В первой строке выведите количество подходящих q. Во вторую строку выведите сами подходящие значения в возрастающем порядке.

B. Сережа и суффиксы

дп Структуры данных *1100

У Сережи есть массив a, состоящий из n целых чисел a1, a2, ..., an. Мальчику не сидится на месте, и он решил заняться изучением массива. Сережа выписал на листочек m целых чисел l1, l2, ..., lm (1 ≤ li ≤ n). Для каждого числа li он хочет узнать: сколько есть различных чисел среди чисел ali, ali + 1, ..., an?

Сережа выписывал и выписывал нужные элементы массива, но массив был большой, а времени у Сережи мало. Помогите ему, найдите ответ на описанный вопрос для каждого li.

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n, m ≤ 105). Во второй строке содержится n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 105) — элементы массива.

В следующих m строках записаны целые числа l1, l2, ..., lm. В i-ой строке записано целое число li (1 ≤ li ≤ n).

Выходные данные

Выведите m строк — в i-ой строке выведите ответ для числа li.

E. Валера и запросы

Бинарный поиск Структуры данных *2200

Валера очень любит отрезки. Недавно он придумал одну интересную задачу.

На координатной прямой есть n отрезков, i-й отрезок начинается в позиции li и заканчивается в позиции ri (будем обозначать его [li, ri]). Требуется обработать m запросов, каждый из которых состоит из числа cnti и набора cnti координат точек, расположенных на координатной прямой. Ответом на запрос является количество таких отрезков, что каждый из них содержит хотя бы одну точку из набора. Отрезок [l, r] содержит точку q, если l ≤ q ≤ r.

Решение этой задачи Валере показалось слишком сложным. Поэтому он обратился за помощью к вам. Помогите Валере.

Входные данные

В первой строке задано два целых числа n, m (1 ≤ n, m ≤ 3·105) — количество отрезков на координатной прямой и количество запросов.

В следующих n строках задано описание отрезков. Строка номер i содержит два целых положительных числа li, ri (1 ≤ li ≤ ri ≤ 106) — границы i-го отрезка.

В следующих m строках содержится описание запросов по одному на строке. Каждая строка начинается с целого числа cnti (1 ≤ cnti ≤ 3·105) — количество точек в i-м запросе. Далее в строке идут cnti различных целых положительных чисел p1, p2, ..., pcnti (1 ≤ p1 < p2 < ... < pcnti ≤ 106) — координаты точек в i-м запросе.

Гарантируется, что суммарное количество точек во всех запросах не превосходит 3·105.

Выходные данные

Выведите m целых неотрицательных чисел, где i-e число — ответ на i-й запрос.

C. Древнеберляндский язык

Деревья жадные алгоритмы Структуры данных *1900

Берляндские ученые знают, что в древнеберляндском языке было ровно n слов. Эти слова имели длины l1, l2, ..., ln букв. В словах древнеберляндцы использовали две буквы, 0 и 1. Древние берляндцы говорили быстро и не делали пауз между словами, но при этом всегда могли однозначно понять друг друга. Это было возможно потому, что никакое слово не было префиксом никакого другого (префиксом строки называется некоторая её подстрока, начинающаяся с первого символа).

Помогите ученым определить, можно ли восстановить все слова из древнеберляндского языка, и если можно, выведите сами слова.

Входные данные

В первой строке записано одно целое число N (1 ≤ N ≤ 1000) — количеств слов в древнеберляндском языке. Во второй строке, через пробелы, записаны N целых чисел — длины этих слов. Все длины — натуральные числа, не превосходящие 1000.

Выходные данные

Если такого набора слов не существует, в единственной строке выведите NO. Иначе, в первой строке выведите YES, а в следующих N строках выведите сами слова в том порядке в каком даны их длины во входном файле. Если решений несколько, выведите любое.

D. Сосуды

Деревья реализация снм Структуры данных *1800

Есть система из n сосудов, расположенных один над другим так, как показано на рисунке ниже. Представим, что сосуды пронумерованы числами от 1 до n в порядке от самого верхнего к самому нижнему, объем i-го сосуда равен ai литров.

Изначально все сосуды пустые. В некоторые сосуды наливают воду, при этом вся вода, не поместившаяся в i-й сосуд, переливается в (i + 1)-й. Жидкость, не поместившаяся в n-й сосуд, выливается на пол.

Ваша задача состоит в том, чтобы промоделировать наливание воды в сосуды. Для этого вам потребуется обрабатывать два типа запросов:

  1. Долить в pi-й сосуд xi литров воды;
  2. Вывести, сколько воды находится в ki-м сосуде.

При ответе на второй запрос можно считать, что вся вода, налитая до этого момента, уже успела перелиться между сосудами.

Входные данные

В первой строке записано целое число n — количество сосудов (1 ≤ n ≤ 2·105). Во второй строке записаны n целых чисел a1, a2, ..., an — вместимости сосудов (1 ≤ ai ≤ 109). Вместимости сосудов не обязательно возрастают от верхних сосудов к нижним (см. второй пример). В третьей строке записано целое число m — количество запросов (1 ≤ m ≤ 2·105). Каждая из следующих m строк содержит описание одного запроса. Запрос первого типа задается как «pi xi», запрос второго типа — как «ki» (1 ≤ pi ≤ n, 1 ≤ xi ≤ 109, 1 ≤ ki ≤ n).

Выходные данные

На каждый запрос второго типа в отдельной строке выведите количество воды в соответствующем сосуде.

C. Весело смотреть на фейерверки

дп математика Структуры данных *2100

На главной улице города устраивают фестиваль. Улица поделена на n участков, пронумерованных от 1 до n слева направо. Расстояние от любого участка до соседнего равно 1.

На фестивале запустят m фейерверков. При этом, i-ый (1 ≤ i ≤ m) запуск придется на время ti в участке ai. Если вы будете в участке x (1 ≤ x ≤ n) во время i-ого запуска, вы получите счастья в размере bi - |ai - x| (обратите внимание, что значение счастья может быть отрицательным).

За единичный промежуток времени вы можете пройти до d единиц длины, но сходить с главной улицы запрещено. В начальный момент времени (момент времени 1) вы можете оказаться на произвольном участке, ваша цель — максимизировать сумму полученного от просмотра фейерверков счастья. Найдите наибольшее суммарное счастье.

Обратите внимание, что в одно время могут запускаться два или несколько фейерверков.

Входные данные

В первой строке записано три целых числа n, m, d (1 ≤ n ≤ 150000; 1 ≤ m ≤ 300; 1 ≤ d ≤ n).

В каждой из следующих m строк записаны целые числа ai, bi, ti (1 ≤ ai ≤ n; 1 ≤ bi ≤ 109; 1 ≤ ti ≤ 109). В i-ой строке записано описание i-ого запуска.

Гарантируется, что условие ti ≤ ti + 1 (1 ≤ i < m) будет удовлетворено.

Выходные данные

Выведите единственное целое число — максимальную сумму счастья, которую можно получить от просмотра всех фейерверков.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

D. Весело выбирать поддерево

Бинарный поиск Деревья поиск в глубину и подобное Структуры данных *2600

Дано дерево, состоящее из n вершин. Вершины пронумерованы от 1 до n.

Определим длину отрезка [l, r] величиной r - l + 1. Счет поддерева данного дерева равняется максимальной длине такого отрезка [l, r], что вершины с номерами l, l + 1, ..., r принадлежат поддереву.

Рассмотрим все поддеревья данного дерева размером не больше k, выведите максимальный счет поддерева среди рассматриваемых. Обратите внимание, что в данной задаче дерево не корневое, поэтому поддерево — это любой связный подграф дерева.

Входные данные

В первой строке дано два целых числа n и k (1 ≤ k ≤ n ≤ 105). Каждая из следующих n - 1 строк содержит целые числа ai и bi (1 ≤ ai, bi ≤ n, ai ≠ bi). Это означает, что ai и bi соединены ребром дерева.

Гарантируется, что входные данные представляют дерево.

Выходные данные

Выведите единственное целое число — максимальный возможный счет.

Примечание

В первом примере имеется поддерево размера не больше 6, включающее тройку последовательных номеров вершин. Например, поддерево, состоящее из {1, 3, 4, 5, 7, 8} или из {1, 4, 6, 7, 8, 10}, включает тройку последовательных номеров вершин. Однако не существует поддерева, размер которого не больше 6, включающего 4 или более последовательных номеров вершин.

D. Инна и последовательность

Бинарный поиск Деревья дп Структуры данных *2000

Дима долго думал, что подарить Инне, и подарил ей пустую последовательность w. Теперь ребята хотят заполнить последовательность w нулями и единицами вместе. Для этого они решили поиграть в забавную игру.

Перед началом игры Дима загадывает m целых чисел a1, a2, ..., am (1 ≤ a1 < a2 < ... < am). Далее Инна и Дима начинают играть, то есть добавлять числа в последовательность w. Каждое новое число ребята дописывают в конец последовательности. В некоторые моменты времени Дима решает, что игра слишком близится к концу, поэтому (он же хочет играть с Инной как можно дольше) Дима сильно стукает кулаком по столу. При этом a1-е, a2-е, a3-е, ..., ak-е числа от начала одновременно вылетают из последовательности (в последовательности становится на k чисел меньше). Здесь k — такое максимальное число, что значение ak не превосходит текущей длины последовательности. Если число a1 больше текущей длины w, то из последовательности ничего не вылетает.

Вам дана хронологическая последовательность событий в игре. Каждое событие — это либо добавление числа в конец последовательности w, либо стук Димы по столу. Определите чему будет равна последовательность после того, как все эти события произойдут.

Входные данные

Первая строка входных данных содержит два целых числа n и m (1 ≤ n, m ≤ 106) — количество событий и количество загаданных Димой чисел.

Следующая строка содержит m различных целых чисел ai (1 ≤ ai ≤ 106), отсортированных в порядке возрастания.

Следующие n строк описывают события в хронологическом порядке. Каждая строка содержит одно целое число: -1, 0 или 1. Число -1 означает, что Дима стукает по столу. Число 0 означает, что Инна и Дима добавляют в конец последовательности число 0. Число 1 означает, что Инна и Дима добавляют в конец последовательности число 1.

Выходные данные

В единственной строке выведите последовательность из 0 и 1 — содержимое w после всех событий. Элементы последовательности должны быть выведены в порядке от начала к концу последовательности.

Если после всех событий последовательность w окажется пустой, выведите «Poor stack!».

E. Инна и пупсики

Бинарный поиск геометрия реализация снм Структуры данных *2600

Инна, Дима и Сережа собрались в комнате. На улице холодно, поэтому Сережа предложил ребятам поиграть в настольную игру «Пупсики».

Поле для игры в «Пупсики» представляет собой безграничную плоскость, на которой находятся n синих пупсиков и m красных. Каждый пупсик — это отрезок, который растет во времени. В момент времени t синий пупсик (x, y) представляет собой синий отрезок с концами в точках (x - t, y + t), (x + t, y - t). Аналогично, в момент времени t красный пупсик (x, y) представляет собой красный отрезок с концами в точках (x + t, y + t), (x - t, y - t) плоскости. Первоначально, в момент времени t = 0, все пупсики — это точки на плоскости.

Цель игры — найти первый целочисленный момент времени, в который на плоскости будет существовать прямоугольник ненулевой площади, стороны которого целиком покрываются некоторыми пупсикам (сторона может быть покрыта несколькими пупсиками). Более формально, для любой точки границы прямоугольника должен существовать пупсик, которому эта точка принадлежит. При этом нужно считать, что пупсики являются замкнутыми отрезками, то есть содержат свои конечные точки.

Вам заданы позиции все пупсиков — помогите ребятам найти требуемый момент времени.

Входные данные

Первая строка входных данных содержит два целых числа n и m (1 ≤ n, m ≤ 2000).

В следующих n строках заданы координаты синих пупсиков. В i-той строке записаны целые числа xi, yi — координаты очередного пупсика. В следующих m строках заданы координаты m красных пупсиков в аналогичном формате.

Все координаты во входных данных не превосходят 106 по модулю. Обратите внимание, что все пупсики стоят в различных точках.

Выходные данные

В единственной строке выведите целое число — ответ на задачу. Если прямоугольник никогда не появится на плоскости, выведите «Poor Sereja!» без кавычек.

B. Наибольшая подматрица 2

дп реализация сортировки Структуры данных *1600

Задана матрица, состоящая из нулей и единиц, размером n × m. Разрешается переставить ее строки местами. Какую наибольшую (по площади) подматрицу, состоящую только из единиц, можно получить в заданной матрице описанными операциями?

Пусть строки матрицы a пронумерованы от 1 до n сверху вниз, а столбцы — от 1 до m слева направо. Ячейку матрицы на пересечении i-ой строки и j-го столбца будем обозначать (i, j). Формально, подматрицей матрицы a будем называть четверку d, u, l, r (1 ≤ d ≤ u ≤ n; 1 ≤ l ≤ r ≤ m). Будем считать, что подматрица содержит в себе ячейки (i, j) (d ≤ i ≤ ul ≤ j ≤ r). Площадью подматрицы будем называть количество ячеек, которые она в себе содержит.

Входные данные

В первой строке заданы два целых числа n и m (1 ≤ n, m ≤ 5000). В следующих n строках записано по m символов — матрица a. Матрица a содержит только символы: «0» и «1». Обратите внимание, что элементы матрицы заданы в строках без пробелов.

Выходные данные

Выведите единственное целое число — площадь максимальной полученной подматрицы. Если подматрицу из единиц невозможно получить, выведите 0.

D. Дерево и запросы

Деревья поиск в глубину и подобное Структуры данных *2400

Задано корневое дерево, состоящее из n вершин. Каждая вершина дерева имеет определенный цвет. Будем считать, что вершины дерева пронумерованы целыми числами от 1 до n. Тогда цвет вершины v будем обозначать cv. Корнем дерева является вершина с номером 1.

В задаче вам требуется ответить на m запросов. Каждый запрос характеризуется двумя целыми числами vj, kj. Ответ на запрос vj, kj — это количество таких цветов вершин x, что в поддереве вершины vj содержится как минимум kj вершин цвета x.

Определение корневого дерева можно прочитать по ссылке: http://ru.wikipedia.org/wiki/Дерево_(теория_графов).

Входные данные

В первой строке записаны два целых числа n и m (2 ≤ n ≤ 105; 1 ≤ m ≤ 105). В следующей строке записана последовательность целых чисел c1, c2, ..., cn (1 ≤ ci ≤ 105). В следующих n - 1 строках записаны ребра дерева. В i-ой строке записаны числа ai, bi (1 ≤ ai, bi ≤ nai ≠ bi) — вершины, соединенные ребром дерева.

Далее в m строках записаны запросы. В j-той строке записаны два целых числа vj, kj (1 ≤ vj ≤ n; 1 ≤ kj ≤ 105).

Выходные данные

Выведите m целых чисел — ответы на запросы в порядке появления запросов во входных данных.

Примечание

Поддерево вершины v в корневом дереве с корнем r — это множество вершин дерева {u : dist(r, v) + dist(v, u) = dist(r, u)}. Где dist(x, y) — это длина кратчайшего по количеству ребер пути между вершинами x и y.

B. Подготовка к соревнованию

Бинарный поиск жадные алгоритмы сортировки Структуры данных *1900

Уже совсем скоро состоится крупнейшее в мире соревнование по программированию, а в тестирующей системе до сих пор имеется m багов. У организатора соревнования — одного известного университета — нет иного выбора, как привлечь студентов университета к исправлению всех багов. В университете учатся n студентов, способных выполнять такую работу. Студенты понимают, что являются единственной надеждой организаторов, поэтому не готовы работать бесплатно: i-ый студент за свою помощь хочет получить ci зачетов (независимо от объема проделанной им работы).

Как баги, так и студенты, не одинаковые: каждый баг характеризуется сложностью aj, а каждый студент — уровнем своих способностей bi. Студент i способен пофиксить баг j лишь в том случае, если уровень его способностей не меньше сложности бага: bi ≥ aj, причем он делает это за один день. В противном случае для исправления этого бага придется использовать какого-либо другого студента. Разумеется, никакой студент не может работать над несколькими багами в течение одного дня. Все баги не зависят друг от друга, поэтому их можно исправлять в любом порядке, а разные студенты могут работать параллельно.

Университет хочет исправить все баги как можно быстрее, при этом выставив студентам суммарно не более s зачетов. Определите, каких студентов нужно для этого привлечь, а также расписание работ: какой студент должен исправлять какой баг.

Входные данные

В первой строке содержатся три целых числа, записанные через пробел: n, m и s (1 ≤ n, m ≤ 105, 0 ≤ s ≤ 109) — количество студентов, количество багов в системе и максимальное количество зачетов, которое университет готов поставить студентам.

В следующей строке содержится m целых чисел a1, a2, ..., am (1 ≤ ai ≤ 109), записанных через пробел — сложности багов.

В следующей строке содержится n целых чисел b1, b2, ..., bn (1 ≤ bi ≤ 109), записанных через пробел — уровни способностей студентов.

В следующей строке содержится n целых чисел c1, c2, ..., cn (0 ≤ ci ≤ 109), записанных через пробел — количества зачетов, которые студенты хотят получить за свою помощь.

Выходные данные

Если все баги исправить не удастся, выведите «NO».

Иначе в первой строке выведите «YES», а затем выведите m целых чисел через пробел: i-ое из этих чисел должно равняться номеру студента, который исправит i-ый баг в оптимальном ответе. Баги должны быть исправлены как можно быстрее (должно быть потрачено наименьшее количество дней), а суммарное количество выставленных зачетов не должно при этом превышать s. Если существует несколько оптимальных ответов, разрешается вывести любой.

Примечание

Рассмотрим первый пример.

Третий студент (с уровнем способностей 3) должен исправлять второй и четвертый баги (сложностей 3 и 2 соответственно), а второй студент (с уровнем способностей 1) — первый и третий баги (их сложность также равна 1). Исправление каждого бага займет у каждого студента один день, поэтому на исправление всех багов потребуется два дня (студенты могут работать параллельно).

Второй студент требует за свою помощь 3 зачета, а третий — 6. Это укладывается в возможности университета, который готов поставить не более 9 зачетов.

D. Разработка игры

Структуры данных *2400

Павел стремится создать игру своей мечты. Однако он понял, что своими силами ему не справиться, поэтому он основал девелоперскую компанию и нанял в нее n сотрудников. Теперь он хочет выделить из этих n сотрудников тех, кто будет заниматься непосредственно разработкой игры.

Каждый сотрудник обладает определенным уровнем скилла vi. Кроме того, каждый сотрудник не хочет работать в команде с тем, чей скилл сильно отличается от его, а именно, i-ый сотрудник не будет работать вместе с теми, чей скилл меньше li, и с теми, чей скилл больше ri.

Павел понимает, что игра его мечты не особо сложна для разработки, так что сотрудник с абсолютно любым уровнем скилла будет одинаково полезен. Поэтому он хочет набрать команду наибольшего возможного размера. Помогите ему выделить такую команду.

Входные данные

В первой строке находится единственное целое число n (1 ≤ n ≤ 105) — количество сотрудников, нанятых Павлом.

В каждой из следующих n строк содержатся три целых числа li, vi, ri (1 ≤ li ≤ vi ≤ ri ≤ 3·105), записанные через пробел — минимальное значение скилла сотрудников, с которыми готов вместе работать i-ый сотрудник, скилл самого i-ого сотрудника, и максимальное значение скилла сотрудников, с которыми готов вместе работать i-ый сотрудник.

Выходные данные

В первой строке выведите единственное целое число m — количество сотрудников, которых Павел должен направить на разработку игры.

В следующей строке выведите m целых чисел через пробел — номера этих сотрудников, в любом порядке.

Если существует несколько оптимальных решений, выведите любое из них.

F. Новогоднее дерево

Деревья разделяй и властвуй Структуры данных *2400

Вы — программист, и у вас есть новогоднее дерево (нет, не елка) — дерево из четырех вершин: одна вершина степени три (имеет номер 1), связанная с тремя листами (имеют номера от 2 до 4).

На новый год программисты обычно веселятся, вот и вы решили повеселиться, добавляя вершины в свое дерево. При этом одна операция добавления выглядит следующим образом:

  • Сначала выбирается некоторой лист дерева с номером v.
  • Обозначим количество вершин в дереве на данный момент переменной n, тогда в дерево добавляются две вершины с номерами n + 1 и n + 2, а также ребро между вершинами v и n + 1 и ребро между вершинами v и n + 2.

Как и полагается, ваша задача не просто промоделировать процесс добавления вершин в дерево, но и после каждой операции добавления выводить диаметр текущего дерева. Вперед, на решение новогодней задачи!

Входные данные

В первой строке записано целое число q (1 ≤ q ≤ 5·105) — количество операций. В каждой из следующих q строк записано целое число vi (1 ≤ vi ≤ n) — операция добавления листов к вершине vi. Переменная n обозначает количество вершин в текущем дереве.

Гарантируется, что все заданные операции корректны.

Выходные данные

Выведите q целых чисел — диаметр текущего дерева после каждой операции.

G. Очередь

Структуры данных *2300

В зимний холодный вечер наш герой Вася стоял в очереди на вокзале за билетом на финал чемпионата Codeforces. Как обычно это бывает, кассир, сказав, что он отлучится на 5 минут, ушел на целый час... Тогда Вася, чтобы не скучать в это время, стал изучать такой механизм, как очередь. Наблюдения потрясли Васю.

Каждый человек характеризуется числами ai — важностью его дел (чем это число больше, тем важнее его дело), и числом ci — характеристика его совести. Числа ai образуют перестановку чисел от 1 до n.

Пусть на данный момент очередь состоит из n - 1 людей. Рассмотрим, как ведет себя пришедший номер n. Первым делом он встает в конец текущей очереди, а дальше поступает следующим образом: если у человека, который стоит перед ним важность дел ai меньше чем an, то они меняются местами (выглядит это так: человек номер n спрашивает у предыдущего: «Эээ... простите, пожалуйста, у меня очень важное дело... можете меня пропустить вперед?»), затем он опять спрашивает у впереди стоящего человека, и так далее. Если же ai больше чем an, то продвижение вперед заканчивается. Но такую операцию обмена человек номер n может совершить не более, чем cn раз.

В нашей задаче будем считать, что к моменту, когда человек номер n придет в очередь, процесс обменов в очереди из n - 1 людей уже закончится. Если обмен возможен, то он обязательно происходит.

Ваша задача — помочь Васе промоделировать описанный процесс и найти, в каком порядке пришедшие люди будут располагаться в очереди после окончания всех обменов.

Входные данные

В первой строке входных данных находится целое число n — количество людей, пришедших в данную очередь (1 ≤ n ≤ 105). Далее в n строках заданы описания людей в порядке их прихода — целые числа ai и ci (1 ≤ ai ≤ n, 0 ≤ ci ≤ n), записанные через пробел. Каждое описание находится на отдельной строке. Все ai различны.

Выходные данные

Выведите перестановку чисел от 1 до n, означающую образованную по описанным правилам очередь в порядке от начала к концу. В этой последовательности i-ое число означает номер человека, который будет стоять в очереди на месте номер i после завершения процесса обменов. Люди нумеруются с 1 в порядке, в котором они заданы во входных данных. Числа разделяйте пробелом.

C. Сережа и скобочки

расписания Структуры данных *2000

У Сережи есть скобочная последовательность s1, s2, ..., sn, или, другими словами, строка s длины n, состоящая из символов «(» и «)».

Сереже нужно ответить на m запросов, каждый из которых характеризуется двумя целыми числами li, ri (1 ≤ li ≤ ri ≤ n). Ответом на i-ый запрос является длина наибольшей правильной скобочной подпоследовательности последовательности sli, sli + 1, ..., sri. Помогите Сереже ответить на все запросы.

Определения подпоследовательности и правильной скобочной последовательности смотрите в примечаниях.

Входные данные

Первая строка содержит последовательность символов без пробелов s1, s2, ..., sn (1 ≤ n ≤ 106). Каждый символ это либо «(», либо «)». Вторая строка содержит целое число m (1 ≤ m ≤ 105) количество запросов. Каждая из следующих m строк содержит пару целых чисел. В i-ой строке записаны числа li, ri (1 ≤ li ≤ ri ≤ n) — описание i-го запроса.

Выходные данные

Выведите ответ на каждый запрос в отдельной строке. Ответы выводите в порядке следования запросов во входных данных.

Примечание

Подпоследовательностью длины |x| строки s = s1s2... s|s| (где |s| — длина строки s) называется строка x = sk1sk2... sk|x| (1 ≤ k1 < k2 < ... < k|x| ≤ |s|).

Правильной скобочной последовательностью называется скобочная последовательность, которую можно преобразовать в корректное арифметическое выражение путем вставок между ее символами символов «1» и «+». Например, скобочные последовательности «()()», «(())» — правильные (полученные выражения: «(1)+(1)», «((1+1)+1)»), а «)(» и «(» — нет.

Для третьего запроса искомая последовательность будет «()».

Для четвертого запроса искомая последовательность будет «()(())(())».

E. Сережа и деление

Структуры данных *2600

Предположим, что задана последовательность вещественных чисел a1, a2, ..., a|a| и вещественная переменная x. Разрешено выполнять следующую операцию, состоящую из двух этапов:

  1. выбрать индекс элемента последовательности i (1 ≤ i ≤ |a|);
  2. последовательно выполнить присвоения: .

Обозначим функцией g(a, x) наибольшее значение, которое можно получить в переменной x, используя описанную операцию сколько угодно раз и последовательность a.

У Сережи есть последовательность b1, b2, ..., b|b|. Помогите Сереже посчитать сумму: . Записью [bi, bi + 1, ..., bj] обозначается последовательность, содержащая заключенные в скобки элементы в заданном порядке. Чтобы избежать проблем с точностью, выводите найденную сумму, деленную на |b|2.

Входные данные

Первая строка содержит целое число |b| (1 ≤ |b| ≤ 3·105) — длина последовательности b. Вторая строка содержит |b| целых чисел b1, b2, ..., b|b| (1 ≤ bi ≤ 105).

Выходные данные

В единственную строку выведите вещественное число — искомую сумму, деленную на |b|2. Ваш ответ будет считаться правильным, если его относительная или абсолютная погрешность не будет превышать 10 - 6.

A. Доим коров

жадные алгоритмы Структуры данных *1600

Яхуб помогает деду на ферме. Сегодня надо доить коров. Перед Яхубом выстроились в ряд n коров, пронумерованных от 1 до n слева направо. Каждая корова смотрит либо налево, либо направо. Когда Яхуб доит корову, все остальные коровы, которые это видят, пугаются и теряют одну единицу молока в вымени. Если корова смотрит налево, то она видит всех коров с номерами меньше ее номера. Если же корова смотрит направо, то она видит всех коров с номерами большее ее номера. Корова, которая напугалась однажды, может напугаться еще раз (и потерять еще одну единицу молока). Если корову уже подоили один раз, то она больше не пугается и не теряет молоко. Предполагается, что корова никогда не теряет все молоко, что у нее есть (у коровы в вымени бесконечное количество молока).

Яхуб может определить порядок, в котором он доит коров. Тем не менее он обязан подоить каждую корову ровно один раз. Яхуб хочет потерять как можно меньше молока. Выведите наименьшее количество молока, которое он может потерять.

Входные данные

Первая строка содержит целое число n (1 ≤ n ≤ 200000). Вторая строка содержит n целых чисел a1, a2, ..., an, где ai равняется 0, если корова номер i смотрит налево и 1, если корова смотрит направо.

Выходные данные

Выведите единственное целое число, минимальное количество потерянного молока.

Пожалуйста, не используйте спецификатор %lld для чтения и записи 64 битных целых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом тестовом примере Яхуб доит коров в следующем порядке: корова 3, корова 4, корова 2, корова 1. Когда он доит корову 3, корова 4 теряет 1 единицу молока. Больше молоко не теряется.

C. Дерево подвижных сумм

Деревья поиск в глубину и подобное Структуры данных *2000

Яхуб очень любит деревья. Недавно он обнаружил интересное дерево под названием «дерево подвижных сумм». Дерево состоит из n вершин, пронумерованных от 1 до n, каждая вершина i содержит начальное значение ai. Корень дерева — вершина 1.

Это дерево имеет особое свойство: когда значение val добавляется к значению вершины i, значение -val добавляется ко всем значениям детей вершины i. Обратите внимание, что когда вы добавляете значение -val ребенку вершины i, вы также добавляете -(-val) ко всем детям этого ребенка вершины i и так далее. Для того, чтобы лучше понять описанное свойство, обратите внимание на пояснение к первому тесту.

Дерево поддерживает два типа запросов:

  • «1 x val» — добавить значение val к значению вершины x;
  • «2 x» — вывести текущее значение вершины x.

Чтобы помочь Яхубу лучше понять дерево, надо ответить на m запросов описанных типов.

Входные данные

В первой строке содержатся два целых числа n и m (1 ≤ n, m ≤ 200000). Во второй строке содержится n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 1000). В каждой из следующих n–1 строк содержится по два целых числа, ui и vi (1 ≤ ui, vi ≤ n), означающих, что существует ребро между вершинами ui и vi.

Каждая из следующих m строк содержит запрос в описанном выше формате. Гарантируется, что для всех запросов выполняется: 1 ≤ x ≤ n, 1 ≤ val ≤ 1000.

Выходные данные

Для каждого запроса второго типа (вывод текущего значения вершины) надо вывести ответ на запрос на отдельной строке. Ответы на запросы выводите в порядке следования запросов во входных данных.

Примечание

Изначально значения в вершинах равны [1, 2, 1, 1, 2].

Затем значение 3 добавляется к вершине 2. Вершина 2 передает значение -3 своим сыновьям, и далее значение -3 добавляется к вершинам 4 и 5. Дальше значение никуда не передается. После этого запроса значения в вершинах равны [1, 5, 1,  - 2,  - 1].

Затем значение 2 добавляется к вершине 1. Вершина 1 передает значение -2 своим сыновьям: вершине 2 и вершине 3. Из вершины 2 значение 2 передается вершинам 4 и 5. Вершина 3 не имеет сыновей, следовательно из нее значение не передается. После этого запроса значения в вершинах становятся равны [3, 3,  - 1, 0, 1].

С основными определениями, связанными с корневыми деревьями, можно ознакомиться по ссылке: http://ru.wikipedia.org/wiki/Дерево_(теория_графов)

C. Медведь и простые числа

Бинарный поиск дп математика Перебор реализация Структуры данных теория чисел *1700

Недавно медведь начал изучать структуры данных и столкнулся со следующей задачей.

Задана последовательность целых чисел x1, x2, ..., xn длины n и m запросов, каждый из которых характеризуется двумя целыми числами li, ri. Обозначим за f(p) — количество таких индексов k, что xk делится на p. Ответом на запрос li, ri является сумма: , где S(li, ri) — множество простых чисел из отрезка [li, ri] (обе границы включаются в отрезок).

Помогите медведю справиться с этой задачей.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 106). Во второй строке записаны n целых чисел x1, x2, ..., xn (2 ≤ xi ≤ 107). Числа не обязательно различные.

В третьей строке записано целое число m (1 ≤ m ≤ 50000). В каждой из m следующих строк записана пара целых чисел через пробел li и ri (2 ≤ li ≤ ri ≤ 2·109) — числа, характеризующие текущий запрос.

Выходные данные

Выведите m целых чисел — ответы на запросы в порядке появления запросов во входных данных.

Примечание

Рассмотрим первый тестовый пример. Всего в первом примере 3 запроса.

  1. Поступает первый запрос l = 2, r = 11. Нужно посчитать f(2) + f(3) + f(5) + f(7) + f(11) = 2 + 1 + 4 + 2 + 0 = 9.
  2. Поступает второй запрос l = 3, r = 12. Нужно посчитать f(3) + f(5) + f(7) + f(11) = 1 + 4 + 2 + 0 = 7.
  3. Поступает третий запрос l = 4, r = 4. Так как на этом промежутке нет простых чисел, то сумма равна 0.

E. Георгий и карточки

Бинарный поиск Структуры данных *2200

Георгий — кот, поэтому он очень любит играть.

Виталий выложил перед Георгием в ряд n карточек, причем на каждой карточке было написано одно целое число. Числа, написанные на карточках, были различными. Пронумеруем карточки слева направо целыми числами от 1 до n. Тогда на i-ой слева карточке было написано число pi (1 ≤ pi ≤ n).

Виталий хочет, чтобы в ряду осталось ровно k карточек. Также он хочет, чтобы на i-ой слева карточке было написано число bi. Виталий дал задание Георгию, получить требуемую последовательность карточек, выполнив n - k раз операцию удаления.

За одну операцию удаления Георгий может выбрать w (1 ≤ w; w не превышает текущего количества карточек) лежащих подряд карточек (непрерывный подотрезок карточек). Обозначим числа на этих карточках x1, x2, ..., xw (слева направо). Далее Георгий может убрать со стола одну такую карточку xi, что xi ≤ xj для всех j (1 ≤ j ≤ w). За описанную операцию удаления Георгий получает w кусочков колбасы.

Георгий заинтересовался, какое максимальное количество кусочков колбасы он может получить в сумме, если достигнет желаемого и будет действовать оптимально? Помогите Георгию, узнайте ответ на его вопрос!

Входные данные

В первой строке заданы числа n и k (1 ≤ k ≤ n ≤ 106) — начальное и конечное количество карточек.

Во второй строке заданы n различных целых чисел через пробел p1, p2, ..., pn (1 ≤ pi ≤ n)— начальный ряд из карточек.

В третьей строке заданы k целых чисел через пробел b1, b2, ..., bk — ряд из карточек, который необходимо получить. Гарантируется, что данный ряд возможно получить, используя n - k операций удаления.

Выходные данные

Выведите единственное число — максимальное количество кусочков колбасы, которое может получить Георгий, если будет действовать оптимально.

C. Инна и коробки с конфетами

Структуры данных

Инна очень любит сладкое. Перед ней в ряд лежат n закрытых подарочных коробочек. В каждой из этих коробочек либо лежит конфета (Дима постарался), либо ничего не лежит (Сережа постарался). Будем считать, что коробочки пронумерованы от 1 до n слева направо.

Так как коробочки закрыты, Инна не знает, в каких коробочках лежат конфеты, а в каких — нет. Для того, чтобы узнать это, Инна выбрала число k и задала w вопросов Диме. Каждый вопрос характеризуется двумя целыми числами li, ri (1 ≤ li ≤ ri ≤ n; r - l + 1 делится на k), i-ый вопрос: «Дима, правда, что среди коробочек с номерами от li до ri включительно конфеты лежат исключительно в коробочках с номерами li + k - 1, li + 2k - 1, li + 3k - 1, ..., ri

Дима очень не любит говорить Инне: «Нет!». Поэтому ему интересно, какое количество действий придется совершить для каждого вопроса, чтобы ответ на вопрос был положительным. За одно действие Дима может либо незаметно достать конфету из любой коробки, либо незаметно положить конфету в любую коробку (у Димы бесконечно много конфет). Помогите Диме, посчитать количество действий для каждого вопроса Инны.

Обратите внимание, что Дима не меняет массив во время вопросов Инны. Поэтому когда ведется подсчет количества операций для текущего вопроса, считается, что последовательность коробочек не изменялась.

Входные данные

Первая строка входных данных содержит три целых числа n, k и w (1 ≤ k ≤ min(n, 10), 1 ≤ n, w ≤ 105). Вторая строка содержит n символов. Если в i-ой коробочке лежит конфета, i-ый символ строки равен 1, иначе — 0.

Каждая из следующих w строк содержат по два целых числа li и ri (1 ≤ li ≤ ri ≤ n) — описание i-го вопроса. Гарантируется, что ri - li + 1 делится на k.

Выходные данные

Для каждого вопроса в отдельной строке выведите целое число — минимальное количество операций необходимых Диме, чтобы ответ на вопрос стал положительным.

Примечание

Чтобы удовлетворить первый вопрос придется забрать из первой коробки конфету. Поэтому ответ — 1.

Для второго вопроса нужно забрать из первой коробки конфету, забрать из пятой коробки конфету и положить в шестую коробку конфету. Ответ — 3.

Для третьего вопроса нужно забрать конфету из второй коробки и положить в третью. Ответ — 2.

D. Три массива

Структуры данных

Заданы три массива a, b и c. Каждый массив состоит из n целых чисел. Алиса хочет найти три таких целых числа u, v, w (0 ≤ u, v, w ≤ n), что выполняется следующее условие: каждое число, встречающееся в объединении массивов a, b и c, встречается в первых u элементах массива a, или в первых v элементах массива b, или в первых w элементах массива c. Конечно, Алиса не хочет, чтобы у нее получились огромные числа u, v и w, поэтому она хочет, чтобы сумма u + v + w была как можно меньше.

Пожалуйста, помогите ей найти наименьшую возможную сумму u + v + w.

Входные данные

В первой строке содержится единственное целое число n (1 ≤ n ≤ 105). Во второй строке записаны n чисел через пробел a1, a2, ..., an — массив a. В третьей строке записано описание массива b в аналогичном формате. В четвертой строке записано описание массива c в аналогичном формате. Выполняются следующие ограничения: 1 ≤ ai, bi, ci ≤ 109.

Выходные данные

Выведите единственное целое число — минимальную возможную сумму u + v + w.

Примечание

В первом тестовом примере лучше всего выбрать: u = 3, v = 0, w = 2.

Во втором тестовом примере оптимальный ответ: u = 1, v = 3, w = 1.

C. О меняющемся дереве

графы Деревья Структуры данных

Дано корневое дерево, состоящее из n вершин, пронумерованных от 1 до n. Корень дерева находится в вершине с номером 1.

Изначально во всех вершинах записано число 0. Далее приходят q запросов, каждый из которых имеет один из следующих двух видов:

  • Формат запроса: 1 v x k. В ответ на запрос нужно к числу, записанному в вершине v, добавить x; к числам, записанным в потомках вершины v на расстоянии 1, добавить x - k; и так далее, к числам, записанным в потомках на расстоянии i, нужно добавить x - (i·k). Расстоянием между двумя вершинами считается длина кратчайшего по количеству ребер пути между этими вершинами.
  • Формат запроса: 2 v. В ответ на запрос требуется вывести, какое число сейчас записано в вершине v по модулю 1000000007 (109 + 7).

Выполните заданные во входных данных запросы.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 3·105) — количество вершин в дереве. Во второй строке задано n - 1 целое число p2, p3, ... pn (1 ≤ pi < i), где pi — это номер вершины, являющейся предком вершины i в дереве.

В третьей строке записано целое число q (1 ≤ q ≤ 3·105) — количество запросов. В следующих q строках заданы запросы, по одному на строке. Первое число в строке type означает тип запроса. Если type = 1, то далее заданы целые числа v, x, k (1 ≤ v ≤ n; 0 ≤ x < 109 + 7; 0 ≤ k < 109 + 7) через пробел. Если type = 2, то далее задано целое число v (1 ≤ v ≤ n) — вершина, в которой нужно узнать значение числа.

Выходные данные

Для каждого запроса второго типа на отдельной строке выведите число, записанное в вершине, обозначенной в запросе, по модулю 1000000007 (109 + 7).

Примечание

О корневом дереве можно прочитать здесь: http://ru.wikipedia.org/wiki/Дерево_(теория_графов).

D. Мгновенные сообщения

Структуры данных

Пользователь ainta решил запустить новую систему мгновенных сообщений под названием «aintalk». Используя aintalk, каждый пользователь может беседовать с другими. Пользователь ainta создал прототипы некоторых функций для реализации этой системы.

  1. login(u): Пользователь u заходит в aintalk и становится online.
  2. logout(u): Пользователь u выходит и становится offline.
  3. add_friend(u, v): Пользователь u и пользователь v становятся друзьями. Это значит, что u и v могут разговаривать друг с другом. Отношение дружбы симметричное.
  4. del_friend(u, v): Пользователи u и v прекращают дружбу. Это значит, что u и v с этого момента не могут разговаривать друг с другом.
  5. count_online_friends(u): Функция возвращает количество друзей пользователя u, которые на текущий момент online.
 

Пользователь ainta реализовал описанные функции, но до того, как выпустить релиз системы, он хочет удостовериться, что его код правильный. Помогите ainta проверить код, промоделируйте работу его функций.

Так как сейчас сервер сообщений тестируется некоторыми пользователями, пронумерованными от 1 до n, нет метода, реализующего регистрацию. В момент начала проверки кода некоторые пользователи могут быть online, и у некоторых пользователей могут быть друзья.

Входные данные

В первой строке записано три целых числа через пробел n, m и q (1 ≤ n ≤ 50000; 1 ≤ m ≤ 150000; 1 ≤ q ≤ 250000) — количество пользователей, количество пар друзей, и количество запросов.

Вторая строка содержит целое число o (1 ≤ o ≤ n) — количество онлайн-юзеров перед началом моделирования. В третьей строке записано o целых чисел через пробел x1, x2, ..., xo (1 ≤ xi ≤ n) — идентификаторы онлайн-юзеров. Гарантируется, что эти значения различны.

Каждая из следующих m строк содержит два целых числа через пробел, ai и bi (1 ≤ ai, bi ≤ nai ≠ bi) — идентификаторы двух пользователей, которые уже дружат перед началом моделирования. Гарантируется, что во входных данных не записано кратных дружеских связей. Обратите внимание, что дружба — двусторонняя связь.

Следующие q строк описывают q запросов в следующем формате:

  • «O u» (1 ≤ u ≤ n) : Вызов online(u). Гарантируется, что пользователь u был offline непосредственно перед вызовом функции.
  • «F u» (1 ≤ u ≤ n) : Вызов offline(u). Гарантируется, что пользователь u был online непосредственно перед вызовом функции.
  • «A u v» (1 ≤ u, v ≤ nu ≠ v) : Вызов add_friend(u, v). Гарантируется, что эти два пользователя не были друзьями непосредственно перед вызовом функции.
  • «D u v» (1 ≤ u, v ≤ nu ≠ v) : Вызов del_friend(u, v). Гарантируется, что эти два пользователя были друзьями непосредственно перед вызовом функции.
  • «C u» (1 ≤ u ≤ n) : Вызов count_online_friends(u) и вывод результата в единственной строке.
Выходные данные

Для каждого запроса count_online_friends(u), выведите необходимый ответ в единственной строке.

C. Система регистрации

реализация Структуры данных хэши *1300

В скором времени в Берляндии откроется новая почтовая служба "Берляндеск". Администрация сайта хочет запустить свой проект как можно быстрее, поэтому они попросили Вас о помощи. Вам предлагается реализовать прототип системы регистрации сайта.

Система должна работать по следующему принципу. Каждый раз, когда новый пользователь хочет зарегистрироваться, он посылает системе запрос name со своим именем. Если данное имя не содержится в базе данных системы, то оно заносится туда и пользователю возвращается ответ OK, подтверждающий успешную регистрацию. Если же на сайте уже присутствует пользователь с именем name, то система формирует новое имя и выдает его пользователю в качестве подсказки, при этом подсказка также добавляется в базу данных. Новое имя формируется по следующему правилу. К name последовательно приписываются числа, начиная с единицы (name1, name2, ...), и среди них находят такое наименьшее i, что namei не содержится в базе данных сайта.

Входные данные

В первой строке входных данных задано число n (1 ≤ n ≤ 105). Следующие n строк содержат запросы к системе. Каждый запрос представляет собой непустую строку длиной не более 32 символов, состоящую только из строчных букв латинского алфавита.

Выходные данные

В выходных данных должно содержаться n строк — ответы системы на запросы: ОК в случае успешной регистрации, или подсказку с новым именем, если запрашиваемое уже занято.

E. Инна и бинарная логика

Бинарный поиск битмаски Структуры данных *2100

Вдоволь наслушавшись шуток о женской логике, Инна взяла и перешла на бинарную.

У Инны есть массив a1, состоящий из n целых неотрицательных чисел: a1[1], a1[2], ..., a1[n]. Девочка любит развивать свою бинарную логику, для этого она выполняет упражнение, которое состоит из n этапов: на первом этапе Инна выписывает все элементы массива a1, на i(i ≥ 2) этапе девочка выписывает все элементы массива ai, который состоит из n - i + 1 целых чисел и k-е число которого равно ai[k] = ai - 1[kAND ai - 1[k + 1]. Здесь операция AND обозначает операцию побитового И двух чисел.

Дима решил проверить насколько хорошо Инна выполняет описанное упражнение. Для этого он просит Инну изменять массив и после каждого изменения говорить, чему будет равна сумма чисел, которые Инна выпишет в результате выполнения упражнения над текущим массивом.

Помогите Инне ответить на все запросы Димы.

Входные данные

Первая строка входных данных содержит два целых числа n и m (1 ≤ n, m ≤ 105) — количество элементов в массиве a1 и количество запросов Димы. Следующая строка содержит n целых чисел a1[1], a1[2], ..., a1[n] (0 ≤ ai ≤ 105) — изначальные элементы массива.

В каждой из следующих m строк записана пара целых чисел — описание запросов Димы. Каждый запрос характеризуется двумя целыми числами pi, vi (1 ≤ pi ≤ n; 0 ≤ vi ≤ 105). В ответ на этот запрос Инна должна элемент a1[pi] сделать равным числу vi. Обратите внимание, изменения сохраняются от запроса к запросу.

Выходные данные

Выведите m строк. Для каждого запроса на изменение массива выведите сумму всех чисел, которые выпишет Инна, если будет выполнять упражнение над текущим массивом, в отдельной строке.

E. Два корневых дерева

Деревья реализация Структуры данных *2900

У вас есть два корневых неориентированных дерева, каждое из которых содержит по n вершин. Пронумеруем вершины каждого дерева целыми числами от 1 до n. Корень каждого дерева находится в вершине 1. Ребра первого дерева окрашены в синий цвет, ребра второго — в красный цвет. Для удобства будем говорить, что первое дерево — синее, а второе — красное.

Ребро {x, y} называется плохим для ребра {p, q} если выполнены два условия:

  1. Цвет ребра {x, y} отличен от цвета ребра {p, q}.
  2. Рассмотрим дерево того же цвета, что и ребро {p, q}. Ровно одна из вершин x, y лежит как в поддереве вершины p, так и в поддереве вершины q.

В этой задаче вам нужно промоделировать процесс, который описан далее. Процесс состоит из нескольких этапов:

  1. На каждом этапе удаляются ребра ровно одного цвета.
  2. На первом этапе удаляется ровно одно синее ребро.
  3. Пусть на этапе с номером i были удалены ребра {u1, v1}, {u2, v2}, ..., {uk, vk}. Тогда на этапе с номером i + 1 будут удалены все еще не удаленные плохие ребра для ребра {u1, v1}, затем все еще не удаленные плохие ребра для ребра {u2, v2}, и так далее до ребра {uk, vk}.

Для каждого этапа удаления ребер определите, какие ребра будут удалены на данном этапе. Обратите внимание, что в определении плохого ребра всегда рассматривается изначальное дерево — дерево, в котором еще не удалено ни одно ребро.

Входные данные

В первой строке задано целое число n (2 ≤ n ≤ 2·105) — количество вершин в каждом дереве.

В следующей строке задано n - 1 целое положительное число a2, a3, a4, ..., an (1 ≤ ai ≤ nai ≠ i) — описание ребер первого дерева. Число ai означает, что в первом дереве имеется ребро, соединяющее вершину ai и вершину i.

В следующей строке задано n - 1 целое положительное число b2, b3, b4, ..., bn (1 ≤ bi ≤ nbi ≠ i) — описание ребер второго дерева. Число bi означает, что во втором дереве имеется ребро, соединяющее вершину bi и вершину i.

В следующей строке задано целое число idx (1 ≤ idx < n) — индекс синего ребра, которое было удалено на первом этапе. Считайте, что ребра каждого дерева пронумерованы числами от 1 до n - 1 в том порядке, в котором они заданы во входных данных.

Выходные данные

Для каждого этапа удаления ребер выведите его описание. Каждое описание должно состоять ровно из двух строк. Если на данном этапе будет происходить удаление синих ребер, тогда в первой строке описания этапа должно содержаться слово Blue, иначе слово Red. Во второй строке выведите индексы ребер, которые будут удалены на данном этапе, в порядке возрастания.

Примечание

Для удобства представим, что все ребра корневого дерева получили некоторое направление, причем так, что все вершины достижимы из вершины с номером 1. Тогда поддеревом вершины v будем называть множество вершин, достижимых из вершины с номером v в полученном ориентированном графе (сама вершина v тоже входит в это множество).

E. k-d-последовательность

Структуры данных *3100

Назовем последовательность целых чисел хорошей k-d-последовательностью, если в нее можно добавить не более k чисел так, что после сортировки последовательность станет арифметической прогрессией с разностью d.

К вам в руки попала некая последовательность a, состоящая из n целых чисел. Вам требуется найти наидлиннейший непрерывный ее подотрезок, такой, что он является хорошей k-d-последовательностью.

Входные данные

В первой строке записаны через пробел три целых числа n, k, d (1 ≤ n ≤ 2·105; 0 ≤ k ≤ 2·105; 0 ≤ d ≤ 109). Во второй строке записаны n целых чисел через пробел: a1, a2, ..., an ( - 109 ≤ ai ≤ 109) — сама последовательность.

Выходные данные

Выведите через пробел два целых числа l, r (1 ≤ l ≤ r ≤ n), которые обозначают, что последовательность al, al + 1, ..., ar — наидлиннейший подотрезок, являющийся хорошей k-d-последовательностью.

Если существует несколько оптимальных вариантов ответа, выведите ответ c наименьшим значением l.

Примечание

В первом тестовом примере ответом является отрезок, состоящий из чисел 2, 8, 6 — после добавления числа 4 и сортировки он превращается в последовательность 2, 4, 6, 8 — арифметическую прогрессию с разностью 2.

E. Лабиринт 2D

разделяй и властвуй Структуры данных *2200

Последняя разработка компании R2 в сфере 2D игр — это новый революционный алгоритм поиска кратчайшего пути в лабиринте 2 × n.

Представьте лабиринт, который выглядит как прямоугольник 2 × n, разделенный на единичные квадраты. Каждый единичный квадрат — это либо свободная клетка, либо препятствие. За единицу времени некто может переместиться из свободной клетки лабиринта в любую соседнюю по стороне свободную клетку. Задача о кратчайшем пути формулируется следующим образом. Заданы две свободные клетки лабиринта, нужно определить, какое наименьшее время потребуется, чтобы дойти от одной до другой.

К сожалению, разработанный алгоритм хорошо работает только для одного запроса на поиск кратчайшего пути, на практике же таких запросов возникает достаточно много. Вам, как главному программисту R2, поручено оптимизировать алгоритм поиска кратчайшего пути. Напишите программу, которая эффективно будет отвечать на запросы поиска кратчайшего пути в лабиринте 2 × n.

Входные данные

В первой строке записаны два целых числа n и m (1 ≤ n ≤ 2·105; 1 ≤ m ≤ 2·105) — ширина лабиринта и количество запросов соответственно. В следующих двух строках задан лабиринт. В каждой строке записано по n символов, каждый из которых равен: либо «.» (свободная клетка), либо «X» (препятствие).

В каждой из следующих m строк записано по два целых числа vi и ui (1 ≤ vi, ui ≤ 2n) — описание i-го запроса. Числа vi, ui обозначают, что нужно вывести величину кратчайшего пути из клетки лабиринта с номером vi в клетку с номером ui. Считается, что клетки первой строки лабиринта нумеруются от 1 до n слева направо, а клетки второй строки от n + 1 до 2n слева направо. Гарантируется, что обе заданные клетки свободные.

Выходные данные

Выведите m строк. В i-й строке выведите ответ на i-й запрос — величину кратчайшего пути, или -1, если из первой клетки запроса нельзя дойти до второй.

D. Машмох и резервуары с водой

Бинарный поиск Деревья жадные алгоритмы Структуры данных *2300

Машмох играет в новую игру. В начале у него есть k литров воды и p монеток. Также у него есть корневое дерево (неориентированный связный ациклический граф), состоящее из m вершин. Каждая вершина дерева содержит резервуар с водой, изначально пустой.

Игра начинается с того, что Машмох выбирает несколько (не более k) таких резервуаров (кроме того, что находится в корне) и льет в каждый ровно 1 литр воды. Затем следующий процесс продолжается, пока в резервуарах не остается воды.

  • Процесс состоит из нескольких итераций.
  • В начале каждой итерации Машмох открывает крышки всех резервуаров. Затем он закрывает крышки некоторых резервуаров (ему нельзя закрывать крышку корневого резервуара) на время этой итерации. Пусть некоторый резервуар содержал w литров воды и был закрыт на данной итерации, тогда Машмох платит w монеток за закрытие этого резервуара.
  • Обозначим через x1, x2, ..., xm список вершин дерева, отсортированный в порядке неубывания по глубине. Будем рассматривать вершины из этого списка одну за одной. Сперва опустошается резервуар в вершине x1 (то есть, корень). Затем для каждой вершины xi (i > 1), если ее резервуар закрыт, вершина пропускается, иначе вся вода переливается из резервуара вершины xi в резервуар ее родителя (несмотря на то, что резервуар родителя может быть закрытым).

Предположим, что до опустошения всех резервуаров дерева произошло l итераций. Обозначим количество воды в резервуаре корня после i-й итерации как wi. В результате описанного процесса Машмох выиграет max(w1, w2, ..., wl) долларов. Машмох хочет знать, какое максимальное количество долларов он может выиграть, сыграв приведенную выше игру. Он просит вас найти для него это значение.

Входные данные

В первой строке записано три целых числа через пробел m, k, p (2 ≤ m ≤ 105; 0 ≤ k, p ≤ 109).

Каждая из следующих m - 1 строк содержит два целых числа через пробел ai, bi (1 ≤ ai, bi ≤ mai ≠ bi), ребро дерева.

Считайте, что вершины дерева пронумерованы от 1 до m. Корень дерева имеет номер 1.

Выходные данные

Выведите единственное целое число — число, которое Машмох попросил вас найти.

Примечание

Дерево в первом примере показано на рисунке внизу. Черный, красный и синий цвета соответствуют вершинам с 0, 1, 2 литрами воды.

Один из способов заработать максимальное количество денег — залить 1 литр воды в каждую из вершин, 3 и 4. Начальное состояние указано на рисунке ниже.

Затем первым ходом Машмох заплатит одну монетку за закрытие двери резервуара в третьей вершине. Дерево после первого хода показано на рисунке ниже.

После второго хода в корне будет 2 литра воды.

E. Как Машмох задачи придумывал

Структуры данных *3200

Машмох долго тужился и в конце концов придумал задачу. Теперь ваша задача — решить ее.

Дано корневое дерево T с n вершинами. У каждой вершины есть уникальный номер от 1 до n. Корень T имеет номер 1. Для каждой вершины данного дерева v задан список ее детей в определенном порядке. Вы должны эффективно выполнять следующие запросы:

  1. найти расстояние (количество ребер в кратчайшем пути) от u до v;
  2. заданы v и h, требуется отсоединить вершину v от ее родителя и присоединить к ее h-му предку; более формально, обозначим путь от v до корня как x1, x2, ..., xl (h < l), в таком случае x1 = v, а xl — это корень; требуется отсоединить v от ее родителя (x2) и присоединить ее к xh + 1; при этом вершина v добавляется в конец списка детей вершины xh + 1.
  3. в последовательности вершин, полученной вызовом функции dfs(root), найдите последнюю вершину, находящуюся на расстоянии k от корня.

Псевдокод функции dfs(v) выглядит следующим образом:


// ls[v]: список детей вершины v
// его i-й элемент ls[v][i]
// его размер size(ls[v])
sequence result = empty sequence; //результат равен пустой последовательности
void dfs(vertex now)
{
add now to end of result; // добавить now в конец result
for(int i = 1; i <= size(ls[v]); i = i + 1) //цикл от i = 1 до i = size(ls[v])
dfs(ls[v][i]);
}
Входные данные

В первой строке записано два целых числа через пробел n, m (2 ≤ n ≤ 105; 1 ≤ m ≤ 105), — количество вершин T и количество запросов, которые надо выполнить.

В i-й из n следующих строк записано целое число li (0 ≤ li ≤ n), количество детей i-й вершины. Затем следует li целых чисел через пробел, j-е число является номером j-го ребенка i-й вершины. Обратите внимание, что порядок этих вершин имеет значение.

Каждая из m следующих строк имеет один из следующих форматов: «1 v u», «2 v h», или «3 k». Первое число в строке обозначает тип запроса. Следующие числа — это описание запроса.

Гарантируется, что все запросы корректны. Например, в запросе второго типа h не меньше 2 и не больше расстояния от v до корня. Также в запросе третьего типа есть хотя бы одна вершина на расстоянии k от корня на момент запроса.

Выходные данные

Для каждого запроса первого или третьего типа выведите одну строку, содержащую ответ на запрос.

D. Большие проблемы организаторов

графы Деревья Структуры данных *2800

Финал «Russian Code Cup» 2214 года будет проводиться в n гостиницах. При этом в двух гостиницах, назовем их главными, будут проводиться всевозможные мероприятия, а в остальных поселят участников. Сеть дорог устроена таким образом, что гостиницы соединены n - 1 дорогой, при этом из любой гостиницы можно попасть в любую.

Организаторам интересно, за какое минимальное количество времени все участники доберутся до главных гостиниц, если каждый участник едет в ближайшую к нему главную гостиницу, а перемещение между двумя гостиницами, соединенными дорогой, занимает одну единицу времени.

Сейчас организаторы еще окончательно не определились, какие гостиницы должны быть главными, поэтому они рассматривают различные варианты расположения главных гостиниц. Для каждого рассматриваемого расположения помогите организаторам посчитать минимальное время.

Входные данные

В первой строке находится целое число n (2 ≤ n ≤ 100000) — количество гостиниц. В последующих n - 1 строках содержится по два целых числа — номера гостиниц между которыми есть дорога. Считайте, что гостиницы нумеруются от 1 до n.

Следующая строка содержит целое число m (1 ≤ m ≤ 100000) — количество запросов. В следующих m строках содержится по два различных целых числа — номера предполагаемых главных гостиниц.

Выходные данные

На каждый запрос организаторов выведите одно целое число — время, которое понадобится, чтобы все участники добрались до главных гостиниц.

E. Хитрый пароль

Структуры данных *3100

В целях обеспечения секретности доступ к задачам «Russian Code Cup» во время разработки защищен паролем.

Для выбора пароля жюри умеет генерировать специальную таблицу, содержащую n столбцов и бесконечное число строк. Чтобы построить таблицу, первая строка фиксируется, а все остальные получаются по следующему правилу:

В строке i на позиции p ставится число, равное количеству раз, которое встречается a[i - 1][p] на префиксе a[i - 1][1... p].

Для обеспечения требуемого уровня секретности, жюри должно уметь выполнять следующие операции:

  • Изменить число a[1][p] на число v и перестроить таблицу.
  • Найти число a[x][y], которое будет новым паролем.

Делать все эти действия вручную очень утомительно, поэтому жюри просит вас помочь ему. Напишите программу, отвечающую на запросы жюри.

Входные данные

Первая строка содержит целое число n (1 ≤ n ≤ 100000) — количество столбцов. Вторая строка содержит описание первой строки таблицы, то есть n чисел, каждое из которых не меньше 1 и не превосходят 109.

Третья строка содержит целое число m (1 ≤ m ≤ 100000) — количество запросов.

Далее каждая строка содержит описание запроса, состоящее из трех чисел:

  • Если первое число равно 1, то оставшиеся два — целые числа v, p (1 ≤ v ≤ 109; 1 ≤ p ≤ n). В этом случае значение v нужно поставить в позицию p в первой строке.
  • Если первое число равно 2, то оставшиеся два — целые числа x, y (1 ≤ x ≤ 105; 1 ≤ y ≤ n) — строка и столбец ячейки таблицы, из которой нужно получить значениe.
Выходные данные

Выведите ответ на каждый запрос второго типа, в порядке поступления запросов.

C. Баг в коде

графы реализация Структуры данных *1900

Недавно в коде FOS обнаружили серьезный баг. Глава компании F хочет найти виновника бага и наказать его. Для этих целей было организовано собрание, центральным вопросом которого был: кто сделал баг? На собрании каждый из n программистов сказал: «Я точно знаю, что баг сделал либо x, либо y

Глава компании решил выбрать двух подозреваемых и вызвать их в свой кабинет. Конечно, он должен учитывать мнения программистов. Поэтому глава хочет сделать выбор так, чтобы с ним были согласны как минимум p программистов из n. Программист согласен с выбором двух подозреваемых, если хотя бы одного из двух людей, на которых он указывал на собрании, выбрали в качестве подозреваемого. Сколькими способами глава F может выбрать двух подозреваемых?

Обратите внимание, что даже если какого-то программиста выбрали в качестве подозреваемого, он может быть согласен с выбором главы (если он указывал на собрании на другого выбранного подозреваемого).

Входные данные

В первой строке записаны целые числа n и p (3 ≤ n ≤ 3·105; 0 ≤ p ≤ n) — количество программистов компании F и минимальное требуемое число согласных.

В каждой из n следующих строк записаны два целых числа xi, yi (1 ≤ xi, yi ≤ n) — номера программистов из высказывания i-го программиста. Гарантируется, что xi ≠ i,  yi ≠ i,  xi ≠ yi.

Выходные данные

Выведите единственное целое число — количество возможных выборов. Обратите внимание, что порядок подозреваемых не имеет значения, то есть выборы (1, 2) и (2, 1) считаются одинаковыми.

D. Биатлонная трасса

Бинарный поиск дп Конструктив Перебор Структуры данных *2300

Недавно состоялось официальное заявление мирового олимпийского комитета, согласно которому зимние Олимпийские игры 2030 года пройдут в Томске. Городские власти решили основательно подготовиться к проведению олимпиады и как можно раньше построить все необходимые олимпийские объекты. Первой построена будет биатлонная трасса.

Для строительства биатлонной трассы был выделен участок земли, представляющий собой прямоугольник, разбитый на n × m одинаковых квадратов. Каждый квадрат имеет координаты: номер строки (от 1 до n), в которой он находится, и номер столбца (от 1 до m), в котором он находится. Более того, каждый из квадратов характеризуется своей высотой. В ходе спортивных состязаний биатлонисты будут вынуждены передвигаться из одного квадрата в другой. Если перемещение происходит из более высокого квадрата в более низкий, то биатлонист совершает спуск. Если биатлонист перемещается из более низкого квадрата в более высокий, то он совершает подъем. Если биатлонист перемещается между двумя квадратами с одинаковой высотой, то он двигается по ровной местности.

Биатлонная трасса должна представлять собой границу некоторой прямоугольной области выделенного земельного участка, по которой биатлонисты будут двигаться в направлении движения по часовой стрелке. Известно, что на одно перемещение по ровной местности среднестатистический биатлонист тратит tp секунд, на один подъем — tu секунд, на один спуск — td секунд. Томская администрация хочет выбрать трассу таким образом, чтобы время ее прохождения среднестатистическим биатлонистом было как можно ближе к t секундам. Другими словами, разность времени ts прохождения выбранной трассы и t должна быть минимальна.

Для более четкого понимания можно рассмотреть первый пример входных данных. В этом примере n = 6, m = 7, а администрация хочет, чтобы время прохождения трассы было как можно ближе к t = 48 секундам, причем tp = 3, tu = 6 и td = 2. Если рассмотреть показанный стрелками на изображении прямоугольник, то при движении по его границе по часовой стрелке у среднестатистического биатлониста уйдет ровно 48 секунд. Левый верхний угол этой трассы расположен в квадрате с номером строки 4 и номером столбца 3, а правый нижний — в квадрате с номером строки 6 и номером столбца 7.

Администрация, помимо всего прочего, хочет, чтобы все стороны прямоугольника, по границе которого будут двигаться биатлонисты, состояли не менее чем из трех квадратов и полностью размещалась внутри выделенного земельного участка.

Вас привлекли для написания программы, которая для заданного земельного участка и всех необходимых временных величин найдет наиболее подходящий прямоугольник для создания биатлонной трассы. Если таких прямоугольников несколько — разрешается вывести любой из них.

Входные данные

В первой строке входных данных содержатся три целых числа n, m и t (3 ≤ n, m ≤ 300, 1 ≤ t ≤ 109) — размеры земельного участка и желательное время прохождения.

Во второй строке так же содержатся три целых числа tp, tu и td (1 ≤ tp, tu, td ≤ 100) — время прохождения среднестатистическим биатлонистом ровного участка трассы, подъема и спуска соответственно.

Далее следует n строк по m целых чисел, задающих высоты каждого из квадратов выделенного земельного участка. Каждое из значений высот — целое положительное число, не превышающее 106.

Выходные данные

В единственной строке выходных данных требуется вывести четыре целых положительных числа — номер строки и номер столбца левого верхнего угла, а также номер строки и номер столбца правого нижнего угла выбранного для трассы прямоугольника.

C. Сережа и две последовательности

дп Структуры данных *2300

У Сережи есть две последовательности a1, a2, ..., an и b1, b2, ..., bm, состоящие из целых чисел. Как-то раз Сереже было нечего делать, и он решил поиграть с последовательностями. Правила игры очень простые. Сережа делает несколько ходов, за один ход он может выполнить одно из следующих действий:

  1. Выбрать несколько (хотя бы один) первых элементов последовательности a (непустой префикс a), выбрать несколько (хотя бы один) первых элементов последовательности b (непустой префикс b); при этом элемент последовательности a с наибольшим индексом среди выбранных должен быть равен элементу последовательности b с наибольшим индексом среди выбранных; удалить выбранные элементы из последовательностей.
  2. Удалить все элементы обеих последовательностей.

Первое действие стоит e единиц энергии и приносит на электронный баланс Сергея один доллар. Второе действие стоит столько единиц энергии, сколько элементов удалил Сережа из последовательностей до выполнения этого действия. Выполнив второе действие Сережа получает все деньги, накопившиеся на его электронном балансе за время игры.

Изначально у Сережи есть s единиц энергии и нет денег на электронном балансе. Какое максимальное количество денег Сережа может получить, играя с последовательностями, если в любой момент игры количество его энергии не должно становиться отрицательным?

Входные данные

Первая строка содержит целые числа n, m, s, e (1 ≤ n, m ≤ 105; 1 ≤ s ≤ 3·105; 103 ≤ e ≤ 104). Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 105). Третья строка содержит m целых чисел b1, b2, ..., bm (1 ≤ bi ≤ 105).

Выходные данные

Выведите единственное целое число — максимальную сумму в долларах, которую Сережа может получить.

D. Сережа и квадраты

Бинарный поиск Структуры данных хэши *2300

Сережа нарисовал на плоскости n различных точек. Координаты каждой точки — целые числа. Сейчас ему интересно, сколько существует на плоскости квадратов со сторонами, параллельными осям координат, во всех четырех вершинах которых находятся нарисованные точки? Помогите ему, посчитайте это количество.

Входные данные

Первая строка содержит целое число n (1 ≤ n ≤ 105). В каждой из n следующих строк записана пара целых чисел xi, yi (0 ≤ xi, yi ≤ 105) — координаты i-й точки. Гарантируется, что все заданные точки различны.

Выходные данные

В единственную строку выведите искомое количество квадратов.

B. Перевод заключенных

реализация Структуры данных *1100

В данный момент в тюрьме вашего города содержится n заключенных. Так как в тюрьме осталось мало свободных мест, мэр города решил перевести c заключенных в тюрьму другого города.

Для этого мэр выстроил всех n заключенных в шеренгу. У каждого заключенного на груди написано целое число, обозначающее жестокость совершенного им преступления. Чем больше число, тем серьезнее совершенное преступление.

Мэр попросил вас выбрать c преступников, которых надо перевести в другую тюрьму. Он поставил два условия:

  • Выбранные c преступников должны образовывать некоторый отрезок шеренги. Другими словами, выбранные преступники должны идти последовательно, без пропусков в шеренге.
  • Серьезность преступления каждого из выбранных преступников не должна быть больше t. В противном случае, преступник считается особо опасным, и мэр боится, что он сбежит во время перевода.

Сколькими способами можно выбрать c преступников, удовлетворив оба условия мэра?

Входные данные

В первой строке содержится три целых числа через пробел n (1 ≤ n ≤ 2·105), t (0 ≤ t ≤ 109) и c (1 ≤ c ≤ n). В следующей строке записано n целых чисел через пробел, i-е число обозначает жестокость преступления i-го в шеренге преступника (неотрицательное число, не превосходящее 109).

Выходные данные

Выведите единственное целое число — количество способов выбора c заключенных.

D. Хитрая функция

геометрия разделяй и властвуй Структуры данных *2200

Яхуб и Сорин — лучшие спортивные программисты в своем городе. Но ведь нельзя послать их обоих на важный контест. Поедет тот, кто решит одну-единственную задачу. Блатнаталаг, друг Яхуба, умудрился заполучить задачу до начала контеста. Он хочет, чтобы Яхуб прошел, и поэтому рассказал ему условие этой задачи.

Вам дан массив a (1-индексированный), состоящий из n чисел. Определим функцию f(i, j) (1 ≤ i, j ≤ n) как (i - j)2 + g(i, j)2. Функция g считается следующим псевдо-кодом:


int g(int i, int j) {
int sum = 0;
for (int k = min(i, j) + 1; k <= max(i, j); k = k + 1)
sum = sum + a[k];
return sum;
}

Требуется посчитать значение mini ≠ j  f(i, j).

Яхуб уже нашел решение задачи. А вы сможете?

Входные данные

В первой строке записано единственное целое число n (2 ≤ n ≤ 100000). В следующей строке записано n целых чисел a[1], a[2], ..., a[n] ( - 104 ≤ a[i] ≤ 104).

Выходные данные

В единственной строке выведите ответ на задачу.

E. Химический эксперимент

Бинарный поиск Структуры данных Тернарный поиск *2200

Как-то раз два студента Гриша и Диана оказались в химической лаборатории университета. В лаборатории ребята нашли n колб c ртутью, пронумерованных от 1 до n, и решили провести эксперимент.

Эксперимент состоит из q шагов. На каждом шаге выполняется одно из следующих действий:

  1. Диана выливает все содержимое из колбы номером pi, а затем заливает туда ровно xi литров ртути.
  2. Рассмотрим все возможные способы долить vi литров воды в колбы; для каждого способа посчитаем, сколько жидкости (вода и ртуть) содержит колба с водой с максимальным количеством жидкости; среди всех вычисленных чисел найдем минимальное. Ребята хотят посчитать описанное значение. При подсчетах ребята ничего никуда не доливают на самом деле. Все подсчеты они делают, не изменяя содержимое колб.

К сожалению, оказалось, что вычисления слишком громоздкие, поэтому ребята обратились за помощью к вам. Помогите ребятам провести описанный эксперимент.

Входные данные

В первой строке записано два целых числа n и q (1 ≤ n, q ≤ 105) — количество колб и шагов эксперимента. В следующей строке, через пробел, записано n целых чисел: h1, h2, ..., hn (0 ≤ hi ≤ 109), где hi — это объем ртути в і-й колбе в начале эксперимента.

В следующих q строках записаны действия игры в следующем формате:

  • Строка вида «1 pi xi» обозначает действие первого вида (1 ≤ pi ≤ n; 0 ≤ xi ≤ 109).
  • Строка вида «2 vi» обозначает действие второго вида (1 ≤ vi ≤ 1015).

Гарантируется, что есть хотя бы одно действие второго вида. Гарантируется, что все числа описывающие действия эксперимента целые.

Выходные данные

Для каждого действия второго вида вам нужно вывести подсчитанное значение. Ответ будет считаться правильным, если относительная или абсолютная погрешность не будет превышать 10 - 4.

E. Cardboard Box

жадные алгоритмы Структуры данных *2600

Все, кто играли в Cut the Rope, хорошо знают, как организовано прохождение игры. В игре все уровни разделены на коробки. Изначально доступна только одна коробка с несколькими уровнями. За прохождение уровней игрок зарабатывает звезды, по мере накопления звезд открываются новые уровни.

Представьте, что вы впервые играете в Cut the Rope. В данный момент вам доступны только уровни из первой коробки (кстати, она называется «Cardboard Box»). Каждый уровень характеризуется двумя целыми числами: ai — сколько требуется времени, чтобы пройти уровень на одну звезду, bi — сколько требуется времени, чтобы пройти уровень на две звезды (ai < bi).

Вы хотите как можно быстрее открыть следующую коробку с уровнями, для чего требуется заработать как минимум w звезд. Каким образом нужно действовать, чтобы это сделать? Обратите внимание, что проходить уровень можно только один раз: либо на одну звезду, либо на две. Необязательно проходить все уровни.

Входные данные

В первой строке записаны два целых числа n и w (1 ≤ n ≤ 3·105; 1 ≤ w ≤ 2n) — количество уровней в первой коробке и количество звезд, которое требуется, чтобы открыть следующую коробку. В каждой из следующих n строк записаны два целых числа ai и bi (1 ≤ ai < bi ≤ 109) — характеристики i-го уровня.

Выходные данные

В первой строке выведите целое число t — минимальное время, которое требуется, чтобы открыть следующую коробку.

В следующей строке выведите n цифр без пробелов — описание оптимального плана действий:

  • если i-й уровень нужно пройти на одну звезду, i-я цифра должна быть равна 1;
  • если i-й уровень нужно пройти на две звезды, i-я цифра должна быть равна 2;
  • если i-й уровень вовсе не нужно проходить, i-я цифра должна быть равна 0.
Примечание

В первом тестовом примере ответ 21 также считается правильным.

F. Banners

дп Перебор Структуры данных *3000

Все современные мобильные приложения делятся на платные и бесплатные. Даже разработчики одного приложения часто выпускают две версии: платную версию без рекламы и бесплатную версию с рекламой.

Предположим, что платная версия приложения стоит p (p — целое число) рублей, а бесплатная версия приложения содержит c рекламных баннеров. Каждого пользователя можно охарактеризовать двумя целыми числами: ai — сколько рублей этот пользователь не пожалеет за платную версию приложения, и bi — сколько баннеров он готов терпеть в бесплатной версии приложения.

Поведение каждого пользователя будем считать строго детерминированным:

  • если для пользователя i значение bi не меньше c, тогда он пользуется бесплатной версией,
  • иначе, если значение ai не меньше p, то он покупает платную версию без рекламы,
  • иначе пользователь просто не пользуется приложением.

Каждый пользователь бесплатной версии приложения приносит прибыль c × w рублей. Каждый пользователь платной версии приложения приносит прибыль p рублей.

Ваша задача — помочь разработчикам приложения оптимально выбрать параметры p и c. А именно, считая, что известны все характеристики пользователей, для каждого значения c от 0 до (max bi) + 1 определить максимальную прибыль от приложения и соответствующий параметр p.

Входные данные

В первой строке записаны два целых числа n и w (1 ≤ n ≤ 105; 1 ≤ w ≤ 105) — количество пользователей и прибыль с одного баннера. В каждой из следующих n строк записано два целых числа ai и bi (0 ≤ ai, bi ≤ 105) — характеристики i-го пользователя.

Выходные данные

Выведите (max bi) + 2 строки, в i-й строке выведите два целых числа: pay — максимальная полученная прибыль при c = i - 1, p (0 ≤ p ≤ 109) — соответствующая оптимальная стоимость. Если существует несколько оптимальных решений, разрешается вывести любое.

D. Ребенок и последовательность

математика Структуры данных *2300

В день детей ребенок пришел домой к Пиксу и все перевернул вверх дном. Пикс на него разозлился. В бардаке потерялось много всего, включая любимую последовательность Пикса.

К счастью, Пикс помнит, как можно восстановить последовательность. Сначала нужно завести целочисленный массив a[1], a[2], ..., a[n]. Затем нужно выполнить последовательно m операций. Операции могут быть такими:

  1. Операция вывода суммы (параметры l, r). Пикс должен записать значение .
  2. Операция взятия по модулю (параметры l, r, x). Пикс должен выполнить присвоения a[i] = a[imod x для каждого i (l ≤ i ≤ r).
  3. Операция изменения значения (параметры k, x). Пикс должен изменить значение a[k] на x (иными словами, выполнить присвоение a[k] = x).

Сможете ли вы помочь Пиксу выполнить заданную последовательность операций?

Входные данные

В первой строке записано два целых числа: n, m (1 ≤ n, m ≤ 105). Во второй строке записано n целых чисел через пробел: a[1], a[2], ..., a[n] (1 ≤ a[i] ≤ 109) — начальное значение элементов массива.

Каждая из следующих m строк начинается с целого числа type .

  • Если type = 1, то далее в строке идут два целых числа: l, r (1 ≤ l ≤ r ≤ n) — описание операции 1.
  • Если type = 2, то далее в строке идут еще три целых числа: l, r, x (1 ≤ l ≤ r ≤ n; 1 ≤ x ≤ 109) — описание операции 2.
  • Если type = 3, то далее в строке идут два целых числа: k, x (1 ≤ k ≤ n; 1 ≤ x ≤ 109) — описание операции 3.
Выходные данные

Для каждой операции 1, выведите значение, которое должен записать Пикс. Обратите внимание, что ответ может не помещаться в 32-битное целое число.

Примечание

Рассмотрим первый тестовый пример:

  • Сперва a = {1, 2, 3, 4, 5}.
  • После операции 1, a = {1, 2, 3, 0, 1}.
  • После операции 2, a = {1, 2, 5, 0, 1}.
  • При операции 3, 2 + 5 + 0 + 1 = 8.
  • После операции 4, a = {1, 2, 2, 0, 1}.
  • При операции 5, 1 + 2 + 2 = 5.

    G. Тир

    реализация Структуры данных *2500

    Тир в Берляндском парке культуры и отдыха по праву считается одним из лучших в мире. Ежедневно лучшие стрелки страны оттачивают там свое мастерство, а многочисленные посетители соревнуются в стрельбе по мишеням в борьбе за достойные призы. А недавно директор парка решил сделать онлайн-версию тира. В процессе разработки выяснилось, что нужна программа, эффективно моделирующая процесс стрельбы. Чтобы сформулировать требования к программе, тир был описан формально. Была введена трехмерная декартова система координат, в которой ось X проходила по полу тира по линии, вдоль которой стоят стрелки, ось Y проходила вертикально по стене тира, а положительное направление оси Z совпадало с направлением стрельбы. Плоскость XOY назовем плоскостью стрельбы и будем считать, что все пули выходят из дул в точках этой плоскости и летят параллельно оси Z. Каждая мишень представляет собой прямоугольник, стороны которого параллельны осям X и Y, имеющий положительную z-координату. Все мишени находятся на разном расстоянии от плоскости стрельбы. Пуля попадает в мишень, если она проходит через внутренность или границу соответствующего ей прямоугольника. Когда пуля поражает мишень, мишень падает вертикально вниз, в подпол тира, и больше по ней стрелять нельзя. Мишени достаточно прочные, поэтому пуля не может пробить мишень насквозь, и в случае попадания пуля не летит дальше. На вход программе-симулятору дается расположение всех мишеней, а также координаты всех выстрелов в порядке их появления. Программа должна определить, какая мишень была сбита каждым выстрелом. Если вы еще не догадались, то написать такую программу поручается вам.

    Входные данные

    В первой строке записано целое число n (1 ≤ n ≤ 105) — количество мишеней. Каждая из последующих n строк содержит описание одной мишени. Мишень описывается пятью целыми числами xl, xr, yl, yr, z, задающими ее расположение в пространстве (0 ≤ xl < xr ≤ 107, 0 ≤ yl < yr ≤ 107, 0 < z ≤ 107). В следующей строке записано целое число m (1 ≤ m ≤ 105), задающее количество выстрелов. Далее в m строках описаны выстрелы. Каждый выстрел задается координатами пули в плоскости стрельбы (x, y) (0 ≤ x, y ≤ 107, координаты пуль целые). Выстрелы задаются в том порядке, в каком они производились. Интервалы между выстрелами достаточно большие, а мишень падает очень быстро, поэтому считайте, что падающая мишень не может преградить путь выстрелам, следующим за тем, который ее сбил.

    Выходные данные

    Для каждого выстрела в отдельной строке выведите номер мишени, которую поразил этот выстрел, или 0, если пуля не попала ни в какую мишень. Мишени нумеруются с 1 в том порядке, в каком они заданы во входных данных.

    C. Артем и массив

    жадные алгоритмы Структуры данных *2500

    У Артема есть массив из n целых положительных чисел. Артем решил с ним поиграть. Игра состоит из n ходов. Каждый ход происходит следующим образом. Артем выбирает некоторый элемент массива и удаляет его. За это он получает min(a, b) очков, где a и b — числа, которые были соседями удаленного числа. Если у него нет левого или правого соседа, то Артем не получает никаких очков.

    После удаления элемента две части массива склеиваются и получается новый массив, с которым и продолжает играть Артем. Боре стало интересно, какое максимальное суммарное количество очков может получить Артем, играя в эту игру.

    Входные данные

    В первой строке записано одно целое число n (1 ≤ n ≤ 5·105) — количество элементов в массиве. В следующей строке записано n целых чисел ai (1 ≤ ai ≤ 106) — значения элементов массива.

    Выходные данные

    В единственной строке выведите одно число — максимальное количество очков, которые может получить Артем.

    D. Адам и дерево

    Деревья Структуры данных *2600

    Когда у Адама появляется корневое дерево (связный неориентированный граф без циклов), он сразу начинает его раскрашивать. Более формально, каждому ребру он сопоставляет некоторый цвет таким образом, чтобы выполнялись два условия:

    • Не существует вершины, у которой больше двух инцидентных ребер покрашены в один цвет.
    • Для любых двух вершин, у которых есть инцидентные ребра, покрашенные в один цвет (скажем, c), путь между ними содержит ребра только цвета c.

    Не все раскраски дерева нравятся Адаму одинаково. Рассмотрим путь от некоторой вершины до корня. Количество различных цветов на этом пути назовем стоимостью вершины. Стоимостью раскраски дерева будем называть максимальную стоимость среди всех вершин дерева. Помогите Адаму определить минимальную стоимость раскраски дерева.

    Изначально дерево Адама состоит из одной вершины, которая имеет номер один и является корнем. За один ход Адам подвешивает к уже существующей вершине новую, которая получает номер, равный наименьшему положительному целому не занятому числу. После каждой операции вам нужно сообщать минимальную стоимость раскраски получившегося дерева.

    Входные данные

    В первой строке задано целое число n (1 ≤ n ≤ 106) — количество добавлений новых вершин. Во второй строке записано n чисел pi (1 ≤ pi ≤ i) — номера вершин, к которым подвешивают очередную вершину.

    Выходные данные

    Выведите n целых чисел — минимальные стоимости раскраски дерева после каждого добавления.

    Примечание

    На картинке изображен один из возможных вариантов раскраски дерева из примера в самый последний момент. Стоимость вершин с номерами 11 и 12 равна трем.

    C. DZY любит цвета

    Структуры данных *2400

    DZY любит цвета, он обожает рисовать.

    В один «цветастый» день DZY получил цветную ленточку, состоящую из n сегментов (пронумерованных от 1 до n слева направо). Цвет i-го сегмента ленточки изначально равняется i. Насыщенность цвета каждого сегмента ленточки изначально равна 0.

    Как известно, DZY любит рисовать. Иногда, он берет кисть цвета x и проводит ей линию на ленточке. В таком случае закрашиваются некоторые последовательные сегменты. Представим, что текущий цвет сегмента i равняется y. Когда сегмент закрашивается кистью цвета x, его цвет становится равен x, а насыщенность цвета сегмента возрастает на |x - y|.

    DZY хочет выполнить m операций, каждая операция может быть:

    1. Покрасить все сегменты с номерами от l до r (обе границы включительно) кистью цвета x.
    2. Посчитать сумму насыщенностей цветов сегментов с номерами от l до r (обе границы включительно).

    Поможете DZY?

    Входные данные

    В первой строке записано два целых числа через пробел n, m (1 ≤ n, m ≤ 105).

    В каждой из следующих m строк сначала содержится целое число type (1 ≤ type ≤ 2), обозначающее тип текущей операции.

    Если type = 1, то следом на этой строке идут еще 3 целых числа l, r, x (1 ≤ l ≤ r ≤ n; 1 ≤ x ≤ 108), описывающих операцию типа 1.

    Если type = 2, то следом на этой строке идут еще 2 целых числа l, r (1 ≤ l ≤ r ≤ n), описывающих операцию типа 2.

    Выходные данные

    Для каждой операции типа 2, выведите ответ в отдельной строке — сумму насыщенностей.

    Примечание

    В первом примере изначально цвет каждого сегмента равен [1, 2, 3], а насыщенность цвета каждого сегмента равна [0, 0, 0].

    После первой операции цвета меняются на [4, 4, 3], насыщенности равняются [3, 2, 0].

    После второй операции цвета меняются на [4, 5, 5], насыщенности равняются [3, 3, 2].

    Таким образом, ответ на единственную операцию типа 2 равен 8.

    B. DZY любит модификации

    жадные алгоритмы Перебор Структуры данных *2000

    Как мы знаем, DZY любит играть. Однажды он решил поиграть с матрицей размера n × m. Точнее, он решил модифицировать матрицу, используя ровно k операций.

    Каждая операция может быть одной из двух следующих:

    1. Разрешается выбрать некоторую строку матрицы и уменьшить каждый элемент этой строки на p. Такая операция доставляет DZY удовольствие в размере, равном сумме элементов строки до уменьшения.
    2. Разрешается выбрать некоторый столбец матрицы и уменьшить каждый элемент этого столбца на p. Такая операция доставляет DZY удовольствие в размере, равном сумме элементов столбца до уменьшения.

    DZY хочет знать, какое максимальное суммарное удовольствие он может получить, выполнив ровно k модификаций? Пожалуйста, помогите ему посчитать это значение.

    Входные данные

    В первой строке записано четыре целых числа через пробел: n, m, k и p (1 ≤ n, m ≤ 103; 1 ≤ k ≤ 106; 1 ≤ p ≤ 100).

    Затем следует n строк. В каждой строке записано по m целых чисел aij (1 ≤ aij ≤ 103) — элементы текущей строки матрицы.

    Выходные данные

    Выведите единственное целое число — максимальное суммарное удовольствие, которое DZY может получить.

    Примечание

    В первом примере можно выполнить модификации: столбец 2, строка 2. После этого матрица будет выглядеть так:


    1 1
    0 0

    Во втором примере можно выполнить модификации: столбец 2, строка 2, строка 1, столбец 1, столбец 2. После этого матрица будет выглядеть так:


    -3 -3
    -2 -2

    C. DZY любит числа Фибоначчи

    математика Структуры данных теория чисел *2400

    Как известно, ряд чисел Фибоначчи Fn определяется рекуррентным соотношением

    F1 = 1; F2 = 1; Fn = Fn - 1 + Fn - 2 (n > 2).

    DZY очень любит числа Фибоначчи. Сегодня он дал вам массив, состоящий из n целых чисел: a1, a2, ..., an. Кроме того, он дал вам m запросов. Каждый запрос имеет один из двух следующих типов:

    1. Формат запроса: «1 l r». В ответ на запрос надо добавить Fi - l + 1 к каждому элементу ai, где l ≤ i ≤ r.
    2. Формат запроса: «2 l r». В ответ на запрос надо вывести значение по модулю 1000000009 (109 + 9).

    Помогите DZY ответить на все запросы.

    Входные данные

    В первой строке записано два целых числа n и m (1 ≤ n, m ≤ 300000). Во второй строке записано n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — изначальный массив a.

    Затем следует m строк. Одна строка описывает один запрос в формате, указанном в условии. Гарантируется, что для каждого запроса выполняется неравенство 1 ≤ l ≤ r ≤ n.

    Выходные данные

    Для каждого запроса второго типа выведите значение суммы в отдельной строке.

    Примечание

    После первого запроса a = [2, 3, 5, 7].

    Для второго запроса sum = 2 + 3 + 5 + 7 = 17.

    После третьего запроса a = [2, 4, 6, 9].

    Для четвертого запроса sum = 2 + 4 + 6 = 12.

    C. Танцевальный кружок

    Структуры данных *1900

    Танцевальный кружок посещает n человек. Каждый человек характеризуется своим умением танцевать ai. В начале занятия они выстраиваются в линию слева направо. Пока в линии присутствует хоть одна пара мальчик и девочка, повторяется следующий процесс: стоящие рядом мальчик и девочка, имеющие минимальную разницу умений, отправляются танцевать. Если таких пар несколько, танцевать отправляется самая левая пара. После того как ушла очередная пара, линия снова замыкается, т. е. получается, что линия всегда непрерывна. Под разницей умений имеется в виду модуль разности величин a двух танцоров. Ваша задача — узнать, какие пары и в каком порядке отправятся танцевать.

    Входные данные

    В первой строке записано целое число n (1 ≤ n ≤ 2·105) — количество людей. Во второй строке без пробелов записано n символов B или G. B соответствует мальчику, G соответствует девочке. В третьей строке через пробел записано n целых чисел ai (1 ≤ ai ≤ 107) — умения танцевать. Люди перечислены слева направо в том порядке, в котором они выстроились в линию.

    Выходные данные

    Выведите количество получившихся пар k. Далее выведите k строк по два числа в каждой — номера людей, входящих в очередную пару. Люди нумеруются целыми числами от 1 до n слева направо. Когда уходит очередная пара, перенумеровывать людей не нужно. Номера в одной паре упорядочивайте по возрастанию. Пары выводите в том порядке, в котором они отправляются танцевать.

    E. Три строки

    снм Строки строковые суфф. структуры Структуры данных *2400

    Заданы три строки (s1, s2, s3). Для каждого целого l (1 ≤ l ≤ min(|s1|, |s2|, |s3|), найдите количество троек целых чисел (i1, i2, i3) таких, что три строки sk[ik... ik + l - 1] (k = 1, 2, 3) попарно равны между собой. Все найденные числа выведите по модулю 1000000007 (109 + 7).

    Если какие-то из обозначений вам не знакомы, прочтите примечание.

    Входные данные

    Каждая из трех строк входных данных содержит одну непустую строку. Сумма длин строк не превышает 3·105. Каждая строка состоит только из строчных латинских букв.

    Выходные данные

    Выведите min(|s1|, |s2|, |s3|) чисел, разделенных пробелом — ответы на задачу по модулю 1000000007 (109 + 7).

    Примечание

    Рассмотрим строку t = t1t2... t|t|, где ti обозначает i-й символ строки, а |t| обозначает длину строки t.

    Подстрокой t[i... j] (1 ≤ i ≤ j ≤ |t|) будем называть строку titi + 1... tj.

    F. Перестановка

    разделяй и властвуй Структуры данных хэши *2700

    Вам дана перестановка чисел от 1 до n. Определите, существуют ли такие два целых числа a и b (1 ≤ a, b ≤ na ≠ b), что число (заметьте, что деление не целочисленное, а обычное) находится между a и b в заданной перестановке.

    Входные данные

    Первая строка содержит одно целое число n (1 ≤ n ≤ 300000) — размер перестановки.

    Вторая строка содержит n целых чисел, разделенных пробелами — заданная перестановка.

    Выходные данные

    Выведите «YES», если описанная пара чисел в перестановке встречается, или «NO» в противном случае (в обоих случаях без кавычек, регистр букв не имеет значения).

    Примечание

    Во втором примере 2 находится между 1 и 3. Кроме того, 4 находится между 3 и 5.

    E. Маленькие пони и Lord Tirek

    Структуры данных *3100

    Lord Tirek — кентавр и главный антагонист в последнем эпизоде четвертого сезона сериала «My Little Pony: Friendship Is Magic». В «Twilight's Kingdom» (часть 1), Tirek сбегает из Tartarus. Он высасывает ману из пони, чтобы стать сильнее.

    Основная способность Tirek называется поглощение маны. С помощью нее Tirek может забрать всю ману у любого волшебного существа.

    Рассмотрим упрощенную модель. Представим, что у нас есть n пони (пронумерованы от 1 до n). У каждого пони есть три атрибута:

    • si : количество маны в момент времени 0;
    • mi : максимально возможное количество маны;
    • ri : регенерация маны в единицу времени.

    Lord Tirek выполняет m инструкций, каждая из которых характеризуется тремя целыми числами: ti, li, ri. Числа обозначают, что в момент времени ti Tirek использует свою основную способность, чтобы поглотить ману у пони с номерами от li до ri (обе границы включительно). Вам заданы все инструкции, которые выполняет Tirek, в хронологическом порядке. Для каждой из них выведите, сколько маны суммарно поглотит Tirek, выполняя эту инструкцию.

    Входные данные

    В первой строке записано целое число n (1 ≤ n ≤ 105) — количество пони. Каждая из следующих n строк содержит три целых числа: si, mi, ri (0 ≤ si ≤ mi ≤ 105; 0 ≤ ri ≤ 105), обозначающие характеристики текущего пони.

    В следующей строке записано целое число m (1 ≤ m ≤ 105) — количество инструкций. Каждая из следующих m строк содержит три целых числа: ti, li, ri (0 ≤ ti ≤ 109; 1 ≤ li ≤ ri ≤ n), описывающих текущую инструкцию. Инструкции заданы в порядке строгого возрастания ti (все ti различны).

    Выходные данные

    Для каждой инструкции выведите в отдельной строке количество маны, которое поглотит Tirek, выполнив эту инструкцию.

    Примечание

    Изначально у каждого пони 0 маны. Во время первой инструкции каждый пони имеет 5 маны, таким образом Tirek получает 25 маны в сумме. Каждый пони будет иметь 0 маны после первой инструкции.

    Во время второй инструкции пони 3 имеет 14 маны, а у остальных пони количество маны равно их mi.

    D. Серега и веселье

    Структуры данных *2700

    Серега любит веселье. Только веселятся все по-разному. Серега веселится, решая задачи на запросы. Как-то Федя придумал такую задачу.

    Задан массив a, состоящий n целых положительных чисел, и запросы к нему. Запросы бывают двух типов:

    1. Cделать единичный циклический сдвиг вправо на отрезке от l до r (обе границы включительно). Другими словами, переставить элементы массива следующим образом:
      a[l], a[l + 1], ..., a[r - 1], a[r] → a[r], a[l], a[l + 1], ..., a[r - 1].
    2. Посчитать количество чисел, равных k, на отрезке от l до r (обе границы включительно).

    Федя побежал обрадовать Серегу новой задачей. Серега очень быстро справился с ней. Посмотрим, как справитесь вы?

    Входные данные

    В первой строке записано целое число n (1 ≤ n ≤ 105) — количество элементов массива. Во второй строке записаны n целых чисел a[1], a[2], ..., a[n] (1 ≤ a[i] ≤ n) — элементы массива.

    В третьей строке записано целое число q (1 ≤ q ≤ 105) — количество запросов. В следующих q строках заданы запросы.

    Так как отвечать на запросы вы должны по мере их поступления, запросы будут закодированы. Запросы первого типа во входных данных заданы в формате: 1 l'i r'i. Запросы второго типа во входных данных заданы в формате: 2 l'i r'i k'i. Все заданные числа целые и удовлетворяют ограничениям: 1 ≤ l'i, r'i, k'i ≤ n.

    Чтобы из закодированных входных данных получить данные для запроса, нужно выполнить преобразования:

    li = ((l'i + lastans - 1) mod n) + 1; ri = ((r'i + lastans - 1) mod n) + 1; ki = ((k'i + lastans - 1) mod n) + 1.

    Здесь lastans обозначает последний ответ на запрос 2-го типа (изначально lastans равно 0). Если значение li получилось больше ri, то их нужно обменять местами.

    Выходные данные

    Для каждого запроса 2-го типа выведите ответ в отдельной строке.

    E. Функция

    Структуры данных *2900

    Серега и Федя играют с функциями. Однажды им попалась очень интересная функция. Выглядит она так:

    • f(1, j) = a[j], 1 ≤ j ≤ n.
    • f(i, j) = min(f(i - 1, j), f(i - 1, j - 1)) + a[j], 2 ≤ i ≤ n, i ≤ j ≤ n.

    Здесь a — целочисленный массив длины n.

    Серега и Федя хотят знать значение этой функции в некоторых точках. Но вычислять вручную значения им не хочется. Поэтому они просят помощи у вас.

    Входные данные

    В первой строке содержится целое число n (1 ≤ n ≤ 105) — длина массива a. Следующая строка содержит n целых чисел: a[1], a[2], ..., a[n] (0 ≤ a[i] ≤ 104).

    В следующей строке записано целое число m (1 ≤ m ≤ 105) — количество запросов. Каждая из следующих m строк содержит по два целых числа: xi, yi (1 ≤ xi ≤ yi ≤ n). Числа обозначают, что Федя и Серега хотят узнать, чему равно f(xi, yi).

    Выходные данные

    Выведите m строк — ответы на запросы ребят.

    D. Задача Пашмака и Пармиды

    разделяй и властвуй сортировки Структуры данных *1800

    Пармида — умная девушка, в этом году она хочет принять участие в олимпиаде. Конечно, она хочет, чтобы ее парень тоже был умным! Девушка приготовила следующую тестовую задачу для Пашмака.

    Задана последовательность a, состоящая из n целых чисел: a1, a2, ..., an. Обозначим за f(l, r, x) количество таких индексов k, что: l ≤ k ≤ r и x = ak. Требуется посчитать количество таких пар индексов i, j (1 ≤ i < j ≤ n), что f(1, i, ai) > f(j, n, aj).

    Помогите Пашмаку с этой задачей.

    Входные данные

    В первой строке записано целое число n (1 ≤ n ≤ 106). Во второй строке записано n целых чисел через пробел a1, a2, ..., an (1 ≤ ai ≤ 109).

    Выходные данные

    Выведите единственное целое число — ответ на задачу.

    D. Парковка

    реализация Структуры данных *1800

    В наши дни становится все труднее удачно припарковать свой автомобиль в городе. Представим себе отрезок улицы длиной в L метров, вдоль которого разрешена парковка. Водители должны ставить свои автомобили строго параллельно тротуару с правой стороны улицы (помните, что в стране авторов задач движение правостороннее!). Каждый водитель при парковке хочет оставить себе некоторый запас для маневрирования, поэтому водитель ищет такое место, что расстояние до сзади стоящей машины будет не меньше b метров, а до впереди стоящей — не меньше f метров (если сзади машины нет, то автомобиль можно ставить у самого края отрезка для парковки; то же самое верно для случая, когда спереди не припарковано машин). Введем ось координат вдоль тротуара. Пусть зона для парковки начинается в точке 0 и заканчивается в точке L. Водители едут в направлении увеличения координаты и ищут самое раннее место (с наименьшей возможной координатой), где они могут припарковать машину. В случае, если такого места не находится, водитель едет дальше в поисках счастья. Иногда некоторые машины покидают улицу и освобождают место для парковки. Считая, что на улице никогда не находятся две двигающиеся машины одновременно, напишите программу, которая по информации о водителях, приезжающих на улицу в целях парковки и уезжающих с нее, моделирует процесс и определяет для каждого автомобиля место, занятое им в зоне парковки.

    Входные данные

    В первой строке записаны три целых числа L, b и f (10 ≤ L ≤ 100000, 1 ≤ b, f ≤ 100). Во второй строке дано целое число n (1 ≤ n ≤ 100) — количество запросов к вашей программе. Каждый запрос описывается в отдельной строке и задается двумя числами. Первое число означает тип запроса. Если тип запроса равен 1, то в этом случае второе число означает длину очередного автомобиля (в метрах), который въезжает на улицу в поисках места для парковки. Если же тип запроса равен 2, то тогда второе число означает номер запроса (начиная с 1) такого, что автомобиль, чей приезд на парковку описывался запросом с этим номером, ее покидает. Гарантируется, что этот автомобиль в момент запроса типа 2 был припаркован. Длины автомобилей — это целые числа от 1 до 1000.

    Выходные данные

    Для каждого запроса типа 1 в отдельной строке выведите число -1, если соответствующему автомобилю не нашлось места на парковке вдоль улицы. В противном случае выведите целое число, равное расстоянию от задней части автомобиля в его припаркованном положении до начала зоны парковки.

    E. Расческа

    дп Структуры данных *1900

    Преодолев все испытания, Лара Крофт наконец-то оказалась в комнате с сокровищами. К своему удивлению, не найдя там горы золота, Лара осмотрелась и заметила, что на полу нарисована таблица n × m из плит, на которых написаны целые числа, а у стены валяется огромное число камней. На колонне у таблицы Лара нашла поясняющую табличку, которая гласила, что для получения сокровищ надо в каждой строке таблицы выбрать некоторое ненулевое количество первых плит и положить камни на все эти плиты, придавив их. После этого она получит число золотых монет, равное сумме чисел, написанных на выбранных плитах. Лара быстро придумала, как разложить камни, и уже собиралась сделать это, как заметила приписку к таблице, сделанную внизу и мелким шрифтом. Согласно этой приписке, для того, чтобы своды комнаты не обвалились и не придавили искателя приключений, выбранные плиты должны образовывать расческу. Пояснялось, что выбранные плиты образуют расческу, если последовательность c1, c2, ..., cn, составленная из количеств плит, выбранных в каждой строке таблицы, удовлетворяет следующему свойству: c1 > c2 < c3 > c4 < ..., т.е. знак неравенства между соседними элементами чередуется. Теперь Лара в растерянности и не знает, что делать. Помогите ей определить наибольшее количество монет, которое она может получить, выжив при этом.

    Входные данные

    В первой строке записана пара целых чисел n, m (2 ≤ n, m ≤ 1500). Следующие n строк содержат по m целых чисел каждая — сама таблица. Числа в таблице по модулю не превосходят 10000.

    Выходные данные

    Выведите единственное число — наибольшее количество монет, которое Лара может получить.

    C. Подарок

    Бинарный поиск жадные алгоритмы Структуры данных *1700

    Маленький бобренок — начинающий программист, поэтому информатика — его самый любимый предмет. Совсем скоро будет день рождения учительницы по информатике, и бобренок решил приготовить ей подарок. Он посадил n цветков в ряд на подоконнике и стал ждать, пока они вырастут, чтобы собрать букет ко дню рождения учительницы. Однако, спустя некоторое время, бобренок обнаружил, что цветы перестали расти. Бобренок считает, что дарить слишком маленькие цветы некрасиво, поэтому он решил предпринять соответствующие меры.

    До дня рождения осталось m дней. Высота i-го цветка (считайте, что цветы в ряду пронумерованы от 1 до n слева направо) в данный момент времени равна ai. В каждый из оставшихся m дней бобренок может один раз с помощью специальной лейки полить w подряд идущих цветков, при этом каждый политый цветок в этот же день вырастает на единицу длины. Теперь бобренок хочет знать: какая максимальная высота может получиться у самого маленького цветка в букете?

    Входные данные

    В первой строке через пробел записаны целые числа n, m и w (1 ≤ w ≤ n ≤ 105; 1 ≤ m ≤ 105). Во второй строке через пробел записаны целые числа a1, a2, ..., an (1 ≤ ai ≤ 109).

    Выходные данные

    Выведите целое число — максимальную высоту самого маленького цветка в итоге.

    Примечание

    В первом примере в первый день нужно полить последние 3 цветка, их высота увеличится на 1. В оставшийся день можно вовсе не поливать цветы. В таком случае высоты цветов будут равны: [2, 2, 2, 3, 2, 2]. Высота самого маленького цветка равна 2. Сделать эту высоту равной 3 за 2 дня никак не получится.

    C. Яблов и лист бумаги

    реализация Структуры данных *2200

    У Яблова есть очень большой лист бумаги в форме прямоугольника размера 1 × n. Ваша задача — помочь Яблову свернуть этот лист. Для этого надо выполнить q запросов. Каждый запрос имеет один из следующих двух типов:

    1. Свернуть лист в позиции pi. После этого запроса левая часть листа размера 1 × pi должна оказаться над правой частью листа размера 1 × ([текущая ширина листа бумаги] - pi).
    2. Посчитать суммарную ширину листов бумаги, которые получатся, если сделать два вертикальных разреза описанным далее способом и учитывать только листы между этими разрезами. Один разрез проводится на расстоянии li от левой границы текущего листа бумаги, а другой разрез проводится на расстоянии ri от левой границы текущего листа бумаги.

    Чтобы лучше понять описанные операции, посмотрите пояснение первого тестового примера.

    Входные данные

    В первой строке записано два целых числа: n и q (1  ≤ n ≤ 105; 1 ≤ q ≤ 105) — изначальная ширина листа бумаги и количество запросов.

    В каждой из следующих q строк задан один из описанных запросов в следующем формате:

    • «1 pi» (1 ≤ pi < [текущая ширина листа бумаги]) — запрос первого типа.
    • «2 li ri» (0 ≤ li < ri ≤ [текущая ширина листа бумаги]) — запрос второго типа.
    Выходные данные

    Для каждого запроса второго типа выведите ответ.

    Примечание

    Ниже приведены иллюстрации, показывающие, какой формы будет лист бумаги после сворачивания в первом тестовом примере:

    После первой операции сворачивания текущая ширина листа равна 4, после второй операции текущая ширина листа равна 2.

    E. Классическая задача

    графы кратчайшие пути Структуры данных *3000

    Дан взвешенный неориентированный граф из n вершин и m ребер. Найдите кратчайший путь из вершины s в вершину t, либо определите, что пути не существует.

    Входные данные

    В первой строке записано два целых числа, разделенных пробелом, n и m (1 ≤ n ≤ 105; 0 ≤ m ≤ 105).

    В следующих m строках приведено описание ребер графа. В i-й строке записано три целых числа, разделенных пробелами — ui, vi, xi (1 ≤ ui, vi ≤ n; 0 ≤ xi ≤ 105). Это означает, что вершины с номерами ui и vi соединены ребром длины 2xi (2 в степени xi).

    В последней строке записаны два целых числа, разделенных пробелом — номера вершин s и t.

    Вершины пронумерованы от 1 до n. В графе отсутствуют кратные ребра и петли.

    Выходные данные

    В первой строке выведите остаток от деления длины кратчайшего пути на 1000000007 (109 + 7), если путь существует, и -1, если пути не существует.

    В случае, если путь существует, во второй строке выведите целое число k —количество вершин в кратчайшем пути из вершины s в вершину t; в третьей строке выведите k чисел, разделенных пробелами — вершины кратчайшего пути в порядке посещения. Первая вершина должна быть вершиной s, последняя — вершиной t. Если существует несколько кратчайших путей, выведите любой.

    Примечание

    Путем из вершины s в вершину t называется последовательность вершин v0, ..., vk, такая что v0 = s, vk = t, и для любого i от 0 до k - 1 вершины vi и vi + 1 соединены ребром.

    Длиной пути называется сумма длин ребер между vi и vi + 1 для всех i от 0 до k - 1.

    Кратчайшим путем из s в t называется путь, длина которого минимальна среди всех возможных путей из s в t.

    C. Количество способов

    Бинарный поиск дп Перебор Структуры данных *1700

    Задан массив a[1], a[2], ..., a[n], состоящий из n целых чисел. Посчитайте количество способов разбить все элементы массива на три непрерывные части так, чтобы сумма элементов в каждой части была одинаковой.

    Более формально, нужно найти количество таких пар индексов i, j (2 ≤ i ≤ j ≤ n - 1), что .

    Входные данные

    В первой строке задано целое число n (1 ≤ n ≤ 5·105) — количество чисел в массиве. Во второй строке записаны n целых чисел a[1], a[2], ..., a[n] (|a[i]| ≤  109) — элементы массива a.

    Выходные данные

    Выведите единственное целое число — количество способов разбить массив на три части с одинаковой суммой.

    E. Леша и сложная задача

    дп жадные алгоритмы Структуры данных *2300

    Прочитав все предыдущие задачи, можно сделать вывод, что Леша очень умный мальчик. Так и есть! Однажды он придумал следующую задачу.

    Задана последовательность целых чисел a1, a2, ..., an. Требуется найти последовательность b1, b2, ..., b4m наибольшей длины, удовлетворяющую условиям:

    • b4k + 1 = b4k + 3 для всех корректных целых k;
    • b4k + 2 = b4k + 4 для всех корректных целых k;
    • последовательность b является подпоследовательностью a (подпоследовательность не обязательно должна быть непрерывной).

    И что вы думаете? Леша задал задачу Юре, а Юра вам. Помогите Юре, решить задачу.

    Входные данные

    В первой строке содержится единственное целое число n (1 ≤ n ≤ 5·105). В следующей строке содержится n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109).

    Выходные данные

    В первой строке выведите единственное целое число 4m — максимальная длина найденной последовательности. Далее выведите 4m целых чисел b1, b2, ..., b4m — найденная последовательность.

    Если существует несколько оптимальных последовательностей, разрешается вывести любую.

    E. Пушка

    геометрия сортировки Структуры данных *2200

    Бертаун в осаде! Осаждающие заблокировали все выходы и стреляют по городу из пушки. К счастью, берляндской разведке удалось перехватить план стрельбы врагов. Введем декартовую систему координат, начало которой совпадает с позицией пушки, ось Ox направлена вправо в сторону города, ось Oy направлена вверх (в небо). Пушка сделает n выстрелов. Начальные скорости ядер при всех выстрелах совпадают и равны V, так что каждый выстрел характеризуется только одним числом alphai — углом, под которым пушка выстреливает ядро. В силу технических особенностей пушки этот угол не превосходит 45 градусов (π / 4). Мы пренебрегаем размерами пушки и считаем, что вся стрельба ведется из точки (0, 0).

    Снаряды летят по известным физическим законам тела, брошенного под углом к горизонту:

    vx(t) = V·cos(alpha)
    vy(t) = V·sin(alpha)  –  g·t
    x(t) = V·cos(alphat
    y(t) = V·sin(alphat  –  g·t2 / 2

    Ускорение свободного падения g считайте равным 9.8.

    Бертаун защищает m стен. i-ая стена представляет собой вертикальный отрезок (xi, 0) - (xi, yi). Когда ядро попадает в стену, оно застревает в ней и не летит дальше. Если ядро не встретила на своем пути ни одной стены, оно падает на землю (y = 0) и останавливается. Если ядро попадает точно в точку (xi, yi), считается что оно застревает.

    Ваша задача — для каждого ядра найти координаты точки, в которой оно окажется в итоге.

    Входные данные

    В первой строке записаны целые числа n и V (1 ≤ n ≤ 104, 1 ≤ V ≤ 1000) — число выстрелов и начальная скорость каждого снаряда. Во второй строке через пробел записано n вещественных чисел alphai (0 < alphai < π / 4) — углы, под которыми будет стрелять пушка, в радианах. В третьей строке записано целое число m (1 ≤ m ≤ 105) — количество стен. Далее следует m строк по два вещественных числа xi и yi (1 ≤ xi ≤ 1000, 0 ≤ yi ≤ 1000) — координаты стен. Все вещественные числа имеют не более 4 знаков после точки. Cтены могут частично пересекаться и даже совпадать.

    Выходные данные

    Выведите n строк по два вещественных числа — для каждого снаряда выведите координаты точки, куда он попадет. Ваш ответ должен иметь относительную или абсолютную погрешность меньше чем 10 - 4.

    E. МУХ и много-много отрезков

    снм Структуры данных *2700

    Белые медведи Меньшиков и Услада из Санкт-Петербургского зоопарка и слоник Хорас из Киевского зоопарка решили заняться живописью. В рамках создания своего первого шедевра они уже нарисовали на бумаге эскиз, который состоит из n отрезков. Каждый отрезок был либо горизонтальный, либо вертикальный. Теперь друзья хотят упростить этот эскиз, стерев некоторые отрезки или части отрезков, так чтобы окончательное творение удовлетворяло трем условиям:

    1. Хорас хочет иметь возможность нарисовать всю картину, поставив кисть на холст только один раз и не отрывая ее, пока картина не будет закончена (нет ничего плохого в том, чтобы при этом провести кистью несколько раз по одному месту). Поэтому все оставшиеся отрезки должны образовывать единую связную фигуру.
    2. Меньшиков хочет, чтобы получившаяся фигура была простой. Простой фигурой он называет фигуру, которая не содержит ни одного цикла.
    3. Изначально все отрезки на эскизе имеют целочисленные координаты точек начала и конца. Услада не любит вещественные координаты и хочет, чтобы это условие выполнялось и после стирания.

    Так как в остальном их эскиз уже прекрасен, то друзья решили стереть такие части эскиза, чтобы максимизировать сумму длин оставшихся отрезков. От вас требуется посчитать эту максимальную сумму длин оставшихся после стирания отрезков.

    Входные данные

    В первой строке входных данных находится целое число n (1 ≤ n ≤ 2·105) — количество отрезков на эскизе. В следующих n строках находятся по четыре числа x1, y1, x2, y2 ( - 109 ≤ x1 ≤ x2 ≤ 109;  - 109 ≤ y1 ≤ y2 ≤ 109) — две координаты начала и две координаты конца отрезка. Все отрезкы не вырождены и являются либо строго горизонтальными, либо строго вертикальными.

    Никакие два горизонтальных отрезка не имеют общих точек. Никакие два вертикальных отрезка не имеют общих точек.

    Выходные данные

    Выведите единственное целое число — максимальную сумму длин оставшихся отрезков.

    Примечание

    Фигуры, которые можно получить в двух данных примерах:

    В первом примере необходимо стереть любой из отрезков, так как два отрезка вместе не образуют единую связную фигуру.

    Во втором примере изначальные отрезки образуют цикл, есть четыре способа разорвать этот цикл — стереть первый, второй или четвертый отрезок полностью или стереть середину третьего отрезка. Последний вариант изображен на рисунке.

    G. Уроки дизайна задач: увеличиваем ограничения

    битмаски бпф Структуры данных *2800

    Помимо прочего, можно создавать сложные задачи так: рассматриваем простую задачу в качестве запроса и пытаемся найти алгоритм, способный решить ее быстрее, чем наивное решение. Задачи такого типа обычно появляются в OI контестах, как правило, они решаются структурами данных.

    Давайте попробуем придумать такую задачу. Например, возьмем «Задачу о подсчете расстояния Хэмминга»: для двух бинарных строк s и t одинаковой длины, расстояние Хэмминга между ними равняется количеству позиций, в которых их соответствующие символы различны. Например, расстояние Хэмминга между «00111» и «10101» равняется двум (различные символы выделены жирным).

    Давайте используем задачу о расстоянии Хэмминга как запрос: вам даны две строки, a и b, и несколько запросов. Каждый запрос будет иметь следующий вид: каково расстояние Хэмминга между двумя строками ap1ap1 + 1...ap1 + len - 1 и bp2bp2 + 1...bp2 + len - 1?

    Обратите внимание, что в этой задаче строки нуль-индексированные, иными словами, s = s0s1... s|s| - 1.

    Входные данные

    В первой строке записана строка a (1 ≤ |a| ≤ 200000). Во второй строке записана строка b (1 ≤ |b| ≤ 200000). Каждый символ обеих строк равен либо «0», либо «1».

    В третьей строке записано целое число q (1 ≤ q ≤ 400000) — количество запросов. В каждой из следующих q строк записано по три целых числа: p1, p2 и len (0 ≤ p1 ≤ |a| - len; 0 ≤ p2 ≤ |b| - len), эти числа являются параметрами текущего запроса.

    Выходные данные

    Выведите q целых чисел — ответы на запросы.

    E. Столбы

    Бинарный поиск Деревья дп сортировки Структуры данных *2000

    Сурок нашел ряд из n столбов. Высота i-ого столба равняется hi метрам. Начиная с некоторого столба i1, Сурок хочет пропрыгать по столбам i2, ..., ik. (1 ≤ i1 < i2 < ... < ik ≤ n). Сурок может перепрыгнуть со столба i на столб j, только если i < j и |hi - hj| ≥ d, где |x| — абсолютное значение числа x.

    Сурок просит вас найти последовательность прыжков максимальной длины и вывести её.

    Входные данные

    В первой строке записано два целых числа n и d (1 ≤ n ≤ 105, 0 ≤ d ≤ 109).

    Во второй строке записано n чисел h1, h2, ..., hn (1 ≤ hi ≤ 1015).

    Выходные данные

    В первой строке должно быть записано одно целое число k — максимальная длина последовательности прыжков.

    Во второй строке должно быть записано k целых чисел i1, i2, ..., ik (1 ≤ i1 < i2 < ... < ik ≤ n) — номера столбов из максимально длинной последовательности прыжков.

    Если есть несколько последовательностей прыжков максимальной длины, выведите любую из них.

    Примечание

    В первом примере Сурок выбирает столбы 1, 2, 3, 5 с высотами 1, 3, 6, 4. Ещё одна последовательность прыжков длины 4 такова: 1, 2, 4, 5.

    F. Муравьиная колония

    математика Структуры данных теория чисел *2100

    И снова проголодался Крот. Он нашел одну муравьиную колонию из n муравьев, выстроенных в ряд. У каждого муравья i (1 ≤ i ≤ n) есть сила si.

    Чтобы разнообразить ужин, Крот организует что-то вроде «Голодных игр» для муравьев. Он выбирает два номера, l и r (1 ≤ l ≤ r ≤ n) и каждая пара муравьев с номерами от l до r (включительно) сражается. Когда сражаются два муравья i и j, муравей номер i получает одно боевое очко только в том случае, если si делит sj (также, муравей j получает одно боевое очко только в том случае, если sj делит si).

    Когда все битвы остаются позади, Крот распределяет места. Муравей номер i, получивший vi боевых баллов, будет освобожден только если vi = r - l, или — иными словами — только если он получал по баллу в каждой битве, в которой он принимал участие. Затем Крот поедает остальных муравьев. Обратите внимание на то, что освобождёнными могут оказаться как много муравьев, так и нисколько.

    Чтобы выбрать наилучший вариант, Крот дает вам t отрезков [li, ri] и спрашивает для каждого отрезка: сколько муравьев он съест, если эти муравьи будут биться?

    Входные данные

    В первой строке записано одно целое число n (1 ≤ n ≤ 105) — размер муравьиной колонии.

    Во второй строке записано n целых чисел s1, s2, ..., sn (1 ≤ si ≤ 109) — силы муравьев.

    В третьей строке записано одно число t (1 ≤ t ≤ 105) — количество запросов.

    В каждой из следующих t строк записано по два целых числа li и ri (1 ≤ li ≤ ri ≤ n), описывающих один запрос.

    Выходные данные

    Выведите t строк. В i-й строке должно следовать количество муравьев из отрезка [li, ri], которые будут отданы на съедение Кроту.

    Примечание

    В первом тесте очки для каждого муравья такие: v = [4, 0, 2, 0, 2], так что муравей 1 освобождается. Крот съедает муравьев номер 2, 3, 4, 5.

    Во втором тесте очки такие: v = [0, 2, 0, 2], ни один муравей не освобождается, Крот съедает их всех.

    В третьем тесте очки такие: v = [2, 0, 2], освобождаются муравьи номер 3 и 5. Крот поедает только муравья номер 4.

    В четвертом тесте очки такие: v = [0, 1], так что муравей номер 5 освобождается. Крот съедает муравья номер 4.

    D. CGCDSSQ

    математика Перебор Структуры данных *2000

    Вам дана последовательность целых чисел a1, ..., an и q запросов x1, ..., xq. Для каждого запроса xi требуется подсчитать количество пар (l, r), таких, что 1 ≤ l ≤ r ≤ n и .

    По определению — это наибольший общий делитель v1, v2, ..., vn, то есть наибольшее целое число, которое делит каждое vi.

    Входные данные

    В первой строке записано целое число n, (1 ≤ n ≤ 105), означающее длину последовательности. В следующей строке записано через пробел n целых чисел a1, ..., an, (1 ≤ ai ≤ 109).

    В третьей строке записано целое число q, (1 ≤ q ≤ 3 × 105) — количество запросов. Затем следует q строк, в каждой строке записано целое число xi, (1 ≤ xi ≤ 109).

    Выходные данные

    Для каждого запроса выведите результат в отдельной строке.

    F. Мультивселенная

    Структуры данных *2900

    Рассмотрим бесконечную сетку из единичных квадратов. Некоторые ячейки сетки являются планетами.

    Мультивселенная M = {p1, p2, ..., pk} — это набор планет. Предположим, что есть бесконечный ряд или столбец со следующими двумя свойствами: 1) он не содержит ни одну планету pi из мультивселенной M; 2) по обе стороны от этого столбца или строки находятся планеты из M. В этом случае мы можем разбить мультивселенную M на две непустые мультивселенные M1 и M2, содержащие планеты, расположенные по соответствующую сторону этого ряда или столбца.

    Мультивселенная, которую нельзя разделить, используя описанную выше операцию, называется вселенной. Мы выполняем операции, пока все мультивселенные не превратятся во вселенные.

    Вам даны положения планет в изначальной мультивселенной. Найдите количество вселенных, которые появятся в результате описанного процесса. Можно доказать, что результат не зависит от порядка произведения операций.

    Входные данные

    В первой строке входного файла записано целое число n, (1 ≤ n ≤ 105), обозначающее количество планет в мультивселенной.

    В каждой из следующих строк содержится по паре целых чисел xi и yi, ( - 109 ≤ xi, yi ≤ 109), обозначающих координаты i-ой планеты. Все планеты расположены в различных ячейках сетки.

    Выходные данные

    Выведите итоговое количество вселенных.

    Примечание

    Следующий рисунок описывает первый тест:

    E. Dreamoon и блокнот

    Структуры данных *3100

    Dreamoon создал документ с множеством сложных задач в notepad.exe. Документ состоит из n строк текста, ai обозначает длину i-ой строки. Теперь он хочет разобраться, как по этому документу можно побыстрее перемещать курсор, ведь документ очень длинный.

    Предположим, что текущее положение курсора — (r, c), где r обозначает номер строки, а c — позицию внутри этой строки. В любой момент времени верно 1 ≤ r ≤ n и 0 ≤ c ≤ ar.

    В notepad.exe мы можем использовать следующие шесть операций, чтобы передвигать курсор. Пусть текущее положение курсора — (r, c):

    1. клавиша вверх: новая позиция курсора будет (nr, nc) = (max(r - 1, 1), min(anr, c))
    2. клавиша вниз: новая позиция курсора будет (nr, nc) = (min(r + 1, n), min(anr, c))
    3. клавиша влево: новая позиция курсора будет (nr, nc) = (r, max(0, c - 1))
    4. клавиша вправо: новая позиция курсора будет (nr, nc) = (r, min(anr, c + 1))
    5. клавиша HOME: новая позиция курсора будет (nr, nc) = (r, 0)
    6. клавиша END: новая позиция курсора будет (nr, nc) = (r, ar)

    Вам дано описание документа (n и последовательность ai) и q запросов от Dreamoon. Запрос имеет форму «какое минимальное количество нажатий клавиш необходимо для передвижения курсора от (r1, c1) до (r2, c2)?».

    Входные данные

    В первой строке записано целое число n(1 ≤ n ≤ 400, 000) — количество строк текста.

    Во второй строке записано n целых чисел a1, a2, ..., an(1 ≤ ai ≤ 108).

    В третьей строке записано целое число q(1 ≤ q ≤ 400, 000).

    В каждой из следующих q строк записано по четыре целых числа r1, c1, r2, c2, образующих запрос (1 ≤ r1, r2 ≤ n, 0 ≤ c1 ≤ ar1, 0 ≤ c2 ≤ ar2).

    Выходные данные

    Для каждого запроса выведите его результат в отдельной строке.

    Примечание

    В первом примере для первого запроса подходящей последовательностью нажатий является: HOME, вправо.

    Для второго запроса подходящей последовательностью нажатий является: вниз, вниз, вниз, END, вниз.

    Для третьего запроса подходящей последовательностью нажатий является: вниз, END, вниз.

    Для четвёртого запроса подходящей последовательностью нажатий является: END, вниз.

    E. Парковка

    разделяй и властвуй Структуры данных *2800

    Петя скучает на работе и от нечего делать разглядывает парковку у офиса. Парковка сверху выглядит как таблица n × m (ячейка таблицы соответствует одному парковочному месту). Некоторые места на парковке заняты, а остальные свободны.

    Петя наблюдает за тем, как на парковку одна за другой заезжают машины. После того, как очередная машина находит свое место на парковке, Петя ради развлечения подсчитывает, какой наибольший квадрат из свободных мест (т.е. квадратную подтаблицу) можно увидеть на парковке, если смотреть на нее сверху, и выписывает размер (длину стороны) этого квадрата в блокнот.

    Ваша задача — по состоянию парковки в начальный момент времени и данным о том, где паркуются прибывающие машины, восстановить то, что Петя записал себе в блокнот. Поскольку рабочий день еще в разгаре, с парковки никто не уезжает.

    Входные данные

    В первой строке записаны три целых числа n, m и k — размеры парковки и количество прибывших машин после начала Петиных наблюдений (1 ≤ n, m, k ≤ 2000). Каждая из следующих n строк содержит по m символов 'X' и '.', где 'X' означает занятое место, а '.' — свободное. Каждая из следующих k строк содержит пару чисел xi, yi — номер строки и номер столбца места, которое занимает очередная машина (1 ≤ xi ≤ n, 1 ≤ yi ≤ m). Гарантируется, что это место было свободно. Считайте, что очередная машина заезжает на парковку только тогда, когда предыдущая уже заняла свое место на парковке.

    Выходные данные

    Выведите k чисел — длину стороны максимального квадрата из свободных клеток в таблице после заезда очередной машины.

    B. Интересный массив

    Деревья Конструктив Структуры данных *1800

    Будем считать массив из n неотрицательных целых чисел a[1], a[2], ..., a[n] интересным, если он удовлетворяет m ограничениям. i-е из m ограничений состоит из трех целых чисел li, ri, qi (1 ≤ li ≤ ri ≤ n), которые означают, что величина в точности равна qi.

    Ваша задача — найти любой интересный массив из n элементов, либо сообщить, что такого не существует.

    Выражение x&y означает побитовое И чисел x и y. В языках программирования C++, Java и Python эта операция обозначается как «&», на Pascal она обозначается как «and».

    Входные данные

    В первой строке записано два целых числа n, m (1 ≤ n ≤ 105, 1 ≤ m ≤ 105) — количество элементов в массиве и количество ограничений.

    В следующих m строках записано по три целых числа li, ri, qi (1 ≤ li ≤ ri ≤ n, 0 ≤ qi < 230), описывающих i-е ограничение.

    Выходные данные

    Если интересный массив существует, выведите «YES» (без кавычек) в первой строке, а во второй строке выведите n целых чисел a[1], a[2], ..., a[n] (0 ≤ a[i] < 230) — описание интересного массива. Если существует несколько ответов, разрешается вывести любой.

    Если не существует интересного массива, выведите «NO» (без кавычек) в единственной строке.

    E. ELCA

    Деревья Структуры данных *3200

    У вас есть корневое неориентированное дерево, состоящее из n вершин. Пронумеруем вершины дерева целыми числами от 1 до n. Корень дерева находится в вершине 1.

    У каждой вершины (кроме корня дерева 1) есть непосредственный предок pv. Кроме того, в каждой вершине дерева v написано ее значение — целое число sv.

    Необходимо последовательно обрабатывать следующие запросы:

    • P v u (u ≠ v). Если вершина u не лежит в поддереве v, необходимо присвоить pv = u. В противном случае, необходимо присвоить pu = v. Обратите внимание, после выполнения запроса граф всегда остается неориентированным деревом из n вершин.
    • V v t. Необходимо присвоить sv = t.

    Ваша задача — до начала выполнения запросов, а также после выполнения каждого запроса выводить математическое ожидание значения, написанного на наименьшем общем предке двух равновероятно выбранных вершин i, j дерева. Под наименьшим общим предком вершин i и j понимается наиболее удалённая от корня вершина среди тех, которые лежат и на пути от корня до i, и на пути от корня до j. Обратите внимание, что i и j могут совпадать (в таком случае их наименьший общим предок совпадает с ними).

    Входные данные

    В первой строке входных данных записано целое число n (2 ≤ n ≤ 5·104) — количество вершин дерева.

    Во второй строке записано n - 1 целое число p2, p3, ..., pn (1 ≤ pi ≤ n) — описание ребер дерева. Гарантируется, что данные числа задают дерево.

    В третьей строке записано n целых чисел — s1, s2, ... sn (0 ≤ si ≤ 106) — значения, записанные изначально на каждой вершине дерева.

    В следующей строке записано целое число q (1 ≤ q ≤ 5·104) — количество запросов. Каждая из следующих q строк содержит описание запроса аналогично тому, как они выглядят в условии задачи. Гарантируется, что параметры u и v запросов лежат в пределах от 1 до n. Гарантируется, что число t в запросах типа V удовлетворяет ограничениям 0 ≤ t ≤ 106.

    Выходные данные

    Выведите q + 1 число — соответствующие математические ожидания. Ваш ответ будет считаться правильным, если абсолютная или относительная погрешность каждого числа не превышает 10 - 9.

    Примечание

    Обратите внимание, что в запросе P v u в случае, если u лежит в поддереве v, требуется присвоить pu = v. Пример такого случая — последний запрос в примере.

    D. Детский сад

    дп жадные алгоритмы Структуры данных *2400

    В детском саду проходит распределение детей по группам. Воспитательница расставила детей в ряд и оценила харизматичность каждого ребенка целым числом. Каждый ребенок должен оказаться ровно в одной группе. Группа детей должна представлять из себя непустой отрезок подряд идущих детей в ряду. Общительность группы определяется как максимальная разность харизматичностей между двумя детьми в группе (в частности, если группа состоит из одного ребенка, то ее общительность равна нулю). Воспитательница хочет разбить детей на некоторое количество групп таким образом, чтобы суммарная общительность групп была максимальной. Помогите найти это значение.

    Входные данные

    В первой строке содержится целое число n — количество детей в ряду (1 ≤ n ≤ 106).

    Во второй строке содержатся n целых чисел ai — харизматичность i-го ребенка ( - 109 ≤ ai ≤ 109).

    Выходные данные

    Выведете максимальную возможную суммарную общительность всех групп.

    Примечание

    В первом тестовом примере одним из возможных вариантов наилучшего разбиения будет следующее: первые три ребенка образуют группу с общительностью 2, а оставшиеся два ребенка образуют группу с общительностью 1.

    Во втором тестовом примере любое разбиение даст один и тот же результат, в каждой группе общительность будет равна 0.

    E. Объявление на заборе

    Бинарный поиск Конструктив Структуры данных *2500

    Бизон-Чемпион недавно закончил покраску своего забора. Забор представляет из себя последовательность из n досок ширины 1 метр и произвольной высоты. i-я доска имеет высоту hi метров. Соседние доски следуют без зазора.

    После покраски Бизон-чемпион решил разместить на заборе объявление о его продаже. Объявление будет выполнено на листе бумаги прямоугольного размера и расположено на заборе так, что боковые стороны листа параллельны доскам забора, и края листа совмещены с краями некоторых досок. Бизон-Чемпион ввел для себя следующие ограничения на размещение объявления:

    1. Ширина объявления после размещения должна быть ровно w метров.
    2. Объявление должно целиком находиться на участке забора с l-й по r-ю доски включительно (в том числе, нельзя выходить за пределы забора по вертикали).

    Объявление будет красочным, поэтому Бизон-чемпион хочет, чтобы высота объявления была как можно больше.

    Вам дано описание забора и несколько запросов на размещение объявления. Для каждого запроса выведите максимальную возможную высоту объявления, которое можно разместить на соответствующем участке забора при заданной фиксированной ширине объявления.

    Входные данные

    В первой строке ввода содержится целое число n — количество досок в заборе (1 ≤ n ≤ 105).

    Во второй строке записаны n целых чисел hi, разделенных пробелом — высоты досок (1 ≤ hi ≤ 109).

    В третьей строке содержится целое число m — количество запросов (1 ≤ m ≤ 105).

    В последующих m строках идет описание запросов, каждый из которых представлен тремя целыми числами l, r и w (1 ≤ l ≤ r ≤ n, 1 ≤ w ≤ r - l + 1) — соответственно границы участка забора и ширина объявления.

    Выходные данные

    На каждый запрос выведите ответ в отдельной строке — максимальную высоту объявления, которую можно достичь на соответствующем участке забора при соблюдении всех условий.

    Примечание

    Забор, описанный в примере, выглядит следующим образом:

    Ниже приведены возможные расположения объявлений при ответе на запросы.

    Расположение объявления при ответе на первый запрос.
    Расположение объявления при ответе на второй запрос.
    Расположение объявления при ответе на третий запрос.

    E. Наибольшие возрастающие подпоследовательности

    дп жадные алгоритмы математика Структуры данных хэши *2200

    Следующее занятие по структурам данных и алгоритмам будет посвящено наибольшей возрастающей подпоследовательности. Чтобы лучше разобраться в теме, Нам решил начать готовиться за несколько дней до занятия.

    Нам записал последовательность a, состоящую из n (1 ≤ n ≤ 105) элементов a1, a2, ..., an (1 ≤ ai ≤ 105). Подпоследовательность ai1, ai2, ..., aik, где 1 ≤ i1 < i2 < ... < ik ≤ n называется возрастающей, если ai1 < ai2 < ai3 < ... < aik. Возрастающая подпоследовательность называется наибольшей, если она обладает максимальной длиной среди всех возрастающих подпоследовательностей.

    Нам понимает, что у последовательности может быть несколько наибольших возрастающих подпоследовательностей. В связи с этим он хочет разделить все индексы i (1 ≤ i ≤ n) на три группы:

    1. группа всех i, таких, что ai не является элементом ни одной наибольшей возрастающей подпоследовательности.
    2. группа всех i, таких, что ai является элементом по крайней мере одной, но не каждой наибольшей возрастающей подпоследовательности.
    3. группа всех i, таких, что ai является элементом каждой наибольшей возрастающей подпоследовательности.

    Так как количество наибольших возрастающей подпоследовательностей a может быть очень большим, произвести подобное разделение очень непросто. Ваша задача — помочь Наму справиться с этим.

    Входные данные

    В первой строке записано единственное целое число n (1 ≤ n ≤ 105), обозначающее количество элементов последовательности a.

    Во второй строке записано n целых чисел через пробел a1, a2, ..., an (1 ≤ ai ≤ 105).

    Выходные данные

    Выведите строку, состоящую из n символов. i-й символ должен равняться «1», «2» или «3» в зависимости от того, к какой группе из вышеперечисленных принадлежит индекс i.

    Примечание

    Во втором примере последовательность a состоит из 4 элементов: {a1, a2, a3, a4} = {1, 3, 2, 5}. В последовательности a есть ровно 2 наибольшие возрастающие подпоследовательности длины 3, а именно: {a1, a2, a4} = {1, 3, 5} и {a1, a3, a4} = {1, 2, 5}.

    В третьем примере последовательность a состоит из 4 элементов: {a1, a2, a3, a4} = {1, 5, 2, 3}. В последовательности a есть ровно 1 наибольшая возрастающая подпоследовательность длины 3, а именно {a1, a3, a4} = {1, 2, 3}.

    B. Лента

    Бинарный поиск дп Структуры данных *2000

    У Александры есть лента, а на ней — n чисел. Обозначим их за ai слева направо.

    Теперь Александра хочет разделить ленту на несколько частей (возможно, на 1). Для каждой части должны выполняться следующие условия:

    • Часть должна содержать не менее l чисел.
    • Разница между наибольшим и наименьшим числом в части должна быть не более s.

    Пожалуйста, помогите Александре найти минимальное количество частей, на которые можно разделить ленту, соблюдая указанные условия.

    Входные данные

    В первой строке записано три разделённых пробелами целых числа n, s, l (1 ≤ n ≤ 105, 0 ≤ s ≤ 109, 1 ≤ l ≤ 105).

    Во второй строке следуют n разделённых пробелами целых чисел ai ( - 109 ≤ ai ≤ 109).

    Выходные данные

    Выведите минимальное количество частей, на которое можно разделить ленту.

    Если способа разделить ленту не существует, выведите -1.

    Примечание

    В первом примере можно разделить ленту на 3 части: [1, 3, 1], [2, 4], [1, 2].

    Во втором примере нельзя поместить 1 и 100 на одну часть, так что решения не существует.

    D. Ленты конвейера

    Структуры данных *2700

    Автоматизированная Пекарня Киберленда недавно купила прямоугольный стол, представляющий собой сетку размера n × m. Для обедающих вокруг стола были расставлены стулья. Размер каждого стула равен единичному квадрату, то есть, всего было расставлено 2(n + m) стульев.

    На каждом единичном квадрате расположена лента конвейера. Есть три типа конвейерных лент: "^", "<" и ">". Лента "^" перемещает попавшие на неё предметы вверх. "<" перемещает влево, а ">" перемещает вправо.

    Пронумеруем строки от 1 до n сверху вниз, а столбцы — от 1 до m слева направо. Будем говорить, что стулья, находящиеся за верхней частью сетки, составляют строку 0, а находящиеся за нижней частью сетки — строку n + 1. Также назовем стулья слева от сетки и справа от сетки столбцами 0 и m + 1. В силу конструктивных особенностей конвейерных лент доставка еды к строке n + 1 невозможна.

    Нам дана исходная сетка, на которой по порядку произойдёт q событий. Есть два типа событий:

    • "A x y" означает, что булка появится в строке x и столбце y (обозначим такую позицию (x, y)). Булка будет следовать по лентам конвейера, пока не попадет к стулу обедающего. Возможно, булка застрянет где-то посреди стола. Ваша задача — симулировать процесс и вывести конечную позицию булки, либо установить, что булка попадет в бесконечный цикл.
    • "C x y c" означает, что тип конвейерной ленты (x, y) изменен на c.

    Запросы выполняются отдельно друг от друга, то есть, даже если булка попадет в бесконечный цикл, это не повлияет на последующие запросы.

    Входные данные

    В первой строке заданы три целых числа n, m и q (1 ≤ n ≤ 105, 1 ≤ m ≤ 10, 1 ≤ q ≤ 105), разделенных пробелом.

    Далее следует n строк, в каждой из которых содержится по m символов, описывающих таблицу. Все символы принадлежат набору "<^>".

    Далее следует q строк, в каждой из которых содержится по событию в формате: "C x y c" или "A x y". Гарантируется, что 1 ≤ x ≤ n, 1 ≤ y ≤ m. c — символ из множества "<^>".

    Среди запросов не более 10000 имеет тип "C".

    Выходные данные

    Для каждого события типа "A", выведите два разделённых пробелами целых числа tx, ty, обозначающих, что булка, запущенная в (x, y), в покинет стол в позиции (tx, ty).

    Если булка застрянет, выведите tx = ty =  - 1.

    Примечание

    Для первого примера:

    Если булка запущена в (2, 1), она покинет стол в (1, 3).

    После того, как лента конвейера (1, 2) поменяется на "<", если запустить булку от (2, 1) ещё раз, она застрянет на "><", так что выводом на этот запрос является ( - 1,  - 1).

    E. Туристы

    графы Деревья поиск в глубину и подобное Структуры данных *3200

    В Киберленде n городов, пронумерованных от 1 до n и соединенных m двунаправленных дорогами. j-я дорога соединяет города aj и bj.

    В каждом городе Киберленда продаются сувениры для туристов. В частности, город i продает сувениры по цене wi.

    Вам надо обработать q запросов. Запросы бывают двух типов:

    • "C a w": Цена в городе a меняется на w.
    • "A a b": Турист едет из города a в город b. Для этого он выбирает путь, при этом, турист не хочет посетить никакой город дважды. Он собирается купить сувениры в том городе, где сувениры самые дешевые (возможно, прямо в городе a или b). Вам следует вывести наименьшую возможную цену, по которой он может купить сувениры, путешествуя по некоторому простому пути.
    Более формально, можно определить пути следующим образом:
    • Путь — это последовательность городов [x1, x2, ..., xk], где k — некоторое положительное число.
    • Для любых 1 ≤ i < j ≤ k, xi ≠ xj.
    • Для любого 1 ≤ i < k есть дорога, соединяющая xi и xi + 1.
    • Наименьшая стоимость на пути равна min(wx1, wx2, ..., wxk).
    • Искомый ответ — это наименьшее значение наименьших стоимостей на всех корректных путях из a в b.
    Входные данные

    В первой строке входного файла записано три разделённых пробелами целых числа n, m, q (1 ≤ n, m, q ≤ 105).

    В следующих n строках записаны целые числа wi (1 ≤ wi ≤ 109).

    В следующих m строках записано по два разделённых пробелами целых числа, aj и bj (1 ≤ aj, bj ≤ n, aj ≠ bj).

    Одна и та же пара городов соединяется не более чем одной дорогой. Между любыми двумя городами всегда есть по крайней мере один корректный путь.

    Далее следует q строк, в каждой из которых записано по запросу. Формат строки: "C a w" или "A a b" (1 ≤ a, b ≤ n, 1 ≤ w ≤ 109).

    Выходные данные

    Для каждого запроса типа "A" выведите соответствующий ответ.

    Примечание

    Во втором примере оптимальные пути таковы:

    Из 2 в 3[2, 3].

    Из 6 в 4[6, 5, 1, 2, 4].

    Из 6 в 7[6, 5, 7].

    Из 3 в 3[3].

    F. Турне по Древляндии

    Деревья дп поиск в глубину и подобное Структуры данных *2200

    Группа ДТП планирует беспрецедентное турне по Древляндии. Фанаты ДТП предвкушают событие и делают ставки, как много концертов даст любимая группа.

    Древляндия состоит из n городов, некоторые пары из которых соединены двусторонними дорогами. Всего в этой стране n - 1 дорога. Известно, что из любого города можно добраться до любого другого. Города пронумерованы от целыми числами 1 до n. Про каждый город известна величина ri — количество жителей в нем.

    Достоверно известно, что музыканты проедут по некоторому пути, давая концерты в некоторых городах вдоль этого пути. Путь музыкантов не будет проходить по одному городу дважды, каждый раз они будут переезжать в ранее не посещенный город. Таким образом музыканты проедут по некоторому пути (не посещая никакой город дважды) и в каких-то (необязательно всех) городах вдоль пути дадут концерты.

    По мере турне группа планирует собирать все большие стадионы и концертные площадки, поэтому каждый раз они будут выступать в городе с большим количеством жителей, чем в городе предыдущего выступления. Иными словами, последовательность численностей населения в городах, где будут концерты, будет строго возрастающей.

    В недавнем интервью лидер группы ДТП пообещал фанатам, что группа даст концерты в максимальном возможном количестве городов! Таким образом группа проедет по некоторой цепочке городов Древляндии и даст концерты в некоторых из этих городов так, что численности будут возрастать, а количество концертов будет максимально возможным.

    Фанаты Древляндии судорожно пытаются понять, сколько концертов даст «ДТП» в Древляндии. Кажется, без помощи настоящего программиста не обойтись! Помогите фанатам найти искомое количество концертов.

    Входные данные

    В первой строке входных данных записано целое число n (2 ≤ n ≤ 6000) — количество городов в Древляндии. Следующая строка содержит n целых чисел r1, r2, ..., rn (1 ≤ ri ≤ 106), где ri — численность населения i-го города. Следующая n - 1 строка содержит описания дорог, по одной дороге в строке. Каждая из дорог задается парой целых чисел aj, bj (1 ≤ aj, bj ≤ n) — парой номеров городов, которые соединены j-й дорогой. Все числа в строках разделяются пробелами.

    Выходные данные

    Выведите количество городов, в которых «ДТП» даст концерты.

    C. Вася и баскетбол

    Бинарный поиск Перебор реализация сортировки Структуры данных *1600

    Вася следит за баскетбольным матчем, записывая, какая команда с какой дистанции сделала очередной бросок. Вася знает, что каждый бросок оценивается либо в 2, либо в 3 очка. Бросок оценивается в 2 очка, если дистанция, с которого он выполнен, не превосходит некоторого значения в d метров, и 3, если эта дистанция больше, чем d метров, где d — некоторое неотрицательное целое число.

    Вася хочет, чтобы разность набранных командами очков (очки первой команды минус очки второй команды) была как можно больше. Для этого он может мысленно выбирать значение d. Помогите ему добиться желаемого.

    Входные данные

    В первой строке задано целое число n (1 ≤ n ≤ 2·105) — количество бросков первой команды. Далее следуют n целых чисел — дистанции бросков ai (1 ≤ ai ≤ 2·109).

    Затем дается число m (1 ≤ m ≤ 2·105) — количество бросков второй команды. Далее m целых чисел — дистанции бросков bi (1 ≤ bi ≤ 2·109).

    Выходные данные

    Выведите два числа в формате a:b — возможный в условиях задачи счёт, при котором разность a - b максимальна. Если таких счетов несколько, выведите такой, в котором число а — максимально.

    D. День рождения

    Деревья дп поиск в глубину и подобное Структуры данных *2700

    Али — младший брат Хамеда, у него завтра день рождения. Хамед хочет подарить брату подарок. Для этого он дал ему задачу по программированию и сказал, что если Али её решит, то он получит новенький ноутбук. Али ещё не такой талантливый программист как Хамед, и, хотя он обычно не жульничает, этот случай — исключение. Всё-таки на кону новенький ноутбук. Поэтому он решил в тайне от него попросить вас помочь ему. Пожалуйста, решите для Али следующую.

    Вам дано взвешенное корневое дерево из n вершин. Вершина номер 1 является корнем дерева. Определим d(u, v) как сумму длин рёбер на кратчайшем пути между вершинами u и v. В частности, определим d(u, u) = 0. Также, определим S(v) для каждой вершины v как множество, содержащее все вершины u, такие, что d(1, u) = d(1, v) + d(v, u). Затем определим функцию f(u, v) по следующей формуле:

    Ваша задача — вычислить f(u, v) для каждой из q данных пар вершин. Так как ответ может быть довольно большим, выведите его по модулю 109 + 7.

    Входные данные

    В первой строке входных данных дано целое число n (1 ≤ n ≤ 105), количество вершин дерева.

    В каждой из следующих n - 1 строк записаны три целых числа через пробел — ai, bi, ci (1 ≤ ai, bi ≤ n, 1 ≤ ci ≤ 109), обозначающие, что между вершинами ai и bi есть ребро весом ci.

    В следующей строке записано целое число q (1 ≤ q ≤ 105) — количество пар вершин.

    В каждой из следующих q строк даны по два целых числа через пробел — ui, vi (1 ≤ ui, vi ≤ n), обозначающие, что вам требуется посчитать f(ui, vi).

    Гарантируется, что данные ребра образуют дерево.

    Выходные данные

    Выведите q строк. В i-й строке выведите значение f(ui, vi) по модулю 109 + 7.

    E. Шарти

    игры Структуры данных *3200

    Хамед и Малек провел последние 24 часа за игрой в «Шарти». Они очень устали и не могут завершить последний раунд. Поэтому они попросили Вас помочь им определить победителя этого раунда.

    «Шарти» играется на доске размера n × n, клетки которой покрашены в белый и чёрный цвета. Строки доски пронумерованы сверху вниз номерами от 1 до n. Столбцы доски пронумерованы слева направо номерами от 1 до n. Клетка, расположенная на пересечении i-го ряда и j-го столбца обозначается как (i, j).

    Игроки ходят по очереди. За свой ход игрок должен выбрать квадрат с длиной стороны не больше k, правая нижняя клетка которого покрашена в белый цвет. Затем цвета всех клеток в этом квадрате инвертируются (белые клетки становятся черными и наоборот). Игрок, который не может сделать ход, когда подходит его очередь, проигрывает.

    Вы знаете, что Хамед и Малек очень умные и они действуют оптимальным образом. Зная это и то, что Хамед ходит первым, а также имея описание исходной доски во входных данных, определите, кто из них победит.

    Входные данные

    В этой задаче исходная доска задаётся множеством из m прямоугольников. Все клеточки, находящиеся хотя бы в одном из этих прямоугольников, окрашены в белый цвет, а остальные окрашены черным.

    В первой строке ввода следуют три целых числа через пробел n, m, k (1 ≤ k ≤ n ≤ 109, 1 ≤ m ≤ 5·104) — размер доски, количество прямоугольников и максимальный размер квадрата, доступного игроку во время его хода, соответственно.

    В i-й из следующих m строк записано четыре целых числа через пробел ai, bi, ci, di (1 ≤ ai ≤ ci ≤ n, 1 ≤ bi ≤ di ≤ n), обозначающих, что i-й прямоугольник, описывающий исходную доску, это прямоугольник с левой верхней клеточкой в (ai, bi) и правой нижней клеточкой в (ci, di).

    Выходные данные

    Если выигрывает Хамед, выведите «Hamed», в противном случае выведите «Malek» (без кавычек).

    D. Пробки в стране

    дп Структуры данных теория чисел *2400

    Некоторая страна состоит из (n + 1) городов, расположенных вдоль прямолинейного шоссе. Пронумеруем города последовательно числами от 1 до n + 1 в порядке их следования вдоль шоссе. Таким образом, города соединены с помощью n участков шоссе, причём i-й участок соединяет города с номерами i и i + 1. Каждый участок шоссе характеризуется целым положительным числом ai > 1 — периодом появления пробок на нём.

    Чтобы добраться из города x до города y (x < y) некоторые автомобилисты используют следующую тактику.

    Изначально автомобилист находится в городе x и текущее время t равно нулю. До тех пор, пока автомобилист не прибыл в город y, он выполняет последовательность действий:

    • если текущее время t кратно ax, то на участке шоссе с номером x сейчас затруднено движение, и поэтому автомобилист остается в текущем городе на одну единицу времени (формально говоря, выполняется присваивание t = t + 1);
    • если текущее время t не кратно ax, то на участке шоссе с номером x сейчас свободно и поэтому за одну единицу времени автомобилист перемещается в город x + 1 (формально говоря, выполняются присваивания t = t + 1 и x = x + 1).

    Вы разрабатываете новую систему контроля пробок. Вы хотите последовательно обработать q запросов двух видов:

    1. определить конечное значение времени t после поездки из города x в город y (x < y) при использовании описанной выше тактики. Обратите внимание, что перед каждым подобным запросом t устанавливается равным нулю;
    2. изменить период появления пробок на участке с номером x на значение y (формально, выполнить присвоение ax = y).

    Напишите программу, которая будет эффективно обрабатывать описанные выше запросы.

    Входные данные

    В первой строке записано одно целое число n (1 ≤ n ≤ 105)— количество участков шоссе, соединяющих n + 1 город.

    Во второй строке содержатся n целых чисел a1, a2, ..., an (2 ≤ ai ≤ 6) — периоды появления пробок на участках шоссе.

    В следующей строке записано одно целое число q (1 ≤ q ≤ 105) — количество запросов, которые необходимо обработать.

    В следующих q строках содержатся описания запросов в формате c, x, y (c — тип запроса).

    Если c представляет собой символ 'A', то необходимо обработать запрос первого типа. В таком случае выполняется ограничение 1 ≤ x < y ≤ n + 1.

    Если c представляет собой символ 'C', то необходимо обработать запрос второго типа. В таком случае, выполняются ограничения: 1 ≤ x ≤ n, 2 ≤ y ≤ 6.

    Выходные данные

    На каждый запрос первого типа выведите одно число — конечное значение времени t после поездки из города x в город y. Запросы необходимо обрабатывать в том порядке, в котором они заданы во входных данных.

    C. Наибольшая правильная скобочная подстрока

    дп жадные алгоритмы Конструктив сортировки Строки Структуры данных *1900

    И снова вам предлагается задача на правильные скобочные последовательности.

    Напомним, что скобочная последовательность называется правильной, если путем вставки в нее символов «+» и «1» можно получить из нее корректное математическое выражение. Например, последовательности «(())()», «()» и «(()(()))» — правильные, в то время как «)(», «(()» и «(()))(» — нет.

    Вам задана строка, состоящая из символов «(» и «)». Ваша задача найти её наидлиннейшую подстроку, которая является правильной скобочной последовательностью. Также вам надо найти количество таких подстрок.

    Входные данные

    В первой строке входного файла записана непустая строка, состоящая из символов «(» и «)». Её длина не превосходит 106.

    Выходные данные

    Выведите длину наибольшей подстроки, являющейся правильной скобочной последовательностью, и количество таких подстрок. Если искомых подстрок не существует, то выведите «0 1» в единственную строку выходных данных.

    E. Передача сигналов по-биндейски

    Структуры данных *2400

    Всем известно, что давным-давно на территории современной Берляндии жили племена биндейцев. Их столица была окружена n холмами, расположенными по окружности. На каждом из холмов сидело по постовому, наблюдающему за окрестностями день и ночь.

    В случае какой-либо опасности постовой мог разжечь на холме костер. Один постовой видел сигнал другого, если на цепочке, их соединяющей, не было холма выше холма любого из них. Так как для любых двух холмов существует две соединяющие их цепочки, то такое условие должно было выполниться хотя бы на одной из них, чтобы сигнал был замечен. Например, для любых двух соседних постовых верно, что сигнал одного из них будет замечен другим.

    Важной характеристикой данной схемы наблюдения было количество таких пар постовых, что они могут видеть сигналы друг друга. Ваша задача по заданным высотам холмов найти это количество.

    Входные данные

    В первой строке входных данных записано целое число n (3 ≤ n ≤ 106), n — количество холмов вокруг столицы. Вторая строка содержит n чисел — высоты холмов в порядке по часовой стрелке. Все высоты — целые числа от 1 до 109.

    Выходные данные

    Выведите искомое количество пар.

    E. Новогоднее домино

    дп снм Структуры данных *2300

    Многие празднуют Новый год, публикуя видео с падающими доминошками. Ознакомиться с подобными видео можно здесь: https://www.youtube.com/results?search_query=New+Years+Dominos

    Пользователь ainta, живущий в двухмерном мире, тоже хочет опубликовать видео.

    Дано n доминошек на плоскости с декартовой системой координат. i-ю доминошку (1 ≤ i ≤ n) можно представить как параллельный оси y отрезок длины li. Нижняя точка отрезка находится на оси x. Обозначим x-координату i-й доминошки как pi. Доминошки ставятся друг за другом, таким образом, выполняется условие p1 < p2 < ... < pn - 1 < pn.

    Пользователь ainta хочет снять видео с падающими доминошками. Чтобы доминошки попадали, он может толкнуть одну доминошку вправо. Тогда доминошка будет падать по круговой орбите, пока её отрезок полностью не коснётся оси x.

    Также, если s-я доминошка, падая, задевает t-ю доминошку, то и t-я доминошка упадет направо, таким же описанным выше образом. Доминошка s касается доминошки t тогда и только тогда, когда отрезки, образующие s и t, пересекаются.

    Рассмотрим рисунок, данный выше. Если толкнуть крайнюю слева доминошку вправо, она упадет, затронув доминошки (A), (B) и (C). В результате, доминошки (A), (B), (C) также упадут вправо. Хотя доминошка (D) не будет задета при падении крайней доминошки слева, она в итоге также упадет, потому что её толкнет доминошка (C).

    Приведенный выше рисунок демонстрирует пример падающих доминошек. Каждый красный кружок означает соприкосновение двух доминошек.

    У пользователя ainta есть q планов публикации видео. j-й из них начинается с того, что мы толкаем xj-ю доминошку и заканчивается с падением yj-й доминошки. Но порой реализовать такой план невозможно, в связи с чем требуется удлинить некоторые доминошки. Увеличить длину одной доминошки на 1 единицу стоит один доллар. Пользователь ainta хочет знать для каждого плана минимальную цену, необходимую для достижения цели. Планы обрабатываются независимо друг от друга, то есть если длина доминошки увеличивается при каком-либо плане, это не влияет на длину этой доминошки в других планах. Множество доминошек, которые упадут помимо xj-й и yj-й, не имеет значения, но исходный удар должен наноситься именно по доминошке xi.

    Входные данные

    В первой строке содержится целое число n (2 ≤ n ≤ 2 × 105)— количество доминошек.

    В следующих n строках описываются доминошки. В i-й строке (1 ≤ i ≤ n) записано два целых числа через пробел pi, li (1 ≤ pi, li ≤ 109)— x-координата и длина i-й доминошки. Гарантируется, что p1 < p2 < ... < pn - 1 < pn.

    В следующей строке содержится целое число q (1 ≤ q ≤ 2 × 105) — количество планов.

    Следующие q строк описывают планы. В j-ой строке (1 ≤ j ≤ q) записано два целых числа через пробел xj, yj (1 ≤ xj < yj ≤ n). Это означает, что j-ый план заключается в том, чтобы толкнуть xj-ю доминошку и снимать видео, пока не упадет yj-я доминошка.

    Выходные данные

    Для каждого плана выведите строку, содержащую минимальную стоимость, необходимую для его реализации. Если никаких затрат не требуется, выведите 0.

    Примечание

    Рассмотрим пример. Доминошки расставлены как на картинке ниже.

    Посмотрим на 4-й план. Для того, чтобы 2-я доминошка привела к падению 6-й, третью доминошку (с x-координатой 4) надо увеличить на 1, и 5-ю доминошку (с x-координатой 10) надо увеличить на 1 (альтернативный вариант — вместо 5-й доминошки можно также увеличить 4-ю доминошку на 1). Затем доминошки попадают так, как указано на картинке ниже. Каждый крестик обозначет соприкосновение двух доминошек.

    B. Миша и смена хэндлов

    снм Строки Структуры данных *1100

    Взломав сайт Codeforces, Миша решил дать возможность всем пользователям менять их хэндлы. Пользователь теперь может сменить свой хэндл сколько угодно раз. Но при этом каждый новый хэндл не должен совпадать ни с каким из уже занятых или занятых в прошлом хэндлов.

    У Миши есть список запросов пользователей на смену хэндлов. После их выполнения он хочет понять соответствие между исходными хэндлами пользователей и новыми. Помогите ему в этом.

    Входные данные

    В первой строке находится целое число q (1 ≤ q ≤ 1000), количество запросов на смену хэндла.

    В последующих q строках находится описание запросов, по одному в строке.

    Каждый запрос состоит из двух непустых строк old и new, разделенных пробелом. Строки состоят из заглавных и прописных символов латинского алфавита и цифр. Строки old и new различны. Длины строк не превосходят 20.

    Запросы даны в хронологическом порядке. Иными словами, к моменту очередного запроса, существует единственный человек с хэндлом old, а хэндл new никем не используется и не был никем использован до этого.

    Выходные данные

    В первой строке выведите целое число n — количество пользователей, воспользовавшихся возможностью сменить хэндл.

    В последующих n строках выведите соответствие между старыми хэндлами пользователей и новыми. Каждая из них должна содержать по две строки old и new, разделенные пробелом, что означает следующее: до взлома сайта пользователь имел хэндл old, а после выполнения всех запросов получил хэндл new. Строки разрешается выводить в любом порядке.

    Каждый пользователь, менявший хэндл, должен встретиться в этом описании ровно один раз.

    C. Миша и лес

    Деревья жадные алгоритмы Конструктив сортировки Структуры данных *1500

    Назовем лесом неориентированный граф без циклов (петли и кратные рёбра также запрещены). Однажды Миша играл с лесом из n вершин. Для каждой вершины v от 0 до n - 1 он записал два числа degreev и sv, где первое число — количество вершин, смежных с вершиной v, а второе — XOR-сумма номеров вершин, смежных с v (в случае, если смежных вершин не было, он записал 0).

    На следующий день Миша не смог вспомнить, какой граф у него был изначально. У Миши остались значения degreev и sv. Помогите ему найти количество ребер и сами ребра исходного графа. Гарантируется, что существует лес, которому соответствуют выписанные Мишей числа.

    Входные данные

    В первой строке находится целое число n (1 ≤ n ≤ 216), количество вершин в графе.

    В i-й из последующих строк находятся числа degreei и si (0 ≤ degreei ≤ n - 1, 0 ≤ si < 216), разделенные пробелом.

    Выходные данные

    В первой строке выведите число m, количество ребер графа.

    Далее выведите m строк, каждая из которых содержит два различных числа a и b (0 ≤ a ≤ n - 1, 0 ≤ b ≤ n - 1), соответствующие ребру (a, b).

    Рёбра могут быть выведены в любом порядке; вершины одного ребра также могут быть выведены в любом порядке.

    Примечание

    XOR-суммой чисел называется результат побитового сложения чисел по модулю 2. Данная операция существует во многих современных языках программирования, например, в языках C++, Java и Python она обозначается как «^», а в Pascal — как «xor».

    D. Миша и сложение перестановок

    Структуры данных *2000

    Назовем суммой двух перестановок p и q чисел 0, 1, ..., (n - 1) перестановку , где Perm(x) есть x-я лексикографически перестановка чисел 0, 1, ..., (n - 1) (в нумерации с нуля), а Ord(p) это номер перестановки p в лексикографическом порядке.

    Например, Perm(0) = (0, 1, ..., n - 2, n - 1), Perm(n! - 1) = (n - 1, n - 2, ..., 1, 0)

    У Миши есть две перестановки p и q. Ваша задача — найти их сумму.

    По определению, перестановка a = (a0, a1, ..., an - 1) лекскикографически меньше перестановки b = (b0, b1, ..., bn - 1), если для некоторого k верно a0 = b0, a1 = b1, ..., ak - 1 = bk - 1, ak < bk.

    Входные данные

    В первой строке находится натуральное число n (1 ≤ n ≤ 200 000).

    Во второй строке находятся n различных целых чисел от 0 до n - 1, разделённых пробелами, образующих перестановку p.

    В третьей строке находятся n различных целых чисел от 0 до n - 1, разделённых пробелами, образующих перестановку q.

    Выходные данные

    Выведите n различных целых чисел от 0 до n - 1, образующих сумму данных перестановок. Числа разделяйте пробелами.

    Примечание

    Перестановки чисел от 0 до 1 в лексикографическом порядке: (0, 1), (1, 0).

    В первом примере Ord(p) = 0 и Ord(q) = 0, значит ответ — это .

    Во втором примере Ord(p) = 0 и Ord(q) = 1, значит ответ — это .

    Перестановки чисел от 0 до 2 в лексикографическом порядке: (0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 2, 0), (2, 0, 1), (2, 1, 0).

    В третьем примере Ord(p) = 3 и Ord(q) = 5, значит ответ — это .

    B. Хан Соло и лазерная пушка

    геометрия математика Перебор реализация Структуры данных *1400

    На поле боя размещены n имперских штурмовиков. Поле боя представляет собой плоскость с прямоугольной системой координат. Каждый штурмовик задан своими координатами (x, y) на этой плоскости.

    У Хана Соло есть новейшая двусторонняя лазерная пушка для сражения с этими штурмовиками. Она расположена в точке с координатами (x0, y0). За один выстрел она способна поразить всех штурмовиков, находящихся на некоторой прямой, проходящей через точку (x0, y0).

    Требуется определить, за какое минимальное количество выстрелов Хан Соло сможет уничтожить всех штрумовиков.

    Так как пушка — новейшее изобретение, она стреляет очень быстро и штурмовики даже после очень большого количества выстрелов не успевают понять, что происходит, и сменить свое местоположение.

    Входные данные

    В первой строке записано три целых числа n, x0 и y0 (1 ≤ n ≤ 1000,  - 104 ≤ x0, y0 ≤ 104) — количество штурмовиков на поле боя и координаты вашей пушки.

    В следующих n строках записано по два целых числа xi, yi ( - 104 ≤ xi, yi ≤ 104) — координаты штурмовиков на поле боя. Известно, что ни один из штурмовик не стоит в той же точке, где находится пушка. Несколько штурмовиков могут находится в одной и той же точке.

    Выходные данные

    Выведите одно целое число — минимальное количество выстрелов, за которое Хан Соло сможет уничтожить всех штурмовиков.

    Примечание

    Пояснения к первому и второму тесту из условия соответственно:

    C. Уотто и механизм

    Бинарный поиск Строки строковые суфф. структуры Структуры данных хэши *2000

    Недавно Уотто, хозяину магазина запчастей, поступил заказ на механизм, умеющий обрабатывать строки определённым образом. Изначально в память механизма загружаются n строк. Затем, механизм должен уметь отвечать на запросы следующего вида: «По данной строке s определить, есть ли в памяти механизма строка t, состоящая из того же количества символов, что и s, и отличающаяся от s ровно в одной позиции».

    Уотто уже собрал механизм, осталось только написать для него программу и проверить её корректность на данных n исходных строк и m запросах. Эту работу он решил поручить Вам.

    Входные данные

    В первой строке записано два целых неотрицательных числа n и m (0 ≤ n ≤ 3·105, 0 ≤ m ≤ 3·105) — количество исходных строк и количество запросов соответственно.

    Далее следуют n непустых строк, загружаемых в память механизма.

    Далее следуют m непустых строк, являющихся запросами к механизму.

    Суммарная длина строк во вводе не превышает 6·105. Каждая строка состоит только из букв 'a', 'b', 'c'.

    Выходные данные

    На каждый запрос выведите в отдельной строке «YES» (без кавычек), если в памяти механизма есть нужная строка, иначе выведите «NO» (без кавычек).

    D. R2-D2 и армия дроидов

    Бинарный поиск Структуры данных *2000

    Армия из n дроидов построена в один ряд. Каждый дроид описывается m целыми числами a1, a2, ..., am, где ai — количество деталей i-го типа в механизме этого дроида. R2-D2 хочет уничтожить максимальную по длине последовательность подряд идущих дроидов. У него есть m оружий, i-е из них способно за один выстрел уничтожить у всех дроидов в армии по одной детали i-го типа (если у дроида нет деталей этого типа, то ничего не происходит).

    Дроид считается уничтоженным, когда уничтожены все его детали. R2-D2 может сделать не больше k выстрелов. Сколько выстрелов из оружия каждого типа нужно произвести R2-D2, чтобы уничтожить максимальную по длине последовательность подряд идущих дроидов?

    Входные данные

    В первой строке записано три целых числа n, m, k (1 ≤ n ≤ 105, 1 ≤ m ≤ 5, 0 ≤ k ≤ 109) — количество дроидов, количество типов деталей и количество доступных выстрелов соответственно.

    Далее идут n строк, описывающие дроидов. Каждая строка содержит m целых чисел a1, a2, ..., am (0 ≤ ai ≤ 108), где ai — количество деталей i-го типа у соответствующего робота.

    Выходные данные

    Выведите через пробел m целых чисел, где i-е число — количество выстрелов из оружия i-го типа, которые нужно произвести, чтобы уничтожить максимальную по длине последовательность подряд идущих дроидов.

    Если существует несколько оптимальных ответов — выведите любой.

    Необязательно совершать ровно k выстрелов, можно совершить меньше.

    Примечание

    В первом тесте будут уничтожены второй, третий и четвертый дроиды.

    Во втором тесте будут уничтожены первый и второй дроиды.

    E. Drazil и парк

    Структуры данных *2300

    Drazil — это обезьяна. Он живет в парке круглой формы. Вокруг парка высажено n деревьев. Расстояние от i-го дерева до (i + 1)-го равняется di, расстояние от n-го дерева до первого дерева равняется dn. Высота i-го дерева равняется hi.

    Drazil начинает каждый день с утренней пробежки. Утренняя пробежка состоит из следующих шагов:

    • Drazil выбирает два различных дерева;
    • Сперва он забирается на первое дерево;
    • Затем он слезает с первого дерева, бежит вокруг парка (в одном из двух возможных направлений) ко второму дереву и забирается на него;
    • Наконец, он слезает со второго дерева;

    Но с недавнего времени рядом с некоторым множеством деревьев, образующим непрерывный отрезок, постоянно играют дети. Drazil терпеть не может детей, поэтому он не может выбирать деревья в близости от детей. Он даже не может перемещаться рядом с этими деревьями.

    Если Drazil выберет два дерева x и y, то можно записать энергию, необходимую на утреннюю пробежку, как 2(hx + hy) + dist(x, y). Так как дети находятся на ровно одной из двух дуг, соединяющих x и y, то путь, по которому побежит Drazil, определяется однозначно, здесь за dist(x, y) обозначается его длина.

    И вот, вы знаете, что на i-й день дети играют между ai-ым и bi-ым деревом. Более формально, если ai ≤ bi, то дети играют вокруг деревьев с индексами в диапазоне [ai, bi], в противном случае они играют вокруг деревьев с индексами в диапазоне .

    Пожалуйста, помогите Drazil для каждого дня определить, какие два дерева он должен выбрать, чтобы потратить как можно больше энергии (ведь он хочет быть крутой стройной обезьянкой) и посчитайте количество энергии, которое будет затрачено на утреннюю пробежку.

    Входные данные

    В первой строке следуют два целых числа, n и m (3 ≤ n ≤ 105, 1 ≤ m ≤ 105), обозначающих количество деревьев и количество дней соответственно.

    Во второй строке следуют n целых чисел d1, d2, ..., dn (1 ≤ di ≤ 109), расстояния между соседними деревьями.

    В третьей строке следуют n целых чисел h1, h2, ..., hn (1 ≤ hi ≤ 109), высоты деревьев.

    В каждой из следующих m строк следует по два целых числа, ai и bi (1 ≤ ai, bi ≤ n), описывающих каждый новый день. Гарантируется, что всегда есть не менее двух доступных для Drazil деревьев, свободных от детей.

    Выходные данные

    Для каждого дня выведите ответ на отдельной строке.

    C. Аня и смартфон

    Конструктив реализация Структуры данных *1600

    Аня купила новый смартфон с операционной системой Berdroid. В меню смартфона ровно n приложений, у каждого своя иконка. Иконки расположены на различных экранах, на одном экране помещается k иконок. Иконки с первой по k-ю расположены на первом экране, с (k + 1)-й по 2k-ю на втором и так далее (последний экран может быть заполнен не полностью).

    Изначально меню смартфона установлено на экран номер 1. Чтобы запустить приложение, чья иконка расположена на экране t, Ане надо сделать следующие движения пальцем: сначала домотать до нужного экрана номер t, сделав t - 1 движение (если иконка на экране t), а затем сделать еще одно движение — нажать ровно 1 раз на иконку нужного приложения для его запуска.

    После запуска приложения меню откатывается на первый экран, то есть, чтобы запустить следующее приложение необходимо вновь листать меню с экрана номер 1.

    Все приложения пронумерованы от 1 до n. Известен исходный порядок, в котором иконки приложений расположены в меню, но он изменяется по ходу использования операционной системы. Berdroid интеллектуально меняет порядок иконок, передвигая более часто используемые ближе к началу. Формально, сразу после запуска приложения его иконка меняется местами с впереди стоящей (т. е. имеющей на единицу меньший номер в порядке следования иконок), причем впереди стоящая иконка приложения может быть и на соседнем экране. Единственное исключение — если иконка запускаемого приложения уже стоит на первом месте, в этом случае расположение иконок не меняется.

    Аня запланировала в каком порядке она будет запускать приложения. Сколько движений пальцем надо произвести Ане, чтобы запустить приложения в запланированном порядке?

    Обратите внимание, что одно приложение может быть запущено многократно.

    Входные данные

    В первой строке входных данных следуют три целых числа n, m, k (1 ≤ n, m, k ≤ 105) — количество приложений, имеющихся на смартфоне Ани, количество приложений, которые будут запущены, и количество иконок, которые помещаются на одном экране соответственно.

    Следующая строка содержит n целых чисел, перестановку a1, a2, ..., an — изначальный порядок иконок слева направо в меню (от первой до последней), ai — это номер приложения, иконка которого i-я в меню. Каждое целое число от 1 до n встречается ровно один раз среди ai.

    Третья строка содержит m целых чисел b1, b2, ..., bm(1 ≤ bi ≤ n) — номера запускаемых приложений в запланированном порядке. Одно приложение может быть запущено несколько раз.

    Выходные данные

    Выведите одно целое число — сколько движений пальцем надо сделать Ане, чтобы запустить приложения в запланированном ею порядке.

    Примечание

    В первом тесте исходная конфигурация выглядит как (123)(456)(78), то есть на первом экране расположены иконки приложений 1, 2, 3, на втором экране — 4, 5, 6, а на третьем экране — 7, 8.

    После запуска приложения номер 7 получим новое расположение иконок — (123)(457)(68). При этом для его запуска необходимо сделать 3 движения пальцем.

    После запуска приложения номер 8 получим конфигурацию — (123)(457)(86). При этом для его запуска необходимо сделать 3 движения пальцем.

    После запуска приложения номер 1 расположение иконок на экранах не меняется. При этом для его запуска необходимо сделать 1 движение пальцем.

    Итого, Аня сделает 7 движений пальцем.

    B. A и B и ошибки компиляции

    реализация сортировки Структуры данных *1100

    A и B готовятся к олимпиадам про программированию.

    B очень любит отлаживать свой код. Но перед тем, как запустить решение и начать отладку, код нужно сначала скомпилировать.

    Изначально компилятор выдавал n ошибок компиляции, каждая из которых обозначается положительным целым числом. После некоторых усилий, B удалось исправить сначала одну, а потом еще одну ошибку.

    Однако, несмотря на то, что B уверен, что исправил две ошибки, он не может понять, какие именно ошибки компиляции исчезли — компилятор языка, на котором пишет B, каждый раз выдает ошибки в новом порядке! B уверен, что в отличие от многих других языков программирования, ошибки компиляции для его языка программирования не зависят друг от друга, т. е. от исправления одной ошибки, множество остальных ошибок не изменяется.

    А вы можете помочь B узнать, какие именно две ошибки он исправил?

    Входные данные

    Первая строка входных данных содержит целое число n (3 ≤ n ≤ 105) — изначальное количество ошибок компиляции.

    Вторая строка содержит n целых чисел через пробел a1, a2, ..., an (1 ≤ ai ≤ 109) — номера ошибок, выданных компилятором в первый раз.

    Третья строка содержит n - 1 целых чисел через пробел b1, b2, ..., bn - 1 — номера ошибок, выданных при второй компиляции. Гарантируется, что последовательность в третьей строке содержит все числа второй строки, за исключением ровно одного.

    Четвертая строка содержит n - 2 целых чисел через пробел с1, с2, ..., сn - 2 — номера ошибок, выданных при третьей компиляции. Гарантируется, что последовательность в четвертой строке содержит все числа третьей строки, за исключением ровно одного.

    Выходные данные

    Выведите два числа на отдельной строке: номера ошибок компиляции, исчезнувших после того как B внёс первое и второе исправление соответственно.

    Примечание

    В первом тестовом примере в первый раз B исправляет ошибку с номером 8, во второй — с номером 123.

    Во втором тестовом примере в первый раз B исправляет ошибку с номером 1, во второй — с номером 3. Обратите внимание, что если имеются несколько ошибок с одинаковым номером, за один раз B может исправить только одну из них.

    D. A и B и интересные подстроки

    дп Структуры данных *1800

    A и B готовятся к олимпиадам про программированию.

    После нескольких лет занятия спортивным программированием и решения множества задач, требующих подсчета различных абстрактных объектов, у A и B тоже сложились весьма необычные вкусы.

    A увлечен строчными буквами латинского алфавита. Он присвоил каждой из них число, обозначающее насколько сильно она ему нравится (буквам, которые он недолюбливает, он присвоил отрицательное число).

    B увлечен подстроками. Особенно его интересуют те из них, которые начинаются и заканчиваются на одну и ту же букву (разумеется, в таком случае их длина должна быть больше единицы).

    У A и B также есть строка s. Теперь они пытаются выяснить, сколько подстрок t в s интересны для B (то есть t начинается и заканчивается на одну и ту же букву и имеет длину больше единицы) и при этом сумма значений всех букв (присвоенных A) в t, кроме первой и последней, равна нулю.

    Разумеется, A и B быстро нашли количество интересующих их подстрок t. А сможете ли это сделать вы?

    Входные данные

    Первая строка содержит 26 целых чисел xa, xb, ..., xz ( - 105 ≤ xi ≤ 105) — значение, присвоенное А буквам a, b, c, ..., z соответственно.

    Вторая строка содержит строку s длиной от 1 до 105 символов и состоящую из строчных букв латинского алфавита, для которой требуется посчитать ответ.

    Выходные данные

    В единственной строке выходных данных выведите ответ на задачу.

    Примечание

    В первом тестовом примере нам подходят подстроки abca и bcab.

    Во втором тестовом примере нам подходит подстрока aa, которая встречается 2 раза.

    E. A и B и аудитории

    Бинарный поиск Деревья дп поиск в глубину и подобное Структуры данных *2100

    A и B готовятся к олимпиадам про программированию.

    Университет, в котором учатся A и B, представляет собой множество аудиторий, соединенных между собой переходами. Всего в университете n аудиторий, соединённых n - 1 переходом таким образом, что из любой аудитории можно дойти до любой по переходам. Аудитории пронумерованы от 1 до n.

    Каждый день А и B пишут контесты в некоторых аудиториях своего университета, и после каждого контеста они собираются вместе в одной аудитории и обсуждают задачи. A и B хотят, чтобы расстояния от аудитории, где они будут обсуждать задачи, до аудиторий, где они пишут контесты, были равны. Расстоянием между двумя аудиториями является количество ребер на кратчайшем пути между ними.

    Так как каждый день они пишут контесты в новых аудиториях, то они попросили вас помочь им найти количество возможных аудиторий для обсуждения задач на каждый из ближайших m дней.

    Входные данные

    В первой строке задано целое число n (1 ≤ n ≤ 105) — количество аудиторий в университете.

    В следующих n - 1 строках описаны переходы. В i-й из этих строк (1 ≤ i ≤ n - 1) записаны два целых числа ai и bi (1 ≤ ai, bi ≤ n), обозначающих, что i-й переход соединяет аудитории с номерами ai и bi.

    В следующей строке записано целое число m (1 ≤ m ≤ 105) — количество запросов.

    Следующие m строк описывают сами запросы. В j-й из этих строк (1 ≤ j ≤ m) записаны два целых числа xj и yj (1 ≤ xj, yj ≤ n), обозначающих, что в j-й день A будет писать контест в аудитории с номером xj, B — в аудитории с номером yj.

    Выходные данные

    В i-й (1 ≤ i ≤ m) строке выведите количество аудиторий, равноудаленных от аудиторий, в которых A и B пишут контест в i-й день.

    Примечание

    В первом примере из условия на одинаковом расстоянии от аудиторий с номерами 2 и 3 находится только одна аудитория — аудитория с номером 1.

    C. Циклические RMQ

    Структуры данных *2200

    Дан циклический массив a0, a1, ..., an - 1. Есть два типа операций:

    • inc(lf, rg, v) — увеличить каждый элемент на отрезке [lf, rg] (включительно) на v;
    • rmq(lf, rg) — найти минимальное значение на отрезке [lf, rg] (включительно).

    Мы считаем, что все отрезки — циклические, например если n = 5 и lf = 3, rg = 1, то имеется в виду последовательность индексов: 3, 4, 0, 1.

    Напишите программу, которая будет выполнять заданную последовательность операций.

    Входные данные

    Первая строка содержит целое число n (1 ≤ n ≤ 200000). Следующая строка описывает начальное состояние массива: a0, a1, ..., an - 1 ( - 106 ≤ ai ≤ 106), ai целые. Третья строка содержит целое число m (0 ≤ m ≤ 200000), m — количество операций. Следующие m строк описывают операции. Если строка содержит два целых числа lf, rg (0 ≤ lf, rg ≤ n - 1), то это она задает операцию rmq, а если она содержит три целых числа lf, rg, v (0 ≤ lf, rg ≤ n - 1; - 106 ≤ v ≤ 106) — операцию inc.

    Выходные данные

    Для каждой операции rmq выведите ее результат. Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cout (также вы можете использовать спецификатор %I64d).

    B. Фото на память

    *особая задача дп реализация Структуры данных *1100

    На вечеринке встретились n друзей, они давно не собирались все вместе и поэтому решили сделать общее групповое фото.

    Упрощённо процесс фотографирования можно описать следующим образом. На фотографии каждый из друзей занимает прямоугольник из пикселей: i-й из них занимает прямоугольник ширины wi пикселей и высоты hi пикселей. На групповом фото все фотографируемые стоят в ряд, таким образом минимальный размер в пикселях фотографии, включающей всех друзей, составляет W × H, где W — суммарная ширина всех фотографируемых, а H — максимальная из высот всех фотографируемых.

    Как это обычно и бывает, друзья сфотографировались n раз — на j-й (1 ≤ j ≤ n) фотографии присутствовали все, кроме j-го из них, ведь он был фотографом.

    Выведите минимальный размер в пикселях каждого из сделанных фото.

    Входные данные

    В первой строке записано целое число n (2 ≤ n ≤ 200 000) — количество друзей.

    Далее следует n строк: i-я из них содержит информацию об i-м из друзей. В строке содержится пара целых чисел wi, hi (1 ≤ wi ≤ 10, 1 ≤ hi ≤ 1000) — ширина и высота в пикселях соответствующего ему прямоугольника.

    Выходные данные

    Выведите n разделённых пробелами чисел b1, b2, ..., bn, где bi — общее количество пикселей на минимальной фотографии, вмещающей всех друзей, кроме i-го из них.

    D. Ближайшие равные

    *особая задача Структуры данных *2000

    Задана последовательность a1, a2, ..., an и m запросов lj, rj (1 ≤ lj ≤ rj ≤ n). Для каждого из запросов надо вывести наименьшее из расстояний между такой парой элементов ax и ay (x ≠ y), что:

    • оба индекса элементов попадают в отрезок [lj, rj], то есть lj ≤ x, y ≤ rj;
    • значения элементов равны, то есть ax = ay.

    В тексте выше под расстоянием подразумевается |x - y|.

    Входные данные

    В первой строке входных данных записана пара целых чисел n, m (1 ≤ n, m ≤ 5·105) — длина последовательности и количество запросов соответственно.

    Во второй строке записана последовательность целых чисел a1, a2, ..., an ( - 109 ≤ ai ≤ 109).

    Следующие m строк содержат запросы по одному в строке. Каждый из запросов задается парой чисел lj, rj (1 ≤ lj ≤ rj ≤ n) — индексами границ отрезка запроса.

    Выходные данные

    Выведите m чисел — ответы на каждый из запросов. Если для запроса не существует подходящей пары, то следует вывести -1 в качестве ответа на этот запрос.

    D. Статистика обработки роликов

    *особая задача реализация Структуры данных *1600

    Социальная сеть для собак ВБудке имеет k специальных серверов для пережатия загружаемых роликов про кошечек. Каждый ролик после загрузки должен быть обработан на одном (любом) из серверов, и только после этого сохранен в соцсети.

    Известно, что каждый сервер пережимает минутный фрагмент за одну секунду. Таким образом, на любом из серверов видеофайл длительность m минут пережимается за m секунд.

    Известно время загрузки в соцсеть каждого из n роликов (в секундах с момента общего старта серверов). Все ролики поступают в разные моменты времени и обрабатываются в порядке поступления. Если ролик поступил в момент времени s, то его можно начать обрабатывать сразу же в этот момент. Некоторые из роликов могут ожидать обработки из-за занятости всех серверов. В таком случае как только какой-либо сервер освободится, он сразу же начнет обрабатывать очередной ролик. Ожидающие обработки ролики складываются в очередь. Если к моменту начала обработки свободны несколько серверов, то его начинает обрабатывать любой из них.

    Для каждого из роликов определите момент окончания его обработки.

    Входные данные

    В первой строке входных данных записаны целые числа n и k (1 ≤ n, k ≤ 5·105) — количество роликов и серверов соответственно.

    Далее в n строках следуют описания роликов парами целых чисел si, mi (1 ≤ si, mi ≤ 109), где si — время в секундах, когда пришел i-й ролик, а mi — его длительность в минутах. Гарантируется, что все si различны и ролики заданы в хронологическом порядке загрузки, то есть в порядке увеличения si.

    Выходные данные

    Выведите n чисел e1, e2, ..., en, где ei — время в секундах от начала работы серверов, когда i-й ролик будет обработан.

    E. Ладьи и прямоугольники

    сортировки Структуры данных *2400

    У Поликарпа есть шахматная доска размера n × m, на которой расставлены k ладей. Поликарп еще не придумал правила игры, в которую он будет играть. Однако он уже выделил на доске q прямоугольных участков особой стратегической важности, которые должны быть надежно защищены. По мнению Поликарпа, прямоугольный участок доски надежно защищен, если все его свободные клетки бьются ладьями, стоящими на этом участке. Ладьи на остальной части доски на защиту участка не влияют. Расстановка ладей фиксирована и не может быть изменена. Напомним, что ладья бьет все клетки, расположенные с ней на одной вертикали или горизонтали, если между клеткой и ладьей нет других фигур. Помогите Поликарпу определить, все ли стратегически важные участки надежно защищены.

    Входные данные

    В первой строке содержатся четыре целых числа n, m, k и q (1 ≤ n, m ≤ 100 000, 1 ≤ k, q ≤ 200 000) — размеры доски, количество ладей и количество стратегически важных участков. Будем считать, что клетки доски пронумерованы числами от 1 до n по горизонтали и от 1 до m по вертикали. Следующие k строк содержат пары целых чисел «x y», описывающие положение ладей (1 ≤ x ≤ n, 1 ≤ y ≤ m). Гарантируется, что все ладьи стоят в разных клетках. Следующие q строк описывают стратегически важные участки четверками чисел «x1 y1 x2 y2» (1 ≤ x1 ≤ x2 ≤ n, 1 ≤ y1 ≤ y2 ≤ m). Соответствующий прямоугольный участок состоит из клеток (x, y), для которых x1 ≤ x ≤ x2, y1 ≤ y ≤ y2. Стратегически важные участки могут пересекаться или совпадать.

    Выходные данные

    Выведите q строк. Для каждого стратегически важного участка выведите «YES», если он надежно защищен, и «NO» в противном случае.

    Примечание

    Рисунок к примеру: Для последнего участка ответ «NO», потому что клетка (1, 2) не бьется ладьей.

    F. И снова правильная скобочная последовательность

    жадные алгоритмы Строки строковые суфф. структуры Структуры данных хэши *2700

    У Поликарпа имеется конечная последовательность из открывающихся и закрывающихся скобок. Чтобы не уснуть на лекции, Поликарп развлекается со своей последовательностью. Он умеет выполнять две операции:

    • добавление любой скобки в любую позицию (в начало, в конец или между любыми двумя имеющимися скобками);
    • циклический сдвиг — перемещение самой последней скобки из конца последовательности в начало.

    Поликарп может применить к своей последовательности любое количество операций добавления и циклического сдвига в любом порядке. В результате он хочет получить правильную скобочную последовательность минимальной возможной длины. В случае если таких последовательностей несколько, Поликарпа интересует лексикографически наименьшая. Помогите ему найти такую последовательность.

    Правильной скобочной последовательностью называется последовательность открывающихся и закрывающихся скобок, из которой путем добавления символов «1» и «+» можно получить корректное арифметическое выражение. Каждой открывающейся скобке должна соответствовать закрывающаяся. Например, последовательности «(())()», «()», «(()(()))» правильные, а «)(», «(()» и «(()))(» — нет.

    Последовательность a1 a2... an лексикографически меньше последовательности b1 b2... bn, если найдется такой номер i от 1 до n, что ak = bk при 1 ≤ k < i и ai < bi. Считайте, что «(»  <  «)».

    Входные данные

    В первой строке содержится последовательность Поликарпа, состоящая из символов «(» и «)». Длина строки от 1 до 1 000 000.

    Выходные данные

    Выведите правильную скобочную последовательность минимальной длины, которую Поликарп может получить при помощи своих операций. Если таких последовательностей несколько, выведите лексикографически наименьшую.

    Примечание

    Последовательность в первом примере уже является правильной, но чтобы получить лексикографически наименьший ответ, нужно выполнить четыре операции циклического сдвига. Во втором примере нужно добавить закрывающуюся скобку между второй и третьей скобками и совершить циклический сдвиг. Можно сначала совершить сдвиг, а потом добавить скобку в конце.

    D. Артур и стены

    графы жадные алгоритмы Конструктив кратчайшие пути Структуры данных *2400

    Наконец настал тот день, когда Артур накопил достаточную сумму денег и решил купить квартиру. Ему предложили отличный вариант — квартиру в самом центре города по отличной цене.

    План предложенной Артуру квартиры представляет собой прямоугольник размера n × m, разделенный на квадраты размера 1 × 1. В каждом из таких квадратов находится либо стена (такой квадрат обозначен на плане символом "*"), либо свободное от стены место (такой квадрат обозначен на плане символом ".").

    Комнаты в квартире представляют собой максимальные по размеру связные области из клеток, свободных от стен. Две клетки считаются соседними, если они имеют общую сторону.

    Давней мечтой Артура была квартира, в которой все комнаты представляют собой прямоугольники. Он просит вас посчитать минимальное количество стен, которое нужно удалить для осуществления его мечты. После удаления из клетки стены в ней образуется свободное место. В процессе удаления стен несколько комнат могут объединиться в одну.

    Входные данные

    В первой строке входных данных следуют два целых числа n, m (1 ≤ n, m ≤ 2000) — размеры плана квартиры Артура.

    В следующих n строках задано по m символов — описание плана квартиры.

    Если клетка плана обозначена символом "*", значит в ней находится стена.

    Если клетка карты обозначена символом ".", значит в этом месте квартиры свободное от стены место, и эта клетка относится к какой-то из комнат.

    Выходные данные

    Выведите n строк по m символов — как будет выглядеть план квартиры Артура, после удаления минимального количества стен для того, чтобы каждая комната (максимальная по размеру связная область из свободных от стен мест), представляла собой прямоугольник.

    Если возможных ответов несколько, разрешается вывести любой из них.

    F. Монстры из пудинга

    разделяй и властвуй Структуры данных *3000

    В данной задаче речь пойдёт про упрощённую модель игры Pudding Monsters.

    Важным этапом разработки любой игры является создание игровых карт. Поле для игры в Pudding Monsters представляет собой квадратную сетку n × n, в n клетках которой расположены монстры, а в некоторых остальных — игровые объекты. Игровая механика заключается в том, что игрок должен перемещать монстров по полю, при этом, оказавшись рядом, два маленьких монстра склеиваются в одного большого (они ведь из пудинга, вы же помните?).

    Исследования показали, что самые интересные карты получаются, если исходно в каждой вертикали и каждой горизонтали расположено по монстру, а дальнейшая специфика карты уже задаётся правильной расстановкой остальных игровых объектов.

    Частым приёмом для упрощения процесса разработки является переиспользование имеющихся ресурсов. Например, имея большую карту n × n, можно выделить из неё квадратную часть меньшего размера k × k, содержащую k монстров, и предложить в качестве упрощённой версии оригинальной карты.

    Вас интересует, сколькими способами можно выделить из исходной карты квадратный фрагмент k × k (1 ≤ k ≤ n), содержащий ровно k монстров из пудинга. Определите это количество.

    Входные данные

    В первой строке следует единственное число n (1 ≤ n ≤ 3 × 105) — размер исходного поля.

    В последующих n строках следуют координаты клеток, в которых исходно расположены монстры. i-я из последующих строк содержит два числа ri, ci (1 ≤ ri, ci ≤ n) — номер строки и номер столбца ячейки, в которой исходно находится i-й из монстров.

    Гарантируется, что все ri — различные числа и все ci — различные числа.

    Выходные данные

    Выведите количество различных квадратных фрагментов исходного поля, которые можно выделить в качестве самостоятельной карты.

    C. Разрезание стекла

    Бинарный поиск реализация Структуры данных *1500

    Леонид хочет стать резчиком по стеклу. У него уже есть прямоугольный лист стекла w мм  ×  h мм, алмазный стеклорез и полные штаны энтузиазма. Не хватает только понимания, что и как резать.

    Чтобы не терять времени даром, он решил поупражняться в технике разрезов. Для этого он проводит вертикальные и горизонтальные разрезы через весь лист. В результате этого процесса образуются меньшие прямоугольные куски стекла. Леонид не перемещает образовавшиеся куски стекла, в частности, очередной разрез делит на меньшие части каждый кусок стекла, через который он проходит.

    После каждого разреза Леонид пытается определить, какую площадь имеет самый большой из имеющихся на данный момент фрагментов стекла. Так как частей становится всё больше и больше, этот вопрос занимает у него всё больше и больше времени, и отвлекает от увлекательного процесса.

    Леонид предлагает устроить разделение труда — он будет резать стекло, а вы — считать площадь максимального фрагмента после каждого разреза. Идёт?

    Входные данные

    В первой строке заданы три целых числа w, h, n (2 ≤ w, h ≤ 200 000, 1 ≤ n ≤ 200 000).

    В последующих n строках следуют описания разрезов. Каждое описание имеет вид H y или V x. В первом случае проводится горизонтальный разрез на расстоянии y миллиметров (1 ≤ y ≤ h - 1) от нижнего края исходного листа, во втором случае проводится вертикальный разрез на расстоянии x (1 ≤ x ≤ w - 1) миллиметров от левого края исходного листа. Гарантируется, что Леонид не будет производить два одинаковых разреза.

    Выходные данные

    После каждого разреза выводите в отдельной строке площадь максимального из имеющихся фрагментов стекла в квадратных миллиметрах.

    Примечание

    Пояснение к первому тесту из условия:

    Пояснение ко второму тесту из условия:

    D. Задача о клике

    дп жадные алгоритмы реализация сортировки Структуры данных *1800

    Задача о клике — одна из самых известных NP-полных задач. После некоторых оговорок она формулируется следующим образом. Рассмотрим неориентированный граф G. Требуется найти такое подмножество вершин C максимального размера, что любые две из них соединены ребром в графе G. Звучит просто, не правда ли? К текущему моменту не известен алгоритм, который находит решение этой задачи за полиномиальное время от размера графа. Однако, как и в случае многих других NP-полных задач, задача о клике оказывается проще, если рассмотреть граф специфического вида.

    Рассмотрим n различных точек на прямой. Пусть i-я точка имеет координату xi и вес wi. Образуем граф G, вершинами которого являются эти точки, а рёбрами соединены в точности те пары точек (i, j), для которых расстояние между этими точками не меньше суммы их весов, формально говоря: |xi - xj| ≥ wi + wj.

    Найдите размер максимальной клики в таком графе.

    Входные данные

    В первой строке задано число n (1 ≤ n ≤ 200 000) — количество точек.

    В каждой из последующих n строк следуют по два числа xi, wi (0 ≤ xi ≤ 109, 1 ≤ wi ≤ 109) — координата и вес очередной точки. Все координаты xi различны.

    Выходные данные

    Выведите одно число — количество вершин в максимальной клике образованного графа.

    Примечание

    Если вы вдруг умеете решать эту задачу, не используя специфические свойства графа, представленного в условии задачи, то вам полагается приз в миллион доллларов!

    Изображение к тесту из условия:

    D. Рукопожатия

    Бинарный поиск жадные алгоритмы Конструктив Структуры данных *1900

    30 февраля в Центр олимпиадной подготовки программистов (ЦОПП) Берляндского государственного университета пришли n студентов. Они приходили по одному один за другим. Каждый из них, зайдя внутрь, прежде чем сесть за рабочее место, здоровался с присутствующими, пожимая руку. Каждый из пришедших студентов оставался в ЦОПП до конца дня, не покидая его.

    В любой момент времени любые три студента могли объединиться и начать писать командный контест, который длился до конца дня. Команда не отвлекалась от контеста ни на минуту, поэтому очередной зашедший студент, здоровающийся с присутствующими, не пожимал руку участникам команд, пишущим контест. Каждая команда состояла ровно из трех студентов, а каждый студент мог стать членом не более чем одной команды. Разные команды могли начать писать контест в разное время.

    Зная, скольким присутствующим каждый студент пожал руку, найдите возможный порядок, в котором студенты могли приходить в ЦОПП. Если такого порядка не существует, то сообщите, что это невозможно.

    Обратите внимание, что какие-то студенты могли до конца дня работать самостоятельно, не участвуя в командном контесте.

    Входные данные

    В первой строке содержится целое число n (1 ≤ n ≤ 2·105) — количество студентов, пришедших в ЦОПП. В следующей строке содержатся n целых чисел a1, a2, ..., an (0 ≤ ai < n), где ai — количество студентов, которым i-й студент пожал руку.

    Выходные данные

    Если искомый порядок студентов существует, в первую строку выведите «Possible», а во вторую строку — перестановку номеров студентов, задающую порядок, в котором студенты приходили в центр. Число i стоящее левее числа j в этой перестановке будет означать, что i-й студент пришел раньше j-го студента. Если ответов несколько, выведите любой.

    Если искомого порядка студентов не существует, в единственную строку выведите «Impossible».

    Примечание

    В первом примере из условия порядок событий мог быть следующим:

    • пришел студент с номером 4 (a4 = 0), здороваться ему было не с кем;
    • пришел студент с номером 5 (a5 = 1), пожал руку студенту с номером 4;
    • пришел студент с номером 1 (a1 = 2), пожал руку двум студентам (с номерами 4, 5);
    • пришел студент с номером 3 (a3 = 3), пожал руку трем студентам (с номерами 4, 5, 1);
    • студенты с номерами 4, 5, 3 объединились в команду и начали писать контест;
    • пришел студент с номером 2 (a2 = 1), пожал руку одному студенту (с номером 1).

    Во втором примере из условия порядок событий мог быть следующим:

    • пришел студент с номером 7 (a7 = 0), здороваться ему было не с кем;
    • пришел студент с номером 5 (a5 = 1), пожал руку студенту с номером 7;
    • пришел студент с номером 2 (a2 = 2), пожал руку двум студентам (с номерами 7, 5);
    • студенты с номерами 7, 5, 2 объединились в команду и начали писать контест;
    • пришел студент с номером 1 (a1 = 0), здороваться ему было не с кем (все писали контест);
    • пришел студент с номером 6 (a6 = 1), пожал руку студенту с номером 1;
    • пришел студент с номером 8 (a8 = 2), пожал руку двум студентам (с номерами 1, 6);
    • пришел студент с номером 3 (a3 = 3), пожал руку трем студентам (с номерами 1, 6, 8);
    • пришел студент с номером 4 (a4 = 4), пожал руку четырем студентам (с номерами 1, 6, 8, 3);
    • студенты с номерами 8, 3, 4 объединились в команду и начали писать контест;
    • пришел студент с номером 9 (a9 = 2), пожал руку двум студентам (с номерами 1, 6).

    В третьем примере из условия порядок событий восстанавливается однозначно:

    • пришел студент с номером 1 (a1 = 0), здороваться ему было не с кем;
    • пришел студент с номером 3 (или с номером 4) (a3 = a4 = 1), пожал руку студенту с номером 1;
    • пришел студент с номером 2 (a2 = 2), пожал руку двум студентам (с номерами 1, 3 (или 4));
    • оставшийся студент с номером 4 (или с номером 3), должен пожать руку одному студенту (a3 = a4 = 1), однако это невозможно, так как существует всего два варианта событий: либо образовалась команда, и он ни с кем не поздоровается, либо он поздоровается со всеми тремя присутствующими, работающими индивидуально.

    E. Тавас в пути

    Деревья разделяй и властвуй Структуры данных *3100

    Тавас живет в Тавасполисе. В Тавасполисе n городов, пронумерованных от 1 до n, соединенных n - 1 двунаправленными дорогами. Между любыми двумя городами есть путь. Также у каждой дороги есть длина.

    Любимые строки Таваса — двоичные строки (содержащие только 0 и 1). Для любой двоичной строки типа s = s1s2... sk, определим T(s)значение этой строки. T(s) вычисляется следующим способом:

    Предположим, что в строке s ровно m блоков цифр 1 (блок цифр 1 — это максимальная подстрока s, которая содержит только единицы) длинами x1, x2, ..., xm.

    Определим , где f — данная последовательность чисел (в частности, если m = 0, то T(s) = 0).

    Тавас любит запросы. Он просит Вас ответить на q запросов. В каждом запросе он дает вам числа v, u, l, а вам следует вывести следующее число:

    Рассмотрим дороги на пути из города v в город u: e1, e2, ..., ex.

    Построим бинарную строку b длины x, такую, что: bi = 1 тогда и только тогда, когда l ≤ w(ei), где w(e) — длина дороги e.

    Результатом запроса является строка T(b).

    Входные данные

    В первой строке ввода записаны целые числа n и q (2 ≤ n ≤ 105 и 1 ≤ q ≤ 105).

    В следующей строке записано n - 1 целых чисел через пробел f1, f2, ..., fn - 1 (|fi| ≤ 1000).

    В следующих n - 1 строках записана информация про дороги. В каждой строке содержатся целые числа v, u и w, означающие, что между городами v и u есть дорога длины w (1 ≤ v, u ≤ n и 1 ≤ w ≤ 109).

    В следующих q строках записана информация о запросах. В каждой строке записаны целые числа v, u, l (1 ≤ v, u ≤ n, v ≠ u и 1 ≤ l ≤ 109).

    Выходные данные

    Выведите ответ на каждый запрос на отдельной строке.

    E. Бесконечные инверсии

    Бинарный поиск Деревья реализация сортировки Структуры данных *2100

    Есть бесконечная последовательность, состоящая из всех положительных целых чисел в порядке возрастания: p = {1, 2, 3, ...}. К ней последовательно применили n операций swap. Операция swap(a, b) меняет местами элементы последовательности на позициях a и b. Требуется найти количество инверсий в получившейся последовательности, т.е. количество таких пар индексов (i, j), что i < j и pi > pj.

    Входные данные

    В первой строке записано единственное целое число n (1 ≤ n ≤ 105) — количество операций swap, примененных к последовательности.

    В каждой из следующих n строк записано по два числа ai и bi (1 ≤ ai, bi ≤ 109, ai ≠ bi) — аргументы операций swap.

    Выходные данные

    Выведите единственное целое число — количество инверсий в получившейся последовательности.

    Примечание

    В первом примере последовательность меняется следующим образом: . В ней 4 инверсии, их образуют пары индексов (1, 4), (2, 3), (2, 4) и (3, 4).

    E. Слушаем музыку

    Конструктив Структуры данных *3200

    Обратите внимание на нестандартное ограничение по памяти.

    Вы очень любите слушать музыку. В течение следующих s дней вы будете слушать ровно по m песен из плейлиста, который состоит ровно из n песен. Пронумеруем песни из плейлиста числами от 1 до n включительно. Качество песни с номером i равно ai.

    В i-й день вы выбираете некоторое целое v (li ≤ v ≤ ri) и слушаете песни с номерами v, v + 1, ..., v + m - 1. Кроме этого, в i-й день прослушивание одной песни с качеством меньше qi увеличивает ваше недовольство ровно на одну единицу.

    Определите, какого минимального недовольства возможно достичь в каждый из s следующих дней.

    Входные данные

    В первой строке записано два целых положительных числа n, m (1 ≤ m ≤ n ≤ 2·105). Во второй строке записано n целых положительных чисел a1, a2, ..., an (0 ≤ ai < 230) — описание песен плейлиста.

    В следующей строке записано единственное число s (1 ≤ s ≤ 2·105)— количество рассматриваемых дней.

    В следующих s строках записано по три целых числа li, ri, xi (1 ≤ li ≤ ri ≤ n - m + 1; 0 ≤ xi < 230) — описание параметров для i-го дня. Чтобы вычислить значение qi необходимо воспользоваться формулой: , где ansi — ответ на задачу для дня i. Будем считать, что ans0 = 0.

    Выходные данные

    Выведите ровно s целых чисел ans1, ans2, ..., anss, где ansi — минимальное недовольство, которого можно достичь в день с номером i.

    B. Майк и футы

    Бинарный поиск дп снм Структуры данных *1900

    Майк — президент страны What-The-Fatherland. Помимо Майка, там живёт ещё n медведей. Все они стоят в ряд и пронумерованы от 1 до n слева направо. Рост i-го медведя составляет ровно ai футов.

    Назовём группой медеведей непустой непрерывный подотрезок этого ряда. Размер группы — это количество медведей в этой группе. Сила группы — это минимальная высота медведя в этой группе.

    Майку хочется знать для каждого x, такого что 1 ≤ x ≤ n, максимальную силу группы медведей размера x.

    Входные данные

    В первой строке ввода записано целое число n (1 ≤ n ≤ 2 × 105), количество медведей.

    Во второй строке записано n целых чисел, разделенных пробелом, a1, a2, ..., an (1 ≤ ai ≤ 109) — высоты медведей.

    Выходные данные

    Выведите n целых чисел в одной строке. Для каждого x от 1 до n выведите максимальную силу среди всех групп размера x.

    E. Майк и друзья

    Деревья Строки строковые суфф. структуры Структуры данных *2800

    What-The-Fatherland — это странная страна! Все номера телефонов там представляют собой строки, состоящие из строчных букв латиницы. Вдвойне странно то, что один номер телефона может относиться к нескольким медведям!

    В этой стране есть рок-группа под названием CF, состоящая из n медведей (включая Майка), пронумерованных от 1 до n.

    Номер телефона i-го члена CF — si. 17 мая в стране выходной под названием День звонков. В последний День Звонков каждый медведь позвонил по всем номерам, являющимся построками его номера (возможно, по некоторому номеру пришлось позвонить несколько раз). В частности, каждый позвонил себе (это действительно странная страна!).

    Обозначим как call(i, j) количество раз, которое i-й участник CF позвонил j-ому участнику CF.

    У Майка есть q запросов, которые он хочет задать вам. В каждом запросе он дает вам номера l, r и k, а вы должны назвать ему число

    Входные данные

    В первой строке ввода записаны целые числа n и q (1 ≤ n ≤ 2 × 105 и 1 ≤ q ≤ 5 × 105).

    В следующих n строках записаны номера телефонов, в i-й из них находится строка si, состоящая из прописных букв латиницы ().

    В следующих q строках следует описание запросов, в каждой строке записаны целые числа l, r и k (1 ≤ l ≤ r ≤ n и 1 ≤ k ≤ n).

    Выходные данные

    Выведите ответ на каждый запрос на отдельной строке.

    F. Юра и разработчики

    разделяй и властвуй Структуры данных *2800

    У Юры есть команда из k разработчиков и список из n заданий, пронумерованных от 1 до n. Юра собирается выбрать некоторые задания, чтобы сделать их на этой неделе. Из-за странных традиций в компании Looksery, номера сделанных заданий должно быть отрезком последовательных целых чисел, содержащим не менее 2 чисел, то есть последовательность вида l, l + 1, ..., r для некоторых 1 ≤ l < r ≤ n.

    С каждым заданием i связано целое число ai, обозначающее количество человекочасов, необходимых для выполнения i-го задания. Разработчики не всегда бывают в себе уверены, и, в общем-то, боятся сложных заданий. Зная это, Юра решил взять самое сложное задание (то, на которое уйдет наибольшее количество человекочасов, из нескольких самых сложных заданий с одинаковы уровнем сложности он выбирает произвольное задание) и сделать его самому. Таким образом, если выбраны задания с номерами [l, r], то разработчикам остается самостоятельно завершить ровно r - l заданий.

    Каждый разработчик может провести любое целочисленное количество часов над любым заданием, но когда вся работа завершена, i-му заданию должно быть уделено ровно ai человекочасов.

    И наконец, проблема в том, что разработчик злится, когда он работает больше другого разработчика. Множество заданий [l, r] считается хорошим, если можно найти такое распределение работы, что все задания можно выполнить, а все разработчики работают одинаковое количество времени (количество работы, которую произведёт Юра, не имеет значения ни для него, ни для других разработчиков).

    Для примера предположим, что Юра выбрал задания со следующими сложностями: a = [1, 2, 3, 4], а у него в распоряжении три разработчика. Юра берет себе самое сложное, четвертое задание, а разработчикам дает задания со сложностями [1, 2, 3]. Если первый разработчик тратит час на первое задание и час на третье, второй разработчик тратит два часа на второе задание, а третий разработчик тратит два часа на третье задание, то когда вся работа будет завершена, окажется, что каждый разработчик работал ровно два часа, а над каждым заданием работали необходимое время. В качестве ещё одного примера скажем, что если бы на первое задание требовалось два часа, а не один, то тогда было бы невозможно распределить задания способом, описанным выше.

    Помимо работы Юра обожает решать задачи. Ему интересно, сколько есть пар (l, r) (1 ≤ l < r ≤ n), таких, что отрезок [l, r] является хорошим? Юра уже решил эту задачу, но времени написать код у него нет. Пожалуйста, помогите Юре и реализуйте решение этой задачи.

    Входные данные

    В первой строке входа записано два положительных целых числа: n и k (1 ≤ n ≤ 300 000, 1 ≤ k ≤ 1 000 000), количество заданий в списке и количество разработчиков в распоряжении Юры.

    Во второй строке записано n целых чисел ai (1 ≤ ai ≤ 109).

    Выходные данные

    Выведите единственное целое число — количество пар (l, r), удовлетворяющих условиям задачи.

    Примечание

    В первом примере существует три хороших отрезка с заданиями:

    1. [1;3] — самое сложное задание требует 3 человекочаса, так что разработчикам остаются задания требующие 1 и 2. Одним из возможных распределений является следующие: один разработчик выполняет первое задание в течении часа, пока двое других выполняют второе. Тогда каждый разработчик будет занят ровно час.
    2. [1;4] — самое сложное задание требует 4 человекочаса, так что разработчикам остаются задания требующие 1, 2 и 3. Если первый разработчик потратит час на первое задание и час на третье, второй разработчик потратит два часа на второе и третий два часа на третье, тогда они выполнят все задания, и каждый отработает ровно 2 часа.
    3. [3;4] —- самое сложное задание требует 4 человекочаса, так что остается только задание, требующее 3 человекочаса. Чтобы его выполнить, каждый разработчик потратит по 1 часу.

    E. GukiZ и GukiZiana

    Бинарный поиск реализация Структуры данных *2500

    Профессор GukiZ опять играет с массивами. Он случайно открыл новую функцию, которую назвалGukiZiana. Для данного массива a, проиндексированного целыми числами от 1 до n, и числа y, GukiZiana(a, y) определяется как максимальное возможное значение j - i, где числа j и i таковы, что aj = ai = y. Если же y не встречается в a как элемент, то GukiZiana(a, y) полагается равной  - 1. GukiZ также подготовил для вас задачу. На этот раз у вас есть два типа запросов:

    1. Запрос первого типа имеет вид 1 l r x, данный запрос означает, что все ai, такие, что l ≤ i ≤ r, должны быть увеличены на неотрицательное целое значение x.
    2. Запрос второго типа имеет вид 2 y, данный запрос означает, что надо определить значение GukiZiana(a, y).

    Для каждого запроса типа 2 выведите ответ, и порадуйте этим GukiZ!

    Входные данные

    В первой строке записано два целых числа n, q (1 ≤ n ≤ 5·105, 1 ≤ q ≤ 5·104), размер массива a, и количество запросов.

    Во второй строке записано n целых чисел a1, a2, ... an (1 ≤ ai ≤ 109), формирующих массив a.

    Каждая из последующих q строк содержит либо четыре, либо два числа, как описано в условии задачи:

    Если строка начинается с 1, то данный запрос выглядит следующим образом: 1 l r x (1 ≤ l ≤ r ≤ n, 0 ≤ x ≤ 109) и представляет собой запрос первого типа.

    Если строка начинается с 2, то данный запрос выглядит следующим образом: 2 y (1 ≤ y ≤ 109), и представляет собой запрос второго типа.

    Выходные данные

    Для каждого запроса типа 2, выведите GukiZiana(a, y) для значения y из данного запроса.

    D. Ваня и треугольники

    геометрия Комбинаторика математика Перебор сортировки Структуры данных *1900

    Ване было скучно и он нарисовал n различных точек на плоскости. После этого он соединил попарно все точки и увидел, что в итоге образовалось большое количество треугольников с вершинами в отмеченных точках. Он просит вас посчитать количество образовавшихся треугольников с ненулевой площадью.

    Входные данные

    В первой строке находится целое число n (1 ≤ n ≤ 2000) — количество отмеченных точек на плоскости.

    В следующих n строках находятся по два целых числа xi, yi ( - 100 ≤ xi, yi ≤ 100) – координаты i-й точки. Гарантируется, что среди точек нет совпадающих.

    Выходные данные

    В первой строке выведите целое число — количество треугольников с ненулевой площадью среди отмеченных.

    Примечание

    Пояснение к первому тесту из условия. Образовано 3 треугольника: (0, 0) - (1, 1) - (2, 0); (0, 0) - (2, 2) - (2, 0); (1, 1) - (2, 2) - (2, 0).

    Пояснение ко второму тесту из усовия. Образован 1 треугольник: (0, 0) - (1, 1) - (2, 0).

    Пояснение к третьему тесту из условия. Одна точка не образует ни одного треугольника.

    B. Дело о беглеце

    жадные алгоритмы сортировки Структуры данных *2000

    Андроид Андреид — известный на всю галактику детектив. Сейчас он преследует преступника, скрывшегося на планете Окса-5, которая почти полностью покрыта водой.

    Единственной сушей на планете является архипелаг из n узких островов, расположенных в ряд. Для удобства представим их в виде непересекающихся отрезков на прямой: остров i имеет координаты [li, ri], причем ri < li + 1 для 1 ≤ i ≤ n - 1.

    Для достижения своей цели Андреиду необходимо поставить по мосту между каждой парой соседних островов. Мост длины a можно поставить между i-м и (i + 1)-м островами, если существуют такие координаты x и y, что li ≤ x ≤ ri, li + 1 ≤ y ≤ ri + 1 и y - x = a.

    Детектива снабдили m мостами, каждый мост можно использовать не более одного раза. Помогите ему определить, достаточно ли ему выданных мостов для того, чтобы соединить каждую пару соседних островов.

    Входные данные

    В первой строке даны целые числа n (2 ≤ n ≤ 2·105) и m (1 ≤ m ≤ 2·105) — количество островов и мостов.

    В следующих n строках идут по два целых числа li и ri (1 ≤ li ≤ ri ≤ 1018) — координаты островов.

    В последней строке даны m целых чисел a1, a2, ..., am (1 ≤ ai ≤ 1018) — длины мостов, которыми снабдили Андреида.

    Выходные данные

    Если поставить по мосту между каждой парой соседних островов требуемым образом невозможно, на единственной строке выведите "No" (без кавычек), иначе на первой строке выведите "Yes" (без кавычек), а на второй — n - 1 чисел b1, b2, ..., bn - 1, которые означают, что между островами i и i + 1 должен быть использован мост с номером bi.

    Если существует несколько правильных ответов, выведите любой. Обратите внимание, что в этой задаче строки "Yes" и "No" надо выводить в правильном регистре.

    Примечание

    В первом тесте из условия, например, можно расположить второй мост между точками 3 и 8, третий мост между точками 7 и 10 и первый мост между точками 10 и 14.

    Во втором тесте из условия первый мост слишком короткий, а второй — слишком длинный, поэтому решения не существует.

    C. Дело о шоколаде

    Структуры данных *2200

    Андроид Андреид — известный на всю галактику детектив. Сейчас он не расследует никакое дело и от скуки ест шоколад.

    Плитку шоколада можно представить в виде таблицы n × n, в которой каждая клетка символизирует одну дольку. В таблице столбцы пронумерованы от 1 до n слева направо, а строки — сверху вниз. Будем называть побочной диагональ, идущую из нижнего левого угла таблицы в верхний правый. Первым делом Андреид съедает все дольки, лежащие ниже побочной диагонали. Затем, с оставшейся треугольной частью он делает q следующих действий: сначала он выбирает дольку на побочной диагонали и либо направление "вверх", либо направление "влево", а затем начинает есть все дольки, начиная с выбранной клетки, двигаясь в выбранном направлении, пока он не дойдет до уже съеденной дольки или края шоколадки.

    После каждого действия он хочет знать, сколько долек было им съедено в результате этого действия.

    Входные данные

    В первой строке заданы целые числа n (1 ≤ n ≤ 109) и q (1 ≤ q ≤ 2·105) — размер таблицы и количество действий.

    В следующих q строках даны описания действий: в i-й из них идут числа xi и yi (1 ≤ xi, yi ≤ n, xi + yi = n + 1) — номера столбца и строки выбранной клетки, а также символ, означающий направление (L — влево, U — вверх).

    Выходные данные

    Выведите q строк, на i-й из них должно быть количество съеденных долек в результате i-го действия.

    Примечание

    Иллюстрации к тестам из условия:

    Дольки, съеденные в одном и том же действии закрашены одинаковым цветом. На дольках, лежащих на побочной диагонали, написаны номера действий, в результате которых эти дольки были съедены.

    Во втором тесте из условия пятым действием Андреид пытается во второй раз начать есть шоколад, начиная с клетки на пересечении 10-го столбца и 1-й строки, но эта клетка уже пуста, поэтому он не съедает ничего.

    C. Артур и стол

    дп жадные алгоритмы математика Перебор сортировки Структуры данных *1900

    Артур купил большой и красивый стол в свою новую квартиру. Придя домой, Артур обнаружил, что его покупка стоит неустойчиво и сильно шатается.

    У стола, купленного Артуром, всего n ножек, длина i-й ножки равна li.

    Артур решил сделать стол устойчивым и открутить некоторые ножки. Для каждой из них Артур определил число di — сколько единиц энергии он потратит, чтобы открутить i-ю ножку.

    Стол с k ножками считается устойчивым, если ножек максимальной длины строго больше половины. Например, чтобы стол с 5-ю ножками был устойчивым, необходимо, чтобы ножек максимальной длины (среди этих пяти) было хотя бы три. Также, стол с одной ножкой всегда устойчивый, а стол с двумя ножками устойчив тогда и только тогда, когда они имеют равные длины.

    Перед вами стоит задача помочь Артуру и посчитать минимальное число единиц энергии, которое Артур может затратить, чтобы сделать стол устойчивым.

    Входные данные

    В первой строке входных данных следует целое число n (1 ≤ n ≤ 105) — изначальное количество ножек у стола, купленного Артуром.

    Во второй строке входных данных задана последовательность из n целых чисел li (1 ≤ li ≤ 105), где li равно длине i-й ножки стола.

    В третьей строке входных данных задана последовательность из n целых чисел di (1 ≤ di ≤ 200), где di — это количество единиц энергии, которое Артур затратит для откручивания i-й ножки стола.

    Выходные данные

    Выведите одно целое число — минимальное число единиц энергии, которое нужно затратить Артуру, чтобы сделать стол устойчивым.

    E. Аня и полупалиндром

    графы Деревья дп Строки строковые суфф. структуры Структуры данных *2300

    Завтра Ане предстоит сдавать самый сложный экзамен по программированию, на котором ей необходимо получить отличную оценку.

    На последнем теоретическом занятии преподаватель ввел понятие полупалиндрома.

    Строка t является полупалиндромом, если для всех нечетных позиций i () выполняется условие ti = t|t| - i + 1, где |t| — длина строки t, а нумерация позиций начинается с единицы. Например, строки "abaa", "a", "bb", "abbbaa" являются полупалиндромами, а строки "ab", "bba" и "aaabaa" — нет.

    Аня узнала, что на экзамене она получит строку s, состоящую только из латинских символов a и b, а также число k. Для получения отличной оценки ей необходимо будет найти k-ю в лексикографическом порядке подстроку данной строки s среди тех подстрок, которые являются полупалиндромами. При этом, каждая подстрока в этом порядке учитывается столько раз, сколько раз она встречается в s.

    Преподаватель гарантирует, что данное число k не превышает количества подстрок данной строки, которые являются полупалиндромами.

    А вы сможете справиться с такой задачей?

    Входные данные

    В первой строке входных данных следует строка s (1 ≤ |s| ≤ 5000), состоящая только из символов 'a' и 'b', где |s| — длина строки s.

    Во второй строке следует целое положительное число k — лексикографический номер искомой подстроки-полупалиндрома среди всех подстрок-полупалиндромов заданной строки s. Нумерация этих подстрок начинается с единицы.

    Гарантируется, что число k не превышает количества подстрок данной строки, которые являются полупалиндромами.

    Выходные данные

    Выведите подстроку заданной строки, которая является k-й в лексикографическом порядке из тех подстрок заданной строки, которые являются полупалиндромами.

    Примечание

    По определению, строка a = a1a2... an лексикографически меньше строки b = b1b2... bm, если либо a является префиксом b и не совпадает с b, либо существует такое i, что a1 = b1, a2 = b2, ... ai - 1 = bi - 1, ai < bi.

    В первом примере подстроками-полупалиндромами являются следующие строки — a, a, a, a, aa, aba, abaa, abba, abbabaa, b, b, b, b, baab, bab, bb, bbab, bbabaab (список задан в лексикографическом порядке).

    D. Угадай, где выход! II

    реализация сортировки Структуры данных *2300

    Amr купил новую видеоигру "Угадай, где выход! II". Задача этой игры — найти выход в лабиринте, имеющим вид полного двоичного дерева высоты h. Изначально игрок стоит в корне дерева, а выход из дерева располагается в некотором листе дерева.

    Пронумеруем все вершины дерева, таким образом, что

    • Корень дерева имеет номер 1
    • У каждой внутренней вершины i (i ≤ 2h - 1 - 1) есть левый потомок с номером 2i и правый потомок с номером 2i + 1

    Уровень вершины определяется как 1 для корня, либо как 1 + уровень вершины-родителя в противном случае. Вершины уровня h называются листьями. Выход из лабиринта расположен в некотором листе n, причём игрок не знает, где выход, так что цель игры — угадать, где выход!

    В новой версии игры игроку дозволяется задавать вопросы формата "Принадлежит ли номер ancestor(exit, i) отрезку [L, R]?". Здесь за ancestor(v, i) обозначается предок вершины v, расположенный на уровне i, а exit обозначает вершину с выходом. Игра может отвечать только "Yes" (Да) или "No" (Нет). Игра устроена так, что она не всегда отвечает верно, и иногда она сообщает ложную информацию, чтобы сбить игрока с толку!

    Amr задал много вопросов и запутался во всех этих ответах, так что он попросил вас помочь ему. Вам даны вопросы и ответы на них, можете ли вы определить, сообщала ли игра противоречивую информацию или нет? Если информация непротиворечива, и вершина выхода определяется однозначно, то выведите её номер. Если информация непротиворечива, но вершина выхода однозначно не определяется, то выведите, что было задано недостаточное количество вопросов. В противном случае, сообщите, что информация противоречива.

    Входные данные

    В первой строке записано два целых числа h, q (1 ≤ h ≤ 50, 0 ≤ q ≤ 105), высота дерева и количество вопросов соответственно.

    В каждой из следующих q строк будет записано по четыре целых числа i, L, R, ans (1 ≤ i ≤ h, 2i - 1 ≤ L ≤ R ≤ 2i - 1, ), обозначающих запрос, описанный в условии, и его ответ (ans = 1, если ответ — "Yes" и ans = 0, если ответ — "No").

    Выходные данные

    Если информация, полученная от игры, противоречива, выведите: "Game cheated!" (игра сжульничала) без кавычек.

    Если информация непротиворечива, и можно однозначно найти выход из лабиринта, выведите его номер.

    В противном случае, выведите: "Data not sufficient!" (недостаточно данных) без кавычек.

    Примечание

    Вершина u называется предком вершины v тогда и только тогда, когда

    • u — та же самая вершина, что и v,
    • u — непосредственный родитель вершины v,
    • либо u — предок непосредственного родителя вершины v.

    В первом тесте дано 4 вершины-листа 4, 5, 6, 7. Первый вопрос говорит, что данная вершина не находится в диапазоне [4, 6], так что выход — это вершина номер 7.

    Во втором тесте дано 8 вершин-листьев. После первого вопроса становится известно, что выход находится в диапазоне [10, 14]. После второго и третьего вопроса становится понятно, что только узел номер 14 подходит. Смотрите на изображение ниже для разъяснений.

    E. Простое задание

    сортировки Строки Структуры данных *2300

    Это задание очень простое. Вам дана строка S длины n и q запросов, каждый запрос имеет формат i j k, что означает: отсортировать подстроку, состоящую из символов от i до j, в неубывающем порядке, если k = 1 или в невозрастающем порядке, если k = 0.

    Выведите итоговую строку после выполнения запросов.

    Входные данные

    В первой строке записано два целых числа n, q (1 ≤ n ≤ 105, 0 ≤ q ≤ 50 000), длина строки и количество запросов, соответственно.

    В следующей строке идёт сама строка S. Она состоит только из строчных английских букв.

    В каждой из следующих q строк записано по три целых числа i, j, k (1 ≤ i ≤ j ≤ n, ), обозначающих запрос.

    Выходные данные

    Выведите строку S после выполнения всех запросов.

    Примечание

    Объяснение к первому тесту:

    C. Почта в корпорации

    Разбор выражений реализация Структуры данных *1700

    Структура корпорации Бернефть имеет иерархический вид, то есть может быть представлена в виде дерева. Рассмотрим представление этой структуры в следующем виде:

    • employee ::= name. | name:employee1,employee2, ... ,employeek.
    • name ::= имя сотрудника

    То есть описание каждого сотрудника состоит из его имени, двоеточия, описаний всех его подчиненных, разделённых запятыми, и точки в конце. Если у сотрудника нет подчиненных, двоеточие в его описании отсутствует.

    Например, строка MIKE:MAX.,ARTEM:MIKE..,DMITRY:DMITRY.,DMITRY... является корректной записью структуры корпорации, в которой директор MIKE имеет подчиненных MAX, ARTEM и DMITRY. ARTEM имеет подчиненного, которого зовут MIKE, точно так же как и его начальника, а двоих подчиненных DMITRY зовут DMITRY, как и его самого.

    В корпорации Бернефть каждый сотрудник может переписываться только со своими подчиненными, причем не обязательно прямыми. Назовем неудобной ситуацию, когда человек с именем s пишет письмо другому человеку, которого так же зовут s. В приведенном выше примере есть 3 таких пары: одна с участием MIKE, и две для DMITRY (по одной на каждого его подчиненного).

    Ваша задача — по заданной структуре корпорации найти количество неудобных пар в ней.

    Входные данные

    В первой и единственной строке записана структура корпорации — строка длиной от 1 до 1000 символов. Гарантируется, что описание корректно. Каждое имя — это строка из больших латинских букв длиной от 1 до 10 символов.

    Выходные данные

    Выведите одно число — количество неудобных ситуаций в корпорации.

    E. Принцип домино

    Бинарный поиск сортировки Структуры данных *2200

    Вася увлекается расстановкой домино. Обычкновенные домино Васе надоели, и он использует костяшки разных высот. Он поставил на стол n доминошек вдоль одной оси, проходящей слева направо. Каждая доминошка стоит перпендикулярно этой оси так, что ось проходит через центр ее основания. i-ая костяшка домино имеет координату xi и высоту hi. Теперь Вася хочет узнать для каждой костяшки домино, сколько доминошек упадет, если он толкнет ее вправо. Помогите ему это сделать.

    Считайте, что доминошка падает, если ее задевают строго выше основания. Другими словами, падение костяшки домино с начальной координатой x и высотой h приводит к падению всех доминошек на отрезке [x + 1, x + h - 1].

    Входные данные

    В первой строке записано целое число n (1 ≤ n ≤ 105) — количество доминошек. Далее следует n строк по два целых числа xi и hi ( - 108 ≤ xi ≤ 108, 2 ≤ hi ≤ 108) — координата и высота каждой доминошки. Никакие две доминошки не стоят в одной точке.

    Выходные данные

    Выведите n чисел zi через пробел — сколько доминошек упадет, если Вася толкнет вправо i-ую (включая ее саму).

    C. Геометрическая прогрессия

    Бинарный поиск дп Структуры данных *1700

    Поликарп очень любит геометрические прогрессии. Так как ему только три года, он любит прогрессии только длины три. Также у него есть любимое целое число k и последовательность a, состоящая из n целых чисел.

    Он хочет узнать: сколько подпоследовательностей длины три можно выбрать из a так, чтобы они образовывали геометрическую прогрессию со знаменателем k.

    Подпоследовательностью длины три называются три таких индекса i1, i2, i3, что 1 ≤ i1 < i2 < i3 ≤ n. То есть подпоследовательности длины три — это такие тройки элементов, которые необязательно идут подряд в последовательности, но их индексы строго возрастают.

    Геометрическая прогрессия со знаменателем k — это последовательность чисел вида b·k0, b·k1, ..., b·kr - 1.

    Поликарпу всё ещё три года, поэтому он не может посчитать это количество самостоятельно. Помогите ему сделать это.

    Входные данные

    В первой строке входных данных содержится два целых числа n и k (1 ≤ n, k ≤ 2·105) — количество чисел в последовательности Поликарпа и его любимое число.

    Вторая строка содержит n целых чисел a1, a2, ..., an ( - 109 ≤ ai ≤ 109) — элементы последовательности.

    Выходные данные

    Выведите единственное число — количество способов выбрать такую подпоследовательность длины три, что она образует геометрическую прогрессию со знаменателем k.

    Примечание

    В первом примере ответ четыре, так как в качестве первого элемента можно выбрать любую из двух единиц, в качестве второго — любую из двух двоек, а третий элемент подпоследовательности обязательно должен равняться четырём.

    D. Одномерный морской бой

    Бинарный поиск жадные алгоритмы сортировки Структуры данных *1700

    Алиса и Боб любят играть в одномерный морской бой. Они играют на поле, имеющем вид строки из n квадратных клеточек (то есть на таблице 1 × n).

    В начале игры Алиса в тайне от Боба расставляет на поле k кораблей, каждый из которых имеет вид прямоугольника 1 × a (то есть занимает последовательность из a подряд идущих клеток поля). Корабли не могут пересекаться и даже касаться друг друга.

    После этого Боб делает последовательность «выстрелов». Он называет клетки поля, а Алиса сообщает, что клетка пуста («мимо»), либо что эта клетка принадлежит какому-либо кораблю («попал»).

    Вот незадача! Похоже, Алиса любит фантазировать. Видимо, именно по этой причине на каждый ход Боба она отвечает «мимо».

    Помогите Бобу уличить Алису в фантазировании — найдите первый такой ход Боба, после которого можно наверняка утверждать, что Алиса слукавила.

    Входные данные

    В первой строке входных данных содержится три целых числа: n, k и a (1 ≤ n, k, a ≤ 2·105) — размер поля, количество кораблей и размер каждого из них. Гарантируется, что n, k и a такие, что на поле возможно расставить k кораблей размера a, что никакие два не пересекаются и не касаются.

    Вторая строка содержит целое число m (1 ≤ m ≤ n) — количество ходов Боба.

    Третья строка содержит m различных целых чисел x1, x2, ..., xm, где xi — номер клетки, по которой Боб произвёл i-й выстрел. Клетки нумеруются слева направо от 1 до n.

    Выходные данные

    Выведите единственное целое число — номер такого первого хода Боба, после которого можно наверняка утверждать, что Алиса сказала неправду. Ходы Боба нумеруются от 1 до m в порядке их совершения. Если искомого хода не существует, то выведите «-1».

    E. Наибольшая возрастающая подпоследовательность

    дп Структуры данных *3000

    Обратите внимание на то, что ограничение по памяти в этой задаче меньше обычного

    Рассмотрим массив, состоящий из целых положительных чисел, на некоторых местах которого находятся пропуски.

    Имеется набор чисел, которые можно использовать для заполнения пропусков. Каждое число из данного набора может быть использовано максимум один раз.

    Требуется определить такой способ заполнения пропусков, в котором наибольшая возрастающая подпоследовательность в образованном массиве имеет максимально возможный размер.

    Входные данные

    В первой строке находится одно целое число n — длина массива (1 ≤ n ≤ 105).

    Во второй строке находятся n целых чисел, разделённых пробелами — элементы последовательности. Пропуск обозначается как "-1". Элементы, не являющиеся пропусками, — положительные целые числа, не превосходящие 109. Гарантируется, что последовательность содержит k ≤ 1000 пропусков.

    В третьей строке находится одно положительное целое число m — количество элементов для заполнения пропусков (0 ≤ k ≤ m ≤ 105).

    В четвертой строке находятся m целых положительных чисел — числа для заполнения пропусков. Каждое число — положительное целое, не превосходящее 109. Среди них могут быть совпадающие.

    Выходные данные

    Выведите n чисел в одной строке через пробел — полученную последовательность. Если возможных ответов несколько, выведите любой из них.

    Примечание

    В первом примере пропусков нет, поэтому правильный ответ — исходная последовательность.

    Во втором примере есть только один способ получить возрастающую подпоследовательность длины 3.

    В третьем примере ответ "4 2" тоже был бы верным. Обратите внимание, что рассматриваются только строго возрастающие подпоследовательности.

    В пятом примере ответ "1 1 1 2" верным не является, так как число 1 можно использовать на замену только два раза.

    C. Замены

    Конструктив реализация Структуры данных *1600

    У Данила была строка s, состоящая из строчных английских букв и точек (знаков '.'). Определим операцию замены как следующую последовательность действий: найдём подстроку ".." (две подряд идущих точки) в строке s, из всех вхождений этой подстроки выберем самое первое, и заменим эту подстроку на строку ".". Иными словами, во время операции замены первые две подряд идущих точки заменяются на одну. Если в строке s нет двух подряд идущих точек, то ничего не происходит.

    Обозначим за f(s) минимальное количество операций замены, которые необходимо произвести, чтобы в строке не осталось двух подряд идущих точек.

    Вам требуется обработать m запросов, в результате i-го из них символу на позиции xi (1 ≤ xi ≤ n) строки s присваивается значение ci. После выполнения каждой операции вы должны определить и вывести значение f(s).

    Помогите Данилу ответить на все запросы.

    Входные данные

    В первой строке находятся два целых числа n и m (1 ≤ n, m ≤ 300 000) — длина строки и количество запросов.

    Во второй строке следует строка s, состоящая из n строчных английских букв и точек.

    В последующих m строках следуют описания запросов. В i-й строке находятся целое число xi и ci (1 ≤ xi ≤ n, ci — строчная латинская буква или точка), описывающие запрос присваивания символа ci на позицию xi.

    Выходные данные

    Выведите m чисел по одному в строке, i-е из этих чисел должно равняться значению f(s) после применения i-го присваивания.

    Примечание

    Пояснение к первому тесту из условия (заменяемые точки окружены квадратными скобками).

    Начальная строка — ".b..bz....".

    • после первого запроса f(hb..bz....) = 4    ("hb[..]bz...."  →  "hb.bz[..].."  →  "hb.bz[..]."  →  "hb.bz[..]"  →  "hb.bz.")
    • после второго запроса f(hbс.bz....) = 3    ("hbс.bz[..].."  →  "hbс.bz[..]."  →  "hbс.bz[..]"  →  "hbс.bz.")
    • после третьего запроса f(hbс.bz..f.) = 1    ("hbс.bz[..]f."  →  "hbс.bz.f.")

    Пояснение ко второму тесту из условия.

    Начальная строка — ".cc.".

    • после первого запроса: f(..c.) = 1    ("[..]c."  →  ".c.")
    • после второго запроса: f(....) = 3    ("[..].."  →  "[..]."  →  "[..]"  →  ".")
    • после третьего запроса: f(.a..) = 1    (".a[..]"  →  ".a.")
    • после четвёртого запроса: f(aa..) = 1    ("aa[..]"  →  "aa.")

    D. Кампус

    Бинарный поиск Деревья снм Структуры данных *3100

    В городе Осколково есть кампус, состоящий из n студенческих общежитий, n университетов и n военкоматов. Изначально i-е общежитие принадлежит i-му университету и приписано к i-му военкомату.

    Жизнь бурлит, и в кампусе постоянно происходят изменения. Изменения бывают четырех типов:

    1. Университет под номером aj объединяется с университетом bj, после чего все общежития, которые принадлежали университету bj, переходят под контроль университета aj, а университет bj перестает существовать.
    2. Военкомат под номером cj объединяется с военкоматом dj, после чего все общежития, которые были приписаны к военкомату dj, переходят под контроль военкомата cj, а военкомат dj перестает существовать.
    3. Университет под номером xj производит заселение. Путь kxj — количество общежитий, которые принадлежат этому университету в момент заселения. Тогда количество студентов в каждом общежитии университета xj увеличивается на kxj (обратите внимание, чем больше общежитий принадлежат университету, тем больше студентов заселяется в каждое общежитие университета).
    4. Военкомат под номером yj производит облаву на все подконтрольные ему общежития и забирает из них всех студентов.

    Таким образом, в любой момент времени каждое общежитие относится только к одному университету и одному военкомату. Изначально все общежития пусты.

    Вам требуется обрабатывать изменения, происходящие в кампусе, а также отвечать на запросы, сколько человек живёт в общежитии qj в данный момент времени.

    Входные данные

    В первой строке записаны два целых числа n и m (1 ≤ n, m ≤ 5·105) — число общежитий и число запросов соответственно.

    В следующих m строках находятся запросы, каждый из которых задан в одном из следующих форматов:

    • «U aj bj» — объединение университетов;
    • «M cj dj» — объединение военкоматов;
    • «A xj» — заселение в университет xj;
    • «Z yj» — облава в военкомате yj;
    • «Q qj» — запрос количества человек в общежитии qj.
    Все числа в запросах целые положительные и не превосходят n. Гарантируется, что на момент запроса университеты и военкоматы, фигурирующие в запросе, существуют.
    Выходные данные

    В i-й строке выведите ответ на i-й запрос количества человек в общежитии.

    Примечание

    Рассмотрим первый тестовый пример:

    • При первом запросе университету 1 принадлежит только общежитие номер 1, значит после запроса в общежитии 1 будет жить 1 студент.
    • После третьего запроса университету номер 1 принадлежат общежития 1 и 2.
    • Четвертый запрос увеличивает на 2 количество студентов, живущих в общежитиях 1 и 2, принадлежащих университету номер 1. После этого в первом общежитии живет 3 студента, а во втором — 2 студента.
    • При пятом запросе обнуляется количество студентов, живущих в общежитии номер 1, приписанном к военкомату номер 1.

    B. Биржевые заявки

    жадные алгоритмы реализация сортировки Структуры данных *1300

    В данной задаче вам потребуется обработать набор заявок на торгах и сформировать по ним биржевой стакан.

    Заявка — это желание какого-то участника торгов купить или продать акции. Для каждой заявки i известна ее цена pi, направление заявки di — покупка или продажа, а также количество акций qi, которые участник готов купить или продать по цене pi за акцию. Значение qi называется объемом заявки.

    Все заявки с одинаковой ценой p и направлением d объединяются в так называемую аггрегированную заявку, цена которой также равна p, направление — d, а объём складывается из исходных заявок.

    Биржевой стакан — это таблица из аггрегированных заявок, в которой сначала идут предложения продажи, отсортированные по убыванию цены, а затем предложения покупки, тоже отсортированные по убыванию цены.

    Стакан с глубиной s содержит s лучших аггрегированных заявок по каждому направлению. Заявка на покупку тем лучше, чем у неё цена больше, заявка на продажу тем лучше, чем у неё цена меньше. Если аггрегированных заявок в данном направлении меньше s, то они все попадают в итоговый стакан.

    Дано n биржевых заявок на покупку и продажу акций, требуется распечатать биржевой стакан глубины s для этих заявок.

    Входные данные

    В первой строке записаны два целых числа n и s (1 ≤ n ≤ 1000, 1 ≤ s ≤ 50) — количество заявок и глубина стакана соответственно.

    В каждой из следующих n строк следуют символ di (либо 'B', либо 'S'), целое число pi (0 ≤ pi ≤ 105), а также целое число qi (1 ≤ qi ≤ 104) — направление, цена и объем заявки соответственно. Символ 'B' означает покупку, 'S' — продажу. Цена любой заявки на продажу больше цены любой заявки на покупку.

    Выходные данные

    Выведите не больше чем 2s строк, в которых содержатся аггрегированные заявки биржевого стакана глубины s. Заявки требуется выводить в том же формате что и во входных данных.

    Примечание

    Будем обозначать (x, y) заявку по цене x с объемом y. В тестовом примере имеются три аггрегированные заявки на покупку: (10, 3), (20, 4), (25, 10) и две на продажу: (50, 8), (40, 1)

    Нужно вывести не более двух лучших заявок по каждому направлению, поэтому заявку (10 3), имеющую худшую цену среди заявок на покупку, выводить не нужно.

    B. Мишка и кубики

    Бинарный поиск дп математика Структуры данных *1600

    Лимак — маленький мишка, который любит играть. Он строит башенки из кубиков, а потом рушит их.

    Он возвёл n башен, расположенных в ряд, i-я башня сделана из hi одинаковых кубиков. (смотрите иллюстрацию к первому примеру).

    Лимак повторит следующую операцию, пока конструкция не разрушится целиком.

    Кубик называется внутренним, если у него есть все четыре соседа, то есть если каждая его сторона (левая, правая, верхняя или нижняя) примыкает к другому кубику или к полу. В противном случае, кубик считается граничным. За одну операцию Лимак одновременно разрушает все граничные кубики.

    Лимак готов начинать. Ваша задача — посчитать, сколько операций ему будет нужно, чтобы уничтожить все кубики.

    Входные данные

    В первой строке записано единственное целое число n (1 ≤ n ≤ 105).

    Во второй строке записано n целых чисел через пробел h1, h2, ..., hn (1 ≤ hi ≤ 109) — размеры башен.

    Выходные данные

    Выведите количество операций, необходимых для уничтожения всех башен.

    Примечание

    Приведенная ниже иллюстрация показывает все три операции для первого теста. Каждый раз граничные кубики окрашены красным.

    После первой операции остается четыре кубика, а после второй операции остается только один. Этот последний кубик уничтожается в третьей операции.

    D. Мишка и кавалерия

    дп разделяй и властвуй Структуры данных *3000

    Вы бы хотели поучаствовать в конном сражении с мишками? Я — не очень.

    Лимак — мишка гризли. Он генерал ужасной армии Мишляндии. Как вы знаете, самая важная часть армии — это, конечно, кавалерия.

    Кавалерия Мишляндии состоит из n воинов и n лошадей. У i-го воина сила равна wi, а у i-й лошади сила равна hi. Воин со своей лошадью называется юнитом. Сила юнита равна произведению сил воина и лошади. Общая сила кавалерии равна сумме сил всех n юнитов. Правильное распределение воинов и лошадей делает кавалерию по-настоящему мощной.

    Изначально i-му воину принадлежит i-я лошадь. Вам дано q запросов. После каждого запроса два воина меняются друг с другом лошадьми.

    Генерал Лимак должен быть готов к любой возможной ситуации. Что, если бы воинам было запрещено скакать на своих лошадях? Поэтому после каждого запроса вам требуется найти максимальную возможную силу кавалерии, если мы рассматриваем только такие сопоставления воинов лошадям, что ни одному воину не достается его собственная лошадь (можно доказать, что для n ≥ 2 всегда есть не менее одного корректного распределения).

    Входные данные

    В первой строке содержатся два целых числа через пробел, n и q (2 ≤ n ≤ 30 000, 1 ≤ q ≤ 10 000).

    Во второй строке содержится n целых чисел через пробел, w1, w2, ..., wn (1 ≤ wi ≤ 106) — силы воинов.

    В третьей строке содержится n целых чисел через пробел, h1, h2, ..., hn (1 ≤ hi ≤ 106) — силы лошадей.

    Следующие q строк описывают запросы. i-я из них содержит два целых числа через пробел, ai и bi (1 ≤ ai, bi ≤ n, ai ≠ bi), индексы воинов, которые меняются лошадьми друг с другом.

    Выходные данные

    Выведите q строк с ответами на запросы. В i-й строке выведите максимальную возможную силу кавалерии после первых i запросов.

    Примечание

    Разъяснения к первому примеру:

    Воины:    1 10 100 1000

    Лошади:   3  7  2    5 

    После первого запроса ситуация выглядит следующим образом:

    Воины:    1 10 100 1000

    Лошади:   3  5  2    7 

    Мы можем получить 1·2 + 10·3 + 100·7 + 1000·5 = 5732 (обратите внимание, что ни один всадник не сядет на свою собственную лошадь в таком случае).

    После второго запроса мы вернемся к изначальной ситуации и оптимальное распределение таково: 1·2 + 10·3 + 100·5 + 1000·7 = 7532.

    Разъяснение ко второму примеру. После первого запроса:

    Воины:   7 11 5

    Кони:    2  3 1

    Оптимальное распределение — 7·1 + 11·2 + 5·3 = 44.

    После второго запроса — 7·3 + 11·2 + 5·1 = 48.

    В конце — 7·2 + 11·3 + 5·1 = 52.

    E. Мишка и боулинг

    жадные алгоритмы Структуры данных *3200

    Лимак — старый бурый мишка. Он часто ходит в боулинг с друзьями. Сегодня он чувствует себя очень хорошо и старается побить собственный рекорд!

    За бросок он получает целое число (возможно, отрицательное) очков. В конце игры счет за i-й бросок умножается на i и все счета суммируются. Таким образом, за k бросков на s1, s2, ..., sk очков общий счёт будет равен . В частности, если бросков не было, общий счёт полагается равным 0.

    Лимак сделал n бросков и получил счет ai за i-й из них. Он хочет максимизировать свой общий счет и придумал интересную мысль. Он отменит некоторые броски, сказав, что его что-то отвлекло или что дул сильный ветер.

    Лимак может отменить любое количество бросков (возможно, все или ни один из них). Общий счет подсчитывается так, как будто были только не отмененные броски (прочитайте пояснения к тестам). Какой максимальный общий счет может получить Лимак?

    Входные данные

    Первая строка содержит единственное целое число n (1 ≤ n ≤ 105).

    Вторая строка содержит n целых чисел через пробел a1, a2, ..., an (|ai| ≤ 107) — очки, полученные Лимаком за броски в порядке их совершения.

    Выходные данные

    Выведите максимальный возможный общий счет после отмены некоторых бросков.

    Примечание

    В первом примере Лимак должен отменить броски со счетами  - 8 и  - 3. Затем у него останутся три броска со счетами  - 2, 0, 5. Общий счет — 1·( - 2) + 2·0 + 3·5 = 13.

    Во втором примере Лимак должен отменить бросок со счетом  - 50. Общий счет равен 1·( - 10) + 2·20 + 3·( - 30) + 4·40 + 5·60 = 400.

    A. Фибоноччи

    математика матрицы Структуры данных *2700

    Последовательность Фибоноччи — это целочисленная рекуррентная последовательность, определяемая следующим образом:

    Fn = sn - 1·Fn - 1 + sn - 2·Fn - 2
    при этом
    F0 = 0, F1 = 1

    Последовательность s — это бесконечная и почти периодическая последовательность с периодом длины N. Здесь последовательность s называется почти периодической с периодом длины N, если , для i ≥ N, кроме конечного числа значений si, для которых (i ≥ N).

    Далее следует пример почти периодической последовательности с периодом длины 4:

    s = (5,3,8,11,5,3,7,11,5,3,8,11,…)

    Обратите внимание, что единственное значение s, для которого не выполняется уравнение — это s6 (s6 = 7 и s2 = 8). Вам даны s0, s1, ...sN - 1 и все значения последовательности s, для которых (i ≥ N).

    Найдите .

    Входные данные

    Первая строка содержит два целых числа, K и P. Во второй строке записано единственное число N. В третьей строке записано N чисел через пробелы, обозначающие первые N чисел последовательности s. В четвёртой строке записано единственное целое число M, количество значений в последовательности s, для которых . Каждая из последующих M строк содержит по два числа, j и v, обозначающих, что и sj = v. Все значения j различны.

    • 1 ≤ N, M ≤ 50000
    • 0 ≤ K ≤ 1018
    • 1 ≤ P ≤ 109
    • 1 ≤ si ≤ 109, for all i = 0, 1, ...N - 1
    • N ≤ j ≤ 1018
    • 1 ≤ v ≤ 109
    • Все значения целочисленные.
    Выходные данные

    Выведите единственное целое число, равное .

    I. Защита роботов

    Структуры данных *2800

    Компания "Robots industries" производит роботов для защиты территорий. Роботы защищают треугольные участки — прямоугольные равнобедренные треугольники с катетами, параллельными направлениям север-юг и запад-восток.

    Владелец некоторого участка покупает и устанавливает роботов на своей территории для защиты. Время от времени бизнесмены хотят строить офисы в некоторых точках и им хочется узнавать, сколько роботов будут охранять его. Вам надо отвечать на эти запросы.

    Входные данные

    В первой строке записано целое число N — ширина и высота участка, а также целое число Q — количество запросов для обработки.

    В следующих Q строках записаны запросы, которые надо обработать.

    Два типа запросов:

    1. 1 dir x y len — добавить робота для защиты треугольника. В зависимости от значения dir, значения x, y и len представляют различный треугольник:
      • dir = 1: Треугольник обозначается точками (x, y), (x + len, y), (x, y + len)
      • dir = 2: Треугольник обозначается точками (x, y), (x + len, y), (x, y - len)
      • dir = 3: Треугольник обозначается точками (x, y), (x - len, y), (x, y + len)
      • dir = 4: Треугольник обозначается точками (x, y), (x - len, y), (x, y - len)
    2. 2 x y — выведите, сколько роботов охраняют эту точку (робот охраняет точку, если точка расположена внутри или на границе его треугольника)
    • 1 ≤ N ≤ 5000
    • 1 ≤ Q ≤ 105
    • 1 ≤ dir ≤ 4
    • Все точки треугольников находятся в диапазоне [1, N]
    • Все числа — положительные целые числа
    Выходные данные

    Для каждого запроса второго типа выведите количество роботов, охраняющих эту точку. Каждый ответ должен быть на отдельной строке.

    E. Покраска ребер

    Бинарный поиск Структуры данных *3300

    Обратите внимание на нестандартное ограничение по памяти в этой задаче.

    Дан неориентированный граф из n вершин и m ребер. Вершины пронумерованы целыми числами от 1 до n, рёбра нумеруются целыми числами от 1 до m. Каждое ребро может быть покрашено в один из k цветов, которые нумеруются целыми числами от 1 до k. Изначально ни одно ребро не покрашено ни в один из цветов.

    Вам приходят запросы вида «Перекрасьте ребро номер ei в цвет ci». В любой момент времени граф, образованный ребрами одного цвета, должен быть двудольным. Если после перекраски это условие нарушится, то запрос считается некорректным и ребро ei сохраняет свой цвет. Иначе ребро ei перекрашивается в цвет ci, а запрос считается корректным.

    Напомним, что граф называется двудольным, если множество его вершин можно разбить на две части так, чтобы ни одно ребро не соединяло вершины из одной и той же части.

    Например, пусть дан граф-треугольник, то есть граф с тремя вершинами и ребрами (1, 2), (2, 3) и (3, 1). Пусть первые два ребра покрашены в цвет 1, а третье — в цвет 2. Тогда запрос «перекрасить третье ребро в цвет 1» будет некорректным, потому что после его исполнения граф, образованный ребрами цвета 1, не будет являться двудольным. С другой стороны, возможно перекрасить второе ребро в цвет 2.

    Вам поступает q запросов. Для каждого запроса вы должны либо применить его, и сообщить, что запрос корректен, либо сообщить, что запрос некорректен.

    Входные данные

    В первой строке даны числа n, m, k, q (2 ≤ n ≤ 5·105, 1 ≤ m, q ≤ 5·105, 1 ≤ k ≤ 50) — число вершин, число ребер, количество цветов и количество запросов.

    Далее даны m ребер графа в формате ai, bi (1 ≤ ai, bi ≤ n).

    Далее даны q запросов в формате ei, ci (1 ≤ ei ≤ m, 1 ≤ ci ≤ k).

    Гарантируется, что в графе нет кратных ребер и петель.

    Выходные данные

    Для каждого запроса выведите «YES» (без кавычек), если он корректен, либо «NO» (без кавычек), если этот запрос нарушит двудольность графа, образованного ребрами какого-либо цвета.

    B. Сумма по модулю

    дп Комбинаторика Структуры данных *1900

    Дана последовательность чисел a1, a2, ..., an, а также число m.

    Проверьте, можно ли выбрать непустую подпоследовательность aij такую, что сумма чисел в этой подпоследовательности делится на m.

    Входные данные

    В первой строке даны два числа n и m (1 ≤ n ≤ 106, 2 ≤ m ≤ 103) — размер исходной последовательности и число, от деления на которое берётся остаток у суммы.

    Во второй строке даны n чисел a1, a2, ..., an (0 ≤ ai ≤ 109).

    Выходные данные

    В единственной строке выведите «YES» (без кавычек) в случае, если существует требуемая подпоследовательность, либо «NO» (без кавычек), если такой подпоследовательности не существует.

    Примечание

    В первом тесте из условия можно выбрать числа 2 и 3, сумма которых делится на 5.

    Во втором тесте из условия, единственная непустая подпоследовательность чисел — одно число 5. Число 5 не делится на 6, стало быть, искомой подпоследовательности не существует.

    В третьем тесте из условия нужно выбрать два числа 3 на концах.

    В четвертом тесте из условия можно взять целиком всю последовательность.

    E. Кефа и часы

    Строки Структуры данных хэши *2500

    Как-то попугай Кефа шел по улице, возвращаясь домой из ресторана, и увидел в кустах что-то блестящее. Подойдя поближе он понял, что это часы. Он решил отнести их в ломбард, чтобы на этом заработать.

    Там продавец сообщил ему, что на каждых часах есть серийный номер, представляющий собой строку из цифр от 0 до 9, и чем больше этот номер проходит проверок на подлинность, тем дороже часы. Проверка задаётся тремя целыми положительными числами l, r и d. Часы проходят проверку, если подстрока серийного номера с l по r имеет период d. Иногда продавец отвлекается, и Кефа изменяет в какой-то подстроке серийного номера все цифры на c, чтобы попытаться максимизировать прибыль с часов.

    У продавца и так много дел, а тут еще и Кефа мешает, поэтому он поручил вам написать программу для определения подлинности часов.

    Напомним, что число x называется периодом строки s (1 ≤ x ≤ |s|), если si  =  si + x для всех i от 1 до |s|  -  x.

    Входные данные

    Первая строка ввода содержит три целых положительных числа n, m и k (1 ≤ n ≤ 105, 1 ≤ m + k ≤ 105) — длина серийного номера, количество изменений номера, произведенных Кефой, и количество проверок на подлинность.

    Вторая строка содержит серийный номер, состоящий из n цифр.

    Далее следует m + k строк, содержащих проверки либо изменения.

    Изменения задаются, как 1 l r с (1 ≤ l ≤ r ≤ n, 0 ≤ c ≤ 9). Это означает, что Кефа изменил все цифры с l-й по r-ю на c.

    Проверки задаются, как 2 l r d (1 ≤ l ≤ r ≤ n, 1 ≤ d ≤ r - l + 1).

    Выходные данные

    Для каждой проверки на отдельной строке выведите «YES», если часы прошли её, иначе выведите «NO».

    Примечание

    В первом тесте из условия будет произведено две проверки. В первой подстрока "12" проверяется на наличие периода 1, поэтому ответ — «NO». Во второй подстрока "88", проверяется на наличие периода 1, и у неё этот период есть, поэтому ответ — «YES».

    Во втором тесте из условия будет произведено три проверки. В первой рассматривается подстрока "3493", у которой нет периода 2. Перед второй проверкой строка приобретает вид "334334", поэтому на него ответ «YES». И наконец, в третьей проверке рассматривается подстрока "8334", у которой нет периода 1.

    C. Duff в армии

    Деревья Структуры данных *2200

    На днях Duff стала солдатом армии. Malek — её командир.

    В их стране, Andarz Gu, есть n городов (пронумерованных от 1 до n) и n - 1 дорог. Каждая дорога соединяет два различных города. Между любыми двумя городами существует уникальный путь.

    Также в Andarz Gu живут m людей (пронумерованных от 1 до m). У каждого человека есть номер. Номер i-го человека равен i, и он/она живет в городе номер ci. Обратите внимание, в одном городе могут жить несколько людей, либо не жить вовсе.

    Malek любит отдавать приказы. Поэтому он попросил Duff ответить на q запросов. В каждом запросе он дает ей числа v, u и a.

    Чтобы ответить на запрос:

    Предположим, что x людей живут в городах, лежащих на пути из города v в город u. Предположим, что номера этих людей — p1, p2, ..., px, если выписать их в возрастающем порядке.

    Пусть k = min(x, a). Duff должна назвать Malek'у числа k, p1, p2, ..., pk, именно в таком порядке. Иными словами, Malek хочет знать a минимумов на этом пути (или меньше, если дано меньше a людей).

    Duff сейчас очень занята, так что она попросила тебя помочь ей ответить на запросы.

    Входные данные

    В первой строке ввода записано три целых числа, n, m и q (1 ≤ n, m, q ≤ 105).

    В следующих n - 1 строках записаны дороги. В каждой строке записано два целых числа, v и u, номера городов, соединённых очередной дорогой (1 ≤ v, u ≤ n, v ≠ u).

    В следующей строке записано m целых чисел c1, c2, ..., cm (1 ≤ ci ≤ n, 1 ≤ i ≤ m).

    В следующих q строках записаны запросы. Каждый из них состоит из трёх целых чисел, v, u и a (1 ≤ v, u ≤ n и 1 ≤ a ≤ 10).

    Выходные данные

    Для каждого запроса выведите числа k, p1, p2, ..., pk через пробел в одной строке.

    Примечание

    В тесте из условия страна Andarz Gu имеет следующий вид (номера людей, живущих в каждом городе, подписаны рядом с соответствующим городом):

    E. Королева Duff

    Структуры данных *2900

    Duff — королева своей страны, Andarz Gu. Она — поклоннца спортивного программирования. Поэтому, увидев своего министра Malek'а без дела, она дала ему последовательность, состоящую из n неотрицательных целых чисел a1, a2, ..., an и попросила его выполнить q запросов для неё на этой последовательности.

    Дано два типа запросов:

    1. даны числа l, r и k, Malek должен произвести для каждого l ≤ i ≤ r (, побитовое исключающее ИЛИ чисел a и b)
    2. даны числа l и r, Malek длжен назвать королеве качество данной последовательности al, al + 1, ... , ar.

    качеством последовательности b1, ..., bk называется количество её Kheshtak'ов. Неотрицательное целое числа w является Kheshtak'ом последовательности тогда и только тогда, когда у неё есть подпоследовательность bi1, bi2, ..., bix (возможно, пустая), такая, что (1 ≤ i1 < i2 < ... < ix ≤ k). Если эта подпоследовательнось пустая, то w полагается равным нулю.

    В отличие от Duff, Malek — не программист. Поэтому он попросил вас о помощи. Пожалуйста, помогите ему выполнить эти запросы.

    Входные данные

    В первой строке ввода содержатся два целых числа, n и q (1 ≤ n ≤ 2 × 105 и 1 ≤ q ≤ 4 × 104).

    Во второй строке ввода содержатся n целых чисел, a1, a2, ..., an через пробел (0 ≤ ai ≤ 109 для каждого 1 ≤ i ≤ n).

    В следующих q строках содержатся запросы. Каждая строка начинается с целого числа t (1 ≤ t ≤ 2), обозначающего тип соответствующего запроса. Если t = 1, то далее следуют ещё три целых числа, l, r и k. В противном случае следуют ещё два целых числа, l и r. (1 ≤ l ≤ r ≤ n, и 0 ≤ k ≤ 109)

    Выходные данные

    Выведите ответ на каждый запрос второго типа в своей строке.

    Примечание

    В первом запросе нас интересуют все Kheshtak'и последовательности (1, 2, 3, 4, 2), их восемь штук и они 0, 1, 2, 3, 4, 5, 6, 7.

    В третьем запросе нас интересуют все Kheshtak'и последовательности (1, 10, 3, 4, 2), их шестнадцать штук и они 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.

    В пятом запросе нас интересуют все Kheshtak'и последовательности (0). Единственный Khestak в данном случае равен 0.

    F. Duff в ярости

    Строки Структуры данных *3000

    Duff в ярости на своих друзей. От злости она просит Malek'а отнимать конфеты у её друзей безо всякого повода!

    У неё n друзей. Её i-ого друга зовут si (их имена не обязательно уникальны). Она попросить Malek'а забрать конфеты у её друзей q раз. Она в ярости, но всё же она действует по определённым правилам. Когда она хочет попросить Malek'а забрать конфету у одного из её друзей, имеющего номер k, она выбирает два числа, l и r и говорит Malek'у взять ровно конфет у друга, где occur(t, s) — это число вхождений строки t в строку s.

    Malek не может посчитать, сколько конфет надо забрать в каждом из запросов Duff. Поэтому он просит вас о помощи. Пожалуйста, скажите ему, сколько конфет взять в каждом запросе.

    Входные данные

    В первой строке входа записано два целых числа, n и q (1 ≤ n, q ≤ 105).

    В следующих n строках записаны имена друзей. В i-й находится строка si из строчных букв английского алфавита ().

    В следующих q строках содержатся запросы. Каждый их них содержитпо три целых числа, l, r и k (что означает, что Malek должен взять конфет у k-го друга Duff).

    Выходные данные

    Выведите ответ на каждый запрос в одной строке.

    D. Деревянный День Рождения

    графы Деревья математика поиск в глубину и подобное Структуры данных *2400

    У Богдана сегодня День Рождения и мама подарила ему дерево, состоящее из n вершин. На ребре i было написано число xi. Напомним, что деревом называется связный неориентированный граф без циклов. После этого на вечеринку к Богдану последовательно приходят m гостей. Когда приходит i-й гость, он делает ровно одну из двух операций:

    1. Выбирает некоторое число yi, а так же две вершины ai и bi. После этого двигаясь по рёбрам дерева проходит от вершины ai до вершины bi кратчайшим путём (такой путь в дереве, конечно, единственный). Каждый раз проходясь по какому-то ребру j, он заменяет своё текущее число yi на , то есть на целую часть деления yi на xj.
    2. Выбирает некоторое ребро pi, и заменяет написанное на нём значение xpi на целое положительное число ci < xpi.

    Богдан заботится о своих гостях и решил автоматизировать данный процесс. Напишите программу, которая проделает все применяемые гостями операции, и каждому гостю выбравшему операцию первого типа сообщит результирующее значение yi.

    Входные данные

    В первой строке входных данных содержатся два числа n и m (2 ≤ n ≤ 200 000, 1 ≤ m ≤ 200 000) — количество вершин в дереве, подаренном Богдану, и количесвто гостей на вечеринке соответственно. В следующей n - 1 строке содержится описание рёбер, i-я из этих строк содержит три целых числа ui, vi, xi (1 ≤ ui, vi ≤ n, ui ≠ vi, 1 ≤ xi ≤ 1018), обозначающих ребро между вершинами ui и vi, на котором написано число xi. Далее следуют m строк, которые описывают гостей Богдана. Каждое описание содержит три или четыре целых числа и имеет вид:

    • 1 ai bi yi — соответствует гостям, выбравшим операцию первого типа.
    • 2 pi ci — соответствует гостям, выбравшим операцию второго типа.
    Гарантируется, что все запросы корректны, а именно 1 ≤ ai, bi ≤ n, 1 ≤ pi ≤ n - 1, 1 ≤ yi ≤ 1018 и 1 ≤ ci < xpi, где xpi означает число, записанное на ребре pi в этот момент времени, что необязательно равно значению xpi в начале, так как к ребру уже могли применяться операции уменьшения значения. Рёбра нумеруются от 1 до n - 1 в порядке из записи во входных данных.
    Выходные данные

    Для каждого гостя, выбравшего операцию первого типа, выведите результирующее значение для выбранного им yi.

    Примечание

    Изначально дерево выглядит так:

    На первый запрос ответом будет = 2

    После изменения третьего ребра дерево выглядит так:

    На второй запрос ответом будет = 4

    В третьем запросе начальная и конечная вершина совпадает, то есть ответом будет исходное число 20.

    После изменения четвертого ребра дерево выглядит так:

    В последнем запросе ответом будет = 3

    D. REQ

    Структуры данных теория чисел *2500

    Сегодня на уроке математики Марья Ивановна рассказала Вовочке, что функция Эйлера целого положительного числа φ(n) — это мультипликативная арифметическая функция, равная количеству целых положительных чисел, меньших n и взаимно простых с ним. При этом полагают, что число 1 взаимно просто со всеми целыми положительными числами и что φ(1) = 1.

    Теперь учительница дала Вовочке массив из n целых положительных чисел a1, a2, ..., an и задание обработать q запросов li ri — посчитать и вывести остаток от деления на 109 + 7. Поскольку это сложновато для второкласника, вы решили помочь Вовочке.

    Входные данные

    В первой строке входных данных записано число n (1 ≤ n ≤ 200 000) — длина массива, данного Вовочке. Во второй строке содержатся n чисел a1, a2, ..., an (1 ≤ ai ≤ 106).

    В третьей строке содержится число q (1 ≤ q ≤ 200 000) — количество запросов. В следующих q строках по одному в каждой содержатся запросы. Каждый запрос определяется границами отрезка li и ri (1 ≤ li ≤ ri ≤ n).

    Выходные данные

    Выведите q чисел — значение функции Эйлера для каждого из запросов, вычисленное по модулю 109 + 7.

    Примечание

    Во втором примере значения вычисляются так:

    • φ(13·52·6) = φ(4056) = 1248
    • φ(52·6·10·1) = φ(3120) = 768
    • φ(24·63·13·52·6·10·1) = φ(61326720) = 12939264
    • φ(63·13·52) = φ(42588) = 11232
    • φ(13·52·6·10) = φ(40560) = 9984
    • φ(63·13·52·6·10) = φ(2555280) = 539136

    C. Подпоследовательности

    дп Структуры данных *1900

    Вам задана последовательность из n чисел. Найдите количество её возрастающих подпоследовательностей из k + 1 элемента. Гарантируется, что ответ не превосходит величины 8·1018.

    Входные данные

    В первой строке находятся два целых числа n и k (1 ≤ n ≤ 105, 0 ≤ k ≤ 10) — длина последовательности и количество элементов в возрастающей подпоследовательности. В следующих n строках находится по одному числу ai (1 ≤ ai ≤ n) — элементы последовательности. Все числа в последовательности различны.

    Выходные данные

    Выведите одно число — ответ на задачу.

    E. Экспозиция

    Бинарный поиск Деревья снм Структуры данных *1900

    До пятидесятилетия известного писателя Берляева осталось несколько дней. По этому поводу в местной библиотеке решили организовать выставку сочинений известного фантаста. Также было решено, что необходимо выбрать все книги, изданные автором за какой-то интервал времени. Понятно, что если книги будут очень сильно различаться по размерам, то посетителям это не понравится. Поэтому, посовещавшись, организаторы пришли к мнению, что высота самой низкой и самой высокой книг, отобранных для экспозиции, должны отличаться не более чем на k миллиметров.

    В библиотеке имеется n томов произведений Берляева, расположенных в хронологическом порядке выпуска в свет. Про каждую книгу известна ее высота в миллиметрах hi. Поскольку юбиляр является очень уважаемым в городе человеком, то организаторы хотят представить на выставке наибольшее число его книг, а также узнать, какие при этом периоды творчества писателя они смогут охватить. Помогите организаторам справиться с этой нелегкой задачей.

    Входные данные

    В первой строке входных данных записаны через пробел два целых числа n (1 ≤ n ≤ 105) и k (0 ≤ k ≤ 106) — количество произведений писателя Берляева, имеющихся в библиотеке, и максимальная высота, на которую могут отличаться самая низкая и самая высокая книги в экспозиции. Во второй строке содержится n целых чисел, записанных через пробел. Каждое число hi (1 ≤ hi ≤ 106) означает высоту i-ой книги в миллиметрах.

    Выходные данные

    В первую строку выходных данных выведите через пробел два числа a и b. Число a означает наибольшее количество книг, которое организаторы смогут представить на выставке, а число b — количество интервалов времени таких, что в каждый из них писатель Берляев издал a книг, и самая высокая из этих книг превосходит самую низкую не более чем на k миллиметров.

    В последующие b строк выведите по два целых числа через пробел — номер первого и последнего тома каждого из искомых периодов творчества Берляева.

    B. Запросы о количестве не превосходящих элементов

    Бинарный поиск сортировки Структуры данных *1300

    Заданы два массива чисел a и b. Для каждого элемента второго массива bj нужно найти количество элементов в массиве a, которые меньше либо равны bj.

    Входные данные

    В первой строке находятся два целых числа n, m (1 ≤ n, m ≤ 2·105) — размеры массивов a и b.

    Во второй строке находятся n целых чисел — элементы массива a ( - 109 ≤ ai ≤ 109).

    В третьей строке находятся m целых чисел — элементы массива b ( - 109 ≤ bj ≤ 109).

    Выходные данные

    Выведите m чисел, разделенных пробелами: j-е из них равно количеству таких элементов массива a, которые меньше или равны числа bj.

    E. Lomsat gelral

    Деревья поиск в глубину и подобное снм Структуры данных *2300

    Задано корневое дерево с корнем в вершине 1. Каждая вершина покрашена в некоторый цвет.

    Будем говорить, что цвет c доминирует в поддереве вершины v, если нет другого цвета, который встречается в поддереве вершины v большее количество раз, чем цвет c. Таким образом, возможно два или более цвета одновременно доминируют в одном поддереве.

    Поддерево вершины v — это сама вершина v и все такие вершины, путь от которых до корня обязательно проходит через вершину v.

    Вам нужно для каждой вершины v определить сумму доминирующих цветов в поддереве вершины v.

    Входные данные

    В первой строке находится целое число n (1 ≤ n ≤ 105) — количество вершин в дереве.

    В второй строке находятся n целых чисел ci (1 ≤ ci ≤ n), ci — цвет i-й вершины.

    В каждой из следующей n - 1 строке находится пара целых чисел xj, yj (1 ≤ xj, yj ≤ n) — ребро дерева. Корнем дерева является вершина номер 1.

    Выходные данные

    Выведите n целых чисел — суммы доминирующих цветов, для каждой вершины.

    B. Липшицева последовательность

    математика Структуры данных *2100

    Функция называется Липшицевой, если найдётся такое действительное число K, что неравенство |f(x) - f(y)| ≤ K·|x - y| выполняется для всех . Мы будем иметь дело с более... дискретным вариантом этого термина.

    Для массива определим его константу Липшица следующим образом:

    • если n < 2,
    • если n ≥ 2, по всем 1 ≤ i < j ≤ n

    Другими словами,  — это наименьшее неотрицательное целое число, такое, что |h[i] - h[j]| ≤ L·|i - j| выполняется для всех 1 ≤ i, j ≤ n.

    Вам дан массив размера n и q запросов вида [l, r]. Для каждого запроса рассмотрим подмассив ; определите сумму констант Липшица всех подмассивов .

    Входные данные

    В первой строке входных данных записано два числ n и q (2 ≤ n ≤ 100 000, 1 ≤ q ≤ 100) — длина массива и количество запросов соответственно.

    Во второй строке записано n целых чисел ().

    Следующие q строк описывают запросы, i-я из них содержит два числа li и ri (1 ≤ li < ri ≤ n).

    Выходные данные

    Выведите ответы на все запросы в том порядке, в котором они даны во входных данных. Для i-го запроса выведите единственное целое число — сумму констант Липшица всех подмассивов .

    Примечание

    В первом запросе первого примера константы Липшица подмассивов длиной не менее 2 таковы:

    Ответом на запрос является их сумма.

    D. Ациклические органические составляющие

    Деревья поиск в глубину и подобное снм Строки Структуры данных хэши *2400

    Дано дерево T состоящее из n вершин (пронумерованных целыми числами от 1 до n). В каждой вершине записана некоторая буква. Корень дерева расположен в вершине 1.

    Рассмотрим поддерево дерево Tv некоторой вершины v. Вдоль любого просто пути, начинающегося в v и заканчивающегося в некоторой вершине (возможно, в самой v), можно прочитать некоторую строку. Обозначим количество различных строк, которые можно прочитать таким способом как .

    Дополнительно: для каждой вершины v дано целое число cv. Нас интересуют вершины, в которых значение как можно больше.

    Вы должны вычислить две величины — максимальное значение и количество вершин v с максимальным .

    Входные данные

    В первой строке входных данных записано единственное целое число n (1 ≤ n ≤ 300 000) — количество вершин в дереве T.

    Во второй строке записано n целых чисел ci (0 ≤ ci ≤ 109).

    В третьей строке записана строка s, состоящая из n строчных букв английского алфавита, — i-й символ этой строки соответствует букве, записанной в вершине i.

    Далее следует n - 1 строка с описанием рёбер дерева T. Каждая из них содержит два целых числа u и v (1 ≤ u, v ≤ n), обозначающих ребро, которое соединяет вершины u и v.

    Гарантируется, что входные данные описывают дерево.

    Выходные данные

    Выведите два числа — значение для всех 1 ≤ i ≤ n и количество вершин v, для которых .

    Примечание

    В первом примере дерево выглядит следующим образом:

    Наборы строк, которые могут быть прочитаны из вершин:

    Наконец, значения таковы:

    Во втором примере значения таковы: (5, 4, 2, 1, 1, 1).Различные строки, которые можно прочитать из вершины 2 таковы: ; обратите внимание, что может быть прочитано как на пути до вершины 3, так и на пути до вершины 4.

    E. Ограбление музея

    дп Структуры данных *2800

    В городе, где живет Клеофас, есть известный музей. В этом музее уже давно выставлено n экспонатов (пронумерованных от 1 до n); i-й экспонат имеет ценность vi и массу wi.

    Недавно музей купила большая финансовая группа и начала менять набор экспонатов. Примерно в то же время Клеофас... скажем так, заинтересовался этим музеем.

    Вам следует обработать q событий трёх типов:

    • тип 1 — музей выставляет экспонат ценностью v и массой w; экспонат, появляющийся в i-м событии этого типа, получает номер n + i (смотрите пояснения к примерам);
    • тип 2 — музей убирает экспонат номер x и аккуратно относит его в хранилище;
    • тип 3 — Клеофас заходит в музей и задаётся вопросом (конечно, без какой-либо конкретной причины): если будет ограбление и украдут экспонаты с общей массой не более m, то какова может быть их максимальная суммарная ценность?

    Пусть для каждого события типа 3 s(m) является максимально возможной общей ценностью украденных экспонатов с общей массой  ≤ m.

    Формально, пусть D — множество номеров всех экспонатов, на данный момент выставленных напоказ (таким образом, изначально D = {1, ..., n}). Пусть P(D) будет множеством всех подмножеств D и пусть

    Тогда s(m) определяется как

    Вычислите s(m) для каждого . Обратите внимание на специальный формат выходных данных.

    Входные данные

    В первой строке входных данных записаны два целых числа n и k (1 ≤ n ≤ 5000, 1 ≤ k ≤ 1000) — изначальное количество экспонатов в музее и максимальная интересная суммарная масса экспонатов.

    Затем следуют n строк, i-я из которых содержит два положительных целых числа vi и wi (1 ≤ vi ≤ 1 000 000, 1 ≤ wi ≤ 1000) — ценность и масса i-го экспоната соответственно.

    В следующей строке записано единственное целое число q (1 ≤ q ≤ 30 000) — количество событий.

    В каждой из следующих q строк записано описание одного события в следующем формате:

    • 1 v w — событие типа 1, добавляется новый экспонат с ценностью v и массой w (1 ≤ v ≤ 1 000 000, 1 ≤ w ≤ 1000);
    • 2 x — событие типа 2, экспонат с номером x убирается в хранилище; гарантируется, что убираемый экспонат выставлялся в этот момент;
    • 3 — событие типа 3, Клеофас заходит в музей и задается своим странным вопросом.

    Гарантируется, что в одном тесте будет не более 10 000 событий типа 1 и хотя бы одно событие типа 3.

    Выходные данные

    Так как количество значений s(m) может оказаться большим, выведите ответы на события типа 3 в особом формате.

    Для каждого события типа 3 рассмотрим значения s(m), рассчитанные для вопроса Клеофаса, которым он задался в некоторый момент времени; выведите единственное число

    где p = 107 + 19 и q = 109 + 7.

    Выводите ответы на события типа 3 в том порядке, в котором они упоминаются во входных данных.

    Примечание

    В первом примере количество выставленных экспонатов и значения s(1), ..., s(10) для отдельных событий типа 3 таковы, по порядку:

    Ценности отдельных экспонатов таковы: v1 = 30, v2 = 60, v3 = 5, v4 = 42, v5 = 20, v6 = 40 и их массы таковы: w1 = 4, w2 = 6, w3 = 1, w4 = 5, w5 = 3, w6 = 6.

    Во втором примере единственный вопрос задается после того, как все экспонаты уже убраны, так что s(m) = 0 для любых m.

    E. Пастушеские странности

    Деревья математика разделяй и властвуй снм Структуры данных *3000

    В стране Бурении есть n пастбищ, но нет дорог, их соединяющих. Конечно, это ужасная ситуация, поэтому Кевин Сан планирует исправить её, построив m двунаправленных дорог. Каждая дорога соединит какую пару пастбищ. Для того чтобы перемещение по дорогам было более эффективным, он также планирует замостить некоторые из этих новых дорог булыжником.

    Кевин очень дотошен в вопросе мощения путей. Так как он любит нечётные числа, то хочет, чтобы к каждому пастбищу вело нечётное число мощеных дорог. Назовём замощение дорог солнечным, если каждому пастбищу инцидентно нечётное количество замощёных дорог. Кроме того, короткие дороги нравятся Кевину больше, чем длинные, поэтому он хочет, чтобы самая длинная мощёная дорога была как можно короче. После добавления очередной дороги Кевин хочет знать, может ли он добиться солнечного замощения дорог Бурении, и если это так, то надо найти минимальную возможную длину самой длинной дороги, которую он замостит.

    Входные данные

    Первая строка входных данных содержит два числа n и m (2 ≤ n ≤ 100 000, 1 ≤ m ≤ 300 000) — количество пастбищ и дорог соответственно.

    Следующие m строк содержат по три целых числа ai, bi и li. Они описывают i-ю дорогу, соединяющую пастбища ai и bi (1 ≤ ai, bi ≤ n; ai ≠ bi) и имеющую длину li (1 ≤ li ≤ 109).

    Дороги приведены в том порядке, в котором они добавляются.

    Выходные данные

    Выведите m целых чисел, i-е из которых обозначает минимальную возможную длину самой длинной дороги в солнечном замощении после добавления первых i дорог. Если не существует такого замощения, что каждое пастбище инцидентно нечётному количеству мощёных дорог, то выведите  - 1.

    Обратите внимание, что каждый раз рассматривается только гипотетическое замощение — ваш ответ после добавления i-й дороги не должен никак зависеть от ваших предыдущих ответов.

    Примечание

    В первом примере после добавления i-й дороги пути Кевин должен вымостить следующие из них:

    1. Никакой набор дорог не подходит.
    2. Дорога номер 1 (длина 4) и номер 2 (длина 8).
    3. Дорога номер 1 (длина 4) и номер 2 (длина 8).
    4. Дорога номер 3 (длина 2) и номер 4 (длина 3).

    Во втором примере нет ни одного солнечного замощения.

    B. Неуспевающий студент

    графы Конструктив Структуры данных *1700

    Студент Владислав, как обычно, пришёл на экзамен по программированию, совершенно не подготовившись, и ему снова достался билет про какой-то непонятный алгоритм на графе, который абсолютно точно никогда не пригодится ему в жизни. Он попросил у сидящей рядом студентки шпаргалку по этому билету и обнаружил в ней следующее определение:

    Минимальным остовным деревом T графа G называется такое дерево, что оно содержит все вершины исходного графа G, а сумма весов его рёбер — минимально возможная среди всех таких деревьев.

    Владислав по привычке нарисовал граф с n вершинами и m ребрами, в котором не было петель и кратных ребер. Он нашел одно из его минимальных остовных деревьев, а потом записал для каждого ребра графа его вес, а также входит оно в найденное дерево или нет. К сожалению, бумажка, на которой был нарисован граф, исчезла, а преподаватель очень сердится и требует предоставить ему исходный граф. Помогите Владиславу придумать граф, соответствующий выписанной им информации о минимальном остовном дереве.

    Входные данные

    В первой строке записаны два целых числа n и m () — количество вершин и рёбер в графе.

    Каждая из следующих m строк описывает ребро графа и состоит из двух чисел aj и bj (1 ≤ aj ≤ 109, bj = {0, 1}). Первое из этих чисел — это вес ребра, а второе число равно единице, если это ребро входило в минимальное остовное дерево, найденное Владиславом, и нулю, если не входило.

    Гарантируется, что ровно n - 1 число из {bj} равны единице, и ровно m - n + 1 из них равны нулю.

    Выходные данные

    Если Владислав ошибся, и такого графа не существует, то выведите  - 1. В противном случае выведите m строк. В j-й строке выведите пару вершин (uj, vj) (1 ≤ uj, vj ≤ n, uj ≠ vj), которые должны быть соединены j-м ребром. Рёбра нумеруются в том же порядке, что и во входных данных. Граф, заданный этими ребрами, должен быть связным, не содержать петель и кратных ребер, а его ребра с bj = 1 должны задавать минимальное остовное дерево. Если существует несколько графов, удовлетворяющих условию, разрешается вывести любой.

    D. Настольная игра

    поиск в глубину и подобное Структуры данных *2500

    Вы играете в настольную карточную игру. В этой игре у игрока есть две характеристики x и y — мастерство владения светлой и тёмной магией соответственно. На столе лежат n карт заклинаний, каждая из которых имеет четыре характеристики ai, bi, ci, di. За один ход игрок может сыграть одну из карт и прочитать написанное на ней заклинание, но только в том случае, если её две первых характеристики удовлетворяют соотношениям ai ≤ x и bi ≤ y, то есть если игрок обладает достаточным мастерством владения магией для прочтения этого заклинания. Сразу после прочтения заклинания i характеристики игрока меняются и становятся равными x = ci и y = di.

    В начале игры обе характеристики игрока равны нулю. Цель игры состоит в том, чтобы прочитать n-е заклинание. Ваша задача — сделать это за как можно меньшее число ходов. Заклинания можно читать в произвольном порядке и произвольное число раз (в том числе и вовсе не использовать какие-то заклинания).

    Входные данные

    В первой строке записано целое число n (1 ≤ n ≤ 100 000) — количество карт на столе.

    В каждой из последующих n строк записано четыре целых числа ai, bi, ci, di (0 ≤ ai, bi, ci, di ≤ 109) — характеристики соответствующей карты.

    Выходные данные

    В первой строке выведите единственное число k — минимальное количество ходов, необходимое для прочтения n-го заклинания, а во второй строке выведите k чисел — номера карт, в том порядке, в котором их надо разыгрывать. Если правильных ответов несколько, то разрешается вывести любой.

    Если прочитать n-е заклинание невозможно, то выведите  - 1.

    D. Могучее Дерево

    Деревья Структуры данных *2600

    Геос и Сайтама пошли покупать новогодние ёлки, но их внимание привлекло необыкновенное Могучее Дерево. Могучее Дерево изначально состоит из единственной корневой вершины, имеющей номер 1. Могучее дерево иногда растёт благодаря волшебному феномену, известному как обновление. Во время обновления к дереву добавляется один новый лист. Каждой вершине дерева (корню и всем добавленным вершинам) присвоено некоторое значение vi. Мощность вершины определяется как сила мультимножества, составленного из значения данной вершины (то есть числа vi) и значений мощностей её непосредственных детей. Сила мультимножества определяется как сумма всех элементов в мультимножестве, умноженная на их количество, то есть для некоторого мультимножества S:

    Сайтама знает, какие обновления произойдут с данным деревом, так что он решил проверить Геноса и задать ему вопросы о мощности разных вершин дерева во время его роста. Каждое обновление имеет вид p v, что означает добавление новой вершины со значением v, как непосредственного потомка вершины p. Каждый запрос имеет вид u, что означает, что Генос должен назвать мощность вершины u в текущий момент. Пожалуйста, помогите Геносу ответить на все вопросы Сайтама. Ответ выводите по модулю 109 + 7.
    Входные данные

    Первая строка входных данных содержит два числа v1 и q (1 ≤ v1 < 109, 1 ≤ q ≤ 200 000) — значение, ассоциированное с вершиной 1, и суммарное количество обновлений и запросов соответственно. В следующих q строках записаны обновления и запросы. Каждая строка имеет вид:

    • pi vi, если это обновление дерева. Добавляемая вершина получает в качестве номера минимальное положительное целое число, ещё не использующееся как номер какой-нибудь вершины. Гарантируется, что вершина с номером pi уже существует в дереве и что 1 ≤ vi < 109.
    • формы ui, если это вопрос Сайтама. Гарантируется, что вершина ui уже присутствует в дереве.
    Гарантируется, что входные данные содержат хотя бы один запрос.
    Выходные данные

    Для каждого запроса выведите мощность указанной вершины в данный момент по модулю 109 + 7.

    Примечание

    В первом примере после всех обновлений дерево будет выглядеть следующим образом: 1 — 2 — 3 — 4 — 5

    Вершинам будут присвоены следующие значения: 2 — 3 — 5 — 7 — 11

    Мощности вершин будут, соответственно, равны: 344 — 170 — 82 — 36 — 11

    E. Минимальное остовное дерево по каждому ребру

    графы Деревья поиск в глубину и подобное снм Структуры данных *2100

    Дан связный неориентированный взвешенный граф без петель и кратных ребер, состоящий из n вершин и m ребер.

    Для каждого ребра графа (u, v) найдите вес такого остовного дерева, что это ребро (u, v) входит в него, и при этом вес этого остовного дерева минимален.

    Весом остовного дерева называется сумма весов ребер, входящих в остовное дерево.

    Входные данные

    В первой строке записаны два целых числа n и m (1 ≤ n ≤ 2·105, n - 1 ≤ m ≤ 2·105) — количество вершин и ребер в графе.

    В каждой из следующих m строк записаны три целых числа ui, vi, wi (1 ≤ ui, vi ≤ n, ui ≠ vi, 1 ≤ wi ≤ 109) — вершины графа, соединенные i-м ребром, и вес этого ребра.

    Выходные данные

    Выведите m строк: i-я строка должна содержать минимальный вес такого остовного дерева, содержащего i-ое ребро.

    Ребра нумеруются от 1 до m в порядке их появления во входных данных.

    F. Лягушки и комары

    жадные алгоритмы Структуры данных *2500

    На координатной прямой Ox сидят n лягушек. Для каждой известны две величины: xi и ti — позиция и начальная длина языка i-й лягушки (гарантируется, что все позиции xi различны). Последовательно в хронологическом порядке на прямую садятся m комаров. Для каждого комара известны два параметра pj — координата точки, куда сел j-й комар, и bj — размер j-го комара. Лягушки и комары представляют собой точки на координатной прямой.

    Лягушка может съесть комара, если комар находится в одной точке с лягушкой или правее нее, и расстояние от лягушки до комара не превосходит длины языка лягушки.

    Если в какой-либо момент времени комара может съесть несколько лягушек, то его съедает самая левая из лягушек (с минимальным xi). Сразу после того как лягушка съедает комара, ее язык мгновенно вырастает на величину равную размеру этого комара. Возможно, после этого лягушка сможет съесть (и съедает) других комаров.

    Выведите для каждой лягушки две величины — количество съеденных комаров и длину языка, после того как все комары сядут на прямую, а лягушки съедят всех комаров, которых смогут.

    Очередной комар садится на прямую лишь после того, как будут съедены все возможные комары после приземления предыдущего комара. Комары заданы в порядке времени приземления на прямую.

    Входные данные

    В первой строке содержится пара целых чисел n и m (1 ≤ n,  m ≤ 2·105) — количество лягушек и комаров.

    В следующих n строках содержится по два целых числа xi и ti (0 ≤ xi,  ti ≤ 109) — положение и начальная длина языка i-й лягушки. Гарантируется, что все xi различны.

    Далее в m строках содержится по два целых числа pj и bj (0 ≤ pj,  bj ≤ 109) — положение и размер j-го комара.

    Выходные данные

    Выведите n строк. В i-й из них должны содержаться два целых числа ci и li — количество комаров съеденных i-й лягушкой и длина языка i-й лягушки.

    E. Противник слаб

    Деревья Структуры данных *1900

    Римляне снова наступают. На этот раз их гораздо больше чем персов, но Шапур готов победить их. Он говорит: «Лев никогда не испугается сотни овец».

    Не смотря на это, Шапур должен найти слабость римской армии чтобы победить ее. Как вы помните, Шапур — математик, поэтому он определяет насколько слаба армии как число — степень слабости.

    Шапур считает, что степень слабости армии равна количеству таких троек i, j, k, что i < j < k и ai > aj > ak, где ax — сила человека, стоящего в строю на месте с номером x. Армия римлян обладает одной особенностью — силы всех людей в ней различны.

    Помогите Шапуру узнать, насколько слаба армия римлян.

    Входные данные

    В первой строке записано одно целое число n (3 ≤ n ≤ 106) — количество солдат в римской армии. Следующая строка содержит n различных целых чисел ai (1 ≤ i ≤ n, 1 ≤ ai ≤ 109) — силы людей в римской армии.

    Выходные данные

    Выведите одно число — степень слабости римской армии.

    Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cout (также вы можете использовать спецификатор %I64d).

    D. Вика и отрезки

    геометрия Конструктив Структуры данных *2300

    У Вики есть бесконечный лист клетчатой бумаги. Изначально каждая клетка белого цвета. Она ввела на этом листе двумерную систему координат и нарисовала n чёрных горизонтальных и вертикальных отрезков, параллельных осям координат и шириной в одну клетку. Таким образом, каждый отрезок является множеством соседних клеток, расположенных в одной строке или в одном столбце.

    Перед вами стоит задача посчитать число закрашенных клеток. Если клетка была покрашена более одного раза, в ответе она должна быть посчитана ровно один раз.

    Входные данные

    В первой строке входных данных следует целое положительное число n (1 ≤ n ≤ 100 000) — количество отрезков, нарисованных Викой.

    В следующих n строках заданы по четыре целых числа x1, y1, x2, y2 ( - 109 ≤ x1, y1, x2, y2 ≤ 109) — координаты концов отрезков, нарисованных Викой. Гарантируется, что все отрезки параллельны осям координат. Отрезки могут пересекаться, накладываться друг на друга и даже полностью совпадать.

    Выходные данные

    Выведите количество закрашенных Викой клеток. Если клетка была покрашена более одного раза, то в ответе она должна быть посчитана ровно один раз.

    Примечание

    В первом тестовом примере Вика закрасит клетки (0, 1), (1, 1), (2, 1), (1, 2), (1, 3), (1, 4), (0, 3) и (2, 3).

    E. Перестановки алфавита

    Строки Структуры данных *2500

    Дана строка s длины n, состоящая из первых k строчных букв английского алфавита.

    Будем называть c-повтором некоторой строки q строку, состоящую из c копий строки q. Например, строка "acbacbacbacb" является 4-повтором строки "acb".

    Будем также говорить, что строка a содержит строку b как подпоследовательность, если строку b можно получить из a выкидыванием некоторых символов.

    Пусть p — строка, представляющая собой некоторую перестановку первых k строчных букв английского алфавита. Введём функцию d(p), равную наименьшему целому числу, такому что строка s является подпоследовательностью d(p)-повтора строки p.

    К строке s применяют m операций одного из двух типов:

    1. Заменить все символы на позициях с li-й по ri-ю на символ ci.
    2. Для заданной p, являющейся перестановкой первых k букв английского алфавита, найти значение функции d(p).

    Все операции выполняются последовательно, в порядке следования во входных данных. Ваша задача вывести значения функции d(p) для всех операций второго типа.

    Входные данные

    В первой строке находятся три целых положительных числа n, m, k (1 ≤ n ≤ 200 000, 1 ≤ m ≤ 20 000, 1 ≤ k ≤ 10) — длина строки s, количество операций и размер алфавита соответственно.

    Вторая строка содержит строку s.

    В каждой из следующих m строк находится описание очередной операции:

    1. Операция первого типа задаётся числом 1 и тройкой li, ri и ci, обозначающей замену символов в позициях с li-й по ri-ю на символ ci (1 ≤ li ≤ ri ≤ n, ci является одной из первых k строчных букв английского алфавита).
    2. Операция второго типа задаётся числом 2 и перестановкой pi первых k строчных букв английского алфавита.
    Выходные данные

    Для каждого запроса второго типа выведите в отдельной строке значение функции d(pi).

    Примечание

    После первой операции строка станет равной abbbbba.

    Во второй операции в качестве ответа нужно взять 6-повтор строки abc: ABcaBcaBcaBcaBcAbc.

    После третьего запроса строка станет равной abbcbba.

    В четвертой операции в качестве ответа нужно взять 5-повтор строки cba: cbAcBacBaCBacBA.

    Заглавными буквами обозначены вхождения символов из строки s.

    E. Новый год и три мушкетёра

    жадные алгоритмы сортировки Структуры данных *2400

    Знаете ли вы историю о трёх мушкетёрах? Независимо от ответа, вам требуется им помочь.

    Ришелимакьё — кардинал в городе Медведисе. Он нашел трех отважных воинов и назвал их тремя мушкетёрами. Сила Атоса равна a, сила Бортоса равна b, а сила Сарамиса равна c.

    2015 год почти закончился, а ещё предстоит победить n преступников. Сила i-го преступника равна ti. Победить некоторых преступников не так-то просто — возможно, мушкетёрам придётся сражаться вместе.

    Ришелимакьё будет координировать действия своих мушкетёров. Каждый час каждый из мушкетёров может ничего не делать или сражаться с каким-то преступником, при этом два или даже три мушкетёра могут сражаться с одним и тем же преступником, и тогда их силы складываются. На то, чтобы победить одного преступника, уходит ровно один час, независимо от того, сколько мушкетёров с ним сражаются. Ришелимакьё не может допустить, чтобы в какой-нибудь момент сила преступника оказалась больше суммарной силы сражающихся с ним мушкетёров, ведь тогда он победит!

    Более подробно, есть три способа победить конкретного преступника:

    • За один час мушкетер силы x может победить преступника, с силой не превосходящей x. Например, Атос за один час может победить преступника с номером i, только если ti ≤ a.
    • Два мушкетера могут сражаться вместе и за один час одолеть преступника, если его сила не превосходит сумму сил этих двух мушкетеров. Например, Атос и Сарамис за один час могут одолеть преступника с номером i, только если ti ≤ a + c.
    • Аналогично, все три мушкетера могут сражаться вместе и за один час одолеть преступника, чья сила не превосходит суммарной силы трёх мушкетёров a + b + c.

    Ришелимакьё не хочет, чтобы мушкетеры сражались в новогоднюю ночь, поэтому хочет скоординировать их действия таким образом, чтобы минимизировать количество часов до того момента, пока будут побеждены все преступники.

    Найдите минимальное количество часов, необходимое для того, чтобы одолеть всех преступников. Если мушкетёры не могут победить всех преступников, то выведите "-1" (без кавычек).

    Входные данные

    В первой строке входных данных записано единственное целое число n (1 ≤ n ≤ 200 000) — количество преступников.

    Во второй строке записано три целых числа a, b и c (1 ≤ a, b, c ≤ 108) — силы мушкетёров.

    В третьей строке записано n целых чисел t1, t2, ..., tn (1 ≤ ti ≤ 108) — силы преступников.

    Выходные данные

    Выведите одну строку с ответом.

    Если мушкетёры не могут одолеть всех преступников, выведите "-1" (без кавычек). В противном случае выведите минимальное количество часов, которое мушкетёрам придётся потратить для того, чтобы одолеть всех преступников.

    Примечание

    В первом примере сила Атоса равна 10, Бортоса 20, а Сарамиса 30. Они могут победить всех преступников за два часа:

    • Бортос и Сарамис вместе побеждают пресутпника с силой 50, пока Атос сражается с одним из четырёх преступников с силой 1.
    • Остаётся три преступника, сила каждого 1. Каждый мушкетёр сражается с одним из таких преступников в течение второго часа.

    Во втором примере трём мушкетёрам нужно всем вместе сражаться против преступника с силой 51. Это займёт один час. На втором часу они сражаются по отдельности. На третье часу остался один преступник, и любой из мушкетёров побеждает его.

    C. Заменить до правильной скобочной последовательности

    математика Разбор выражений Структуры данных *1400

    Вам задана строка s, состоящая из открывающих и закрывающих скобок четырех видов <>, {}, [], (). Все скобки делятся на два типа: открывающие и закрывающие. Разрешается заменить любую скобку на любую другую такого же типа. Например, скобку < можно заменить на скобку {, но нельзя заменить на скобку ) или >.

    Далее приводится стандартное определение правильной скобочной последовательности, с которым вы возможно уже знакомы.

    Определим правильную скобочную последовательность. Пустая строка считается таковой. Пусть строки s1 и s2 являются правильными скобочными последовательностями, тогда строки <s1>s2, {s1}s2, [s1]s2, (s1)s2 также являются правильными скобочными последовательностями.

    Например, строка "[[(){}]<>]" является правильной скобочной последовательностью, а строки "[)()" и "][()()" — нет.

    Определите наименьшее количество замен, необходимое для того, чтобы сделать строку s правильной скобочной последовательностью.

    Входные данные

    Единственная строка содержит непустую строку s, состоящую только из открывающих и закрывающих скобок, заданных четырех видов. Длина строки s не превосходит 106.

    Выходные данные

    Если получить правильную скобочную последовательность из строки s невозможно выведите слово Impossible.

    Иначе выведите наименьшее количество замен, необходимое для получения правильной скобочной последовательности из строки s.

    D. Наидлиннейший k-хороший подотрезок

    Бинарный поиск Структуры данных *1600

    Задан массив из n целых чисел a. Подотрезком будем называть последовательность из одного и более подряд идущих элементов массива. Подотрезок будем называть k-хорошим, если в нём не более k различных чисел.

    Найдите любой k-хороший подотрезок наибольшей длины.

    Рекомендуется для ввода и вывода данных использовать функции scanf, printf в языке C++, поскольку они работают значительно быстрее потоков cin, cout. Аналогично, рекомендуется использовать классы BufferedReader, PrintWriter вместо Scanner, System.out в языке Java.

    Входные данные

    В первой строке находится пара целых чисел n, k (1 ≤ k ≤ n ≤ 5·105) — количество элементов в массиве и параметр k.

    Во второй строке находятся n целых чисел ai (0 ≤ ai ≤ 106) — элементы массива a.

    Выходные данные

    Выведите два целых числа l, r (l ≤ r) — номер самого левого и самого правого элементов k-хорошего подотрезка наибольшей длины. Если существует несколько хороших подотрезков наибольшей длины разрешается вывести любой из них. Элементы массива пронумерованы от 1 до n слева направо.

    F. Дорогие строки

    сортировки Строки строковые суфф. структуры Структуры данных *2700

    Задан набор из n строк ti. Для каждой строки известна ее стоимость ci.

    Определим следующую функцию от строки , где ps, i — число вхождений строки s в строку ti, а |s| — длина строки s. Найдите максимальное значение функции f(s) по всем строкам.

    Обратите внимание, что s — это не обязательно строка из заданного набора t.

    Входные данные

    В первой строке входного файла задано единственное целое число n (1 ≤ n ≤ 105) — количество строк в наборе.

    Далее заданы n непустых строк — строки ti из набора. Строки ti состоят только из строчных букв английского алфавита.

    Гарантируется, что суммарная длина всех строк не превосходит 5·105.

    В последней строке находится n целых чисел ci ( - 107 ≤ ci ≤ 107) — стоимость i-й строки.

    Выходные данные

    В единственной строке выходного файла выведите целое число a — наибольшее значение функции f(s) по всем строкам s. Обращаем еще раз внимание, что строка s не обязательно из заданного набора t.

    E. XOR и любимое число

    Структуры данных *2200

    У Васи есть любимое число k и массив ai длины n. Теперь он просит вас ответить на m запросов.

    Для каждого запроса, задаваемого парой чисел l и r, требуется найти количество пар целых чисел i и j таких, что l ≤ i ≤ j ≤ r и xor чисел ai, ai + 1, ..., aj равен k.

    Входные данные

    В первой строке даны целые числа n, m и k (1 ≤ n, m ≤ 100 000, 0 ≤ k ≤ 1 000 000) — длина массива, количество запросов и любимое число Васи соответственно.

    Во второй строке записаны n целых чисел ai (0 ≤ ai ≤ 1 000 000) — имеющийся у Васи массив.

    Дальше идут m строк. В i-й строке записаны числа li и ri (1 ≤ li ≤ ri ≤ n), определяющие i-й запрос.

    Выходные данные

    Выведите m строк, ответы на запросы в порядке их появления во входных данных.

    Примечание

    В первом примере подходят пары чисел (1, 2), (1, 4), (1, 5), (2, 3), (3, 6), (5, 6), (6, 6). Ни одна из этих пар не подходит для второго запроса.

    Во втором примере xor равен 1 для всех подмассивов нечётной длины.

    E. Рука робота

    геометрия Структуры данных *2500

    Роджер — робот. У него есть рука, представляющая собой последовательность из n соединённых друг с другом отрезков. Концы i-го отрезка изначально расположены в точках с координатами (i - 1, 0) и (i, 0). У i-го отрезка конец в (i - 1, 0) окрашен в красный цвет, а конец в (i, 0) — в синий. Таким образом, синий конец i-го отрезка касается красного конца (i + 1)-го отрезка для всех соответствующих i.

    Роджер может двигать рукой двумя различными способами:

    1. Он может выбрать отрезок и увеличить его длину. Пусть был выбран отрезок i и длина l, тогда изменение происходит описанным дальше образом. Красный конец отрезка номер i и отрезки от 1 до i - 1 фиксируются. Посмотрим на луч от красного конца до синего конца i-го отрезка. Синий конец и отрезки от i + 1 до n переносятся на l в направлении этого луча.

      На этой иллюстрации красный конец помечен А, а отрезки до А остаются на своём месте, в то время как синий конец помечен В и отрезки после B переносятся вдоль луча.

    2. Он может выбрать отрезок и повернуть его. Пусть был выбран отрезок номер i и угол a. Красный конец i-го отрезка и все отрезки от 1 до i - 1 останутся на месте. Синий конец этого отрезка и отрезков от i + 1 до n будут вращаться по часовой стрелке на угол a градусов вокруг красной точки.

      На этой иллюстрации красный конец помечен А, а отрезки до А остаются на местах, в то время как синий конец помечен как B и отрезки после В повернутся вокруг точки А.

      Роджер будет двигать рукой m раз. Эти преобразования немного сложные, поэтому Роджер быстро путается и перестаёт понимать, где находится синий конец последнего отрезка. Помогите ему вычислить координаты синего конца последнего отрезка после применения каждой операции. Обратите внимание, что во время выполнения всех действий рука Роджера может произвольно пересекаться сама с собой.

    Входные данные

    В первой строке входных данных записано два целых числа n и m (1 ≤ n, m ≤ 300 000) — количество отрезков, составляющих руку, и количество движений, сделанных Роджером, соответственно.

    В каждой из следующих m строк записано по три целых числа xi, yi и zi, описывающих соответствующий ход. Если xi = 1, это описывает ход 1-го типа, где yi обозначает номер отрезка, а zi обозначает увеличение длины. Если xi = 2, то это описание хода второго типа, где yi обозначает номер отрезка, а zi обозначает угол в градусах (1 ≤ xi ≤ 2, 1 ≤ yi ≤ n, 1 ≤ zi ≤ 359).

    Выходные данные

    Выведите m строк. В i-ой строке должны быть записаны два вещественных числа, обозначающие координаты синего конца последнего отрезка после завершения операций 1, ..., i. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 4.

    А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

    Примечание

    Следующие картинки иллюстрируют пример и показывают состояние руки после каждой операции. Координаты точки F выведены после применения каждой операции. Для простоты мы показываем только синие концы отрезка (за исключением красного конца первого). Например, точка, помеченная В, является синим концом отрезка 1, а также красным концом отрезка 2.

    Начальное состояние:

    Увеличить длину отрезка 1 на 3.
    Повернуть отрезок 3 на 90 градусов по часовой стрелке.
    Повернуть отрезок 5 на 48 градусов по часовой стрелке.
    Увеличить длину отрезка 4 на 1.

    E. Новогодняя ёлка

    битмаски Деревья Структуры данных *2100

    Новый год прошёл, но Resha решил не убирать ёлку, а немного переукрасить её. К нему пришли его друзья Kerim и Gural, чтобы помочь переукрасить ёлку.

    Ёлка представляет собой обычное неориентированное дерево из n вершин с корнем в вершине 1.

    Вам требуется обрабатывать запросы двух типов:

    1. Перекрасить все вершины из поддерева вершины v в цвет c.
    2. Найти количество различных цветов в поддереве вершины v.
    Входные данные

    В первой строке находится пара целых чисел n, m (1 ≤ n, m ≤ 4·105) — количество вершин в дереве и количество запросов.

    Во второй строке находятся n целых чисел ci (1 ≤ ci ≤ 60) — цвет i-й вершины.

    В каждой из следующих n - 1 строк находится пара целых чисел xj, yj (1 ≤ xj, yj ≤ n) — вершины, которые соединяет j-е ребро дерева. Гарантируется, что вам задано корректное неориентированное дерево.

    В последних m строках находятся описания запросов. Каждое описание начинается с целого цисла tk (1 ≤ tk ≤ 2) — типа запроса. Для запросов первого типа далее следует пара целых чисел vk, ck (1 ≤ vk ≤ n, 1 ≤ ck ≤ 60) — номер вершины дерева в поддереве которой все вершины перекрашиваются в цвет ck. Для запросов второго типа далее следует целое число vk (1 ≤ vk ≤ n) — номер вершины в поддереве которой нужно посчитать количество различных цветов.

    Выходные данные

    Для каждого запроса второго типа выведите одно целое число a — количество различных цветов в поддереве вершины, заданной в запросе.

    Числа нужно выводить в отдельных строках, в порядке появления запросов во входных данных.

    F. Ксоры на подотрезке

    Деревья Строки Структуры данных *2800

    Вам задан массив из n целых чисел ai, а также m запросов. Каждый запрос описывается с помощью двух целых чисел (lj, rj).

    Определим функцию . Функция определена только для u ≤ v.

    Для каждого запроса выведите наибольшее значение функции f(ax, ay) по всем lj ≤ x, y ≤ rj,  ax ≤ ay.

    Входные данные

    В первой строке находится пара целых чисел n, m (1 ≤ n ≤ 5·104,  1 ≤ m ≤ 5·103) — количество элементов в массиве a и количество запросов.

    Во второй строке находятся n целых чисел ai (1 ≤ ai ≤ 106) — элементы массива a.

    В каждой из следующих m строк находится пара целых чисел lj, rj (1 ≤ lj ≤ rj ≤ n) — параметры j-го запроса.

    Выходные данные

    Для каждого запроса выведите в отдельной строке целое число aj — наибольшее значение функции f(ax, ay) по всем lj ≤ x, y ≤ rj,  ax ≤ ay.

    C. Не равный на отрезке

    реализация Структуры данных *1700

    Вам задан массив из n целых чисел a, а также m запросов. Каждый запрос задан тройкой целых чисел li, ri, xi.

    Для каждого запроса вам нужно найти любую позицию pi (li ≤ pi ≤ ri) такую, что api ≠ xi.

    Входные данные

    В первой строке находится пара целых чисел n, m (1 ≤ n, m ≤ 2·105) — количество чисел в массиве и количество запросов.

    Во второй строке находятся n целых чисел ai (1 ≤ ai ≤ 106) — элементы массива a.

    В следующих m строках заданы запросы тремя целыми числами li, ri, xi (1 ≤ li ≤ ri ≤ n, 1 ≤ xi ≤ 106) — параметры i-го запроса.

    Выходные данные

    Выведите m строк. На i-й строке выведите целое число pi — позицию любого числа в отрезке [li, ri] не равного xi, либо число  - 1, если такого числа нет.

    E. Лягушачьи бои

    жадные алгоритмы Структуры данных *2800

    Недавно великий комбинатор посетил лягушачьи бои и, поразившись несистемностью правил боёв, решил создать своё увлекательное зрелище, но подчинённое строгим правилам.

    Итак, лягушек выставляют на поле, имеющее форму кольца, разделённого на m клеток. Клетки пронумерованы от 1 до m по кругу, после клетки номер m идёт клетка номер 1. i-я лягушка изначально может прыгнуть на ai клеток вперёд.

    Лягушки ходят по очереди, начиная с лягушки с номером 1. На своём ходу i-я лягушка прыгает на клеток вперёд, сбрасывая с поля всех других лягушек на своём пути, в том числе и ту, которая находится в конечной клетке текущего прыжка. После этого её значение ai уменьшается на количество удалённых во время данного прыжка лягушек. Если ai становится равным нулю или отрицательным, то i-я лягушка не сможет прыгать в дальнейшем.

    После того, как лягушка с номером 1 заканчивает свой ход, ходит лягушка с номером 2, затем лягушка с номером 3 и так далее. После того, как сходит лягушка с номером n, снова ходит лягушка с номером 1. Если лягушка с каким-то номером уже была сброшена с поля, то считается, что она всегда пропускает свой ход.

    Великому комбинатору уже не терпится узнать, какие из лягушек в конце концов останутся на поле. Помогите ему узнать это.

    Входные данные

    В первой строке содержатся два числа n и m (1 ≤ n ≤ 100 000, 2 ≤ m ≤ 109, n ≤ m) — количество лягушек и размер поля соответственно.

    В следующих n строках содержатся описания лягушек. Каждое описание состоит из двух чисел pi и ai (1 ≤ pi,  ai ≤ m) — номер клетки, на которой стоит лягушка, и изначальная длина её прыжка соответственно.

    Гарантируется, что все значения pi различны.

    Выходные данные

    В первой строке выведите количество лягушек, которые всегда будут на поле.

    В следующей строке выведите номера этих лягушек в любом порядке.

    Примечание

    В первом примере первая лягушка прыгает на одну клетку и оказывается в клетке номер 3. Затем вторая прыгает на 3 клетки и также оказывается в клетке номер 3, удаляя при этом первую лягушку с поля. Величина следующего прыжка у неё теперь равна 2. Третья лягушка прыгает в клетку номер 2. Затем вторая лягушка прыгает в клетку 5. Третья догоняет её и удаляет с поля. На поле осталась только она.

    Во втором примере первая лягушка прыгает на две клетки, удаляя с поля лягушек, стоящих на клетках 2 и 3. Величина её следующего прыжка при этом становится равной нулю. Затем прыгает четвёртая лягушка, удаляет с поля пятую и тоже останавливается. В итоге на поле остаются две лягушки.

    G. Лототроны

    дп жадные алгоритмы математика Структуры данных *3100

    Джонни участвует в карнавале, на котором проводится n лотерей. В ходе лотереи с номером i разыгрывается приз ценностью pi. Каждый участник покупает сколько-то лотерейных билетов, а затем произвольным образом распределяет их между n лототронами. В конце карнавала из каждого лототрона случайным образом достают один билет, и его обладатель выигрывает соответствующий приз. Один человек вполне может выиграть и несколько призов с разных лототронов.

    Правила карнавальных лотерей запрещают одному участнику владеть более чем половиной билетов в лототроне, то есть никто не может положить в один лототрон больше билетов, чем все остальные участники вместе взятые. В начале лотереи организаторы кладут в каждый лототрон один билет и не извлекают его оттуда до конца карнавала.

    Джонни купил t лотерейных билетов и теперь думает, как же распределить их по лототронам. Сейчас в i-м лототроне находится li билетов. Джонни наблюдает, как остальные участники лотереи время от времени меняют свои решения и перемещают по одному билету. После каждого такого перемещения Джонни хочет знать максимальное математическое ожидание выигрыша, которого он может добиться, разместив билеты оптимальным способом. Разумеется, Джонни не может использовать больше чем t билетов и нарушать правила лотереи, помещая в один лототрон больше билетов, чем все остальные участники лотереи вместе взятые.

    Входные данные

    В первой строке входных данных записаны числа n, t и q (1 ≤ n, t, q ≤ 200 000) — количество лототронов, количество билетов в распоряжении Джонни и количество изменений соответственно.

    Во второй строке записаны n чисел pi (1 ≤ pi ≤ 1000), i-е из которых задаёт ценность приза в i-й лотерее.

    В третьей строке записано n чисел li (1 ≤ li ≤ 1000) — изначальное количество билетов в каждом лототроне.

    Далее следуют q строк с описанием изменений. Каждое описание состоит из двух целых чисел tk и rk (1 ≤ tk ≤ 2, 1 ≤ rk ≤ n) — тип изменения и номер лототрона. Если tk = 1, то кто-то добавляет один билет в лототрон rk, а если tk = 2, то кто-то убирает билет из лототрона rk.

    Гарантируется, что после любой операции в каждом лототроне есть хотя бы 1 билет.

    Выходные данные

    Выведите q строк, каждая строка должна содержать одно вещественное число — максимально возможное математическое ожидание выигрыша Джонни после выполнения первых k изменений. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

    А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

    Примечание

    В первом примере у Джонни есть только один билет. Призы имеют ценность 4 и 5, а в лототронах изначально находятся 1 и 2 билета соответственно. После первого изменения в каждом лототроне лежит по 2 билета, так что если Джонни поместит свой билет во второй лототрон, то математическое ожидание выигрыша будет равно . После второго изменения во втором лототроне находится три билета, так что наиболее выгодной стратегией будет положить билет в первый лототрон — математическое ожидание выигрыша равно . После третьего изменения Джонни должен положить свой билет в первый лототрон, тогда математическое ожидание выигрыша равно .

    Во втором примере у Джонни больше билетов, чем он может использовать по правилам карнавальной лотереи. Например, после первого изменения, в лототронах лежат 7, 6 и 6 билетов соответственно, так что Джонни может использовать только 19 своих билетов и выиграть каждый приз с вероятностью .

    B. Ремонт фабрики

    Структуры данных *1700

    Фабрика производит однодневные дырявые кастрюли. Обычно за один день производится a кастрюль, но сейчас часть оборудования, делающего дырки, сломалась, поэтому производство упало до b кастрюль в день. Руководство фабрики собирается выбрать k последовательных дней и произвести ремонт оборудования. Во время ремонта фабрика не будет ничего производить, зато после его окончания вернётся к производству a кастрюль в день.

    Изначально у фабрики нет никаких заказов. Запросы di, ai означают, что ai новых заказов поступило на день di. Для каждого заказа требуется ровно одна однодневная дырявая кастрюля, и, разумеется, она должна быть произведена ровно в этот день (на следующий день кастрюля уже выходит из строя). Фабрика может каждый день удовлетворить любое количество заказов, не превосходящее её производственные мощности для этого дня.

    Также в некоторые моменты времени владелец фабрики хочет для некоторого pi знать максимальное количество заказов, которое может быть удовлетворено, если ремонт фабрики будет произведён в дни pi, pi + 1, ..., pi + k - 1.

    Входные данные

    В первой строке входных данных записаны пять целых чисел n, k, a, b и q (1 ≤ k ≤ n ≤ 200 000, 1 ≤ b < a ≤ 10 000, 1 ≤ q ≤ 200 000) — количество дней, продолжительность ремонта, полная и текущая мощности фабрики и количество запросов соответственно.

    В следующих q строках идут запросы двух видов:

    • 1 di ai (1 ≤ di ≤ n, 1 ≤ ai ≤ 10 000), означает, что ai заказов поступило на день di.
    • 2 pi (1 ≤ pi ≤ n - k + 1), означает, что владелец хочет знать, сколько заказов может быть выполнено, если первым днём ремонта фабрики будет pi.

    Гарантируется, что во входных данных содержится хотя бы один запрос второго типа.

    Выходные данные

    Для каждого запроса второго типа выведите максимальное количество заказов, которые могут быть выполнены.

    Примечание

    Рассмотрим первый пример.

    Фабрика производит не больше 1 однодневной дырявой кастрюли в день и будет производить 2 после ремонта. Ремонт занимает 2 дня.

    Для первого запроса мы можем выполнить 1 заказ в день 1, 0 заказов в дни 2 и 3, поскольку будет производиться ремонт, 0 заказов в день 4, поскольку ни одна кастрюля не была заказана на этот день, и 2 заказа в день 5, поскольку больше чем 2 кастрюли в день фабрика произвести не может. Таким образом, будут выполнены 3 заказа.

    В третьем запросе мы можем выполнить 1 заказ в день 1, 1 заказ в день 2 и 2 заказа в день 5. В итоге будут выполнены 4 заказа.

    C. Доставка посылки

    жадные алгоритмы разделяй и властвуй Структуры данных *2200

    Джонни управляет трактором и должен доставить посылку из одного города в другой. Оба города расположены на числовой прямой, при этом Джонни начинает в точке 0 и должен добраться до точки d.

    Топливный бак трактора Джонни вмещает не больше чем n литров топлива и изначально заполнен до предела. На то, чтобы проехать одну единицу расстояния, тратится ровно один литр топлива. Вдоль пути расположены m заправок, при этом i-я заправка находится в точке xi и продаёт бензин по pi долларов за литр. Количество бензина на каждой заправке не ограничено. Определите минимальное количество денег, которое придётся потратить Джонни, чтобы доставить посылку.

    Входные данные

    В первой строке входных данных записаны три целых числа d, n и m (1 ≤ n ≤ d ≤ 109, 1 ≤ m ≤ 200 000) — расстояние, которое необходимо проехать, объём топливного бака и количество заправок на пути соответственно.

    В каждой из последующих m строк записаны два целых числа xi и pi (1 ≤ xi ≤ d - 1, 1 ≤ pi ≤ 106) — позиция i-й заправки и стоимость бензина в ней соответственно. Гарантируется, что координаты всех заправок различны.

    Выходные данные

    Выведите единственно целое число — минимальное количество денег, которое придётся потратить, чтобы доставить посылку из точки 0 в точку d. Если доставить посылку невозможно, то выведите -1.

    Примечание

    В первом примере топливный бак вмещает 4 литра. Джонни может проехать 3 единицы расстояния до первой заправки, залить там в бак 2 литра (в баке будет 3 литра топлива), проехать ещё 3 единицы расстояния до третьей заправки, купить там 4 литра топлива и доехать до конца. Итого придётся потратить 2·5 + 4·3 = 22 долларов.

    Во втором примере Джонни никак не сможет доехать до пункта назначения, потому что у бака недостаточно объёма, чтобы доехать от последней заправки до точки d.

    E. Zbazi в Zeydabad

    реализация Структуры данных *2300

    Турист решил посетить страну Zeydabad для участия в Zbazi (популярная игра в Zeydabad).

    Страна Zeydabad представляет собой прямоугольное клетчатое поле, состоящее из n строк и m столбцов. Каждая клетка в стране обозначена либо символом 'z', либо символом '.'.

    Турист знает, что государство называется Zeydabad потому, что в нём есть много ''Z-паттернов". ''Z-паттерн" это квадрат с побочной диагональю полностью заполненной символами 'z', а также с верхней и нижней строками полностью заполненными символами 'z'. Остальные клетки квадрата могут быть произвольными.

    Заметим, что ''Z-паттерн" может состоять только из одной клетки (смотрите примеры).

    Теперь он хочет посчитать количество ''Z-паттернов" в стране (это необходимый навык для игры в Zbazi).

    Помогите туристу с подсчётом количества ''Z-паттернов".

    Рекомендуется для ввода и вывода данных использовать функции gets, scanf, printf в языке C++, поскольку они работают значительно быстрее чем getline, cin, cout. Аналогично, рекомендуется использовать классы BufferedReader, PrintWriter вместо Scanner, System.out в языке Java.

    Входные данные

    Первая строка содержит пару целых чисел n, m (1 ≤ n, m ≤ 3000) — количество строк и столбцов, соответственно.

    Каждая из следующих n строк содержит m символов 'z' или '.' — описание страны Zeydabad.

    Выходные данные

    Выведите целое число a — количество ''Z-паттернов" в Zeydabad.

    D. Бабай и пирог на день рождения

    дп Структуры данных *2000

    Как вы знаете, на дне рождения обязательно должен быть пирог! В этот раз Бабай решил приготовить особенный пирог.

    Простой пирог можно представить как цилиндр некоторого радиуса и некоторой высоты. Объём простого пирога равен объёму соответствующего цилиндра. У Бабая есь n простых пирогов, и он хочет собрать особенный пирог, поставив некоторые из них друг на друга.

    Однако есть дополнительные кулинарные ограничения. Пироги пронумерованы в некотором порядке, таком что пирог с номером i может быть поставлен только на стол или на пирог с номером j, где j < i. Более того, чтобы поразить своих друзей, Бабай будет ставить пирог i на пирог j, только если объём пирога i строго больше объёма пирога j.

    Бабай хочет собрать пирог максимального суммарного объёма, помогите ему в этом.

    Входные данные

    В первой строке входных данных записано единственно число n (1 ≤ n ≤ 100 000) — количество простых пирогов в распоряжении Бабая.

    В i-й из последующих n строк записаны два целых числа ri и hi (1 ≤ ri, hi ≤ 10 000) — радиус и высота i-го просто пирога соответственно.

    Выходные данные

    Выведите максимальный объём пирога, который может собрать Бабай. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

    А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

    Примечание

    В первом примере оптимальным ответом будет просто выбрать пирог с номером 1.

    Во втором примере максимальный объём специального пирога можно получить выбрав простые пироги 1, 2 и 4.

    E. Фома Дор и дороги

    Деревья дп Комбинаторика поиск в глубину и подобное Структуры данных Теория вероятностей *2300

    Карта города, в котором живёт Фома Дор, представляет собой дерево (неориентированный связный граф без простых циклов), поэтому гости зовут его Древоградом. В городе n перекрёстков, соединённых n - 1 дорогой. По всем дорогам можно перемещаться в обоих направлениях.

    В городе живёт m друзей Фомы Дора, i-й из них живёт рядом с перекрёстком ui, а работает рядом с перекрёстком vi. Все жители города несчастны, потому что между из домом и работой существует ровно один простой путь.

    Фома Дор хочет построить ровно одну новую дорогу, которую он выберет случайно среди всех n·(n - 1) / 2 возможных дорог. Обратите внимание, что он вполне может построить новую дорогу между какой-то парой перекрёстков, уже соединённых друг с другом дорогой.

    Фома знает, что каждый из его друзей будет счастлив, если после построения новой дороги будет путь из его дома до работы и обратно, который не проходит по одной дороге дважды. Формально, в графе будет существовать простой цикл, на котором лежат ui и vi.

    Более того, если какой-то друг становится счастлив, то уровень его радости определяется как длина этого пути (несложно заметить, что эта длина определяется однозначно). Для каждого своего друга Фома хочет вычислить математическое ожидание значения уровня радости, то есть математическое ожидание длины цикла, если этот цикл содержит ui и vi.

    Входные данные

    В первой строке входных данных записаны числа n и m (2 ≤ n,  m ≤ 100 000) — количество перекрёстков в Древограде и друзей Фомы соответственно.

    Далее следует n - 1 строка с описанием дорог. Каждая строка содержит два числа ai и bi (1 ≤ ai, bi ≤ n) — индексы перекрёстков, соединённых i-й дорогой.

    В последних m строках описываются друзья Фомы Дора. В i-й из этих строк записаны два числа ui и vi (1 ≤ ui, vi ≤ n, ui ≠ vi) — номер перекрёстка, где живёт i друг, и номер перекрёстка, где он работает.

    Выходные данные

    Для каждого друга Фомы Дора вычислите математическое ожидание его уровня радости, при условии, что он будет счастлив. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

    А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

    Примечание

    Рассмотрим второй пример.

    1. Подходят дороги (1, 2) и (2, 3), поэтому математическое ожидание равняется
    2. Построение дорог (1, 3) и (2, 3) сделает второго друга счастливым. Как и для друга 1, ответ равен 2.5
    3. Единственный способ сделать третьего друга счастливым — это построить дорогу (2, 3), поэтому ответ равен 3

    C. Отчёт

    сортировки Структуры данных *1700

    Каждый месяц Блейк получает отчёт об основных показателях деятельности компании «Blake Technologies». Компания производит n продуктов, поэтому в отчёте указано n целых чисел — выручка по каждому из этих продуктов. Однако перед тем, как этот отчёт попадёт в руки Блейка, он проходит нелёгкий путь через m менеджеров. Каждый из менеджеров, прежде чем передать отчёт следующему менеджеру (или Блейку), может переставить некоторые числа по своему усмотрению. А именно: i-й менеджер сортирует первые ri чисел в порядке неубывания или невозрастания, после чего передаёт отчёт менеджеру с номером i + 1, если i < m, или Блейку, если i = m.

    Сейчас как раз настал момент, когда сотрудники составляют очередной отчёт для Блейка. Вам известна изначальная последовательность длины n, а также дано описание каждого менеджера, то есть значение ri и какой порядок сортировки он предпочитает. Вас попросили ускорить процесс и сразу определить итоговый вид отчёта.

    Входные данные

    В первой строке входных данных записаны два целых числа n и m (1 ≤ n, m ≤ 200 000) — количество чисел в отчёте и количество менеджеров соответственно.

    Во второй строке содержатся n целых чисел ai (|ai| ≤ 109) — числа в отчете, до того как он попал в руки первого менеджера.

    В следующих m строках содержатся описания последовательных операций с отчётом, которые проводят менеджеры. В i-й из этих строк записаны два целых числа ti и ri (, 1 ≤ ri ≤ n), означающих, что i-й менеджер сортирует первые ri чисел в порядке неубывания, если ti = 1, или в порядке невозрастания, если ti = 2.

    Выходные данные

    В единственной строке выведите n целых чисел — итоговый отчёт, который попадёт к Блейку.

    Примечание

    В первом примере изначально отчёт выглядел так: 1 2 3. После первого менеджера были переставлены первые два числа: 2 1 3. В таком виде отчёт попал к Блейку.

    Во втором примере первоначально отчёт был таким: 1 2 4 3. После первого менеджера отчёт стал таким: 4 2 1 3. После второго менеджера отчёт стал выглядеть так: 2 4 1 3. Такой отчёт был передан Блейку.

    D. Мессенджер

    реализация Строки строковые суфф. структуры Структуры данных хэши *2100

    Каждый сотрудник компании «Blake Technologies» пользуется специализированным приложением для мгновенного обмена сообщениями, которое носит название «Blake Messenger». Все сотрудники любят это приложение и пользуются им постоянно. Однако не всё так гладко, как хотелось бы. Многим не хватает очень важной функции — поиска по сообщениям. Поэтому было принято решение реализовать эту функцию в следующей версии мессенджера. К сожалению, из-за особенностей хранения сообщений разработчикам столкнулись с некоторыми проблемами...

    Все сообщения в приложении представляют собой строки, состоящие только из строчных букв английского алфавита. В целях снижения нагрузки эти строки передаются и хранятся в сжатом виде. Алгоритм сжатия работает следующим образом: строка s разбивается на n последовательных блоков одинаковых букв. Такую часть можно описать парой (li, сi), где li — длина i-й части, а ci — символ, который используется в i-й части. Таким образом, строку s можно записать в сжатом виде парами .

    Требуется написать программу, которая по заданным сжатым строкам t и s находит все вхождения строки s в строку t. Разработчики понимают, что таких вхождений может быть очень много, поэтому требуется вывести только количество различных позиций вхождений строки s в строку t. Напомним, что позиция p является позицией вхождения строки s в строку t тогда и только тогда, когда tptp + 1...tp + |s| - 1 = s, где ti — i-й символ строки t.

    Обратите внимание на то, что, к примеру, строка "aaaa" может быть сжата несколькими способами: , , ...

    Входные данные

    В первой строке входных данных записаны два целых числа n и m (1 ≤ n, m ≤ 200 000) — количество блоков, из которых состоят строки t и s соответственно.

    Во второй строке записаны описания n блоков строки t в формате "li-ci" (1 ≤ li ≤ 1 000 000) — длина i-го блока строки t и соответствующая строчная буква английского алфавита.

    Во второй строке записаны описания m блоков строки s в формате "li-ci" (1 ≤ li ≤ 1 000 000) — длина i-го блока строки s и соответствующая строчная буква английского алфавита.

    Выходные данные

    Выведите единственное целое число — количество вхождений строки s в строку t.

    Примечание

    В первом примере t = "aaabbccccaaacc", a s = "aabbc". Строка s входит в строку t только в одной позиции p = 2.

    Во втором тесте t = "aaabbbbbbaaaaaaacccceeeeeeeeaa", а s = "aaa". Строка s входит в строку t в следующих позициях: p = 1, p = 10, p = 11, p = 12, p = 13, p = 14.

    E. Мультипликативная сумма

    геометрия дп Структуры данных *2600

    Хотя Блейк и является начальником Криса, это никак не мешает их дружбе. Обычно по вечерам они собираются вместе в баре и обсуждают там увлекательные задачи, в которых требуется максимизировать какую-нибудь величину. В этот раз им попалась особенная задача...

    Пусть дан массив a длины n. Назовём характеристикой массива число — сумму произведений i-го числа в массиве a на число i. Разрешается ровно один раз сделать следующую операцию: выбрать некоторый элемент массива и переставить его в любое место в массиве. В частности, разрешается переставить элемент в начало, в конец или поставить его обратно на ту же позицию. Необходимо получить массив с максимально возможным значением характеристики.

    Входные данные

    В первой строке входных данных записано одно число n (2 ≤ n ≤ 200 000) — размер массива a.

    Во второй строке содержится n целых чисел ai (|ai| ≤ 1 000 000) — элементы массива a.

    Выходные данные

    Выведите единственное целое число — максимально возможное значение характеристики массива a, если можно переставить ровно один элемент.

    Примечание

    В первом примере можно удалить первый элемент из массива и вставить его перед третьим (перед числом 5), таким образом получив максимальный ответ: 3·1 + 2·2 + 4·3 + 5·4 = 39.

    Во втором примере максимальный ответ можно получить, удалив пятый элемент из массива и вставив его перед третьим: 1·1 + 1·2 + 1·3 + 2·4 + 7·5 = 49.

    C. Синдром шпиона 2

    дп реализация сортировки Строки строковые суфф. структуры Структуры данных хэши *1900

    Яш хочет взломать используемый Сидхантом шифр. После долгих недель наблюдений он понял, что Сидхант шифрует предложения следующим образом:

    1. Перевести все буквы в нижний регистр.
    2. Каждое слово в предложение заменить на развёрнутое.
    3. Удалить все пробелы.

    Например, если взять предложение

    Kira is childish and he hates losing

    и применить к нему данный шифр, то получится строка

    ariksihsidlihcdnaehsetahgnisol

    Сейчас у Яша есть зашифрованная строка и список слов. Помогите ему найти какое-нибудь исходное предложение, составленное только из слов, встречающихся в списке. Обратите внимание, что любое слово может быть использовано в предложении сколько угодно раз.

    Входные данные

    В первой строке входных данных записано число n (1 ≤ n ≤ 10 000) — длина зашифрованной строки. Вторая строка содержит саму зашифрованную строку и состоит из n строчных букв английского алфавита.

    В третьей строке записано число m (1 ≤ m ≤ 100 000) — количество слов в списке. В каждой из последующих m строк записано непустое слово wi (|wi| ≤ 1 000), состоящее из строчных и заглавных букв английского алфавита. Гарантируется, что суммарная длина всех слов не превосходит 1 000 000.

    Выходные данные

    Выведите одну строчку, содержащую исходное предложение. Гарантируется, что хотя бы одно решение существует. Если решений несколько, то разрешается вывести любое.

    E. Финансирование стартапа

    Бинарный поиск Конструктив Структуры данных Теория вероятностей *2400

    Стартап, связанный с торговлей в интернете, просит инвесторов о финансировании. Он работает уже n недель, и у него даже есть сайт!

    Для каждой недели менеджеры стартапа знают количество уникальных посетителей vi и доход ci. Чтобы оценить потенциал стартапа в промежутке с недели l по неделю r включительно, инвесторы используют минимум из максимального количества посетителей, умноженного на 100, и минимального дохода в течение этого промежутка времени. Формально:

    Стоит честно заметить, что инвесторы понятия не имеют, как эффективно оценить стартап, поэтому они выберут k случайных различных недель в качестве li и дадут эти числа менеджерам стартапа. Для каждого li те выберут некоторое ri ≥ li и сообщат инвесторам максимальное количество посетителей и минимальный доход в течение соответствующего периода с li по ri.

    Затем инвесторы вычислят потенциал стартапа для каждого из данных промежутков времени и выберут минимальное значение p(li, ri) в качестве итоговой оценки потенциала стартапа. Предполагается, что менеджеры стартапа всегда оптимально выбирают значения ri для данных li, то есть таким образом чтобы максимизировать итоговую оценку стартапа, чему равняется математическое ожидание этой величины?

    Входные данные

    В первой строке входных данных записаны два числа n и k (1 ≤ k ≤ n ≤ 1 000 000).

    Во второй строке записаны n целых чисел vi (1 ≤ vi ≤ 107) — количество уникальных посетителей за каждую неделю.

    В третьей строке записано n целых чисел ci (1 ≤ ci ≤ 107) — доход стартапа за каждую неделю.

    Выходные данные

    Выведите единственное вещественное число — математическое ожидание итоговой оценки стартапа. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

    А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

    Примечание

    Рассмотрим первый пример.

    Если инвесторы спросят про li = 1, менеджеры стартапа выберут ri = 1, так чтобы максимальное число посетителей равнялось 3, а минимальный доход равнялся 300. Таким образом потенциал будет равен min(3·100, 300) = 300.

    Если инвесторы спросят про li = 2, менеджеры стартапа выберут ri = 3, так чтобы максимальное число посетителей равнялось 2, а минимальный доход равнялся 200. Таким образом потенциал будет равен min(2·100, 200) = 200.

    Если инвесторы спросят про li = 3, менеджеры стартапа выберут ri = 3, так чтобы максимальное число посетителей равнялось 1, а минимальный доход равнялся 300. Таким образом потенциал будет равен min(1·100, 300) = 100.

    Теперь нужно выбрать равновероятно множество размера 2, в каждом выбрать минимум. Возможные множества: {200, 300},{100, 300},{100, 200}. Оценки стартапа потенциалов получаются {200, 100, 100}. Таким образом, математическое ожидание (100 + 200 + 100) / 3 = 133.(3).

    G. Яш и деревья

    битмаски математика поиск в глубину и подобное Структуры данных теория чисел *2800

    Яш любит играть с деревьями, особенно если в этой игре замешаны простые числа. На его 20-й день рождения ему подарили корневое дерево, состоящее из n вершин, на котором он должен теперь отвечать на запросы. Услышав про деревья и простые числа, Яш так переполнился восхищением, что отвечать на запросы придётся теперь вам. Корнем дерева является вершина с номером 1. В каждой вершине записано некоторое целое число ai. Дополнительно нам дано целое число m.

    Поступают запросы двух типов:

    1. Для данной вершины v и целого числа x — увеличить все ai в поддереве v на x.
    2. Для данной вершины v — найти количество таких простых чисел p, меньших m, что найдётся вершина u в поддереве вершины v и целое число k, такие что au = p + m·k.
    Входные данные

    В первой строке входных данных записаны целые числа n и m (1 ≤ n ≤ 100 000, 1 ≤ m ≤ 1000) — количество вершин в дереве и значение m, используемое в запросах, соответственно.

    Во второй строке записаны n целых чисел ai (0 ≤ ai ≤ 109) — изначальные значения, записанные в вершинах дерева.

    Далее следует n - 1 строка, описывающая дерево. В каждой из них записаны два целых числа ui и vi (1 ≤ ui, vi ≤ n) — индексы вершин, соединённых i-м ребром.

    В следующей строке записано число q (1 ≤ q ≤ 100 000) — количество запросов к дереву, которые требуется обработать.

    В каждой из последних q строк записано 1 v x или 2 v (1 ≤ v ≤ n, 0 ≤ x ≤ 109), которые определяют запрос первого или второго типа соответственно. Гарантируется, что будет хотя бы один запрос второго типа.

    Выходные данные

    Для каждого запроса второго типа выведите количество подходящих простых чисел.

    H. Фибоначчиеватость II

    реализация Структуры данных *3100

    Яшу надоело искать самую длинную фибоначчиеватую последовательность, и он придумал себе новое развлечение — вычисление фибоначчиеватых потенциалов.

    Фибоначчиеватый потенциал массива ai вычисляется следующим образом:

    1. Удалить все элементы j, такие что существует i < j, для которого ai = aj.
    2. Упорядочить оставшиеся элементы в порядке возрастания, то есть a1 < a2 < ... < an.
    3. Вычислить потенциал как P(a) = a1·F1 + a2·F2 + ... + an·Fn, где Fi означает i-е число Фибоначчи (смотрите примечания для уточнения).

    Вам дан массив ai длины n и q отрезков с lj по rj. Для каждого такого отрезка j требуется вычислить фибоначчиеватый потенциал массива bi, составленного из элементов ai с lj по rj включительно. Вычислите эти значения по модулю m.

    Входные данные

    В первой строке входных данных записаны целые числа n и m (1 ≤ n, m ≤ 30 000) — длина массива и модуль, по которому требуется производить вычисления, соответственно.

    В следующей строке записаны n целых чисел ai (0 ≤ ai ≤ 109) — элементы массива.

    Далее следует число отрезков q (1 ≤ q ≤ 30 000).

    Последние q строк содержат пары индексов lj и rj (1 ≤ lj ≤ rj ≤ n) — отрезки, на которых следует вычислить фибоначчиеватый потенциал.

    Выходные данные

    Выведите q целых чисел, i-е из которых должно быть равно фибоначчиеватому потенциалу итого отрезка массива.

    Примечание

    В данной задаче числа Фибоначчи определяются следующим образом:

    1. F1 = F2 = 1.
    2. Fn = Fn - 1 + Fn - 2 для всех n > 2.

    B. Порядок чатов

    *особая задача Бинарный поиск Конструктив сортировки Структуры данных *1200

    Поликарп — большой любитель проводить время в соцсетях. Страница со списком чатов в его любимой соцсети устроена так, что при отсылке сообщения собеседнику чат с ним поднимается на самый верх страницы. Относительный порядок всех остальных чатов при этом не изменяется. Если ранее чата с этим собеседником не было, то просто в верх списка чатов вставляется новый чат.

    Считая, что изначально список чатов пуст, по последовательности сообщений Поликарпа постройте список чатов после обработки всех его сообщений. Считайте, что никто из собеседников ничего Поликарпу не писал.

    Входные данные

    В первой строке записано целое число n (1 ≤ n ≤ 200 000) — количество сообщений Поликарпа. Далее в n строках перечислены адресаты сообщений в порядке отсылки сообщений. Имя каждого адресата — непустая последовательность строчных букв английского алфавита длины не более 10.

    Выходные данные

    Выведите всех адресатов, с кем общался Поликарп, в порядке расположения чатов с ними сверху вниз.

    Примечание

    В первом тестовом примере Поликарп сначала напишет пользователю с именем «alex», и список примет вид:

    1. alex

    Затем Поликарп напишет пользователю с именем «ivan» и список чатов будет выглядеть следующим образом:

    1. ivan
    2. alex

    Третье сообщение Поликарп напишет пользователю с именем «roman». После этого список чатов будет выглядеть следующим образом:

    1. roman
    2. ivan
    3. alex

    Четвёртое сообщение Поликарп напишет пользователю с именем «ivan», которому он уже отправлял сообщение, поэтому список чатов изменится следующим образом:

    1. ivan
    2. roman
    3. alex

    D. Бег с препятствиями

    *особая задача дп жадные алгоритмы Структуры данных *1600

    Спортсмен стартует из точки xstart = 0 и бежит в точку с координатой xfinish = m (на прямой). Также спортсмен умеет прыгать — для прыжка он сначала должен взять разбег длины не менее s метров (при этом на протяжении этих s метров на его пути не должно быть препятствий), а после этого он может прыгнуть на длину не более d метров. Бегать и прыгать разрешено только в направлении слева направо. Начинать и заканчивать прыжок можно только в точках с целочисленными координатами, в которых нет препятствий. Чтобы преодолеть какое-то препятствие, нужно приземлиться в точке, которая находится строго правее этого препятствия.

    На пути спортсмена есть n препятствий в точках с координатами x1, x2, ..., xn. Пробегать через препятствия нельзя, их можно только перепрыгивать. Перед вами стоит задача определить, сможет ли спортсмен добраться до финишной точки.

    Входные данные

    В первой строке входных данных следуют четыре целых числа n, m, s и d (1 ≤ n ≤ 200 000, 2 ≤ m ≤ 109, 1 ≤ s, d ≤ 109) — количество препятствий на пути бегуна, координата финишной точки, длина разбега перед прыжком и максимальная длина прыжка соответственно.

    Во второй строке следует последовательность из n целых чисел a1, a2, ..., an (1 ≤ ai ≤ m - 1) — координаты препятствий. Гарантируется, что в стартовой и финишной точке нет препятствий, а также в одной точке не может быть более одного препятствия. Координаты препятствий заданы в произвольном порядке.

    Выходные данные

    Если бегун не сможет добраться до финишной точки, выведите в первую строку выходных данных «IMPOSSIBLE» (без кавычек).

    Если же спортсмен может добраться от старта до финиша, то выведите любой способ сделать это в следующем формате:

    • выведите строку вида «RUN X» (где «X» должно быть целым положительным числом), если очередные «X» метров спортсмен должен бежать;
    • выведите строку вида «JUMP Y» (где «Y» должно быть целым положительным числом), если спортсмен начинает прыжок и очередные «Y» метров должен находиться в полете.

    Все команды «RUN» и «JUMP» должны строго чередоваться, начиная с «RUN», а также они должны быть выведены в хронологическом порядке. Не разрешается перепрыгивать финишную точку, но разрешается в ней приземляться после прыжка. Спортсмен должен остановиться, как только достигнет финиша.

    D. Медвежонок и вклад

    жадные алгоритмы сортировки Структуры данных *2400

    Codeforces — замечательная платформа, одной из её особенностей является возможность посмотреть вклад того или иного участника в развитие сообщества. У каждого зарегистрированного пользователя есть параметр вклад — целое число, не обязательно положительное. Всего зарегистрировано n участников, вклад i-го из них равен ti.

    Маленький полярный медвежонок Лимак только начала заниматься спортивным программированием. У него ещё даже нет своего аккаунта на Codeforces, но он уже может ставить плюсы записям в блогах и комментариям. Минусы Лимак никогда не использует. В рамках данной задачи можно считать, что у каждого зарегистрированного пользователя бесконечно много комментариев и записей в блоге.

    • Лимак может потратить b минут на чтение блога и поставить ему плюс. Вклад автора блога увеличивается на 5.
    • Лимак может потратить c минут на чтение комментария и поставить ему плюс. Вклад автора комментария увеличивается на 1.

    Обратите внимание, что возможны входных данные в которых Лимак читает блоги быстрее, чем комментарии.

    Лимак очень любит ничьи. Он хотел бы, чтобы у каких-нибудь k пользователей была ничья по вкладу. То есть он собирается прочитать сколько-то блогов и сколько-то комментариев и поставить им плюсы, чтобы в результате существовало целое число x, такое что как вклад как минимум k зарегистрированных пользователей равен в точности x.

    Сколько минимум времени придётся потратить Лимаку, чтобы добиться желаемого?

    Входные данные

    В первой строке входных данных записаны четыре целых числа n, k, b и c (2 ≤ k ≤ n ≤ 200 000, 1 ≤ b, c ≤ 1000) — количество зарегистрированных пользователей, количество пользователей в одной группе по вкладу, которого хочет добиться Лимак, время необходимое на прочтение блога и время необходимое на прочтение комментария соответственно.

    Во второй строке записаны n целых чисел t1, t2, ..., tn (|ti| ≤ 109), где ti означает изначальный вклад i-го пользователя.

    Выходные данные

    Выведите минимальное количество минут, которое придётся потратить Лимаку чтобы добиться ничьей между как минимум k пользователями.

    Примечание

    В первом примере имеется четыре зарегистрированных пользователя и Лимак хочет, чтобы была ничья между как минимум тремя из них. Оптимальный ответ можно получить следующим образом:

    • Потратить 100 минут на чтение блога пользователя 4 и увеличить его вклад с 1 до 6.
    • Потратить 4·30 = 120 минут на чтение четырёх комментариев пользователя 2 и увеличить его вклад с 2 до 6 (четыре увеличения по 1).

    Таким образом Лимак потратит 100 + 4·30 = 220 минут и вклад пользователей 2, 3 и 4 будет равен 6.

    Во втором примере Лимак тратит 30 минут на чтение блога и 100 минут на чтение комментария. Он может добиться того, чтобы у трёх пользователей вклад был равен 12 потратив 100 + 3·30 = 190 минут:

    • Потратив 2·30 = 60 минут на чтение двух блогов пользователя номер 2 увеличить его вклад с 2 до 12.
    • Потратив 30 + 100 минут на чтение одного блога и одно комментарий пользователя 3 увеличить его вклад с 6 до 6 + 5 + 1 = 12.

    F. Медведь и химия

    графы Деревья поиск в глубину и подобное Структуры данных *3300

    Умный бурый мишка Лимак обожает химию, особенно ему нравятся химические реакции превращения элементов друг в друга.

    В Беарляндии (родине Лимака) есть n химических элементов, пронумерованных от 1 до n. Также там существуют специальные машины, которые превращают элементы друг в друга. Каждая машина описывается парой чисел ai и bi (не обязательно различных), означающей что машина может превратить элемент ai в bi и наоборот, превратить элемент bi в ai. Машины в Беарляндии очень ненадёжные и каждая из них может быть использована не более одного раза. Допустимо, что ai = bi или несколько машин преобразуют одну и ту же пару ai и bi.

    Радевуш — главный соперник Лимака, и он решил проверить его знание химии. Завтра они встретятся, и каждый принесёт с собой все имеющиеся у него машины. У Лимака есть m машин, но о машинах Радевуша он ничего не знает. Оно договорились, что Радевуш выберет два различных элемента x и y. Лимак начинает с элемента x и должен перевести его в элемент y используя имеющиеся машины, а затем перевести элемент обратно в x. Для выполнения задачи Лимак может использовать как свои машины, так и машины Радевуша, но каждую машину можно применить не более одного раза.

    Известно, что у Радевуша есть непустое множество любимых элементов, и он обязательно выберет x и y из этого множества. Лимак не знает ни элементов в этом множестве, ни какие машины есть у Радевуша, но до него дошли q слухов, каждый из которых содержит описание машин Радевуша и его любимого множества.

    Теперь для каждого слуха Лимак хочет знать, правда ли, что используя свои машины и машины Радевуша (согласно слуху) он сможет успешно выполнить преобразование для любой пары различных элементов x и y из множества любимых элементов Радевуша (опять же, согласно слуху).

    Входные данные

    В первой строке входных данных записаны три числа n, m и q (1 ≤ n, q ≤ 300 000, 0 ≤ m ≤ 300 000) — количество элементов, количество машин Лимака и количество слухов соответственно.

    В каждой из последующих m строк записаны два числа ai и bi (1 ≤ ai, bi ≤ n), описывающие i-ю машину Лимака.

    Затем следует q описаний слухов.

    В первой строке каждого описания i-го слуха записаны два числа ni и mi (1 ≤ ni ≤ 300 000, 0 ≤ mi ≤ 300 000). Во второй строке описания записы ni различных чисел xi, 1, xi, 2, ..., xi, ni (1 ≤ xi, j ≤ n) — любимые элементы Радевуша согласно данному слуху. Обратите внимание, что если ni = 1, то Лимак автоматически выигрывает, поскольку нельзя выбрать ни одной пары различных x и y (и ответ «YES»). В следующих mi строках записаны по два числа ai, j, bi, j (1 ≤ ai, j, bi, j), описывающие Машины Радевуша в i-м слухе.

    Гарантируется, что сумма всех ni не превосходит 300 000. Аналогично, сумма всех mi тоже не превосходит 300 000.

    Важно! Поскольку мы хотели бы, чтобы вы обрабатывали слухи один за другим, получить очередной запрос можно только узнав ответ на предыдущий. Для этого необходимо ко всем числам, описывающим множество любимых элементов Радевуша и его машины применить следующую функцию:

    int rotate(int element)
    {
    element=(element+R)%n;

    if (element==0) {
    element=n;
    }

    return element;
    }

    Здесь R изначально равняется 0 и увеличивается на порядковый номер запроса каждый раз, когда ответом является «YES». Запросы нумеруются начиная с 1 в порядке, в котором они встречаются во входных данных.

    Выходные данные

    Выведите q строк, для i-го запроса выведите «YES» (без кавычек), если для i-го слуха Лимак сумеет успешно перевести друг в друга любую пару элементов x и y из множества xi, 1, xi, 2, ..., xi, ni. В противном случае выведите «NO».

    Примечание

    Рассмотрим первый пример.

    В первом слухе любимым множеством Радевуша является {4, 2} и у него нет машин. Лимак может преобразовать элемент 4 в элемент 2, а затем 2 в 3 и 3 в 4. Таким образом, ответ «YES» и R увеличивается на 1.

    Во втором слухе задач набор {6, 2} и машина (3, 4), но поскольку R = 1, то реально требуется рассмотреть множество {1, 3} и машину (4, 5). Ответ «NO» и значение R не меняется.

    В третьем слухе множество {6, 4, 3} и машины (2, 5) и (4, 6) переводятся в {1, 5, 4}, (3, 6) и (5, 1)

    Рассмотрим возможный выбор Радевуша:

    • Если выбрать элементы 1 и 5, то Лимак может перевести 1 в 5, затем 6 в 3, 3 в 2 и, наконец, 2 в 1.
    • Если он выберет элементы 5 и 4, то Лимак может перевести 5 в 6, 6 в 3, 3 в 4, а затем 4 в 2, 2 в 1, 1 в 5.
    • Наконец, если выбрать элементы 1 и 4, то Лимак может превратить 1 в 2, потом 2 в 4, 4 в 3, 3 в 6, 6 в 5 и 5 в 1.

    Таким образом Лимак может выполнить задачу для любой пары x и y и ответ «YES», а значение R увеличивается на 3 и становится равно 4.

    В последнем слухе {1, 2} и (1, 2) переводятся в {5, 6} и (5, 6). Имеются две машины (5, 6) и Лимак легко справляется с заданием.

    E. Маленький Артёмка и Машина Времени

    Структуры данных *2000

    Маленький Артёмка изобрёл машину времени! Он может перемещаться во времени куда угодно, но, разумеется, все его мысли только о программировании. Он хочет использовать машину времени, чтобы улучшить известную структуру данных — мультимножество.

    Артёмка хочет создать простое мультимножество для целых чисел. Он хочет поддерживать следующие операции:

    1. Добавить целое число в мультимножество. Обратите внимание, что разница мультимножества и множества состоит как раз в том, что в мультимножестве одно и то же число может содержаться несколько раз.
    2. Удалить целое число из мультимножества. При этом удаляется только одно вхождение числа в мультимножество. Артёмка не хочет иметь дело с разными исключениями, так что все операции удаления применяются только в случае, если хотя бы один экземпляр числа присутствует в мультимножестве.
    3. Узнать, сколько экземпляров данного целого числа находится в мультимножестве.

    Но что же насчёт машины времени? Если обычно Артёмка просто выполняет последовательность операций со своим мультимножеством, то теперь он умеет перемещаться в произвольные моменты времени и добавлять там новые операции! Давайте посмотрим на пример.

    • Сперва Артёмка добавляет число 5 в мультимножество в момент времени 1.
    • Затем он добавляет число 3 в мультимножество в 5-й момент времени.
    • В момент времени 6 Артёмка спрашивает, сколько 5 содержится в мультимножестве. Ответ — 1.
    • Затем Артёмка возвращается назад во времени и спрашивает, сколько чисел 3 было в мультимножестве в момент времени 4. Так как 3 была добавлена только в момент времени 5, то ответ на запрос Артёмки — 0.
    • Затем Артёмка снова возвращается назад во времени и удаляет 5 из мультимножества в момент времени 3.
    • Наконец, в момент времени 7 Артёмка спрашивает, сколько 5 содержится в мультимножестве. Ответ — 0, так как мы добавили одну 5 в момент времени 1 и удалили её в момент времени 3.

    Заметьте, что Артёмка настолько не любит исключения, что после любой его последовательности действий операции добавления и удаления остаются корректными, то есть никогда не поступает запрос на удаление несуществующего элемента. Ответом на запрос третьего типа является количество вхождений элемента в момент, когда Артёмка обращается к мультимножеству, то есть дальнейшие действия Артёмки не влияют на ответ на данный запрос.

    Помогите Артёмке реализовать мультимножество для путешественников во времени.

    Входные данные

    Первая строка входных данных содержит единственно целое число n (1 ≤ n ≤ 100 000) — число запросов Артёмки.

    Следующие n строк содержат по одному запросу. Каждая из них содержит три целых числа ai, ti и xi (1 ≤ ai ≤ 3, 1 ≤ ti, xi ≤ 109) — тип запроса, момент времени, в который отравляется Артёмка, и число, определяющее сам запрос, соответственно. Гарантируется, что все моменты времени различны и что после каждой операции все операции удаления действительно удаляют какой-то элемент из мультимножества.

    Выходные данные

    Для каждого запроса третьего типа выведите ответ на него в тот момент, когда Артёмка его совершает.

    G. Выбор рекламы

    Структуры данных *3200

    Один разработчик социальной сети недавно предложил новый алгоритм выбора рекламных объявлений для показа пользователям.

    Рекламодателям доступно n слотов, которые они могут купить. За один раз можно выкупить некоторый отрезок слотов. Причём чем больше длина отрезка, тем больше вероятность того, что рекламу покажут пользователю.

    Каждый раз, когда решается, какую рекламу показать, секретным образом генерируется некоторый отрезок слотов. Далее выбираются некоторые рекламодатели, чья реклама будет показана. Причем если рекламодатель владеет хотя бы p% всех слотов на этом отрезке, то его рекламу точно покажут.

    С другой стороны пользователям не нравится, когда им показывают много рекламы. Поэтому было решено не показывать больше рекламных объявлений за раз. Вам предлагается помочь разработать систему, выбирающую рекламу в соответствии с описанным алгоритмом.

    Входные данные

    В первой строке входных данных содержатся три целых числа n, m и p (1 ≤ n, m ≤ 150 000, 20 ≤ p ≤ 100) — количество рекламных слотов, количество запросов, которые поступили вашей системе, и порог, при котором обязательно показать объявление рекламодателя.

    В следующей строке содержатся n целых чисел ai (1 ≤ ai ≤ 150 000), где i-е число обозначает номер рекламодателя, который сейчас владеет i-м слотом.

    В следующих m строках содержатся описания запросов. Каждый из них записан одним из двух способов:

    • 1 l r id (1 ≤ l ≤ r ≤ n, 1 ≤ id ≤ 150 000) — рекламодатель с номером id выкупил слоты с l по r включительно;
    • 2 l r (1 ≤ l ≤ r) — необходимо выбрать рекламодателей для отрезка [l, r].
    Выходные данные

    Для каждого запроса второго типа в отдельной строке нужно вывести любой подходящий набор рекламных объявлений. Вначале должно быть записано количество объявлений, которые будут показаны , а затем cnt номеров рекламодателей.

    Разрешается выводить одного и того же рекламодателя несколько раз, но каждый рекламодатель, который владеет хотя бы слотами на отрезке с l по r, должен присутствовать в ответе.

    Примечание

    Пример из условия демонстрирует, что у вас есть достаточно большая свобода в выборе рекламодателей.

    B. Обработка запросов

    *особая задача Конструктив Структуры данных *1700

    В этой задаче от вас требуется промоделировать поведение однопоточного сервера. Серверу поступят n запросов, для каждого из которых дан момент поступления ti и продолжительность обработки di. Известно, что все ti различны.

    При поступлении нового запроса сервер может совершить одно из трёх действий:

    1. Если сервер свободен и очередь запросов пуста, то новый запрос сразу начинает выполняться.
    2. Если сервер занят и в очереди находится строго меньше b запросов, ожидающих выполнения, то новый запрос добавляется в конец очереди.
    3. Если сервер занят и в очереди находится ровно b запросов, ожидающих выполнения, то новый запрос отклоняется и выполнен уже не будет.

    Как только сервер заканчивает обрабатывать очередной запрос, он переходит к следующему из очереди, если она не пуста. Считайте, что если какой-то запрос пришёл в момент времени x, и в этот же момент времени сервер освободился и очередь не пуста, то сначала начнёт обрабатываться запрос из очереди, а затем произойдет появление нового запроса.

    Для каждого запроса найдите момент окончания его обработки или выведите для него -1, если он будет отклонён.

    Входные данные

    В первой строке входных данных содержатся целые числа n и b (1 ≤ n, b ≤ 200 000) — количество запросов и максимальный размер очереди соответственно.

    Далее в n строках заданы описания запросов в хронологическом порядке. Каждое описание запроса записано на отдельной строке и состоит из двух целых чисел ti и di (1 ≤ ti, di ≤ 109), где ti — момент поступления i-го запроса, а di — продолжительность его обработки. Значения ti строго возрастают, то есть ti - 1 < ti для всех i > 1.

    Выходные данные

    Выведите последовательность n целых чисел e1, e2, ..., en, где ei — момент окончания обработки i-го запроса (нумерация в порядке поступления) или  - 1, если i-й запрос будет проигнорирован.

    Примечание

    Рассмотрим первый пример.

    1. Первый запрос начнёт обрабатываться сервером в момент времени 2, и сервер закончит его обработку в момент времени 11.
    2. За это время поступит второй запрос (в момент времени 4), но так как сервер будет занят, то этот запрос попадёт в очередь.
    3. В момент времени 10 (сервер все еще будет занят обработкой первого запроса) поступит третий запрос, но так как максимальный размер очереди равен 1 и в очереди уже будет находится второй запрос, то третий запрос будет отклонён.
    4. В момент времени 11 второй запрос будет взят из очереди и начнёт обрабатываться.
    5. В момент времени 15 поступит четвёртый запрос. Поскольку сервер занят, а очередь пуста, то запрос будет добавлен в очередь.
    6. В момент времени 19 происходят одновременно два события: сервер заканчивает обрабатывать второй запрос и поступает пятый запрос. Сначала будет завершена обработка второго запроса, затем запрос четыре будет изъят из очереди и отправлен на обработку, а потом в очередь будет добавлен запрос номер 5.
    7. Сервер закончит обработку четвертого запроса в момент времени 21. Из очереди будет извлечён пятый запрос.
    8. Сервер закончит обработку пятого запроса в момент времени 22.

    C. Псевдонимы серверов

    *особая задача Бинарный поиск реализация сортировки Строки Структуры данных *2100

    Существуют веб-сайты, доступные сразу по нескольким адресам. Например, долгое время на страницы Codeforces можно было заходить как используя хостнейм cf.m27.workers.dev, так и codeforces.ru.

    Вам задан список адресов страниц. Для упрощения будем считать, что все адреса имеют вид: http://<hostname>[/<path>], где:

    • <hostname> — имя сервера (состоит из слов, возможно, разделённых точками),
    • /<path> — необязательная часть, где <path> состоит из слов, разделённых слешами.

    Будем считать, что два <hostname> соответствуют одному и тому же веб-сайту, если для каждого запроса к первому <hostname> найдется такой же запрос ко второму и наоборот — для каждого запроса ко второму <hostname> найдется такой же запрос к первому. Изучите примеры из условия для лучшего понимания этого определения.

    Выделите все группы имён серверов, которые соответствуют одному сайту. Игнорируйте группы, которые состоят ровно из одного имени сервера.

    Обратите внимание, что формально два запроса http://<hostname> и http://<hostname>/ различаются.

    Входные данные

    В первой строке записано целое число n (1 ≤ n ≤ 100 000) — количество адресов страниц. В следующих строках записаны адреса страниц по одному в строке. Каждый адрес имеет вид http://<hostname>[/<path>], где:

    • <hostname> состоит из строчных букв латинского алфавита и точек, никакие две точки не идут подряд, точки не начинают и не заканчивают <hostname>. Длина <hostname> положительна и не превосходит 20 символов;
    • <path> состоит из строчных букв латинского алфавита, точек и слешей, никакие два слеша не идут подряд, <path> не начинается со слеша, длина <path> не превосходит 20 символов.

    Адреса страниц не обязательно различны.

    Выходные данные

    В первую строку выведите k — количество групп имен серверов, которые соответствуют одному сайту. Следует учитывать только такие группы, размер которых строго больше единицы.

    Далее в k строках выведите группы по одной в строке. Для каждой группы выведите все имена серверов в ней через пробел. Как группы, так и имена серверов в группе можно выводить в любом порядке.

    D. Собачки и миски

    жадные алгоритмы сортировки Структуры данных *1900

    На координатной прямой сидит n собачек, i-я собачка находится в точке xi. Кроме того, на прямой есть m мисок с едой, для каждой известна её координата на прямой uj и время tj, через которое еда в миске остынет и станет невкусной. Это значит, что если собачка прибежит к миске в момент времени, строго больший tj, то еда уже остынет, и собачка кушать её не станет.

    Считая, что каждая собачка бежит со скоростью 1, найдите максимальное количество собачек, которые смогут покушать. Считайте, что собачки побегут к тем мискам, на которые вы им укажете. Из одной миски не могут кушать две или более собачки.

    Собачки могут обгонять друг друга, то есть, если одна из них остановится покушать, другая может пройти мимо неё, чтобы попасть к другой миске.

    Входные данные

    В первой строке находится пара целых чисел n и m (1 ≤ n, m ≤ 200 000) — количество собачек и мисок соответственно.

    Во второй строке находятся n целых чисел xi ( - 109 ≤ xi ≤ 109) — координата i-й собачки.

    В следующих m строках находятся пары целых чисел uj и tj ( - 109 ≤ uj ≤ 109, 1 ≤ tj ≤ 109) — координата j-й миски и время, когда остынет еда в ней, соответственно.

    Гарантируется, что никакие две собачки не находятся в одной точке. Никакие две миски также не могут находиться в одной точке.

    Выходные данные

    Выведите одно целое число a — максимальное количество собачек, которые смогут покушать.

    Примечание

    В первом примере первая собачка побежит направо к первой миске, третья собачка сразу начнёт есть из второй миски, четвёртая собачка побежит влево к третьей миске, а пятая собачка побежит влево к четвёртой миске.

    E. Автобус

    Бинарный поиск жадные алгоритмы сортировки Структуры данных *2100

    Вдоль дороги стоят n путешественников. Дорога представляет собой прямую, размерами путешественников можно пренебречь, считая их точками.

    Водитель автобуса Василий, благодаря мобильному приложению, знает для каждого путешественника точку xi, в которой тот стоит. Кроме того, он знает расстояние di, которое i-й путешественник хочет проехать на автобусе. Таким образом, i-й путешественник планирует выйти из автобуса в точке xi + di. Теперь Василий хочет решить, кого из путешественников он подвезёт, а кого оставит пылиться у дороги.

    Василий решил, что сегодня он должен хорошо заработать, поэтому решил перевезти в точности a путешественников. В автопарке есть автобусы любых видов. Чем больше мест в автобусе, тем дороже стоит его аренда.

    Помогите Василию определить минимальное количество пассажирских мест в автобусе, которых будет достаточно для перевозки ровно a путешественников. Ни в какой момент времени в автобусе не может быть путешественников больше, чем количество пассажирских мест в автобусе. Василий сам может решить какое конкретно подмножество из a путешественников он перевезёт на автобусе.

    Считайте, что автобус всегда едет слева направо (от меньших координат к большим) и начинает свой путь левее самого левостоящего путешественника. Если в одной точке какой-то путешественник должен выйти из автобуса, а другой войти, считайте, что сначала произойдет выход одного путешественника из автобуса, а затем другой путешественник сможет зайти в автобус.

    Входные данные

    В первой строке входных данных следует два целых положительных числа n и a (1 ≤ a ≤ n ≤ 200 000) — количество путешественников, стоящих вдоль дороги, и минимальное количество путешественников, которых Василий хочет подвезти.

    В каждой из следующих n строк содержится по два целых числа xi и di (1 ≤ xi, di ≤ 109) — координата, в которой находится i-й путешественник, а также расстояние, на которое он хочет переместиться на автобусе. Координаты путешественников заданы в произвольном порядке. В одной точке могут находиться несколько путешественников.

    Выходные данные

    Сначала выведите одно целое число — минимальное количество пассажирских мест в автобусе, которых будет достаточно для перевозки хотя бы a путешественников.

    Затем выведите a целых чисел — номера путешественников, которых подвезёт Василий. Путешественники нумеруются, начиная с единицы, в том порядке, в котором заданы во входных данных. Номера можно выводить в произвольном порядке. Если ответов несколько, разрешается вывести любой из них.

    Примечание

    В первом тестовом примере достаточно одноместного автобуса. К примеру, Василий может подвезти третьего и первого путешественников, либо второго и первого путешественников.

    A. Хранители

    геометрия математика Структуры данных *1400

    Хранители в опасности, и Доктор Манхэттен со своим другом Дэниелом Драйбергом должны срочно их предупредить. Всего в команде хранителей n человек, i-й из которых находится в точке плоскости с координатами (xi, yi).

    Как всем известно, доктор Манхэттен вычисляет расстояние между двумя хранителями i и j по формуле |xi - xj| + |yi - yj|. Дэниел, как обычный человек, считает, что расстояние равно .

    Сейчас успех операции зависит от того, сколько существует пар (i, j) (1 ≤ i < j ≤ n), таких что расстояние между хранителем i и хранителем j, вычисленное Доктором Манхэттеном, равняется расстоянию между ними, вычисленному Дэниелом. Вычислить эту величину попросили именно вас.

    Входные данные

    В первой строке входных данных записано число n (1 ≤ n ≤ 200 000) — количество хранителей.

    В каждой из следующих n строк записаны два целых числа xi и yi (|xi|, |yi| ≤ 109).

    Некоторые позиции могут совпадать.

    Выходные данные

    Выведите количество пар хранителей, таких что расстояние между ними, вычисленное доктором Манхэттеном, равно расстоянию, вычисленному Дэниелом.

    Примечание

    В первом примере расстояние между хранителем 1 и хранителем 2 равняется |1 - 7| + |1 - 5| = 10 в понимании Доктора Манхэттена и в понимании Дэниела. Для пар (1, 1), (1, 5) и (7, 5), (1, 5) расстояния, вычисленные Доктором Манхэттеном и Дэниелом, совпадают.

    D. Канатная дорога

    Бинарный поиск дп Структуры данных хэши *2600

    Побывав недавно в лесу, Вася решил построить на деревьях канатную дорогу. Он хочет, чтобы дорога была как можно более длинной, но он плохо помнит высоты деревьев в лесу. К счастью, он уверен, что правильно помнит высоты всех деревьев, кроме, возможно, одного из них.

    Известно, что лес состоит из n деревьев, стоящих в ряд и пронумерованных слева направо числами от 1 до n. Высота i-го дерева, по воспоминаниям Васи, равна hi. Канатная дорога длины k должна опираться на k (1 ≤ k ≤ n) деревьев i1, i2, ..., ik (i1 < i2 < ... < ik), таких что их высота возрастает, то есть, hi1 < hi2 < ... < hik.

    Петя тоже был в лесу, и у него есть q предположений о том, где именно ошибается Вася. Его i-е предположение задаётся числами ai и bi, означающими, что, по мнению Пети, высота дерева с номером ai на самом деле равна bi. Обратите внимание, Петины предположения независимы между собой.

    Ваша задача состоит в том, чтобы для каждого предположения Пети найти максимальную длину канатной дороги, которую можно построить с опорой на эти деревья.

    Отметим, что в рамках данной задачи длиной дороги Вася считает количество опорных деревьев в ней.

    Входные данные

    Первая строка входных данных содержит два числа n и m (1 ≤ n, m ≤ 400 000) — количество деревьев в лесу и количество предположений Пети соответственно.

    В следующей строке содержатся n целых чисел hi (1 ≤ hi ≤ 109) — высоты деревьев по предположению Васи.

    Каждая из следующих m строк содержит по два целых числа ai и bi (1 ≤ ai ≤ n, 1 ≤ bi ≤ 109).

    Выходные данные

    Для каждого предположения Пети выведите в отдельной строке одно число — максимальную длину канатной дороги.

    Примечание

    Рассмотрим первый пример. Первое Петино предположение совпадает с предположением Васи. Согласно его второму предположению, высоты деревьев были (4, 2, 3, 4), третьему (1, 2, 3, 3), а по четвёртому предположению — (1, 2, 3, 5).

    E. Часовой механизм

    Деревья жадные алгоритмы поиск в глубину и подобное снм Структуры данных *3200

    Меня зовут Джим ди Гриз, я самый ловкий мошенник и авантюрист во всей галактике. По мотивам моих похождений написано множество книг, а ограблениям, совершённым мною, нет числа. Однако вы смогли застать меня в весьма неприятной ситуации.

    Не обнаружив себя перед камерами, перехитрив десяток охранников и обойдя множество ловушек, я смог добраться до желанного ящика с сокровищами. Отворив его крышку, я активировал бомбу с часовым механизмом, который уже отсчитывает секунды до неминуемого взрыва! К счастью, мне уже приходилось сталкиваться с бомбами подобной модели, и я знаю, что часовой механизм можно остановить, если правильно соединить проводами контакты на панели управления.

    Передо мной n контактов, соединённых n - 1 проводами. Контакты пронумерованы целыми числами от 1 до n. Бомба устроена таким образом, что если некоторый набор из k ≥ 2 контактов c1, c2, ..., ck соединён по циклу, то есть между парами контактов c1 и c2, c2 и c3, ..., ck и c1 есть k различных проводов, то срабатывает проверка безопасности, и заряд мгновенно детонирует, не оставляя от неудачливого взломщика и следа. В том числе, если два контакта соединены более чем одним проводом, то на них образуется цикл длины 2, и бомба также взрывается. Соединять контакт с самим собой запрещается.

    С другой стороны, если я отсоединю одновременно более чем один провод (иными словами, в какой-то момент времени будет подключено менее n - 2 проводов), то сработает другая проверка безопасности, которая приведёт к такому же плачевному результату. Таким образом, всё, что мне остаётся, это последовательно вытаскивать провод и вставлять его в новое место, следя, чтобы не образовалось цикла, связывающего контакты.

    Я знаю, как надо расположить провода, чтобы остановить часовой механизм. Но у меня остаётся всё меньше и меньше времени на это! Помогите мне выбраться из передряги: найдите кратчайшую последовательность безопасных операций, каждая из которых представляет собой отключение определённого провода и его подключение в новое место, а также выстраивает провода требуемым образом.

    Входные данные

    В первой строке входных данных находится число n (2 ≤ n ≤ 500 000) — количество контактов.

    В каждой из последующих n - 1 строках записана пара целых чисел xi, yi (1 ≤ xi, yi ≤ n, xi ≠ yi), обозначающих номера контактов, соединённых очередным проводом в данный момент времени.

    В последних n - 1 строках в аналогичном формате задаётся схема подключения проводов, останавливающая часовой механизм.

    Гарантируется, что обе заданных схемы корректны (то есть, не содержат циклов и проводов, соединяющих контакт с самим собой).

    Выходные данные

    В первой строке выведите число k (k ≥ 0) — минимальное количество проводов, которые потребуется переподключить.

    В последующих k строках выведите четвёрки чисел ai, bi, ci, di, означающих, что на i-м шаге нужно отсоединить провод, соединяющий контакты ai и bi, и соединить им контакты ci и di. Разумеется, к этому моменту времени провод между контактами ai и bi должен присутствовать на схеме.

    Если оптимальных последовательностей несколько, то выведите любую из них.

    Если требуемой последовательности операций не существует, выведите одно число -1.

    Примечание

    Картинка с пояснением к тестам из условия:

    D. Вложенные отрезки

    сортировки Структуры данных *1800

    Вам задано n отрезков на прямой таких, что никакие два конца никаких отрезков не совпадают. Определите для каждого отрезка, сколько отрезков лежит внутри него.

    Входные данные

    В первой строке записано единственное целое число n (1 ≤ n ≤ 2·105) — количество отрезков на прямой.

    В каждой из следующих n строк записаны два целых числа li и ri ( - 109 ≤ li < ri ≤ 109) — координаты левой и правой границ i-го отрезка. Гарантируется, что никакие концы никаких отрезков не совпадают.

    Выходные данные

    Выведите n строк. j-ая строка должна содержать единственное целое число aj — количество отрезков, находящихся внутри j-ого отрезка.

    F. Бумажная работа

    Строки строковые суфф. структуры Структуры данных *2600

    Саша спокойной программировал, пока к нему не подошла Валентина и не попросила объяснить, зачем в коде нужны все эти круглые скобки. Он объяснил ей их назначение в общих чертах и дал задание, чтобы успеть закончить работу в срок.

    В этой задаче мы будет рассматривать только строки, состоящие из открывающих и закрывающих круглых скобок, то есть символов «(» и «)».

    Последовательность скобок называется правильной в следующих случаях:

    1. Если она пустая;
    2. Если она состоит из правильной скобочной последовательности, заключённой между парой из открывающей скобки и закрывающей скобки;
    3. Если она состоит из двух правильных скобочных последовательностей, записанных одна за другой.

    Например, последовательности круглых скобок «()()» и «((()))(())» являются правильными, а «)(()», «(((((» и «())» — нет.

    Саша взял листок и написал на нём некоторую строку s, состоящую только из открывающих и закрывающих круглых скобок, и попросил Валентину посчитать количество различных непустых подстрок строки s, являющихся правильными скобочными последовательностями. Другими словами, её задача состоит в том, чтобы посчитать количество непустых правильных скобочных последовательностей, встречающихся в s в качестве подстроки (не путать с подпоследовательностью).

    Когда Валентина закончила выполнять задание, Саша вдруг осознал, что сам не знает ответа. Помогите ему не ударить в грязь лицом и решите задачу!

    Входные данные

    В первой строке входных данных записано целое число n (1 ≤ n ≤ 500 000) — длина строки s.

    Во второй строке записана строка s длины n, состоящая только из символов «(» и «)».

    Выходные данные

    Выведите количество различных непустых правильных скобочных последовательностей, встречающихся в s в качестве подстроки.

    Примечание

    В первой примере существует 5 различных подстрок, которые следует посчитать: «()», «()()», «()()()», «()()()()» и «()()()()()».

    Во втором примере подходят 3 различные подстроки: «()», «(())» и «(())()».

    E. Новая реформа

    графы жадные алгоритмы поиск в глубину и подобное снм Структуры данных *1600

    В Берляндии есть n городов, соединённых m двусторонними дорогами. Дороги не могут соединять город с самим собой, и каждая пара городов соединяется не более чем одной дорогой. Не гарантируется, что из любого города можно доехать до любого другого, используя только имеющиеся дороги.

    Президент Берляндии решил внести изменения в систему дорожных путей и дал указание министерству транспорта заняться данной реформой. Теперь каждая дорога должна стать односторонней (вести только из одного города в другой).

    Чтобы не вызвать большого недовольства у жителей, необходимо провести реформу так, чтобы оставалось как можно меньше обособленных городов. Город считается обособленным, если в него не входит ни одна дорога, при этом выходящие из этого города дороги допустимы.

    Помогите министерству транспорта найти минимальное количество обособленных городов после проведения реформы.

    Входные данные

    В первой строке входных данных следуют два целых положительных числа n и m — количество городов и дорог в Берляндии (2 ≤ n ≤ 100 000, 1 ≤ m ≤ 100 000).

    В следующих m строках содержатся описания дорог: i-я дорога задаётся двумя различными целыми числами xi, yi (1 ≤ xi, yi ≤ n, xi ≠ yi), где xi и yi равны номерам городов, которые соединяет i-я дорога.

    Гарантируется, что между каждой парой городов не может быть более одной дороги, но не гарантируется, что из любого города можно доехать до любого другого, используя только дороги.

    Выходные данные

    Выведите единственное число — минимальное количество обособленных городов после проведения реформы.

    Примечание

    В первом примере допустима следующая ориентация дорог: , , .

    Во втором примере: , , , , .

    В третьем примере: , , , , .

    C. Петя и файловая система

    реализация Структуры данных *1800

    Недавно на занятии по программированию маленький Петя показывал, как он умеет быстро создавать файлы и папки на компьютере. Но скоро это занятие ему надоело, и он решил заняться куда более полезным делом: он решил подсчитать, в какой папке больше всего подпапок (включая вложенные папки, папки во вложенных папках, и так далее) и в какой папке больше всего файлов (включая файлы в подпапках).

    Более формально, подпапками данной папки являются все папки, лежащие в ней, а так же подпапки всех этих папок. При этом сама данная папка не считается своей подпапкой. Файл считается лежащим в папке тогда и только тогда, когда он либо непосредственно лежит в данной папке, либо лежит в какой-то из подпапок данной папки.

    Для лучшего понимания того, как учитываются вложенные папки и вложенные файлы, смотрите пояснения и ответы к примерам.

    Дано несколько файлов, которые успел создать Петя. Путь к каждому файлу имеет вид:

    diskName:\folder1\folder2\...\foldern\fileName

    • diskName — это одна большая латинская буква из множества {C,D,E,F,G}
    • folder1, ..., foldern — названия папок, при этом каждое из названий папок — непустая последовательность из строчных латинских букв и цифр от 0 до 9. (n ≥ 1)
    • fileName — имя файла в виде name.extension, где name и extension — непустые последовательности из строчных латинских букв и цифр от 0 до 9.

    Также известно, что нет файлов, путь к которым имеет вид diskName:\fileName. То есть, каждый файл лежит в какой-то папке, а непосредственно в корне диска файлов нет. То есть мы считаем, что диск не является папкой.

    Помогите Пете — найдите наибольшее число подпапок, которое может быть в какой-либо папке, и наибольшее число файлов, которое может быть в какой-либо папке, считая все ее подпапки.

    Входные данные

    В каждой строке входных данных записано описание одного пути к файлу. Длина каждой из строк не превосходит 100, при этом всего строк не более 100. Гарантируется, что все пути корректны и соответствуют описанным выше правилам. Также, гарантируется, что во входных данных нет двух полностью одинаковых строк, то есть каждый файл описан ровно один раз.

    Во входных данных содержится хотя бы один путь.

    Выходные данные

    Выведите два числа через пробел. Первое — максимальное количество возможных подпапок у папки (включая вложенные папки и папки во вложенных папках) и второе — максимальное количество файлов в папке (включая вложенные файлы во вложенных папках). Заметим, что диски не считаются папками.

    Примечание

    В первом примере имеем одну папку на диске С. Подпапок у нее нет, поэтому первое число ответа — это 0. Но в этой папке лежит один файл, поэтому второе число ответа — это 1.

    Во втором примере у нас есть несколько разных папок. Рассмотрим папку folder1 на диске С. Непосредственно в этой папке находится одна папка: folder2, а в папке folder2, находится еще две папки — folder3 и folder4. Таким образом, у папки folder1 на диске С есть ровно 3 подпапки. Также в этой папке есть два файла, хоть они и не лежат непосредственно в самой папке, но они находятся в подпапках folder1.

    В третьем примере, мы имеем, что названия некоторых папок и некоторых подпапок совпадают. Рассмотрим папку file, которая лежит непосредственно на диске С. В этой папке лежит еще одна папка file, в которой в свою очередь лежит еще одна папка file, в которой лежат еще две папки — file и file2. Таким образом, в папке file, лежащей прямо на диске С содержится 4 подпапки.

    E. Петя и почта

    дп Структуры данных *2000

    Дядя маленького Пети работает почтальоном. Почтовые отделения расположены на одной кольцевой дороге, при этом возле каждого почтового отделения есть своя собственная заправочная станция. Работа Петиного дяди заключается в следующем: утром он должен выйти из дома и пойти к какому-нибудь почтовому отделению. В отделении он получает порцию писем и машину. Далее, он должен проехать на полученной машине ровно один круг по кольцевой дороге и вернуться к стартовому почтовому отделению (дядя может проехать круг в любом направлении, как против направления часовой стрелки, так и по направлению часовой стрелки). При этом, так как машина принадлежит почте города, то и заправляться бензином она должна лишь на станциях, принадлежащих почтовым отделениям.

    Всего станций ровно n, и на i-ой станции машину можно заправить не более чем на ai литров бензина. При этом на каждой станции можно заправляться не более одного раза. Расстояние между 1-ой и 2-ой станцией составляет b1 километров, между 2-ой и 3-ей — b2 километров, ..., между (n - 1)-ой и n-ой — bn - 1 километров и между n-ой и 1-ой — bn километров. Высокотехнологичная машина Петиного дяди расходует лишь один литр бензина на один километр. Известно, что станции расположены так, что сумма всех ai равна сумме всех bi. Считается, что i-ая заправочная станция и i-ое почтовое отделение находятся очень близко, поэтому расстояние между ними — 0 километров.

    Таким образом, становится понятно, что если стартовать с некоторых почтовых отделений, то не всегда можно проехать один круг по кольцевой дороге. Перед дядей появилась задача: узнать, на какие станции он может пойти утром, чтобы можно было проехать ровно один круг по кольцевой дороге и посетить все почтовые отделения, находящиеся на ней.

    Петя посещает кружок по программированию, и он вызвался помочь дяде, но его знаний оказалось недостаточно, поэтому он просит вас помочь написать программу, которая решает поставленную задачу.

    Входные данные

    В первой строке записано целое число n (1 ≤ n ≤ 105). Во второй строке записано n целых чисел ai — на сколько литров бензина можно заправить машину на i-ой станции. В третьей строке записано n целых чисел b1, b2, ..., bn — расстояния между 1-ой и 2-ой заправочными станциями, 2-ой и 3-ей, ..., n-ой и 1-ой соответственно. Сумма всех bi равняется сумме всех ai и не превосходит 109. Каждое из чисел ai, bi не меньше чем 1 и не больше чем 109.

    Выходные данные

    В первой строке выведите число k — количество возможных почтовых отделений, начиная с которых машина может проехать один круг по кольцевой дороге. Во второй строке выведите k чисел в порядке возрастания — номера почтовых отделений, с которых можно стартовать.

    F. Медведь и боулинг 4

    Бинарный поиск геометрия разделяй и властвуй Структуры данных Тернарный поиск *2500

    Лимак — старый бурый медведь. Он часто играет в боулинг со своими друзьями. Сегодня он в отличном настроении и хочет побить свой собственный рекорд!

    За каждый бросок даётся некоторое целое (возможно отрицательное) количество очков. Очки за i-й бросок умножаются на число i и прибавляются к общей сумме. Таким образом, за k бросков с очками s1, s2, ..., sk в сумме даётся очков. Если бросков не было, общее количество очков равно 0.

    Лимак сделал n бросков и получил ai очков за i-й бросок. Он хочет максимизировать общее количество очков, поэтому ему в голову пришла интересная идея. Он может сказать, что некоторое количество первых бросков он разогревался и был рассредоточен во время некоторого количества последних бросков. Формально он может выкинуть некоторый префикс и некоторый суффикс последовательности очков a1, a2, ..., an. Разрешается выкидывать из рассмотрения все броски или же не выкидывать из вовсе.

    Общее количество очков вычисляется как будто выкинутых бросков не было. Таким образом, за первый невыкинутый бросок количество очков умножается на 1, за второй — на 2 и так далее до последнего невыкинутого броска.

    Какое максимальное количество очков может получить Лимак?

    Входные данные

    В первой строке находится целое число n (1 ≤ n ≤ 2·105) — общее количество бросков, сделанных Лимаком.

    Во второй строке находятся n целых чисел a1, a2, ..., an (|ai| ≤ 107) — очки полученные Лимаком.

    Выходные данные

    Выведите максимальное суммарное количество очков, которое можно получить выкидыванием некоторых бросков.

    Примечание

    В первом примере Лимак должен выкинуть из рассмотрения первые два и последний броски. После этого останутся броски 1,  - 3, 7, которые принесут ему 1·1 + 2·( - 3) + 3·7 = 1 - 6 + 21 = 16 очков.

    E. Красивые подмассивы

    Деревья разделяй и властвуй Строки Структуры данных *2100

    Однажды ZSCoder выписал массив целых чисел a с элементами a1, a2, ..., an.

    Будем называть подмассивом массива a последовательность al, al + 1, ..., ar для некоторой пары целых чисел (l, r) таких, что 1 ≤ l ≤ r ≤ n. ZSCoder считает подмассив красивым, если значение операции побитового исключающего или (xor) по всем элементам подмассива не меньше k.

    Помогите ZSCoder-у найти количество красивых подмассивов массива a!

    Входные данные

    В первой строке находится пара целых чисел n и k (1 ≤ n ≤ 106, 1 ≤ k ≤ 109) — количество элементов в массиве a и значение параметра k.

    Во второй строке находятся n целых чисел ai (0 ≤ ai ≤ 109) — элементы массива a.

    Выходные данные

    Выведите одно целое число c — количество красивых подмассивов массива a.

    F. Четыре делителя

    дп математика сортировки Структуры данных теория чисел *2400

    Если число a делится на число b, то b называется делителем числа a.

    К примеру, у числа 12 есть 6 положительных делителей. Это числа 1, 2, 3, 4, 6 и 12.

    Определим функцию D(n) — количество чисел от 1 до n (включительно), которые имеют ровно четыре положительных делителя.

    Между числами 1 и 10 только числа 6, 8 и 10 имеют четыре положительных делителя. Таким образом, D(10) = 3.

    Вам задано число n. Найдите значение D(n).

    Входные данные

    В единственной строке находится целое число n (1 ≤ n ≤ 1011) — параметр из условия задачи.

    Выходные данные

    Выведите единственное целое число c — количество чисел от 1 до n (включительно) с ровно четырьмя положительными делителями.

    E. Судебная экспертиза

    строковые суфф. структуры Структуры данных *3100

    Государство Ребляндия является заклятым врагом Берляндии на политической карте мира. Буквально на днях власти Берляндии арестовали ребляндского шпиона, пытавшегося несанкционированно провезти на территорию Берляндии различные листовки, предназначенные для агитационной пропаганды и подрыва морали населения. Многие из них содержат подстроки Абсолютно Недопустимого Ругательства, а возможно даже (страшно подумать!) это слово целиком.

    Для определения степени вины в берляндской правовой системе используется достаточно сложный алгоритм, который мы не будет приводить в этой задаче целиком. Скажем лишь, что частью экспертизы является следующая процедура.

    Каждой из m листовок, провезённых шпионом через границу, присваивается порядковый номер от 1 до m. После этого необходимо получить ответы на q запросов следующего вида: «В какой из листовок из диапазона номеров [l, r] подстрока Абсолютно Недопустимого Ругательства [pl, pr] встречается чаще всего?».

    Так как в этот раз тексты листовок оказались очень большими, эксперт попросил вас автоматизировать эту часть анализа данных. Помогите ему!

    Входные данные

    В первой строке находится строка s (1 ≤ |s| ≤ 5·105) — Абсолютно Недопустимое Ругательство. Строка s состоит только из строчных букв английского алфавита.

    Во второй строке входных данных находится единственное целое число m (1 ≤ m ≤ 5·104) — количество текстов листовок для экспертизы.

    Следующие m строк содержат ровно одну строку tii-й текст листовки. Суммарная длина текстов листовок для экспертизы не превосходит 5·104. Тексты листовок состоят только из строчных букв английского алфавита.

    В следующей строке находится целое число q (1 ≤ q ≤ 5·105) — количество запросов, ответы к которым нужны для проведения экспертизы.

    Наконец, следующие q строк содержат по четыре целых числа l, r, pl, pr (1 ≤ l ≤ r ≤ m, 1 ≤ pl ≤ pr ≤ |s|), где |s| — длина Абсолютно Недопустимого Ругательства.

    Выходные данные

    Выведите q строк, i-я строка должна содержать два целых числа — номер текста, на котором достигается максимум и число вхождений в этот текст подстроки [pl, pr] строки s. Если возможных номеров текстов несколько, выведите наименьший.

    D. Оптический эксперимент

    Бинарный поиск дп Структуры данных *1900

    Профессор Фансак Ванду провел некоторые оптические эксперименты на лучах света. Установка для проведения эксперимента для n лучей выглядит следующим образом.

    Есть прямоугольная коробка, в которой ровно n отверстий на противоположных гранях. Все лучи проникают сквозь отверстия с первой стороны и выходят из отверстий с другой стороны коробки. Ровно один луч может проникать через каждое отверстие или выходить из него. Отверстия на каждой грани лежат на одной прямой, а сами грани параллельны и симметричны друг другу.

    Профессор Ванду продемонстрировал ученикам свои эксперименты. Он показал, что есть случаи, когда все лучи пересекаются всеми остальными лучами. Один любопытный ученик спросил: "Профессор, есть некоторые группы лучей, в которых все лучи в данной группе пересекают все остальные лучи в данной группе. Можем ли мы определить количество лучей в наибольшей из таких групп?".

    И вот профессор Ванду в затруднении. Зная ваш интеллект, он просит вас помочь ему.

    Входные данные

    Первая строка содержит n (1 ≤ n ≤ 106), количество лучей. Вторая строка содержит n различных целых чисел: i-ое целое число xi (1 ≤ xi ≤ n) показывает, что xi-ый луч проходит через i-ое отверстие. Подобным образом, третья строка содержит n различных целых чисел: i-ое целое число yi (1 ≤ yi ≤ n) показывает, что yi-ый луч исходит из i-го отверстия. Все лучи пронумерованы от 1 до n.

    Выходные данные

    Выходные данный содержат единственное целое число — количество лучей в наибольшей группе лучей, в которой все пересекают друг друга.

    Примечание

    Рисунок для первого теста показан выше. В первом тесте следует вывести 3, так как лучи номер 1, 4 и 3 пересекаются друг с другом, то есть 1 пересекает 4 и 3, 3 пересекает 4 и 1, а 4 пересекает 1 и 3. Таким образом, каждый луч в данной группе пересекается другим лучом. Не существует группы, содержащей более трёх лучей, которая удовлетворяла бы вышеприведенному ограничению.

    E. Редактор правильных скобочных последовательностей

    снм Строки Структуры данных *1700

    Недавно Поликарп взялся за разработку текстового редактора правильных скобочных последовательностей (сокращенно ПСП). Напомним, что скобочная последовательность называется правильной, если путем вставки в нее символов «+» и «1» можно получить из нее корректное математическое выражение. Например, последовательности «(())()», «()» и «(()(()))» — правильные, в то время как «)(», «(()» и «(()))(» — нет. Каждая скобка в ПСП имеет парную ей. Например, в «(()(()))»:

    • для 1-й скобки — парная 8-я,
    • для 2-й скобки — парная 3-я,
    • для 3-й скобки — парная 2-я,
    • для 4-й скобки — парная 7-я,
    • для 5-й скобки — парная 6-я,
    • для 6-й скобки — парная 5-я,
    • для 7-й скобки — парная 4-я,
    • для 8-й скобки — парная 1-я.

    Редактор Поликарпа пока поддерживает лишь три операции при работе с ПСП. Курсор в редакторе занимает целиком позицию одной из скобок (а не позицию между скобками!). Вот три поддерживаемых операции:

    • «L» — передвинуть курсор влево на одну позицию,
    • «R» — передвинуть курсор вправо на одну позицию,
    • «D» — удалить скобку, в которой находится курсор, парную ей, а также все скобки между ними (то есть удалить подстроку от скобки до парной ей).

    После операции «D» курсор перемещается на ближайшую скобку вправо (конечно, среди неудалённых). Если такой нет, то есть был удалён суффикс строки, то на ближайшую скобку влево (конечно, среди неудалённых).

    Ниже приведены рисунки нескольких возможных вариантов операции «D».

    Всевозможные некорректные операции (сдвиг курсора за границы строки, удаление всей строки) пока Поликарпом не поддержаны.

    Поликарп очень гордится своей разработкой, а сможете ли вы реализовать функциональность его редактора?

    Входные данные

    В первой строке выходных данных следует три целых положительных числа n, m и p (2 ≤ n ≤ 500 000, 1 ≤ m ≤ 500 000, 1 ≤ p ≤ n) — количество скобок в правильной скобочной последовательности, количество операций, а также начальная позиция курсора. Позиции в последовательности нумеруются слева направо, начиная с единицы. Гарантируется, что n чётно.

    Далее следует строка из n символов «(» и «)» — правильная скобочная последовательность.

    Далее записана строка из m символов «L», «R» и «D» — последовательность операций. Операции выполняются по очереди одна за другой от первой до последней. Гарантируется, что заданные операции никогда не выведут курсор за пределы скобочной последовательности, а также то, что после выполнения всех операций скобочная последовательность останется непустой.

    Выходные данные

    Выведите правильную скобочную последовательность, полученную в результате выполнения всех операций.

    Примечание

    В первом тестовом примере изначально курсор находится в позиции 5. Рассмотрим действия редактора подробнее:

    1. команда «R» — курсор передвигается вправо в позицию 6;
    2. команда «D» — удаляются скобки с позиции 5 до позиции 6. После этого ПСП принимает вид (())(), курсор находится в позиции 5;
    3. команда «L» — курсор передвигается влево в позицию 4;
    4. команда «D» — удаляются скобки с позиции 1 до позиции 4. После этого ПСП принимает вид (), курсор находится в позиции 1.

    Таким образом, ответ равен ().

    C. Безграничная странность массива

    Структуры данных теория чисел *2800

    Ясину подарили массив a, состоящий из n целых чисел. Ясину только 5 лет, поэтому он любит разные странные вещи.

    Ясин называет странностью массива максимум gcd(ai,  aj) по всем 1 ≤ i < j ≤ n. Для n ≤ 1 странность массива полагается равной 0. gcd(x,  y) означает наибольший общий делитесь целых чисел x и y.

    Также он определяет безграничную странность массива. Безграничная странность равняется , где f(i,  j) равняется странности массива a, получаемого удалением всех элементов с i по j включительно, то есть массива [a1... ai - 1, aj + 1... an].

    Поскольку Ясину только 5 лет, и программировать он не умеет, он просит вас помочь ему вычислить безграничную странность данного массива a.

    Входные данные

    В первой строке входных данных записано целое число n (1 ≤ n ≤ 200 000) — количество элементов в массиве a.

    Далее следуют n целых чисел ai (1 ≤ ai ≤ 200 000), i-е из которых равно i-му элементу массива a. Гарантируется, что все числа ai различны.

    Выходные данные

    Выведите одно целое число — безграничную странность массива a.

    Примечание

    Рассмотрим первый пример.

    • f(1,  1) равняется 3.
    • f(2,  2) равняется 1.
    • f(3,  3) равняется 2.
    • f(1,  2), f(1,  3) и f(2,  3) равны 0.
    Таким образом, ответ равен 3 + 0 + 0 + 1 + 0 + 2 = 6.

    D. Дороги в Юсландии

    дп жадные алгоритмы Структуры данных *2900

    Мэр Юсландии только что выиграл в лотерею и хочет потратить свои деньги на что-нибудь полезное для города. Например, отремонтировать все дороги.

    Юсландия состоит из n перекрёстков, соединённых n - 1 двусторонней дорогой. Известно, что от любого перекрёстка можно добраться до любого другого, используя только данные дороги.

    В Юсландии есть только одна компания по ремонту дорог — «РД компани». Офис компании расположен в перекрёстке с номером 1. К сожалению, нельзя просто сказать компании РД, какие дороги дороги нужно отремонтировать. Вместо этого у компании есть m сотрудников, каждый из которых может отремонтировать дороги на некотором конкретном пути. Если заплатить i-му работнику ci монет, то он отремонтирует все дороги на пути от перекрёстка ui до некоторого перекрёстка vi, который находится на пути от ui до перекрёстка 1.

    Мэр просит вас нанять такое множество работников, чтобы стоимость ремонта дорог была минимальна. Разрешается, чтобы какая-нибудь дорога была отремонтирована несколько раз.

    Если невозможно отремонтировать все дороги, то выведите  - 1.

    Входные данные

    В первой строке входных данных записаны два числа n и m (1 ≤ n, m ≤ 300 000) — количество перекрёстков и количество работников соответственно.

    В каждой из следующих n - 1 строк записаны два целых числа xi и yi (1 ≤ xi, yi ≤ n) — индексы перекрёстков, соединённых i-й дорогой.

    Последующие m строк описывают работников, которые могут ремонтировать дороги. Каждое описание состоит из трёх целых чисел ui, vi и ci (1 ≤ ui, vi ≤ n, 1 ≤ ci ≤ 109), это означает, что i-й работник может отремонтировать все дороги на пути от ui до vi за ci монет. Гарантируется, что vi лежит на пути между перекрёстком ui и перекрёстком номер 1. Обратите внимание, что ui и vi могут совпадать.

    Выходные данные

    Если отремонтировать все дороги невозможно, то выведите  - 1. В противном случае выведите одно целое число — минимальную стоимость ремонта всех дорог.

    Примечание

    В первом примере можно выбрать работников с индексами 1, 3, 4 и 5. Некоторые дороги будут отремонтированы больше одного раза. Итоговая стоимость будет равна 2 + 3 + 1 + 2 = 8.

    E. Организация гонки

    жадные алгоритмы Структуры данных *3300

    Страна Кекляндия состоит из n прекрасных городов, пронумерованных слева направо числами от 1 до n. Города соединены n - 1 дорогой, при этом дорога номер i соединяет города i и i + 1, а её длина равняется wi километров.

    Каждая машина, попадающая в город i сразу получает gi литров бензина. Никакого другого способа получить бензин в Кекляндии не существует.

    Президент Кекляндии Кеко нанял вас организовать самую красивую гонку, которая когда-либо происходила в Кекляндии. Пусть гонка проходит между городами l и r (l ≤ r). Гонка будет состоять из двух этапов. На первом этапе машины едут из города l в город r. После этого, на следующий день машины едут из города r в город l. Разумеется, поскольку это гонка, то машины едут к цели напрямик, то есть на первом этапе едут только направо, а на втором этапе едут только налево. Красота гонки равняется r - l + 1, то есть количеству городов на каждом этапе. Топливный бак всех машин имеет бесконечный размер, так что гонщики всё время забирают весь бензин, который им дают.

    В начале каждого этапа гонщики начинают с пустым баков (0 литров бензина), но они сразу получают бензин, который выдают при попадании в стартовый город (то есть город l на первом этапе и город r на втором).

    Между некоторыми парами городов l и r гонку организовать не получится, поскольку у машины может кончится топливо до того, как она доедет до конца маршрута.

    У вас есть k подарков. Каждый раз, когда вы дарите подарок городу i, его значение gi увеличивается на 1. Подарки можно распределять между городами произвольным образом, в том числе дарить несколько подарков одному городу (каждый раз увеличивая gi на один). Какую самую красивую гонку можно организовать?

    Входные данные

    В первой строке входных данных записаны два числа n и k (2 ≤ n ≤ 100 000, 0 ≤ k ≤ 109) — количество городов в Кекляндии и количество подарков соответственно.

    В следующей строке записано n - 1 целое число. i-e из этих числе равно wi (1 ≤ wi ≤ 109) — длине дороги между городом i и i + 1.

    В последней строке записаны n целых чисел, i-е из которых равно gi (0 ≤ gi ≤ 109) — количеству бензина, которые выдаётся при прибытии в город i.

    Выходные данные

    Выведите одно целое число — максимально возможную красоту гонки.

    Примечание

    В первом примере вы можете дать один подарок каждому городу и тогда получится организовать гонку между городами 1 и 4.

    Во втором примере можно увеличить g5 на 1 и g6 на 4, тогда станет возможной гонка между городами 2 и 8.

    C. Денежные операции

    жадные алгоритмы Конструктив сортировки Структуры данных *2100

    В Васином городе есть n банков, расположенных по кругу так, что соседними являются банки, номера которых различаются на 1, а также банк номер 1 и банк номер n (если n > 1). При этом, сам себе банк соседом не является.

    В каждом банке у Васи есть счёт с каким-нибудь балансом. Заметим, что он может быть и отрицательным, если Вася должен банку.

    Васе доступна следующая операция: взять два соседних банка и перечислить со счёта в одном банке на счёт в другом любое количество денег. При этом нет никаких ограничений на размер переводимой суммы или текущее состояние счёта в любом из банков.

    Вася путается в больших числах, поэтому он просит вас определить, за какое минимальное количество операций он может обнулить сумму денег, лежащую на счёте в каждом из банков. Гарантируется, что Вася может это сделать, то есть суммарный баланс Васи по всем банкам равен нулю.

    Входные данные

    В первой строке входных данных записано единственное целое число n (1 ≤ n ≤ 100 000) — количество банков.

    Во второй строке записаны n целых чисел ai ( - 109 ≤ ai ≤ 109), i-е из которых определяет баланс Васи в i-м банке. Гарантируется, что сумма всех ai равна 0.

    Выходные данные

    Выведите минимальное количество операций, за которое Вася может обнулить баланс в каждом банке.

    Примечание

    В первом примере можно перечислить из первого банка в третий сумму 5.

    Во втором примере можно перечислить сначала из третьего банка во второй, а потом из второго в первый сумму 1.

    В третьем примере одним из оптимальных ответов является следующая последовательность действий:

    1. перечислить из первого банка во второй сумму 1;
    2. перечислить из второго банка в третий сумму 3;
    3. перечислить из третьего банка в четвертый сумму 6.

    D. Построение дерева

    Деревья Структуры данных *1800

    Васе задали по информатике сложную задачу. К сожалению, Вася не умеет программировать и не смог найти решение в Интернете. Поэтому он обратился за помощью к Вам.

    У нас есть последовательность \(a\) из \(n\) различных чисел, с помощью которой строится бинарное дерево поиска. Опишем правила построения формально.

    1. Первое число \(a_1\) становится корнем дерева.
    2. Последовательно добавляются все элементы \(a_2, a_3, \ldots, a_n\). При добавлении элемента \(a_i\) выполняется спуск по дереву от корня вниз, по следующим правилам:
      1. Изначально текущей вершиной является корень.
      2. Если значение \(a_i\) больше значения в текущем элементе, то правый сын текущей вершины становится текущей вершиной. В противном случае текущей вершиной становится левый сын.
      3. В момент когда требуемый переход в сына невозможен (то есть такой сын отсутствует) создаётся новая вершина, в которую записывается число \(a_i\). Эта вершина становится соответствующим сыном текущей вершины.
    Входные данные

    В первой строке входных данных записано целое число \(n\) (\(2 \leq n \leq 100\,000\)) — количество элементов в последовательности \(a\).

    Во второй строке записаны \(n\) различных целых чисел \(a_i\) (\(1 \leq a_i \leq 10^9\)) — исходная последовательность \(a\).

    Выходные данные

    Выведите \(n - 1\) число. Для всех \(i > 1\) выведите значение, записанное в вершине являющей предком вершины с числом \(a_i\).

    E. Электрички и статистика

    дп жадные алгоритмы Структуры данных *2300

    Вася каждый день ездит на электричке. В Васином городе есть n остановок, причём на i-й остановке можно купить билет до любой остановки от (i + 1)-й до ai-й. На конечной остановке билеты не продаются.

    Пусть ρi, j — минимальное количество билетов, которое нужно купить, чтобы добраться от i-й остановки до j-й. Вася любит собирать всякую бесполезную статистику, поэтому он просит вас найти сумму всех значений ρi, j по всем 1 ≤ i < j ≤ n.

    Входные данные

    В первой строке входных данных записано единственное целое число n (2 ≤ n ≤ 100 000) — количество остановок.

    Во второй строке записано n - 1 целое число ai (i + 1 ≤ ai ≤ n) — означающее, что на остановке i можно купить билет на электричку до любой остановки от i + 1 до ai включительно.

    Выходные данные

    Выведите сумму ρi, j по всем 1 ≤ i < j ≤ n.

    Примечание

    В первом примере от каждой остановки до каждой можно добраться, купив один билет. Всего пар остановок 6, поэтому ответ тоже равен 6.

    Во втором примере

    • ρ1, 2 = 1
    • ρ1, 3 = 2
    • ρ1, 4 = 3
    • ρ1, 5 = 3
    • ρ2, 3 = 1
    • ρ2, 4 = 2
    • ρ2, 5 = 2
    • ρ3, 4 = 1
    • ρ3, 5 = 1
    • ρ4, 5 = 1

    Ответ равен 1 + 2 + 3 + 3 + 1 + 2 + 2 + 1 + 1 + 1 = 17.

    D. Ваня и сокровище

    графы дп кратчайшие пути Структуры данных *2300

    Ваня оказался во дворце, который можно представить как таблицу из комнат размера n × m. В каждой комнате находится ровно один сундук, при этом в комнате в i-м ряду и j-м столбце находится сундук вида aij. При этом в каждом сундуке типа x ≤ p - 1 находится ключ, открывающий любой сундук типа x + 1, а все сундуки типа 1 не заперты. Сундук типа p ровно один, и в нём находится сокровище.

    Ваня начинает в клетке (1, 1) (верхний левый угол). Какое минимальное расстояние ему нужно пройти, чтобы получить сокровище? Считается, что расстояние между двумя клетками (r1, c1) (то есть клетки в строке r1 и столбце c1) и (r2, c2) равно |r1 - r2| + |c1 - c2|.

    Входные данные

    В первой строке входных данных записаны три числа n, m и p (1 ≤ n, m ≤ 300, 1 ≤ p ≤ n·m) — размеры дворца и количество типов сундуков соответственно.

    В каждой из последующих n строк находится по m целых чисел aij (1 ≤ aij ≤ p) — типы сундуков в соответствующих комнатах. Гарантируется, что для любого x от 1 до p найдётся хотя бы один сундук такого типа (то есть существуют r и c, такие что arc = x). Также гарантируется, что сундук типа p ровно один.

    Выходные данные

    Выведите единственное целое число — минимальное расстояние, которое потребуется преодолеть Ване, чтобы забрать сокровище из сундука типа p.

    F. Лена и запросы

    геометрия разделяй и властвуй Структуры данных *2500

    Лена — программист. На работе она получила задачу.

    Рассмотрим некоторое, изначально пустое множество пар целых чисел. Лене нужно обработать n запросов одного из трёх типов:

    1. Добавить пару чисел (a, b) в множество.
    2. Удалить пару чисел, добавленную в i-м запросе. Все запросы пронумерованы целыми числами от 1 до n.
    3. Для заданного целого числа q найти максимальное значение величины x·q + y среди всех пар (x, y) из множества.

    Помогите Лене обработать запросы.

    Входные данные

    В первой строке находится целое число n (1 ≤ n ≤ 3·105) — количество запросов.

    Каждая из следующих n строк начинается с целого числа t (1 ≤ t ≤ 3) — типа очередного запроса.

    Далее в запросах первого типа следует пара целых чисел a и b ( - 109 ≤ a, b ≤ 109).

    В запросах второго типа следует целое число i (1 ≤ i ≤ n). Гарантируется, что число i меньше номера текущего запроса, i-й запрос первого типа и пара из i-го запроса ещё не удалена.

    В запросах третьего типа следует целое число q ( - 109 ≤ q ≤ 109).

    Выходные данные

    Для запросов третьего типа выведите в отдельной строке искомое максимальное значение x·q + y.

    Если в множестве нет пар выведите "EMPTY SET".

    E. Медвежонок и плохие степени числа 42

    Структуры данных *3100

    Лимак — маленький медвежонок, и он плохо отвечает на запросы. Поэтому он просит вас о помощи.

    Назовём все неотрицательные целые степени числа 42 (то есть числа 1, 42, 1764, ...) плохими. Все остальные числа являются хорошими.

    Вам дана последовательность хороших целых чисел t1, t2, ..., tn. Требуется выполнить q запросов трёх видов:

    1. 1 i — выведите число ti на отдельной строке.
    2. 2 a b x — для всех присвоить ti = x. Гарантируется, что число x является хорошим.
    3. 3 a b x — для всех увеличить ti на x. Затем повторять этот процесс до тех пор, пока хотя бы одно число ti является плохим.

    Несложно заметить, что после выполнения каждого запроса, все числа ti являются хорошими.

    Входные данные

    В первой строке входных данных записаны два целых числа n и q (1 ≤ n, q ≤ 100 000) — длина последовательности Лимака и количество запросов соответственно.

    Во второй строке входных данных записаны n целых чисел t1, t2, ..., tn (2 ≤ ti ≤ 109) — изначальные элементы последовательности Лимака. Гарантируется, что все ti являются хорошими числами.

    Далее следуют q строк, описывающих запросы. В i-й из них содержится описание i-го запроса. Первое число каждой из этих строк определяет тип запроса typei (1 ≤ typei ≤ 3). Гарантируется, что во входных данных будет хотя бы один запрос первого типа, то есть корректные выходные данные будут непусты.

    Гарантируется, что во всех запросах второго и третьего типов 1 ≤ a ≤ b ≤ n.

    Гарантируется, что во всех запросах второго типа целое число x (2 ≤ x ≤ 109) является хорошим. В запросах третьего типа число x (1 ≤ x ≤ 109) может быть плохим.

    Выходные данные

    Для каждого запроса первого типа выведите ответ на отдельной строке.

    Примечание

    После запроса 3 2 4 42 последовательность равна 40, 1742, 49, 1714, 4, 1722.

    После запроса 3 2 6 50 последовательность равна 40, 1842, 149, 1814, 104, 1822.

    После запроса 2 3 4 41 последовательность равна 40, 1842, 41, 41, 104, 1822.

    После запроса 3 1 5 1 последовательность равна 43, 1845, 44, 44, 107, 1822.

    D. Дерево полураспада

    дп математика разделяй и властвуй Структуры данных Теория вероятностей *2500

    В последнее время Петя очень увлекся физикой. Анна Викторовна, его учительница, заметив Петину тягу к знаниям дала ему увлекательную физическую головоломку — дерево полураспада.

    Дерево полураспада представляет собой полное двоичное дерево высоты h. Высота двоичного дерева — максимум среди расстояний (в ребрах) от корня дерева до его листьев. В процессе изучения, Петя добавляет в его вершины электроны, а также вызывает случайный распад дерева с помощью синхрофазотрона. Случайным распадом называется процесс при котором вдоль пути от корня к случайному листку удаляются все ребра. Вероятности выбора листьев равны между собой. Естественно, так как казенное имущество портить ученикам воспрещается, после каждого такого распада Петя возвращает все удаленные ребра на место.

    Распавшись, дерево разлагается на компоненты связности. Зарядом такой компоненты называется суммарное количество электронов в вершинах, что принадлежат ей. Потенциалом разрушенного дерева называется максимальный заряд среди его компонент связности. Каждый раз вызывая случайный распад дерева, Петя предварительно хочет знать каково математическое ожидание потенциала дерева после его разрушения.

    Входные данные

    Первая строка будет содержать два целых числа h и q (1 ≤ h ≤ 30, 1 ≤ q ≤ 105). Далее идут q строк в каждой из которых будет запрос одного из двух типов:

    • add v e

      В вершину с номером v Петя добавляет e электронов (1 ≤ v ≤ 2h + 1 - 1, 0 ≤ e ≤ 104). v и e — целые числа.

      Вершины в дереве нумеруются следующим образом: корень имеет номер 1, потомки вершины x имеют номера 2x и 2x + 1.

    • decay

      Петя провоцирует распад дерева.

    Выходные данные

    Для каждого запроса decay следует вывести математическое ожидание потенциала дерева после его разрушения. Абсолютная или относительная погрешность ответа не должна превышать 10 - 4.

    C. Операции с кучей

    жадные алгоритмы Конструктив Структуры данных *1600

    Недавно Петя начал изучать структуру данных «Двоичная куча».

    Куча, с которой он работает, позволяет выполнять следующие операции:

    • добавить число в кучу;
    • узнать минимальное число в куче;
    • удалить минимальное число из кучи.

    Таким образом, в любой момент куча содержит в себе набор чисел (возможно, пустой), среди которых, возможно, есть одинаковые.

    Чтобы лучше запомнить материал, Петя взял пустую кучу и стал применять к ней различные операции. Он не хотел ничего упустить, поэтому все выполненные операции он аккуратно записывал в журнал в порядке их выполнения, соблюдая следующий формат:

    • insert x — в кучу было добавлено число x;
    • getMin x — был выполнен запрос минимума, результатом запроса было число x;
    • removeMin — из кучи было удалено текущее минимальное число (только одно вхождение).

    Последовательность операций была корректной, то есть на момент выполнения операций getMin и removeMin в куче находился хотя бы один элемент.

    Пока Петя обедал, его младший брат Вова забежал к нему в комнату и вырвал из журнала несколько случайных страниц, так как ему не из чего было строить бумажные кораблики.

    В какой-то момент Вова понял, что Петина последовательность операций могла стать некорректной. Например, если выполнять оставшиеся операции в том же порядке, в каком они были записаны, то результат операций getMin может не совпадать с результатом, записанным в журнале, а какие-то из операций getMin и removeMin вообще не могут быть выполнены, так как на момент их выполнения куча пуста.

    Теперь Вове нужно дописать в произвольные места в журнале какие-нибудь операции так, чтобы последовательность снова стала корректной, то есть чтобы результат всех операций getMin совпадал с результатом, записанным в журнале, и все операции могли быть корректно выполнены. Вова хочет сделать это как можно быстрее, пока Петя не вернулся с обеда, то есть дописать в журнал минимально возможное количество операций. Любую операцию разрешается дописывать в начало последовательности, между любыми двумя операциями или в конец последовательности операций.

    Помогите Вове решить эту проблему.

    Входные данные

    В первой строке входных данных записано число n (1 ≤ n ≤ 100 000) — количество записей, оставшихся в журнале Пети.

    В каждой из следующих n строк записана одна из оставшихся в журнале записей об операциях с кучей в формате, описанном выше. Все числа во входных данных целые и не превышают 109 по абсолютной величине.

    Выходные данные

    В первой строке выведите целое число m — минимальное количество операций в исправленной последовательности.

    В следующих m строках выведите эту последовательность операций по одной операции в каждой строке в формате, описанном выше. Все числа должны быть целыми и не превышать 109 по абсолютной величине.

    Обратите внимание, что исправленная последовательность должна содержать в себе последовательность операций из входных данных в качестве подпоследовательности.

    Гарантируется, что существует корректная последовательность операций, длина которой не превосходит 1 000 000.

    Примечание

    В первом примере после добавления в кучу числа 3 минимумом будет являться единственное число 3, и для того, чтобы результатом операции getMin было число 4, нужно удалить из кучи 3 (как минимум) и затем добавить 4.

    Во втором примере число 1 добавляется дважды, и удалить его нужно также дважды.

    B. Кай и снежинки

    Деревья дп поиск в глубину и подобное Структуры данных *1900

    После того как Каю в глаз попал осколок дьявольского зеркала, его уже не трогала красота роз. Зато он начал любоваться снежинками.

    Однажды в сад прилетела большая снежинка, имеющая форму корневого дерева (связного графа без циклов) на n вершинах. Корнем дерева является вершина номер 1. Кай очень заинтересовался его структурой.

    После долгого изучения Каю стали интересны ответы на некоторые запросы про q вершин. А именно: для i-го запроса ему интересно, какой номер имеет центроид поддерева vi-й вершины.

    Ваша задача — ответить на все запросы Кая.

    Поддеревом вершины называется часть дерева, состояющая из этой вершины, а также всех её потомков. Другими словами, поддерево вершины v состоит из таких вершин u, что v обязательно присутствует на пути от u до корня дерева.

    Центроидом дерева называется вершина, при удалении которой дерево развалится на компоненты связности, каждая из которых не превосходит по количеству вершин половину числа вершин исходного дерева.

    Входные данные

    В первой строке входных данных записаны два числа n и q (2 ≤ n ≤ 300 000, 1 ≤ q ≤ 300 000) — размер исходного дерева и количество запросов соответственно.

    Во второй строке записаны n - 1 число p2, p3, ..., pn (1 ≤ pi ≤ n) — номера предков вершин с номерами от 2 до n. Вершина 1 является корнем дерева. Гарантируется, что значения pi определяют корректное дерево.

    В каждой из последующих q строк записано одно целое число vi (1 ≤ vi ≤ n)  — номер вершины, в поддереве которой надо найти центроид.

    Выходные данные

    На каждый запрос выведите номер центроида соответствующего поддерева в отдельной строке. Если центроидов в поддереве несколько, выведите любой. Гарантируется, что у каждого поддерева заданного дерева есть хотя бы один центроид.

    Примечание

    Первый вопрос спрашивает о центроиде всего дерева — это вершина 3, её удаление оставит четыре компоненты связности, две размера 1 и две размера 2.

    Поддерево второй вершины состоит только из неё самой, поэтому ответ 2.

    Вершина 3 также является центроидом собственного поддерева.

    Центроидами поддерева 5 являются вершины 5 и 6 — оба этих ответа являются корректными.

    D. Разделение королевства II

    графы Перебор снм сортировки Структуры данных *2500

    Давным-давно существовало великое королевство, которым правили Великий Арий и Пари Великая. У этих двоих были некоторые разногласия по вопросу любимых чисел, поэтому они решили разделить королевство между собой.

    Великое королевство состояло из n городов, пронумерованных целыми числами от 1 до n, и m двунаправленных дорог, пронумерованных от 1 до m. Длина i-й из этих дорог равняется wi. Великий Арий и Пари Великая договорились уничтожить некоторый префикс дорог (все дороги с номером меньше некоторого x) и некоторый суффикс дорог (все дороги с номером больше некоторого x), оставив таким образом дороги с номерами l, l + 1, ..., r - 1 и r.

    После этого они разделят королевство на две части (каждый город отойдёт ровно к одной из двух частей), такие что трудность разделения будет минимальна. Трудностью разделения называется максимальная длина дороги, такой что оба её конца принадлежат одной части. В случае если таких дорог вообще нет, трудность разделения полагается равной  - 1.

    Историки обнаружили карту великого королевства и теперь обсуждают q возможных сценариев выбора параметров l и r великими правителями. По имеющимся данным для каждой гипотезы li, ri определите минимально возможную трудность разделения королевства.

    Входные данные

    В первой строке входных данных записаны три целых числа n, m и q (1 ≤ n, q ≤ 1000, ) — количество городов и дорог в великом королевстве и количество гипотез историков соответственно.

    В i-й из последующих m строк записаны три целых числа ui, vi и wi (1  ≤  ui,  vi  ≤  n, 0 ≤ wi ≤ 109), обозначающих, что дорога с номером i соединяет города ui и vi и имеет длину wi. Гарантируется, что никакая дорога не соединяет город с самим собой и никакие две дороги не соединяют одну и ту же пару городов.

    В каждой из последующих q строк записаны два целых числа li и ri (1  ≤ li ≤ ri ≤ m) — догадка историков об оставшихся в королевстве дорогах.

    Выходные данные

    Для каждой догадки историков выведите минимально возможную трудность разделения королевства.

    D. Друзья и последовательности

    Бинарный поиск Структуры данных *2100

    Майк и !Майк соперничают еще со школьных лет, они противоположны во всем что делают, кроме программирования. Сегодня у них возникла проблема, которую сами друзья сами решить не могут, но вместе с вами — кто знает?

    Каждый из них знает две последовательности n чисел a и b. По запросу в виде пары целых чисел (l, r) Майк может сразу сообщить значение , а !Майк — значение .

    Предположим, что робот задает им каждый из возможных различных запросов в виде пары целых чисел (l, r) (1 ≤ l ≤ r ≤ n) (то есть он сделает ровно n(n + 1) / 2 запросов) и считает, сколько раз их ответы на один и тот же запрос совпадают, то есть для скольких пар выполняется .

    Сколько случаев совпадения посчитает робот?

    Входные данные

    В первой строке содержится единственное целое число n (1 ≤ n ≤ 200 000).

    Во второй строке содержатся n целых чисел a1, a2, ..., an ( - 109 ≤ ai ≤ 109) — элементы последовательности a.

    В третьей строке содержатся n целых чисел b1, b2, ..., bn ( - 109 ≤ bi ≤ 109) — элементы последовательности b.

    Выходные данные

    Выведите одно целое число — количество совпадений ответов, которые посчитает робот, то есть для скольких пар выполняется .

    Примечание

    В первом примере входных данных всего два совпадения:

    1.l = 4,r = 4 since max{2} = min{2}.

    2.l = 4,r = 5 since max{2, 1} = min{2, 3}.

    Во втором примере входных данных совпадений не произойдет, так как ответ Майка на любой запрос всегда 3, в то время как !Майк всегда будет отвечать 1.

    E. Майк и геометрическая задача

    геометрия дп Комбинаторика реализация Структуры данных *2000

    Майк готовится к IMO, но плохо знаком с геометрией, поэтому его учитель дал ему занимательную геометрическую задачу. Пусть f([l, r]) = r - l + 1 — число целых точек в отрезке [l, r] (l ≤ r) (считаем, что ). Даны два числа n и k и n отрезков [li, ri] на оси Ox, и требуется посчитать

    Другими словами, требуется посчитать сумму количеств целых точек в каждом из возможных пересечений любых k отрезков.

    Так как искомое значение может быть очень большим, выведите его остаток от деления на 1000000007 (109 + 7).

    Майк затрудняется решить эту задачу и нуждается в вашей помощи. Вы же не откажете ему в этом, не так ли?

    Входные данные

    В первой строке содержатся два целых числа n и k (1 ≤ k ≤ n ≤ 200 000) — количество отрезков и количество отрезков в рассматриваемых группах пересечений.

    Затем следуют n строк, i-я из которых содержит два целых числа li, ri ( - 109 ≤ li ≤ ri ≤ 109), описывающих i-й отрезок.

    Выходные данные

    В единственной строке выведите одно целое число — ответ на задачу Майка по модулю 1000000007 (109 + 7).

    E. Подотрезки

    реализация Структуры данных *1800

    Программист Саша недавно начал изучать структуры данных. Его тренер Стас сказал ему решить задачу о нахождении минимума на отрезке массива за , с которой Саша справился. Чтобы Саша не думал, что все изучил, Стас задал ему новую задачу. Для каждого отрезка фиксированной длины Саша должен найти максимальный элемент из тех, что встречаются на данном отрезке ровно один раз. Помогите Саше решить эту задачу.

    Входные данные

    В первой строке находится два натуральных числа n и k (1 ≤ n ≤ 105, 1 ≤ k ≤ n) — количество элементов массива и длина отрезка.

    Далее следует n строк: в i-ой находится одно число ai ( - 109 ≤ ai ≤ 109).

    Выходные данные

    Выведите nk + 1 чисел, по одному в строке: в i-ой строке выведите максимальное из тех чисел подмассива ai ai + 1ai + k - 1, что встречается на этом подмассиве ровно 1 раз. Если таких чисел в данном подмассиве нет, выводите "Nothing".

    B3. Восстановление многоугольника (сложная)

    Структуры данных *2600

    Зомби узнали о тестере уровня загрязнения зомби и умудрились его повредить! Теперь определение формы их логова стало по-настоящему сложной задачей для Хайди. Как и прежде, убежище представляет собой строго выпуклый многоугольник на решётке. Каждая вершина многоугольника расположена в каком-то узле решётки. Однако, повреждённый тестер уровня загрязнения зомби может только определять, находится ли уровень загрязнения данной клетке в множестве {1, 2, 3}. Другими словами, Хайди знает все клетки поля, для которых уровень загрязнения зомби не равен 0 и не равен 4.

    По данной информации Хайди всё ещё хочет определить точную форму убежища зомби, чтобы всё-таки обрушить на их головы справедливое возмездие. Помогите ей!

    Входные данные

    Входные данные содержат несколько тестов.

    В первой строке каждого теста записаны два целых числа n и m, где n определяет размер решётки (5 ≤ n ≤ 100 000), а m означает количество клеток решётки, для которых уровень загрязнения зомби равняется 1, 2 или 3 (8 ≤ m ≤ 200 000).

    Во второй строке записаны m пар целых чисел x1, y1, ..., xm, ym — координаты клеток, уровень загрязнения зомби которых не равен 0 или 4. Гарантируется, что 1 ≤ xi, yi ≤ n. Все пары xi, yi попарно различны.

    Клетки нумеруются по координатам их правых верхних углов. Это означает, что самая нижняя левая клетка, которая касается начала координат, имеет координаты (1, 1), а самая верхняя левая клетка имеет координаты (1, n).

    В последней строке входных данных записаны два нуля. Эта строка служит сигналом конца ввода и не должна обрабатываться как отдельный тест. Сумма значений m по всем входным данным не превосходит 200 000.

    Выходные данные

    Для каждого теста выведите ответ в следующем виде:

    в первой строке выведите целое число v — количество вершин в многоугольнике, являющемся секретным убежищем. В следующих v строках выведите по два целых числа, определяющих вершины многоугольника в порядке обхода по часовой стрелке, начиная с лексикографически минимальной вершины.

    Примечание

    Гарантируется, что решение всегда существует и единственно. Гарантируется, что в корректном решении вершины многоугольника имеют координаты между 2 и n - 2. Вершины (x1, y1) лексикографически меньше вершины (x2, y2) если x1 < x2 или .

    A. Лоренцо Фон Маттерхорн

    Деревья Перебор реализация Структуры данных *1500

    Барни живет в Нью-Йорке. Нью-Йорк содержит бесконечное число перекрестков, пронумерованных целыми числами, начиная с 1. Известно, что в городе существует дорога, соединяющая перекрестки с номерами i и 2i, и дорога, соединяющая перекрестки с номерами i и 2i + 1, для любого целого положительного i. Все дороги в городе двусторонние. Легко убедиться, что между любыми двумя перекрестками существует ровно один кратчайший путь.

    Изначально передвижение по любой дороге является бесплатным, однако, так как намечается «День пощечедавания», в ближайшее время произойдет q последовательных событий:

    1. Правительство издает новое правило, определяемое тройкой целых чисел v, u и w, согласно которому стоимость передвижения по всем дорогам на кратчайшем пути от u до v увеличивается на w долларов.

    2. Барни идет из перекрестка v до перекрестка u, где хочет обниматься с девушкой. Барни всегда использует кратчайший путь (по количеству посещенных вершин и дорог) для перемещения между перекрестками.

    Теперь правительству нужна ваша помощь: каждый раз, когда Барни отправляется обниматься с девушкой, вам нужно сообщать, сколько долларов Барни должен заплатить (т.е. суммарную стоимость передвижения по всем дорогам, которые он пройдет).

    Входные данные

    Первая строка содержит единственное целое число q (1 ≤ q ≤ 1 000).

    Следующие q строк описывают происходящие события в хронологическом порядке. Каждая из следующих строк имеет вид 1 v u w и соответствует событию, когда правительство издает правило об увеличении стоимости прохождения по всем дорогам на кратчайшем пути от перекрестка u до перекрестка v на w долларов, либо имеет вид 2 v u и соответствует событию, когда Барни идет от перекрестка v до перекрестка u по кратчайшему пути.

    Для всех описаний событий выполняется 1 ≤ v, u ≤ 1018, v ≠ u, 1 ≤ w ≤ 109.

    Выходные данные

    Для каждого события второго типа выведите суммарную стоимость прохождения дорог, которые Барни пройдет на своем пути. Ответы выводите в том же порядке, что и соответствующие им запросы.

    Примечание

    В запросах первого примера:

    1. Перекрестки на пути — 3, 1, 2 и 4.
    2. Перекрестки на пути — 4, 2 и 1.
    3. Перекрестки на пути — 3 и 6.
    4. Перекрестки на пути — 4, 2, 1 и 3. Стоимости прохождения по дорогам равны 32, 32 и 30 в порядке прохождения. Ответ равен 32 + 32 + 30 = 94.
    5. Перекрестки на пути — 6, 3 и 1.
    6. Перекрестки на пути — 3 и 7. Стоимость прохождения по дороге между ними равна 0.
    7. Перекрестки на пути — 2 и 4. Стоимость прохождения по дороге между ними равна 32 (увеличенная на 30 после первого события и на 2 после второго).

    A. Лоренцо Фон Маттерхорн

    Деревья Перебор реализация Структуры данных *1500

    Барни живет в Нью-Йорке. Нью-Йорк содержит бесконечное число перекрестков, пронумерованных целыми числами, начиная с 1. Известно, что в городе существует дорога, соединяющая перекрестки с номерами i и 2i, и дорога, соединяющая перекрестки с номерами i и 2i + 1, для любого целого положительного i. Все дороги в городе двусторонние. Легко убедиться, что между любыми двумя перекрестками существует ровно один кратчайший путь.

    Изначально передвижение по любой дороге является бесплатным, однако, так как намечается «День пощечедавания», в ближайшее время произойдет q последовательных событий:

    1. Правительство издает новое правило, определяемое тройкой целых чисел v, u и w, согласно которому стоимость передвижения по всем дорогам на кратчайшем пути от u до v увеличивается на w долларов.

    2. Барни идет из перекрестка v до перекрестка u, где хочет обниматься с девушкой. Барни всегда использует кратчайший путь (по количеству посещенных вершин и дорог) для перемещения между перекрестками.

    Теперь правительству нужна ваша помощь: каждый раз, когда Барни отправляется обниматься с девушкой, вам нужно сообщать, сколько долларов Барни должен заплатить (т.е. суммарную стоимость передвижения по всем дорогам, которые он пройдет).

    Входные данные

    Первая строка содержит единственное целое число q (1 ≤ q ≤ 1 000).

    Следующие q строк описывают происходящие события в хронологическом порядке. Каждая из следующих строк имеет вид 1 v u w и соответствует событию, когда правительство издает правило об увеличении стоимости прохождения по всем дорогам на кратчайшем пути от перекрестка u до перекрестка v на w долларов, либо имеет вид 2 v u и соответствует событию, когда Барни идет от перекрестка v до перекрестка u по кратчайшему пути.

    Для всех описаний событий выполняется 1 ≤ v, u ≤ 1018, v ≠ u, 1 ≤ w ≤ 109.

    Выходные данные

    Для каждого события второго типа выведите суммарную стоимость прохождения дорог, которые Барни пройдет на своем пути. Ответы выводите в том же порядке, что и соответствующие им запросы.

    Примечание

    В запросах первого примера:

    1. Перекрестки на пути — 3, 1, 2 и 4.
    2. Перекрестки на пути — 4, 2 и 1.
    3. Перекрестки на пути — 3 и 6.
    4. Перекрестки на пути — 4, 2, 1 и 3. Стоимости прохождения по дорогам равны 32, 32 и 30 в порядке прохождения. Ответ равен 32 + 32 + 30 = 94.
    5. Перекрестки на пути — 6, 3 и 1.
    6. Перекрестки на пути — 3 и 7. Стоимость прохождения по дороге между ними равна 0.
    7. Перекрестки на пути — 2 и 4. Стоимость прохождения по дороге между ними равна 32 (увеличенная на 30 после первого события и на 2 после второго).

    A. Лоренцо Фон Маттерхорн

    Деревья Перебор реализация Структуры данных *1500

    Барни живет в Нью-Йорке. Нью-Йорк содержит бесконечное число перекрестков, пронумерованных целыми числами, начиная с 1. Известно, что в городе существует дорога, соединяющая перекрестки с номерами i и 2i, и дорога, соединяющая перекрестки с номерами i и 2i + 1, для любого целого положительного i. Все дороги в городе двусторонние. Легко убедиться, что между любыми двумя перекрестками существует ровно один кратчайший путь.

    Изначально передвижение по любой дороге является бесплатным, однако, так как намечается «День пощечедавания», в ближайшее время произойдет q последовательных событий:

    1. Правительство издает новое правило, определяемое тройкой целых чисел v, u и w, согласно которому стоимость передвижения по всем дорогам на кратчайшем пути от u до v увеличивается на w долларов.

    2. Барни идет из перекрестка v до перекрестка u, где хочет обниматься с девушкой. Барни всегда использует кратчайший путь (по количеству посещенных вершин и дорог) для перемещения между перекрестками.

    Теперь правительству нужна ваша помощь: каждый раз, когда Барни отправляется обниматься с девушкой, вам нужно сообщать, сколько долларов Барни должен заплатить (т.е. суммарную стоимость передвижения по всем дорогам, которые он пройдет).

    Входные данные

    Первая строка содержит единственное целое число q (1 ≤ q ≤ 1 000).

    Следующие q строк описывают происходящие события в хронологическом порядке. Каждая из следующих строк имеет вид 1 v u w и соответствует событию, когда правительство издает правило об увеличении стоимости прохождения по всем дорогам на кратчайшем пути от перекрестка u до перекрестка v на w долларов, либо имеет вид 2 v u и соответствует событию, когда Барни идет от перекрестка v до перекрестка u по кратчайшему пути.

    Для всех описаний событий выполняется 1 ≤ v, u ≤ 1018, v ≠ u, 1 ≤ w ≤ 109.

    Выходные данные

    Для каждого события второго типа выведите суммарную стоимость прохождения дорог, которые Барни пройдет на своем пути. Ответы выводите в том же порядке, что и соответствующие им запросы.

    Примечание

    В запросах первого примера:

    1. Перекрестки на пути — 3, 1, 2 и 4.
    2. Перекрестки на пути — 4, 2 и 1.
    3. Перекрестки на пути — 3 и 6.
    4. Перекрестки на пути — 4, 2, 1 и 3. Стоимости прохождения по дорогам равны 32, 32 и 30 в порядке прохождения. Ответ равен 32 + 32 + 30 = 94.
    5. Перекрестки на пути — 6, 3 и 1.
    6. Перекрестки на пути — 3 и 7. Стоимость прохождения по дороге между ними равна 0.
    7. Перекрестки на пути — 2 и 4. Стоимость прохождения по дороге между ними равна 32 (увеличенная на 30 после первого события и на 2 после второго).

    A. Лоренцо Фон Маттерхорн

    Деревья Перебор реализация Структуры данных *1500

    Барни живет в Нью-Йорке. Нью-Йорк содержит бесконечное число перекрестков, пронумерованных целыми числами, начиная с 1. Известно, что в городе существует дорога, соединяющая перекрестки с номерами i и 2i, и дорога, соединяющая перекрестки с номерами i и 2i + 1, для любого целого положительного i. Все дороги в городе двусторонние. Легко убедиться, что между любыми двумя перекрестками существует ровно один кратчайший путь.

    Изначально передвижение по любой дороге является бесплатным, однако, так как намечается «День пощечедавания», в ближайшее время произойдет q последовательных событий:

    1. Правительство издает новое правило, определяемое тройкой целых чисел v, u и w, согласно которому стоимость передвижения по всем дорогам на кратчайшем пути от u до v увеличивается на w долларов.

    2. Барни идет из перекрестка v до перекрестка u, где хочет обниматься с девушкой. Барни всегда использует кратчайший путь (по количеству посещенных вершин и дорог) для перемещения между перекрестками.

    Теперь правительству нужна ваша помощь: каждый раз, когда Барни отправляется обниматься с девушкой, вам нужно сообщать, сколько долларов Барни должен заплатить (т.е. суммарную стоимость передвижения по всем дорогам, которые он пройдет).

    Входные данные

    Первая строка содержит единственное целое число q (1 ≤ q ≤ 1 000).

    Следующие q строк описывают происходящие события в хронологическом порядке. Каждая из следующих строк имеет вид 1 v u w и соответствует событию, когда правительство издает правило об увеличении стоимости прохождения по всем дорогам на кратчайшем пути от перекрестка u до перекрестка v на w долларов, либо имеет вид 2 v u и соответствует событию, когда Барни идет от перекрестка v до перекрестка u по кратчайшему пути.

    Для всех описаний событий выполняется 1 ≤ v, u ≤ 1018, v ≠ u, 1 ≤ w ≤ 109.

    Выходные данные

    Для каждого события второго типа выведите суммарную стоимость прохождения дорог, которые Барни пройдет на своем пути. Ответы выводите в том же порядке, что и соответствующие им запросы.

    Примечание

    В запросах первого примера:

    1. Перекрестки на пути — 3, 1, 2 и 4.
    2. Перекрестки на пути — 4, 2 и 1.
    3. Перекрестки на пути — 3 и 6.
    4. Перекрестки на пути — 4, 2, 1 и 3. Стоимости прохождения по дорогам равны 32, 32 и 30 в порядке прохождения. Ответ равен 32 + 32 + 30 = 94.
    5. Перекрестки на пути — 6, 3 и 1.
    6. Перекрестки на пути — 3 и 7. Стоимость прохождения по дороге между ними равна 0.
    7. Перекрестки на пути — 2 и 4. Стоимость прохождения по дороге между ними равна 32 (увеличенная на 30 после первого события и на 2 после второго).

    A. Лоренцо Фон Маттерхорн

    Деревья Перебор реализация Структуры данных *1500

    Барни живет в Нью-Йорке. Нью-Йорк содержит бесконечное число перекрестков, пронумерованных целыми числами, начиная с 1. Известно, что в городе существует дорога, соединяющая перекрестки с номерами i и 2i, и дорога, соединяющая перекрестки с номерами i и 2i + 1, для любого целого положительного i. Все дороги в городе двусторонние. Легко убедиться, что между любыми двумя перекрестками существует ровно один кратчайший путь.

    Изначально передвижение по любой дороге является бесплатным, однако, так как намечается «День пощечедавания», в ближайшее время произойдет q последовательных событий:

    1. Правительство издает новое правило, определяемое тройкой целых чисел v, u и w, согласно которому стоимость передвижения по всем дорогам на кратчайшем пути от u до v увеличивается на w долларов.

    2. Барни идет из перекрестка v до перекрестка u, где хочет обниматься с девушкой. Барни всегда использует кратчайший путь (по количеству посещенных вершин и дорог) для перемещения между перекрестками.

    Теперь правительству нужна ваша помощь: каждый раз, когда Барни отправляется обниматься с девушкой, вам нужно сообщать, сколько долларов Барни должен заплатить (т.е. суммарную стоимость передвижения по всем дорогам, которые он пройдет).

    Входные данные

    Первая строка содержит единственное целое число q (1 ≤ q ≤ 1 000).

    Следующие q строк описывают происходящие события в хронологическом порядке. Каждая из следующих строк имеет вид 1 v u w и соответствует событию, когда правительство издает правило об увеличении стоимости прохождения по всем дорогам на кратчайшем пути от перекрестка u до перекрестка v на w долларов, либо имеет вид 2 v u и соответствует событию, когда Барни идет от перекрестка v до перекрестка u по кратчайшему пути.

    Для всех описаний событий выполняется 1 ≤ v, u ≤ 1018, v ≠ u, 1 ≤ w ≤ 109.

    Выходные данные

    Для каждого события второго типа выведите суммарную стоимость прохождения дорог, которые Барни пройдет на своем пути. Ответы выводите в том же порядке, что и соответствующие им запросы.

    Примечание

    В запросах первого примера:

    1. Перекрестки на пути — 3, 1, 2 и 4.
    2. Перекрестки на пути — 4, 2 и 1.
    3. Перекрестки на пути — 3 и 6.
    4. Перекрестки на пути — 4, 2, 1 и 3. Стоимости прохождения по дорогам равны 32, 32 и 30 в порядке прохождения. Ответ равен 32 + 32 + 30 = 94.
    5. Перекрестки на пути — 6, 3 и 1.
    6. Перекрестки на пути — 3 и 7. Стоимость прохождения по дороге между ними равна 0.
    7. Перекрестки на пути — 2 и 4. Стоимость прохождения по дороге между ними равна 32 (увеличенная на 30 после первого события и на 2 после второго).

    A. Лоренцо Фон Маттерхорн

    Деревья Перебор реализация Структуры данных *1500

    Барни живет в Нью-Йорке. Нью-Йорк содержит бесконечное число перекрестков, пронумерованных целыми числами, начиная с 1. Известно, что в городе существует дорога, соединяющая перекрестки с номерами i и 2i, и дорога, соединяющая перекрестки с номерами i и 2i + 1, для любого целого положительного i. Все дороги в городе двусторонние. Легко убедиться, что между любыми двумя перекрестками существует ровно один кратчайший путь.

    Изначально передвижение по любой дороге является бесплатным, однако, так как намечается «День пощечедавания», в ближайшее время произойдет q последовательных событий:

    1. Правительство издает новое правило, определяемое тройкой целых чисел v, u и w, согласно которому стоимость передвижения по всем дорогам на кратчайшем пути от u до v увеличивается на w долларов.

    2. Барни идет из перекрестка v до перекрестка u, где хочет обниматься с девушкой. Барни всегда использует кратчайший путь (по количеству посещенных вершин и дорог) для перемещения между перекрестками.

    Теперь правительству нужна ваша помощь: каждый раз, когда Барни отправляется обниматься с девушкой, вам нужно сообщать, сколько долларов Барни должен заплатить (т.е. суммарную стоимость передвижения по всем дорогам, которые он пройдет).

    Входные данные

    Первая строка содержит единственное целое число q (1 ≤ q ≤ 1 000).

    Следующие q строк описывают происходящие события в хронологическом порядке. Каждая из следующих строк имеет вид 1 v u w и соответствует событию, когда правительство издает правило об увеличении стоимости прохождения по всем дорогам на кратчайшем пути от перекрестка u до перекрестка v на w долларов, либо имеет вид 2 v u и соответствует событию, когда Барни идет от перекрестка v до перекрестка u по кратчайшему пути.

    Для всех описаний событий выполняется 1 ≤ v, u ≤ 1018, v ≠ u, 1 ≤ w ≤ 109.

    Выходные данные

    Для каждого события второго типа выведите суммарную стоимость прохождения дорог, которые Барни пройдет на своем пути. Ответы выводите в том же порядке, что и соответствующие им запросы.

    Примечание

    В запросах первого примера:

    1. Перекрестки на пути — 3, 1, 2 и 4.
    2. Перекрестки на пути — 4, 2 и 1.
    3. Перекрестки на пути — 3 и 6.
    4. Перекрестки на пути — 4, 2, 1 и 3. Стоимости прохождения по дорогам равны 32, 32 и 30 в порядке прохождения. Ответ равен 32 + 32 + 30 = 94.
    5. Перекрестки на пути — 6, 3 и 1.
    6. Перекрестки на пути — 3 и 7. Стоимость прохождения по дороге между ними равна 0.
    7. Перекрестки на пути — 2 и 4. Стоимость прохождения по дороге между ними равна 32 (увеличенная на 30 после первого события и на 2 после второго).

    A. Лоренцо Фон Маттерхорн

    Деревья Перебор реализация Структуры данных *1500

    Барни живет в Нью-Йорке. Нью-Йорк содержит бесконечное число перекрестков, пронумерованных целыми числами, начиная с 1. Известно, что в городе существует дорога, соединяющая перекрестки с номерами i и 2i, и дорога, соединяющая перекрестки с номерами i и 2i + 1, для любого целого положительного i. Все дороги в городе двусторонние. Легко убедиться, что между любыми двумя перекрестками существует ровно один кратчайший путь.

    Изначально передвижение по любой дороге является бесплатным, однако, так как намечается «День пощечедавания», в ближайшее время произойдет q последовательных событий:

    1. Правительство издает новое правило, определяемое тройкой целых чисел v, u и w, согласно которому стоимость передвижения по всем дорогам на кратчайшем пути от u до v увеличивается на w долларов.

    2. Барни идет из перекрестка v до перекрестка u, где хочет обниматься с девушкой. Барни всегда использует кратчайший путь (по количеству посещенных вершин и дорог) для перемещения между перекрестками.

    Теперь правительству нужна ваша помощь: каждый раз, когда Барни отправляется обниматься с девушкой, вам нужно сообщать, сколько долларов Барни должен заплатить (т.е. суммарную стоимость передвижения по всем дорогам, которые он пройдет).

    Входные данные

    Первая строка содержит единственное целое число q (1 ≤ q ≤ 1 000).

    Следующие q строк описывают происходящие события в хронологическом порядке. Каждая из следующих строк имеет вид 1 v u w и соответствует событию, когда правительство издает правило об увеличении стоимости прохождения по всем дорогам на кратчайшем пути от перекрестка u до перекрестка v на w долларов, либо имеет вид 2 v u и соответствует событию, когда Барни идет от перекрестка v до перекрестка u по кратчайшему пути.

    Для всех описаний событий выполняется 1 ≤ v, u ≤ 1018, v ≠ u, 1 ≤ w ≤ 109.

    Выходные данные

    Для каждого события второго типа выведите суммарную стоимость прохождения дорог, которые Барни пройдет на своем пути. Ответы выводите в том же порядке, что и соответствующие им запросы.

    Примечание

    В запросах первого примера:

    1. Перекрестки на пути — 3, 1, 2 и 4.
    2. Перекрестки на пути — 4, 2 и 1.
    3. Перекрестки на пути — 3 и 6.
    4. Перекрестки на пути — 4, 2, 1 и 3. Стоимости прохождения по дорогам равны 32, 32 и 30 в порядке прохождения. Ответ равен 32 + 32 + 30 = 94.
    5. Перекрестки на пути — 6, 3 и 1.
    6. Перекрестки на пути — 3 и 7. Стоимость прохождения по дороге между ними равна 0.
    7. Перекрестки на пути — 2 и 4. Стоимость прохождения по дороге между ними равна 32 (увеличенная на 30 после первого события и на 2 после второго).

    A. Лоренцо Фон Маттерхорн

    Деревья Перебор реализация Структуры данных *1500

    Барни живет в Нью-Йорке. Нью-Йорк содержит бесконечное число перекрестков, пронумерованных целыми числами, начиная с 1. Известно, что в городе существует дорога, соединяющая перекрестки с номерами i и 2i, и дорога, соединяющая перекрестки с номерами i и 2i + 1, для любого целого положительного i. Все дороги в городе двусторонние. Легко убедиться, что между любыми двумя перекрестками существует ровно один кратчайший путь.

    Изначально передвижение по любой дороге является бесплатным, однако, так как намечается «День пощечедавания», в ближайшее время произойдет q последовательных событий:

    1. Правительство издает новое правило, определяемое тройкой целых чисел v, u и w, согласно которому стоимость передвижения по всем дорогам на кратчайшем пути от u до v увеличивается на w долларов.

    2. Барни идет из перекрестка v до перекрестка u, где хочет обниматься с девушкой. Барни всегда использует кратчайший путь (по количеству посещенных вершин и дорог) для перемещения между перекрестками.

    Теперь правительству нужна ваша помощь: каждый раз, когда Барни отправляется обниматься с девушкой, вам нужно сообщать, сколько долларов Барни должен заплатить (т.е. суммарную стоимость передвижения по всем дорогам, которые он пройдет).

    Входные данные

    Первая строка содержит единственное целое число q (1 ≤ q ≤ 1 000).

    Следующие q строк описывают происходящие события в хронологическом порядке. Каждая из следующих строк имеет вид 1 v u w и соответствует событию, когда правительство издает правило об увеличении стоимости прохождения по всем дорогам на кратчайшем пути от перекрестка u до перекрестка v на w долларов, либо имеет вид 2 v u и соответствует событию, когда Барни идет от перекрестка v до перекрестка u по кратчайшему пути.

    Для всех описаний событий выполняется 1 ≤ v, u ≤ 1018, v ≠ u, 1 ≤ w ≤ 109.

    Выходные данные

    Для каждого события второго типа выведите суммарную стоимость прохождения дорог, которые Барни пройдет на своем пути. Ответы выводите в том же порядке, что и соответствующие им запросы.

    Примечание

    В запросах первого примера:

    1. Перекрестки на пути — 3, 1, 2 и 4.
    2. Перекрестки на пути — 4, 2 и 1.
    3. Перекрестки на пути — 3 и 6.
    4. Перекрестки на пути — 4, 2, 1 и 3. Стоимости прохождения по дорогам равны 32, 32 и 30 в порядке прохождения. Ответ равен 32 + 32 + 30 = 94.
    5. Перекрестки на пути — 6, 3 и 1.
    6. Перекрестки на пути — 3 и 7. Стоимость прохождения по дороге между ними равна 0.
    7. Перекрестки на пути — 2 и 4. Стоимость прохождения по дороге между ними равна 32 (увеличенная на 30 после первого события и на 2 после второго).

    D. Леген...

    дп матрицы Строки Структуры данных *2500

    Последнее время Барни проводил с Норой и ему кажется, что у него есть к ней чувства. Барни хочет отправить ей текстовое сообщение и сделать ее как можно счастливее.

    Исходно уровень счастья Норы равен 0. Нора обожает любовные строчки вроде «Я запал на тебя» и подобные. Нора знает всего n любовных строчек, каждая из которых состоит только из строчных букв латинского алфавита, а некоторые из них могут совпадать (в написании, но различаться в произношении или значении). Каждый раз, когда Нора встречает i-ю из известных ей любовных строчек как непрерывную подстроку сообщения Барни, ее уровень счастья увеличивается на ai. Эти подстроки могут пересекаться, к примеру, в тексте aaab она встретит строку aa дважды, а строку ab один раз.

    В связи с ограничениями системы сообщений, текстовое сообщение Барни может содержать до l символов.

    Барни просит вас помочь ему сделать Нору как можно счастливее, это будет леген...

    Входные данные

    Первая строка входных данных содержит два целых числа n и l (1 ≤ n ≤ 200, 1 ≤ l ≤ 1014) — количество любовных строчек и максимальная длина текстового сообщения Барни.

    Во второй строке содержатся n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 100), означающих, что уровень счастья Норы увеличивается на ai каждый раз, когда она видит i-ую любовную строчку.

    Следующие n строк содержат любовные строчки. i-ая из них содержит строку si, состоящую только из строчных букв латинского алфавита. Сумма длин любовных строчек не превышает 200.

    Все строки во входных данных не пустые.

    Выходные данные

    Выведите единственное целое число — максимально возможный уровень счастья Норы после прочтения текстового сообщения Барни.

    Примечание

    Оптимальный ответ в первом примере из условия — hearth, содержащий каждую любовную строчку ровно по одному разу.

    Оптимальным ответом во втором примере из условия является строка artart.

    E. ...Подожди...

    Деревья снм Структуры данных *3000

    Барни ищет девушку своей мечты. Он живет в Нью-Йорке, который состоит из n перекрестков с номерами от 1 до n, соединенных n - 1 дорогами. Будем рассматривать Нью-Йорк как ориентированное дерево с корнем в перекрестке 1. В Нью-Йорке живут m девушек, i-я из них живет рядом с перекрестком номер ci, а ее вес исходно равен i килограмм.

    Барни считает, что девушка x лучше девушки y тогда и только тогда, когда: вес девушки x строго меньше веса девушки y, либо же они весят одинаково, но номер перекрестка, рядом с которым живет девушка x строго меньше соответствующего номера для девушки y, то есть cx < cy. Таким образом, среди любой пары девушек одна из них всегда лучше другой.

    В следующие q дней происходит по одному событию в день. Всего типов событий два:

    1. Барни идет от перекрестка v до перекрестка u. На пути он подбирает не более k лучших девушек, которых он еще не приглашал и приглашает к себе домой, чтобы проверить, не является ли кто-то из них девушкой его мечты. Если на пути Барни находятся меньше чем k еще не приглашенных девушек, то Барни приглашает их всех.
    2. Девушки, живущие возле перекрестков в поддереве перекрестка v (включая сам перекресток v) набирают вес. В результате вес каждой из них увеличивается на k килограмм.

    Ваша задача — для каждого события первого типа сообщить Барни номера девушек, которых он пригласит к себе домой во время этого события.

    Входные данные

    Первая строка входных данных содержит три целых числа n, m and q (1 ≤ n, m, q ≤ 105) — количество перекрестков в Нью-Йорке, количество девушек, живущих в Нью-Йорке и количество событий соответственно.

    Следующие n - 1 строк описывают дороги. Каждая строка содержит два целых числа v и u(1 ≤ v, u ≤ n, v ≠ u) означающих существование дороги между перекрестками v and u.

    Следующая строка содержит m целых чисел c1, c2, ..., cm (1 ≤ ci ≤ n) — перекрестки рядом с домами девушек.

    Следующие q строк описывают события в хронологическом порядке. Каждая строка начинается с целого числа t (1 ≤ t ≤ 2) — типа события.

    Если t = 1, то строка описывает событие первого типа и далее следуют три целых числа v, u и k (1 ≤ v, u, k ≤ n) — концы пути Барни и максимальное число девушек, которых он пригласит.

    Иначе строка описывает событие второго типа и далее следуют два целых числа v и k (1 ≤ v ≤ n, 1 ≤ k ≤ 109) — корень поддерева и значение, на которое увеличатся веса всех девушек в этом поддереве.

    Выходные данные

    Для каждого события первого типа выведите число t и t целых чисел g1, g2, ..., gt в одной строке, означающих, что во время этого события Барни пригласит t девушек, номера которых равны g1, ..., gt в порядке от лучшей к худшей по меркам Барни.

    Примечание

    В первом примере из условия:

    Описание событий:

    1. Веса девушек в поддереве перекрестка 4 увеличиваются на 3. Номера этих девушек: 1, 3, 5, 4, 7.
    2. Барни идет от перекрестка 2 до перекрестка 1. На его пути встречаются девушки с номерами 1, 2, 3, 5, 6, 7 и весами 4, 2, 6, 8, 6, 10 соответственно. Он приглашает девушек 2 и 1.
    3. Барни идет от перекрестка 4 до перекрестка 2. На его пути встречаются девушки с номерами 3, 5, 7 и весами 6, 8, 10 соответственно. Барни приглашает девушку 3.
    4. Веса девушек в поддереве перекрестка 2 увеличиваются на 10. Неприглашенных девушек это не касается, и ничего интересного не происходит.
    5. Веса девушек в поддереве перекрестка 1 увеличиваются на 10. Номера этих девушек равны 4, 5, 6, 7.
    6. Барни идет от перекрестка 2 до перекрестка 4. На его пути встречаются девушки с номерами 5, 7 и весами 18, 20 соответственно. Барни приглашает девушку с номером 5.
    7. Барни идет от перекрестка 2 до перекрестка 3. На его пути нет девушек.
    8. Веса девушек в поддереве перекрестка 5 увеличиваются на 2. Единственная девушка там имеет номер 4.
    9. Веса девушек в поддереве перекрестка 4 увеличиваются на 9. Номера этих девушек: 4, 6, 7.
    10. Барни идет от перекрестка 3 до перекрестка 5. Единственная девушка на его пути имеет номер 4.
    11. Барни идет от перекрестка 1 до перекрестка 2. Девушки на его пути имеют номера 6, 7 и веса 16, 29 соответственно.

    C. Счастливые билеты

    Бинарный поиск сортировки Структуры данных *2200

    В Моржландии билеты общественного транспорта характеризуются двумя целыми числами: номером серии и номером билета в этой серии. Пусть номер серии будет обозначаться a, а номер билета — b, тогда билет описывается упорядоченной парой чисел (a, b).

    У моржей существует примета, что билет счастливый, если a * b = rev(a) * rev(b). Функция rev(x) переворачивает число, записанное в десятичной системе счисления, при этом ведущие нули исчезают. Например, rev(12343) = 34321, rev(1200) = 21.

    Комитет управления общественным транспортом хочет выпустить x серий, по y билетов в каждой, так, чтобы всего было выпущено как минимум w счастливых билетов, а общее количество выпущенных билетов (x·y) было минимально. Серии нумеруются от 1 до x (включительно), билеты в каждой нумеруются от 1 до y (включительно). Транспортный комитет не может выпускать более maxx серий и более maxy билетов в одной серии.

    Входные данные

    В первой строке записаны три целых числа maxx, maxy, w (1 ≤ maxx, maxy ≤ 105, 1 ≤ w ≤ 107).

    Выходные данные

    Выведите в единственной строке через пробел пару чисел x и y, если возможных ответов несколько — выведите любой. Если таких x и y не существует — выведите единственное число  - 1.

    D. Лабораторная работа

    геометрия Структуры данных *2700

    Однажды морж-профессор Платон задал студентам-программистам следующую лабораторную работу.

    В лабораторной работе требовалось реализовать такую структуру данных, которая поддерживала бы выпуклую оболочку на некотором множестве точек S. На вход программе подавалось q запросов двух типов:

    1. Добавить точку с координатами (x, y) во множество S. Заметьте, что при этом выпуклая оболочка множества S могла измениться, а могла остаться прежней.

    2. Сказать, принадлежит ли точка с координатами (x, y) области, ограниченной выпуклой оболочкой, включая границу.

    Все студенты справились с заданием. А справитесь ли с ним Вы?

    Входные данные

    В первой строке содержится целое число q (4 ≤ q ≤ 105).

    Далее идут q строк вида "t x y", где t — тип запроса (1 или 2), а (x, y) — координаты точки ( - 106 ≤ x, y ≤ 106, x и y — целые числа).

    Гарантируется, что первыми идут 3 запроса первого типа, и точки, данные в этих запросах, образуют невырожденный треугольник. Все точки, добавляемые в S, различны.

    Существует хотя бы один запрос второго типа.

    Выходные данные

    На каждый запрос второго типа выведите по одной строке, содержащей "YES", если точка лежит внутри выпуклой оболочки или на ее границе, и "NO" в противном случае.

    B. Клетки не под боем

    математика Структуры данных *1200

    У Васи есть изначально пустая квадратная шахматная доска размера n × n, и он последовательно выставляет на неё m ладей.

    Клетка поля находится под боем ладьи, если существует хотя бы одна ладья, находящаяся в том же столбце или в той же строке, что и эта клетка. Если в клетке находится ладья, то она также находится под боем.

    Вам известны позиции, в которые Вася будет выставлять ладей на доску. Перед вами стоит задача определить количество клеток, которые находятся не под боем, после каждой выставленной на доску ладьи.

    Входные данные

    В первой строке входных данных находятся два числа n и m (1 ≤ n ≤ 100 000, 1 ≤ m ≤ min(100 000, n2)) — размер доски и количество ладей, которые будут выставлены на доску.

    В следующих m строках следует по два целых числа xi и yi (1 ≤ xi, yi ≤ n) — номер строки и номер столбца клетки поля, в которую будет выставлена i-я ладья. Ладьи будут выставлять на доску в порядке следования во входных данных. Гарантируется, что в любую клетку поля будет выставлено не более одной ладьи.

    Выходные данные

    Выведите m чисел, i-е из которых равно количеству клеток, находящихся не под боем, после выставления на доску первых i ладей.

    Примечание

    На рисунке ниже изображено состояние доски после выставления каждой из трёх ладей. Серым цветом отмечены клетки, находящиеся не под боем.

    B. Степени двойки

    математика Перебор реализация Структуры данных *1500

    Вам задано n чисел a1, a2, ..., an. Найдите количество пар индексов i, j (i < j) таких, что ai + aj является степенью двойки (то есть найдется такое целое число x, что ai + aj = 2x).

    Входные данные

    В первой строке следует целое положительное число n (1 ≤ n ≤ 105) — количество чисел.

    Во второй строке следует n целых положительных чисел a1, a2, ..., an (1 ≤ ai ≤ 109).

    Выходные данные

    Выведите количество пар индексов i, j (i < j) таких, что ai + aj является степенью числа 2.

    Примечание

    В первом примере в ответ входят следующие пары индексов: (1, 4) и (2, 4).

    Во втором примере каждая пара индексов (i, j) (где i < j) входит в ответ.

    E. Анализ путей в функциональном графе

    графы Структуры данных *2100

    Задан функциональный граф — такой ориентированный граф, в котором из каждой вершины выходит ровно одна дуга. Вершины графа пронумерованы от 0 до n - 1.

    Граф задан массивом f0, f1, ..., fn - 1, где fi — номер вершины, куда ведет единственная дуга из вершины i. Кроме того задан массив весов дуг w0, w1, ..., wn - 1, где wi — вес дуги из i в fi.

    Граф из первого примера.

    По заданному числу k (длине пути) найдите для каждой вершины пару чисел: si и mi, где:

    • si — сумма весов всех дуг на пути длины k, который стартует из вершины i;
    • mi — минимальный вес по всем дугам на пути длины k, который стартует из вершины i.

    Длиной пути называется количество дуг в этом пути.

    Входные данные

    В первой строке записана пара целых чисел n, k (1 ≤ n ≤ 105, 1 ≤ k ≤ 1010). Вторая строка содержит последовательность f0, f1, ..., fn - 1 (0 ≤ fi < n), а третья — последовательность w0, w1, ..., wn - 1 (0 ≤ wi ≤ 108).

    Выходные данные

    Выведите n строк, по два числа si, mi в каждой строке.

    F. Футболки

    Структуры данных *2800

    Перед началом весны в магазин поступила большая партия новых футболок. Всего в продажу поступили n типов футболок. Футболка i-го типа характеризуется двумя целочисленными параметрами — ci и qi, где ci — цена футболки i-го типа, а qi — качество футболки i-го типа. В данной задаче следует полагать, что в магазин поступило бесконечное количество футболок каждого типа, а качество, в общем случае, никак не связано с ценой.

    По прогнозам отдела продаж в ближайший месяц в магазин придут k покупателей, причем j-й покупатель будет готов потратить на покупку футболок сумму равную bj.

    Все покупатели при покупке футболок придерживаются одинаковой стратегии. В первую очередь покупатель хочет купить максимально возможное количество самых качественных футболок, затем купить максимально возможное количество самых качественных футболок из оставшихся и так далее. При этом из нескольких футболок одинакового качества он в первую очередь купит ту, которая дешевле. Покупатели не любят одинаковые футболки, поэтому ни один покупатель не будет покупать более одной футболки каждого типа.

    Перед вами стоит задача определить, сколько футболок купит каждый из покупателей, если они будут действовать по описанному алгоритму. Все покупатели действуют независимо друг от друга, и покупки одного никак не влияют на покупки другого.

    Входные данные

    В первой строке следует целое положительное число n (1 ≤ n ≤ 2·105) — количество типов футболок.

    В каждой из следующих n строк следуют по два целых числа ci и qi (1 ≤ ci, qi ≤ 109) — стоимость и качество футболки i-го типа.

    В следующей строке следует целое положительное число k (1 ≤ k ≤ 2·105) — количество покупателей.

    В следующей строке следуют k целых положительных чисел b1, b2, ..., bk (1 ≤ bj ≤ 109), где j-е число равно сумме, которую готов потратить j-й покупатель на покупку футболок.

    Выходные данные

    В первой строке выходных данных должна содержаться последовательность из k целых чисел, где i-е число должно быть равно количеству футболок, которые будут куплены i-м покупателем.

    Примечание

    В первом тестовом примере первый покупатель купит сначала футболку второго типа, а затем купит футболку первого типа. На это он потратит 10 и не сможет купить футболку третьего типа, так как она стоит 4, а у покупателя останется лишь 3. Второй же покупатель купит все три футболки (сначала футболку второго типа, потом футболку первого типа и, затем, футболку третьего типа). На это он потратит все свои деньги.

    D. Мишка и интересная сумма

    Структуры данных *2100

    Маленькая Мишка увлекается программированием. Поскольку совсем недавно прошёл её День Рождения, то друзьями было принято решение подарить ей массив целых неотрицательных чисел a1, a2, ..., an из n элементов!

    Мишке массив очень понравился, и она сразу же захотела определить его красоту, но она ещё маленькая и плохо работает с большими массивами. Именно поэтому она пригласила Вас к себе в гости и попросила ответить на m запросов.

    Каждый запрос определяется следующим образом:

    1. Выбираются числа l и r (1 ≤ l ≤ r ≤ n) — границы отрезка запроса.
    2. Из отрезка массива [l,  r] (из набора чисел al, al + 1, ..., ar) по одному разу выписываются все числа, входящие в заданный отрезок чётное число раз.
    3. Считается XOR-сумма всех выписанных чисел, которая и является ответом на запрос. Формально, если в пункте 2 выписаны числа x1, x2, ..., xk, то Мишку интересует значение , где  — операция побитового исключающего ИЛИ.

    Поскольку одни только маленькие медвежата знают определение красоты массива, то всё, что от вас требуется, — ответить на каждый из предложенных запросов.

    Входные данные

    В первой строке содержится целое число n (1 ≤ n ≤ 1 000 000)  — количество элементов массива.

    Во второй строке содержится n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — элементы массива.

    В третьей строке содержится целое число m (1 ≤ m ≤ 1 000 000) — количество запросов.

    В каждой из последующих m строк содержится описание очередного запроса в виде пары целых чисел l и r (1 ≤ l ≤ r ≤ n) — границ отрезка запроса.

    Выходные данные

    Выведите m целых неотрицательных чисел — ответы на запросы в порядке их появления во входных данных.

    Примечание

    Рассмотрим второй пример:

    В отрезок из первого запроса ни одно число не входит чётное число раз — ответ 0.

    Во втором запросе такое число единственное и равно 3 — ответ 3.

    В третьем запросе выписывается только число 1 — ответ 1.

    В четвёртом запросе рассматриваются все элементы массива массив. Только числа 1 и 2 входят в него чётное число раз. Ответ равен 3.

    В пятом запросе запросе выписываются числа 1 и 3. Ответ — .

    A. Тор

    Перебор реализация Структуры данных *1600

    Тор постепенно привыкает к жизни на земле. Недавно Локи подарил ему смартфон, на котором уже установлены n приложений. Тору очень нравится новый телефон, но ему не хватает информации о количестве непрочитанных оповещений от приложений (возможно, это Локи наложил на телефон проклятье, кто знает).

    Последовательно произойдёт q событий, каждое из которых будет одного из трёх типов:

    1. Приложение x порождает новое оповещение (которое, разумеется, изначально не прочитано).
    2. Тор просматривает все оповещения от приложения x (в том числе перечитывает уже прочитанные).
    3. Тор просматривает первые t оповещений, сгенерированных какими-либо приложениями (то есть первые t событий первого типа). Гарантируется, что к этому моменту уже произошло хотя бы t событий первого типа. Обратите внимание, что Тор читает не первые t непросмотренных оповещений, а просто первые t оповещений, в том числе просматривая какие-то заново.

    Помогите Тору определить количество непросмотренных оповещений после каждого события. Считайте, что изначально никаких оповещений в телефоне не было.

    Входные данные

    В первой строке входных данных записаны целые числа n и q (1 ≤ n, q ≤ 300 000) — количество приложений и количество событий соответственно.

    Следующие q строк содержат описания событий, в i-й из них будет сначала записано целое число typei — тип события. Если typei = 1 или typei = 2, то далее следует целое число xi. А если typei = 3, то далее следует целое число ti (1 ≤ typei ≤ 3, 1 ≤ xi ≤ n, 1 ≤ ti ≤ q).

    Выходные данные

    Выведите количество непрочитанных оповещений после каждого события.

    Примечание

    В первом примере:

    1. Приложение 3 создаёт оповещение (количество непрочитанных оповещений равно 1).
    2. Приложение 1 создаёт оповещение (количество непрочитанных оповещений равно 2).
    3. Приложение 2 создаёт оповещение (количество непрочитанных оповещений равно 3).
    4. Тор читает все оповещения, созданные приложением 3, остаётся 2 непрочитанных оповещения.

    Во втором примере:

    1. Приложение 2 создаёт оповещение (количество непрочитанных оповещений равно 1).
    2. Приложение 4 создаёт оповещение (количество непрочитанных оповещений равно 2).
    3. Приложение 2 создаёт оповещение (количество непрочитанных оповещений равно 3).
    4. Тор читает первые три оповещения, и непрочитанных оповещений становится 0.
    5. Приложение 3 создаёт оповещение (количество непрочитанных оповещений равно 1).
    6. Приложение 3 создаёт оповещение (количество непрочитанных оповещений равно 2).

    E. Железный человек

    геометрия Деревья Структуры данных *3300

    Тони Старк играет со своими костюмами, которые теперь оснащены автопилотом. Он живёт в Малибу. Малибу представляет из себя n перекрёстков, пронумерованных целыми числами от 1 до n, соединённых с помощью n - 1 двусторонних дорог таким образом, что от любого перекрёстка можно добраться до любого другого, используя данные дороги (да, граф Малибу является деревом).

    У Тони есть m костюмов, для каждого из которых разработан специальный план. Костюм номер i появится в момент времени ti на перекрёстке vi и будет двигаться в направлении перекрёстка ui по кратчайшему пути со скоростью ci дорог в секунду (пересечение перекрёстка происходит мгновенно), а затем исчезнет, как только достигнет перекрёстка ui. Если костюм достигает перекрёстка ui непосредственно в момент времени q, то он доступен там в этот момент времени, но не позже. Костюмы передвигаются непрерывно, например, если vi ≠ ui, то в момент времени костюм находится на середине дороги. Обратите внимание, что vi = ui означает, что костюм будет доступен на перекрёстке vi только в момент времени ti и затем исчезнет.

    Если в какой-либо момент времени два костюма оказываются в одной точке (это может быть как на перекрёстке, так и на какой-нибудь дороге непосредственно после появления или перед исчезновением), то там происходит взрыв.

    Тони просит вас определить момент самого первого взрыва (если это вообще произойдёт).

    Входные данные

    В первой строке входных данных записаны два целых числа n и m (1 ≤ n, m ≤ 100 000) — количество перекрёстков и количество костюмов соответственно.

    В последующих n - 1 строках содержится описание дорог. В i-й из этих строк содержится два целых числа ai и bi — концы дороги с номером i (1 ≤ ai, bi ≤ n, ai ≠ bi).

    В следующих m строках содержатся описания костюмов. В i-й из них записаны четыре целых числа ti, ci, vi и ui (0 ≤ ti ≤ 10 000, 1 ≤ ci ≤ 10 000, 1 ≤ vi, ui ≤ n), означающих, что i-й костюм появится на перекрёстке vi в момент времени ti и будет двигаться в сторону перекрёстка ui со скоростью ci дорог в секунду.

    Выходные данные

    Если никаких взрывов так и не произойдёт, то выведите -1 в первой и единственной строке входных данных.

    В противном случае выведите момент времени первого взрыва. Ваш ответ будет считаться правильным, если его относительная или абсолютная погрешность не превзойдёт 10 - 6.

    D. Мультимножество Василия

    Бинарный поиск битмаски Деревья Структуры данных *1800

    У автора уже закончились истории про Василия, поэтому он просто написал формальную постановку задачи.

    У вас есть q запросов и мультимножество A, изначально содержащее только число 0. Запросы бывают трёх видов:

    1. «+ x» —добавить в мультимножество A число x.
    2. «- x» —удалить одно вхождение числа x из мультимножества A. Гарантируется, что хотя бы одно число x в этот момент присутствует в мультимножестве.
    3. «? x» —вам даётся число x, требуется вычислить , то есть максимальное значение побитового исключающего ИЛИ (также известно как XOR) числа x и какого-нибудь числа y из мультимножества A.

    Мультимножество — это множество, в котором разрешается несколько одинаковых элементов.

    Входные данные

    В первой строке входных данных содержится число q (1 ≤ q ≤ 200 000) — количество запросов, которые требуется обработать Василию.

    Каждая из последующих q строк входных данных содержит один трёх символов «+», «-» или «?» и число xi (1 ≤ xi ≤ 109). Гарантируется, что во входных данных встречается хотя бы один запрос «?».

    Обратите внимание, что число 0 всегда будет присутствовать в мультимножестве.

    Выходные данные

    На каждый запрос типа «?» выведите единственное целое число — максимальное значение побитового исключающего ИЛИ для числа xi и какого-либо числа из мультимножества A.

    Примечание

    После первых пяти операций в мультимножестве A содержатся числа 0, 8, 9, 11, 6 и 1.

    Ответом на шестой запрос будет число  — максимальное из чисел , , , и .

    E. Рабочая рутина

    реализация Структуры данных *2500

    Василий наконец-то пришёл на работу, где его ждала гора важных поручений. У Василия есть матрица из n строк и m столбцов, а также q поручений. Каждое из поручений состоит в том, чтобы поменять местами два прямоугольника в матрице.

    Для каждого поручения Василию известны числа ai, bi, ci, di, hi, wi, где, ai это номер строки верхнего левого угла первого прямоугольника запроса, а bi это номер его столбца, ci это номер строки верхнего левого угла второго прямоугольника, di — номер его столбца, а hi и wi это высота и ширина прямоугольников соответственно.

    Гарантируется, что прямоугольники в одном запросе не пересекаются и не касаются, то есть никакая клетка не принадлежит сразу обоим прямоугольникам, и никакие две клетки, принадлежащие разным многоугольникам, не являются соседними по стороне. Тем не менее, прямоугольники запроса могут иметь общий угол.

    Василия интересует, как будет выглядеть матрица после выполнения всех поручений.

    Входные данные

    В первой строке входных данных записаны три целых числа n, m и q (2 ≤ n, m ≤ 1000, 1 ≤ q ≤ 10 000) — количество строк и столбцов в матрице, а также количество поручений, которые требуется выполнить Василию.

    В следующих n строках содержится по m целых чисел vi, j (1 ≤ vi, j ≤ 109) — изначальные значения ячеек в матрице.

    В каждой из следующих q строк содержится по шесть целых чисел — ai, bi, ci, di, hi, wi (1 ≤ ai, ci, hi ≤ n, 1 ≤ bi, di, wi ≤ m).

    Выходные данные

    Выведите n строк по m чисел в каждой — матрицу после всех изменений.

    D. Персистентный шкаф

    битмаски поиск в глубину и подобное реализация Структуры данных *2200

    Недавно в школе Алина узнала о том, что такое персистентные структуры данных: это структуры данных, которые при внесении в них каких-то изменений сохраняют все свои предыдущие состояния и доступ к этим состояниям.

    По приходу домой Алина решила придумать свою персистентную структуру данных. Долго раздумывать не пришлось: прямо перед ее кроватью располагается книжный шкаф. Он, по мнению Алины, весьма подходит в качестве персистентной структуры данных.

    Шкаф состоит из n полок, на каждой из которых есть ровно m позиций для книг. Полки в шкафу Алина нумерует от 1 до n, а позиции на полках — от 1 до m. Изначально шкаф пуст, то есть на каждой позиции на каждой полке книга отсутствует.

    Алина выписала подряд q операций, которые будут друг за другом производиться со шкафом. Каждая из операций может быть одного из четырех типов:

    • 1 i j — Поставить книгу в шкаф на позицию j на полке i, если ее там нет.
    • 2 i j — Убрать книгу из шкафа с позиции j на полке i, если она там есть.
    • 3 i — Поменять расположение книг на полке i на противоположное. Это означает, что со всех позиций на полке i, где книга присутствует, книгу следует убрать, а на все позиции на полке i, где книга отсутствует, книгу следует поставить.
    • 4 k — Вернуть все книги в шкафу в то состояние, в котором они находились после выполнения k-й операции. В частности, k = 0 означает, что шкаф следует привести в изначальное состояние, то есть убрать книгу с каждой позиции на каждой полке.

    После выполнения каждой операции Алину интересует количество книг в шкафу. Алина учится на отлично, поэтому она без труда нашла искомые количества. Интересно, а у вас получится?

    Входные данные

    В первой строке содержится три натуральных числа n, m и q (1 ≤ n, m ≤ 103, 1 ≤ q ≤ 105) — размеры шкафа и количество операций соответственно.

    В следующих q строках содержится описание операций в порядке их выполнения — в i-й из них содержится описание i-й операции в одном из четырех форматов, описанных в условии.

    Гарантируется, что номера полок и номера позиций заданы корректно, а во всех операциях четвертого типа число k соответствует одной из операций, выполненных ранее, либо равно 0.

    Выходные данные

    Для каждой операции выведите в отдельной строке количество книг в шкафу после её выполнения. Ответы выводите в хронологическом порядке.

    Примечание

    Иллюстрация ко второму примеру из условия.

    E. Гирлянды

    Структуры данных *2400

    Как и все дети, Алеша обожает Новый Год. В канун этого праздника он со всей семьей наряжает ёлку. Как и все дети, Алеша любит играть с гирляндами — цепочками, состоящими из лампочек.

    Для игры Алеша использует клеточное поле размера n × m. Строки поля пронумерованы сверху вниз от 1 до n, а столбцы — слева направо от 1 до m.

    У Алеши есть k гирлянд, которые он раскладывает на поле. Он делает это таким образом, что каждая лампочка каждой гирлянды попадает в центр некоторой клетки поля, причем в каждой клетке оказывается не более одной лампочки. Конечно же, лампочки, соседствующие в гирлянде, оказываются в соседних по стороне клетках.

    Пример размещения гирлянды.

    Каждая гирлянда в любой момент может быть либо включена, либо выключена. Если включена гирлянда, то включены все ее лампочки, и наоборот. Каждая лампочка в наборе гирлянд уникальна, и поэтому, будучи включенной, приносит Алеше определенное удовольствие, характеризующееся целым числом. Выключенные лампочки не приносят Алеше удовольствия.

    Алеша умеет включать и выключать разложенные гирлянды и хочет узнавать сумму удовольствия, которое приносят ему лампочки, находящиеся в центрах клеток в некоторой прямоугольной области поля. Изначально все гирлянды включены.

    Алеша еще совсем маленький и пока не умеет складывать большие числа. Он очень просит вас помочь ему с этим.

    Входные данные

    В первой строке содержится три целых числа n, m и k (1 ≤ n, m, k ≤ 2000) — количество строк поля, количество столбцов поля и количество гирлянд, разложенных на поле, соответственно.

    В следующих строках содержится описание гирлянд в следующем формате:

    Первая строка описания очередной гирлянды содержит целое число len (1 ≤ len ≤ 2000) — количество лампочек в гирлянде.

    В каждой из следующих len строк содержится три целых числа i, j и w (1 ≤ i ≤ n, 1 ≤ j ≤ m, 1 ≤ w ≤ 109) — координаты клетки, содержащей очередную лампочку, и удовольствие, которое Алеша получает от этой лампочки, если она включена. Лампочки перечислены в том порядке, в котором они соединены в цепочку в гирлянде. Гарантируется, что соседние лампочки находятся в соседних по стороне клетках. 

    В следующей строке содержится целое число q (1 ≤ q ≤ 106) — количество событий в игре Алеши. Следующие q строк описывают события в хронологическом порядке. В i-й из них содержится описание i-го события в одном из следующих форматов:

    • SWITCH i — Алеша выключает i-ю гирлянду, если она была включена, или включает, если та была выключена. Гарантируется, что 1 ≤ i ≤ k.
    • ASK x1 y1 x2 y2 — Алешу интересует сумма удовольствия, которое приносят ему лампочки, находящиеся в прямоугольной области, верхняя левая клетка которой имеет координаты (x1, y1), а правая нижняя — (x2, y2). Гарантируется, что 1 ≤ x1 ≤ x2 ≤ n и 1 ≤ y1 ≤ y2 ≤ m. Во входных данных присутствует не более 2000 событий этого типа.

    Все числа во входных данных целые.

    Обратите внимание, что входные данные довольно объемны, поэтому будьте внимательны, используя те или иные средства ввода. В частности, в программах на языке C++ не следует использовать cin, а в программах на языке Java — класс Scanner.

    Выходные данные

    Для каждой операции ASK в отдельной строке выведите интересующую Алешу сумму удовольствий. Ответы выводите в хронологическом порядке.

    Примечание

    Иллюстрация к первому примеру из условия.

    C. Центроиды

    графы Деревья дп жадные алгоритмы поиск в глубину и подобное Структуры данных *2300

    Деревом называется связный неориентированный граф без циклов. Вам дано дерево, состоящее из n вершин, тогда центроидом дерева называется любая вершина, такая что при её удалении размер любой компоненты связности не будет превосходить .

    Вам дано дерево размера n и разрешается выполнить не более одной операции перестановки ребра. Перестановкой ребра называется удаление одного ребра из дерева (без удаления инцидентных вершин) и добавление одного нового ребра (без добавления новых вершин) таким образом, что граф остаётся деревом. Требуется для каждой вершины дерева определить, правда ли, что её можно сделать центроидом, выполнив не более одной перестановки ребра.

    Входные данные

    В первой строке входных данных записано целое число n (2 ≤ n ≤ 400 000) — количество вершин в дереве. Каждая из последующих n - 1 строк содержит пару номеров вершин ui и vi (1 ≤ ui, vi ≤ n), являющихся концами одного из рёбер дерева.

    Выходные данные

    Выведите n чисел, i-е из которых равно 1, если i-ю вершину можно сделать центроидом, выполнив не более одной перестановки ребра, и 0 в противном случае.

    Примечание

    В первом тестовом примере любую вершину можно сделать центроидом. Например, чтобы сделать центроидом вершину 1, нужно заменить ребро (2, 3) на ребро (1, 3).

    F. Операции над множеством строк

    интерактив Перебор Строки строковые суфф. структуры Структуры данных хэши *2400

    Вам нужно обработать m запросов над множеством строк D. Каждый запрос одного из трёх типов:

    1. Добавить строку s в множество D. Гарантируется, что эта строка ранее не добавлялась в множество.
    2. Удалить строку s из множества D. Гарантируется, что эта строка находится в множестве D.
    3. Для заданной строки s найти количество вхождений строк из множества D. Если некоторая строка p из множества D имеет несколько вхождений в s вы должны посчитать их все.

    Заметим, что вам требуется решить задачу в режиме online. Это значит, что вы не можете сразу считать все входные данные. Вы можете считать очередной запрос только после того как выведите ответ на последний запрос третьего типа. Используйте функции fflush в языке C++ и BufferedWriter.flush в языке Java после каждого вывода вашей программы.

    Входные данные

    В первой строке находится целое число m (1 ≤ m ≤ 3·105) — количество запросов.

    В каждой из следующих m строк находится целое число t (1 ≤ t ≤ 3) и непустая строка s — тип запроса и строка запроса. Все строки состоят только из строчных букв английского алфавита.

    Сумма длин всех строк во входных данных не превосходит 3·105.

    Выходные данные

    Для каждого запроса третьего типа выведите одно целое число c — требуемое количество вхождений в строку s.

    E. Мемори и казино

    математика Структуры данных Теория вероятностей *2500

    В ряд расположены n казино. Если Мемори играет в казино i, то с вероятностью pi она выигрывает и переходит в казино справа (i + 1) или уходит совсем (если i = n), а с вероятностью 1 - pi она проигрывает и двигается налево (i - 1) или тоже уходит (если i = 1).

    Будем говорить, что Мемори доминирует на отрезке i... j, если её перемещения удовлетворяют следующим условиям:

    • Она начинает в казино i.
    • Она никогда не проигрывает в казино i.
    • Она завершает путешествие по отрезку победой в казино j.

    Обратите внимание, что если Мемори пойдет налево из казино 1 или направо из казино n, то её прогулка по казино сразу завершается.

    Теперь Мемори хочет, чтобы вы обработали для неё несколько запросов:

    • 1 i a b: присвоить .
    • 2 l r: вывести вероятность того, что Мемори будет доминировать на отрезке l... r, то есть вероятность того, что, начав в казино l, она впервые выйдет за пределы отрезка l... r после победы в казино r.

    Гарантируется, что в любой момент времени последовательность p неубывающая, то есть pi ≤ pi + 1 для всех i от 1 до n - 1.

    Входные данные

    В первой строке входных данных записаны два целых числа n и q (1 ≤ n, q ≤ 100 000) — количество казино и количество запросов соответственно.

    В следующих n строках содержатся целые числа ai и bi (1 ≤ ai < bi ≤ 109) — дробь определяет вероятность pi выиграть в казино i.

    Следующие q строк содержат запросы в одном из двух видов, описанных в условии (1 ≤ a < b ≤ 109, 1 ≤ i ≤ n, 1 ≤ l ≤ r ≤ n).

    Гарантируется, что во входных данных встретится хотя бы один запрос типа 2, то есть выходные данные будут не пусты. Дополнительно гарантируется, что в любой момент времени последовательность p является неубывающей.

    Выходные данные

    Для каждого запроса типа 2 выведите одно вещественное число — вероятность того, что Мемори будет доминировать на соответствующем интервале. Ваш ответ будет считаться правильным, если его абсолютная ошибка не будет превосходить 10 - 4.

    А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если |a - b| ≤ 10 - 4.

    A. Соня и запросы

    реализация Структуры данных *1400

    Сегодня сова Соня выучила длинные числа и сразу же позвала в гости своих друзей, чтобы продемонстрировать им свои навыки. У Сони есть мультимножество с числами, изначально пустое. Друзья сделают t запросов, каждый одного из трёх видов:

    1.  +  ai — добавить целое неотрицательное число ai в мультимножество. Обратите внимание, что, поскольку у Сони мультимножество, в нём может содержаться несколько одинаковых чисел.
    2.  -  ai — удалить целое неотрицательное число ai из мультимножества. Гарантируется, что такое число есть в мультимножестве. Если в мультимножестве было несколько экземпляров числа ai, то при выполнении данной операции удаляется только один из них.
    3. ? s — ответить, сколько чисел в мультимножестве (включая повторы) подходит под шаблон s, состоящий из 0 и 1. В шаблоне 0 соответствует чётным цифрам, а 1 — нечётным. Число x подходит под шаблон s, если чётность i-й справа цифры числа, записанного в десятичной системе, подходит под i-ю справа цифру шаблона. При этом если шаблон короче соответствующего числа, то он дополняется нулями слева. Аналогично, если десятичная запись числа короче шаблона, то оно также дополняется нулями слева.

    Например, под шаблон s = 010 подходят числа 92, 2212, 50 и 414, но не подходят числа 3, 110, 25 и 1030.

    Входные данные

    В первой строке входных данных записано число t (1 ≤ t ≤ 100 000) — количество операций, которые предстоит выполнить Соне.

    Следующие t строк описывают запросы в порядке их поступления. В начале i-й из этих строк записан символ ci — тип операции данного запроса. Если ci равен «+» или «-», то после него через пробел записано целое число ai (0 ≤ ai < 1018), которое не может иметь лидирующие нули (кроме, собственно, числа 0, записывающегося как «0»). Если же ci равен «?», то после него через пробел записана последовательность из нулей и единиц, количество которых не превосходит 18, определяющая соответствующий данному запросу шаблон.

    Гарантируется, что во входных данных содержится хотя бы один запрос «?».

    Гарантируется, что перед удалением числа хотя бы один его экземпляр присутствовал в мультимножестве.

    Выходные данные

    Для каждого запроса третьего типа выведите количество подходящих чисел в мультимножестве. Каждое число учитывается количество раз, равное количеству вхождений в мультимножество в данный момент времени.

    Примечание

    Рассмотрим, какие числа подходят под операции третьего типа, пронумерованные в порядке их появления во входным данных:

    1. 1 и 241.
    2. 361.
    3. 101 и 361.
    4. 361.
    5. 4000.

    D. Зверята и пазл

    Бинарный поиск Структуры данных *2700

    Сова Соня подарила ёжику Филе огромный пазл размером n на m с изображением красивого озера. Друзья сразу начали собирать картинку, но много фрагментов пазла оказались пустыми — на них не было никакого рисунка. Фрагменты с рисунком будем обозначать числом 1, а пустые фрагменты — числом 0. Строки пазла пронумерованы сверху вниз целыми числами от 1 до n, а столбцы — слева направо целыми числами от 1 до m.

    Зверята решили сложить картину полностью и немного поиграть с ней, ведь это же еще интереснее! Сова и ёжик по очереди задают друг другу вопросы. Вопрос определяется четырьмя числами x1, y1, x2, y2, которые описывают прямоугольник, где (x1, y1) — координаты левой верхней клетки прямоугольника, а (x2, y2) — координаты правой нижней клетки. Ответом на вопрос является максимальный размер квадрата, полностью сложенного из фрагментов с рисунками (то есть квадрата из 1) и полностью находящегося внутри прямоугольника из вопроса.

    Помогите Соне и Филе ответить на t запросов.

    Входные данные

    В первой строке входных данных записаны два числа n и m (1 ≤ n, m ≤ 1000) — размеры пазла.

    В каждой из последующих n строк записаны m чисел aij. Каждое число равно 1, если в соответствующей клетке пазла есть рисунок, и 0, если она пустая.

    В следующей строке записано целое число t (1 ≤ t ≤ 1 000 000) — количество запросов.

    Дальше идут t строк, которые описывают запросы, i-я из этих строк содержит четыре числа x1, y1, x2, y2 (1 ≤ x1 ≤ x2 ≤ n, 1 ≤ y1 ≤ y2 ≤ m) — координаты левой верхней и правой нижней клеток прямоугольника-запроса.

    Выходные данные

    Выведите t строк. В i-й из них выведите максимальную длину стороны квадрата, полностью состоящего из 1 и лежащего внутри запроса.

    F. Герои Могущие Магию III

    Структуры данных *2600

    Герои Могущие Магию идут по прямой дороге и сражаются с бесами. Бесы слабые и уязвимые существа, и не являются интересными соперниками, но нашим героям нравится с ними сражаться. Потому что это весело.

    Герой Игнатиус просто обожает бесов. Перед ним находится прямая с бесами, которая может быть представлена как массив целых чисел a длины n (в индексации с 0), где ai означает количество бесов в позиции i. Иногда из ниоткуда появляются новые бесы. Когда герой собирается сражаться с бесами, он выбирает некоторый отрезок данной прямой, начинает в одном конце отрезка и заканчивает в другом, ни в какой момент не покидая отрезок. Герой может перемещаться на одну позицию влево или на одну позицию вправо. Каждый раз, когда герой выполняет перемещение, он убивает одного беса в клетке, куда он пришёл, то есть количество бесов в этой клетке уменьшается на 1. Также герой убивает одного беса когда только появляется в крайней клетке отрезка в начале маршрута.

    Целью героев является победить всех бесов на отрезке и при этом никогда не делать ход в пустую клетку (где нет бесов), потому что это скучно. Игнатиус любит бесов, поэтому он на самом деле их не убивает, так что при подготовке этой задачи ни один бес не пострадал. Однако, он бы хотел, чтобы вы отвечали ему на вопросы, возможно ли зачистить от бесов некоторый отрезок, если действовать согласно правилам выше.

    Требуется обработать q различных запросов:

    • 1 a b k — k бесов появляются в каждой клетке отрезка [a, b].
    • 2 a b — Игнатиус хочет знать, можно ли победить всех бесов на отрезке [a, b], действую согласно описанным выше правилам.
    Входные данные

    В первой строке записано целое число n (1 ≤ n ≤ 200 000) — длина массива a. Далее следуют n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 5 000), означающих изначальные количества бесов в клетках. В третьей строке записано единственное целое число q (1 ≤ q ≤ 300 000) — количество запросов. Оставшиеся q строк содержат по одному запросу. Каждый запрос определяется целыми числами a, b и, возможно, k (0 ≤ a ≤ b < n, 0 ≤ k ≤ 5 000).

    Выходные данные

    Для каждого запроса второго типа выведите 1, если можно зачистить отрезок по приведённым в условии правилам, и 0 в противном случае.

    Примечание

    В первом запросе невозможно дойти от первой клетки до последней, убив при этом всех бесов и не заскучав. Когда к значению второй клетки добавляется 1, это становится возможным, например, если двигаться следующим маршрутом: .

    C. Саша и массив

    математика матрицы Структуры данных *2300

    У Саши есть массив целых чисел a1, a2, ..., an. Необходимо быстро выполнить m запросов. Запросы бывают двух типов:

    1. 1 l r x — увеличить все числа на отрезке от l до r на значение x;
    2. 2 l r — найти , где f(x) — х-е число Фибоначчи. Поскольку эта величина может быть очень большой, выведите остаток от её деления на 109 + 7.

    В данной задаче определим числа Фибоначчи следующим образом: f(1) = 1, f(2) = 1, f(x) = f(x - 1) + f(x - 2) для x > 2.

    Саша — очень талантливый мальчик. Он в уме отвечает на все запросы за пять секунд. Получится ли у вас написать программу, которая не уступит ему в скорости?

    Входные данные

    В первой строке входных данных содержатся два числа n и m (1 ≤ n ≤ 100 000, 1 ≤ m ≤ 100 000) — количество элементов массива и количество запросов соответственно.

    В следующей строке содержатся n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109).

    Следующие m строк описывают запросы. В каждой из них находятся числа tpi, li, ri и, возможно, xi (1 ≤ tpi ≤ 2, 1 ≤ li ≤ ri ≤ n, 1 ≤ xi ≤ 109), (tpi = 1 соответствует запросу первого типа, tpi = 2 — второго).

    Гарантируется, что во входных данных будет присутствовать хотя бы один запрос второго типа.

    Выходные данные

    Для каждого запроса второго типа в отдельной строке выведите ответ на запрос по модулю 109 + 7.

    Примечание

    Изначально массив a равен 1, 1, 2, 1, 1.

    Ответ на первый запрос равен f(1) + f(1) + f(2) + f(1) + f(1) = 1 + 1 + 1 + 1 + 1 = 5.

    После запроса 1 2 4 2 массив a равен 1, 3, 4, 3, 1.

    Ответ на второй запрос равен f(3) + f(4) + f(3) = 2 + 3 + 2 = 7.

    Ответ на третий запрос равен f(1) + f(3) + f(4) + f(3) + f(1) = 1 + 2 + 3 + 2 + 1 = 9.

    D. Слалом

    дп сортировки Структуры данных *3100

    Девочка Маша очень любит зимние виды спорта, и сегодня ей предстоит пройти лыжный слалом.

    Трасса схематически представляет из себя клетчатый прямоугольник n × m. На поле размещены прямоугольные препятствия, занимающие некоторые клетки. Маша должна добраться из клетки с координатами (1, 1), в клетку (n, m). При этом из каждой клетки можно перейти либо на одну клетку вверх, либо на одну клетку вправо. В клетки, в которых расположены препятствия, попадать нельзя.

    Таким образом, каждое препятствие можно обойти двумя способами: оно останется либо слева от траектории движения по трассе, либо справа. Маша любит разнообразие, и ей интересно, сколько существует различных способов пройти трассу. Проходы трассы считаются различными, если существует хотя бы одно препятствие, которое в одном проходе находится слева, а в другом справа от траектории Маши.

    Ваша задача — помочь Маше узнать количество различных способов пройти трассу. Ответ может быть большим и Машу устроит значение по модулю 109 + 7.

    На рисунках ниже разобраны тесты из условия.

    Входные данные

    В первой строке входных данных содержатся три натуральных числа n, m и k (3 ≤ n, m ≤ 106, 0 ≤ k ≤ 105) — размеры трассы и количество препятствий соответственно.

    В следующих k строках находится по четыре натуральных числа x1, y1, x2, y2 (1 ≤ x1 ≤ x2 ≤ n, 1 ≤ y1 ≤ y2 ≤ m) — координаты левого нижнего и правого верхнего угла препятствия.

    Гарантируется, что в клетках (1, 1) и (n, m) нет препятствий, и все препятствия не имеют пересечений (но могут касаться).

    Выходные данные

    В выходной файл выведите единственное число — остаток от деления количества различных способов пройти трассу на число 109 + 7.

    F. Покрытие массива

    Структуры данных *3100

    У Миши есть массив из n целых чисел. Он хочет выбрать k различных подотрезков в нем так, чтобы для каждого элемента массива нашелся хотя бы один выбранный отрезок, который его содержит.

    При этом Миша хочет, чтобы если просуммировать числа на каждом отрезке, а затем просуммировать получившиеся суммы, то итоговая сумма оказалась максимальна.

    Входные данные

    В первой строке дано два целых числа n, k (1 ≤ n ≤ 100 000, 1 ≤ k ≤ n·(n + 1) / 2) — количество элементов в массиве и количество отрезков, которые нужно выбрать.

    Во второй строке дано n целых чисел ai ( - 50 000 ≤ ai ≤ 50 000) — элементы массива.

    Выходные данные

    Выведите одно целое число — максимальную сумму сумм чисел на отрезках, которую можно достичь, выбрав k отрезков так, что каждый элемент был покрыт хотя бы одним отрезком.

    D. Максим и массив

    жадные алгоритмы Конструктив математика Структуры данных *2000

    Недавно Максим нашел никому не нужный массив n целых чисел. Ему сразу пришла в голову идея для изменения этого массива: он придумал целое положительное число x и решил прибавлять или вычитать его из произвольных элементов массива. Формально, за одну операцию Максим выбирает целое число i (1 ≤ i ≤ n), и меняет i-й элемент массива ai либо на ai + x, либо на ai - x. Обратите внимание, что операцию можно применять более одного раза к элементу на одной и той же позиции.

    Максим — любопытный минималист, поэтому он хочет узнать, какое минимальное значение может принять произведение всех элементов массива (то есть ), если Максим применит к нему не более k операций. Помогите ему в этом.

    Входные данные

    В первой строке входных данных содержится три целых числа n, k и x (1 ≤ n, k ≤ 200 000, 1 ≤ x ≤ 109) — количество элементов в массиве, максимальное количество операций и число, придуманное Максимом, соответственно.

    Во второй строке содержится n целых чисел a1, a2, ..., an () — элементы массива, который нашел Максим.

    Выходные данные

    В единственной строке выведите n целых чисел b1, b2, ..., bn  — элементы массива после применения к нему не более чем k описанных операций. В частности, должно быть верным для всех 1 ≤ i ≤ n, а произведение всех элементов массива должно быть минимально возможным.

    Если ответов несколько, выведите любой.

    C. Уничтожение массива

    снм Структуры данных *1600

    Вам дан массив, состоящий из n неотрицательных целых чисел a1, a2, ..., an.

    В этом массиве один за другим зачёркиваются числа. Вам задана перестановка чисел от 1 до n — порядок, в котором это происходит.

    После зачёркивания очередного числа вам необходимо найти в этом массиве подотрезок с максимальной суммой, не содержащий ни одного зачёркнутого числа. Сумму чисел в пустом подотрезке считайте равной 0.

    Входные данные

    В первой строке входных данных записано число n (1 ≤ n ≤ 100 000) — длина массива.

    В второй строке записаны n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 109).

    В третьей строке входных данных записана перестановка чисел от 1 до n — порядок, в котором зачеркиваются числа.

    Выходные данные

    В выходной файл выведите n строк, каждая из которых должна содержать одно число — максимальную сумму на подотрезке заданного массива, не содержащем зачёркнутых чисел, после выполнения очередного действия.

    Примечание

    В первом тестовом примере происходит следующее:

    1. Зачеркивается третий элемент, массив принимает вид 1 3  *  5. Отрезок с максимально суммой 5 состоит из одного числа 5.
    2. Зачеркивается четвертый элемент, массив принимает вид 1 3  *   * . Отрезок с максимально суммой 4 состоит из двух чисел 1 3.
    3. Зачеркивается первый элемент, массив принимает вид  *  3  *   * . Отрезок с максимально суммой 3 состоит из одного числа 3.
    4. Зачеркивается оставшийся второй элемент, в этот момент непустых допустимых подотрезков не остается, поэтому здесь ответ равен нулю.

    D. Генерация наборов

    Бинарный поиск Деревья жадные алгоритмы поиск в глубину и подобное Строки Структуры данных *1900

    Вам задан набор Y из n различных целых положительных чисел y1, y2, ..., yn.

    Назовём набор X из n различных целых положительных чисел x1, x2, ..., xn генератором для Y, если из набора X можно получить набор Y, применяя к элементам набора X следующие две операции:

    1. Умножить произвольное число xi на два, то есть заменить xi на xi.
    2. Умножить произвольное число xi на два и прибавить единицу, то есть заменить xi на xi + 1.

    Обратите внимание, не требуется, чтобы все числа в наборе X были различны после выполнения каждой операции.

    Наборы в данной задаче сравниваются как множества чисел. Другими словами, два набора различных чисел X и Y совпадают, если, выписав оба набора в отсортированном порядке, мы получим одинаковые массивы.

    Заметьте, что любой набор чисел (или его перестановка) сам является одним из своих генераторов.

    По заданному набору Y найдите его генератор, в котором максимальное число минимально.

    Входные данные

    В первой строке входных данных записано число n (1 ≤ n ≤ 50 000) — количество чисел в наборе Y.

    Во второй строке записаны n чисел y1, ..., yn (1 ≤ yi ≤ 109). Гарантируется, что все числа в наборе различны.

    Выходные данные

    Выведите n чисел — генератор для заданного набора Y, в котором максимальное число как можно меньше. Если подходящих наборов несколько, разрешается вывести любой из них.

    F. Циклический шифр

    китайская теорема об остатках реализация Структуры данных теория чисел *2800

    Вам задан набор из n последовательностей. Каждая из последовательностей состоит из целых положительных чисел, не превосходящих m. Все числа внутри одной последовательности различны, но одно и то же число может встречаться в разных последовательностях. Длина i-й последовательности равна ki.

    Раз в секунду числа в каждой последовательности циклически сдвигаются на одну позицию влево, то есть числа на позициях i > 1 переходят на позиции i - 1, а первое число становится последним.

    Каждую секунду будем выписывать первое число каждой последовательности в новый массив. Для всех чисел 1 до m найдем самый длинный подотрезок этого массива, все элементы которого равны этому числу.

    Будем проделывать эту операцию на протяжении 10100 секунд. Для каждого числа от 1 до m определите самый длинный из подотрезков, найденных за это время.

    Входные данные

    В первой строке входных данных записаны два числа n и m (1 ≤ n, m ≤ 100 000) — количество последовательностей и максимальное число, которое может встретиться в последовательностях.

    В следующих n строках даны сами последовательности. В каждой строке сначала записано число ki (1 ≤ ki ≤ 40) — количество чисел в последовательности, а затем ещё ki целых положительных чисел — сама последовательность. Гарантируется, что числа в каждой последовательности попарно различны и не превосходят m.

    Суммарная длина всех последовательностей не превосходит 200 000.

    Выходные данные

    Выведите m чисел, i-е из которых равняется длине самого большого подотрезка, все числа в котором равны i и который встретился в выписываемом массиве за первые 10100 секунд.

    D. Плотная подпоследовательность

    жадные алгоритмы Строки Структуры данных *1900

    Вам дана строка s, состоящая из строчных английских букв, и целое число m.

    Выберем из данной строки некоторые символы так, чтобы в любой непрерывный подотрезок длины m попал хотя бы один выбранный символ. Заметьте, что здесь выбираются именно позиции символов, а не сами символы.

    Затем из символов, которые стоят на выбранных позициях, собирается новая строка. При этом необходимо использовать все символы на выбранных позициях, но их разрешается переставлять как угодно.

    Формально, мы выбираем некоторую подпоследовательность индексов 1 ≤ i1 < i2 < ... < it ≤ |s|. Выбранная последовательность должна удовлетворять условию: для любого j, такого что 1 ≤ j ≤ |s| - m + 1, среди выбранных индексов найдется хотя бы один, который принадлежит отрезку [j,  j + m - 1], то есть существует k от 1 до t, такое что j ≤ ik ≤ j + m - 1.

    Затем мы выбираем некоторую перестановку p выбранных индексов и составляем новую строчку sip1sip2... sipt.

    Найдите лексикографически минимальную строку, которую можно получить с помощью описанных действий.

    Входные данные

    Первая строка входных данных содержит одно число m (1 ≤ m ≤ 100 000).

    Во второй строке записана сама строка s. Гарантируется, что строка непустая, состоит из строчных английский букв и её длина не превосходит 100 000. Также, гарантируется, что число m не превосходит длины строки.

    Выходные данные

    Выведите лексикографически минимальную строку, которую можно получить с помощью описанных действий.

    Примечание

    В первом примере мы можем выбрать подпоследовательность {3} и составить строку «a».

    Во втором примере мы можем выбрать подпоследовательность {1, 2, 4} и составить из символов на этих позициях строку «aab».

    D. Шарики на контесте

    жадные алгоритмы Структуры данных *1800

    Одной из традиций соревнований ACM-ICPC является раздача командам воздушных шариков за каждую сданную задачу. В данной задаче мы считаем, что штрафное время не имеет значения, и команды упорядочиваются только по количеству воздушных шариков. Это означает, что место команды равно количеству команд со строго большим количеством шариков, увеличенное на 1. Например, если семь команд имеют больше шариков, то ваша команда займёт восьмое место. Разрешается, чтобы несколько команд занимали одно и то же место.

    Вам следует знать, что перед соревнованием полезно плотно кушать. Если количество шариков у команды превышает суммарный вес её участников, то команда начинает летать по площадке и случайно касается потолка, что строго запрещено правилами и приводит к немедленной дисквалификации команды. Дисквалифицированные команды не учитываются в результатах.

    Соревнование только что завершилось. Всего участвовали n команд, пронумерованных от 1 до n. Команда с номером i заработала ti шариков и имеет суммарный вес wi. Гарантируется, что ti не превосходит wi, то есть изначально ни одна команда не летает.

    Лимак выступает за первую команду. Он не любит читерство, поэтому никогда не заберёт шарик у другой команды. Вместо этого он может отдавать шарики своей команды другим командам, добившись с помощью этого, чтобы они летали и были дисквалифицированы. Лимак может раздать любое количество шариков от нуля до количества шариков у его команды.

    Какое самое лучше (минимальное) место может занять в итоге команда Лимака?

    Входные данные

    В первой строке входных данных записано число n (2 ≤ n ≤ 300 000) — количество команд.

    В i-й из последующих n строк записаны два целых числа ti и wi (0 ≤ ti ≤ wi ≤ 1018) — количество шариков и вес i-й команды соответственно. Лимак является участником из первой команды.

    Выходные данные

    Выведите одно целое число — лучшее место, которое может занять Лимак.

    Примечание

    В первом примере у Лимака вначале есть 20 шариков. У трёх команд больше шариков (32, 40 и 45 шариков), поэтому Лимак занимает изначально четвёртое место. Одной из оптимальных стратегий является:

    1. Лимак отдаёт 6 шариков команде с 32 шариками и весом 37. Этого как раз достаточно, чтобы эта команда начала летать. К сожалению, теперь у Лимака только 14 шариков, и его команда опускается на пятое место.
    2. Лимак отдаёт 6 шариков команде с 45 шариками. Теперь у них 51 шарик при весе 50, и они также зарабатывают дисквалификацию.
    3. Лимак отдаёт по 1 шарику каждой из двух команд с 16 шариками.
    4. Теперь у Лимака 20 - 6 - 6 - 1 - 1 = 6 шариков.
    5. Осталось три команды, у которых 40, 14 и 2 шарика.
    6. Команда Лимака занимает третье место, потому что у двух команд строго больше шариков.

    Во втором примере Лимак занимает второе место и никак не может его улучшить.

    В третьем примере у Лимака достаточно шариков, чтобы избавиться от команд 2, 3 и 5 (то есть команд с 81 000 000 000, 5 000 000 000 и 46 000 000 000 шариками соответственно). У Лимака остаётся 0 шариков, и он занимает второе место (разделив его с командами 6 и 7).

    E. Игры на диске

    Строки строковые суфф. структуры Структуры данных хэши *2300

    У Толи было n компьютерных игр, и он решил записать их на один диск. После этого он решил написать маркером названия всех своих игр на этом диске по кругу по часовой стрелке друг за другом. Названия всех игр были различные, а длина каждого названия была ровно k. Написанные названия на диске не перекрываются между собой.

    После того, как Толя написал названия всех игр, на диске получилась циклическая строка длины n·k.

    Прошло несколько лет и Толя уже и забыл, какие игры записаны на его диске. Он помнит, что всего в то время было g популярных игр, и на его диске могут быть только лишь эти игры, причем каждая из g игр может быть записана на диске не более одного раза.

    Перед вами стоит задача восстановить любой корректный список игр, которые Толя мог записать на свой диск.

    Входные данные

    В первой строке следует два целых положительных числа n и k (1 ≤ n ≤ 105, 1 ≤ k ≤ 105) — количество игр, которые были у Толи и длина названий этих игр.

    Во второй строке следует строка, состоящая из строчных букв латинского алфавита — строка, написанная на диске, разорванная в произвольном месте. Длина этой строки равна n·k. Гарантируется, что длина строки не превосходит 106.

    В третьей строке следует целое положительное число g (n ≤ g ≤ 105) — количество популярных игр, которые могут быть записаны на диске. Гарантируется, что суммарная длина всех названий популярных игр не превосходит 2·106.

    В следующих g строках следует по одному названию популярных игр. Длина каждого из названий равна k. Строки состоят из строчных букв латинского алфавита. Гарантируется, что все названия популярных игр различны.

    Выходные данные

    Если ответа не существует, выведите «NO» (без кавычек).

    В противном случае, выведите в первую строку «YES» (без кавычек). Во вторую строку выведите n целых чисел — номера популярных игр, записанных на диске Толи. Выводить игры нужно в порядке их записи на диске, то есть по часовой стрелке, при этом начинать вывод можно с любой игры. Помните, что каждая популярная игра могла быть записана на диск не более одного раза. Если ответов несколько, разрешается вывести любой из них.

    E. Подчинённые

    графы жадные алгоритмы Конструктив сортировки Структуры данных *1900

    В крупной компании работают n сотрудников, каждый из которых имеет уникальный номер от 1 до n. Из них ровно один сотрудник является главным, его номер равен s. Также известно, что все сотрудники, кроме главного, имеют ровно одного непосредственного начальника.

    Каждому из сотрудников было поручено подать информацию о том, сколько начальников у него есть (не только непосредственных). Под начальниками сотрудника понимается его непосредственный начальник, а также непосредственный начальник непосредственного начальника данного сотрудника, и так далее. Например, если в компании три сотрудника, первый из которых главный, у второго сотрудника непосредственный начальник — первый сотрудник, а у третьего сотрудника непосредственный начальник второй сотрудник, то у третьего сотрудника всего два начальника — один непосредственный и один не непосредственный. Главный сотрудник является начальником всех сотрудников, кроме самого себя.

    Некоторые из сотрудников поторопились, ошиблись в подсчете и подали неверную информацию. Перед вами стоит задача определить минимально возможное число сотрудников, которые могли допустить ошибку при подаче информации.

    Входные данные

    В первой строке следует два целых положительных числа n и s (1 ≤ n ≤ 2·105, 1 ≤ s ≤ n) — количество сотрудников и номер главного сотрудника.

    Во второй строке следует n целых чисел a1, a2, ..., an (0 ≤ ai ≤ n - 1), где ai равно количеству начальников (не обязательно непосредственных) у сотрудника i, о котором он сообщил при подаче информации.

    Выходные данные

    Выведите минимально возможное число сотрудников, которые могли допустить ошибку при подаче информации.

    Примечание

    В первом примере мог ошибиться, например, только первый сотрудник, в том случае, если:

    • у первого сотрудника начальником является второй сотрудник,
    • у третьего сотрудника начальником является первый сотрудник,
    • второй сотрудник является главным.

    L. Expression Queries

    Структуры данных *3200

    A simplified arithmetic expression (SAE) is an arithmetic expression defined by the following grammar:

    • <SAE> ::= <Number> | <SAE>+<SAE> | <SAE>*<SAE> | (<SAE>)
    • <Number> ::= <Digit> | <Digit><Number>
    • <Digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

    In other words it's a correct arithmetic expression that is allowed to contain brackets, numbers (possibly with leading zeros), multiplications and additions. For example expressions "(0+01)", "0" and "1*(0)" are simplified arithmetic expressions, but expressions "2-1", "+1" and "1+2)" are not.

    Given a string s1s2...s|s| that represents a SAE; si denotes the i-th character of the string which can be either a digit ('0'-'9'), a plus sign ('+'), a multiplication sign ('*'), an opening round bracket '(' or a closing round bracket ')'.

    A part slsl + 1...sr of this string is called a sub-expression if and only if it is a SAE.

    You task is to answer m queries, each of which is a pair of integers li, ri (1 ≤ li ≤ ri ≤ |s|). For each query determine whether the corresponding part of the given string is a sub-expression and in case it's a sub-expression calculate its value modulo 1000000007 (109 + 7). The values should be calculated using standard operator priorities.

    Input

    The first line of the input contains non-empty string s (1 ≤ |s| ≤ 4·105) which represents a correct SAE. Each character of the string can be one of the following characters: '*', '+', '(', ')' or a digit ('0'-'9'). The expression might contain extra-huge numbers.

    The second line contains an integer m (1 ≤ m ≤ 4·105) which is the number of queries. Each of the next m lines contains two space-separated integers li, ri (1 ≤ li ≤ ri ≤ |s|) — the i-th query.

    Output

    The i-th number of output should be the answer for the i-th query. If the i-th query corresponds to a valid sub-expression output the value of the sub-expression modulo 1000000007 (109 + 7). Otherwise output -1 as an answer for the query. Print numbers on separate lines.

    D. Археология 80-го уровня

    жадные алгоритмы Перебор сортировки Структуры данных *2200

    Археологи, найдя секретный ход в подземелье одной из пирамид в Цикляндии, столкнулись с необычным замком на двери в сокровищницу. На замке было написано n слов, каждое из которых состоит из нескольких иероглифов. Рядом с замком на стене был обнаружен необычный круглый рычаг, поворот которого меняет иероглифы, из которых состоят слова на замке, по некоторому принципу. Также рядом с иероглифом была найдена надпись на древнецикляндском, которая гласит, что замок откроется, только если слова, написанные на замке, станут идти в лексикографическом порядке (определение дано в пояснении).

    Несмотря на то, что археологи отлично знали весь древнецикляндский алфавит, который состоял из c иероглифов, они никак не могли определить закономерность, по которой меняются буквы. Наконец кто-то догадался позвать вас, главного мыслителя современной Цикляндии. Вам хватило одного взгляда, чтобы понять, что поворот рычага на одну позицию по часовой стрелке заменяет каждый иероглиф на следующий за ним по алфавиту, то есть x-й (1 ≤ x ≤ c - 1) иероглиф превращается в (x + 1)-й, а c-й превращается в первый.

    Помогите археологам определить, на сколько позиций по часовой стрелке надо повернуть рычаг, чтобы можно было открыть дверь, либо определите, что требуемого положения рычага не существует, и надо либо искать ещё какой-нибудь потайной рычаг, либо идти за динамитом.

    Входные данные

    В первой строке находится два числа n и c (2 ≤ n ≤ 500 000, 1 ≤ c ≤ 106) — количество слов, написанных на замке, и количество иероглифов в древнецикляндском алфавите.

    Каждая из последующих n строк описывает одно слово, написанное на замке. В i-й из последующих строк сначала находится целое число li (1 ≤ li ≤ 500 000), обозначающее длину i-го слова, после чего следует li целых чисел wi, 1, wi, 2, ..., wi, li (1 ≤ wi, j ≤ c) — алфавитные номера иероглифов, составляющих i-е слово. Символ 1 является самым маленьким в древнецикляндском алфавите, а символ c — самым большим.

    Гарантируется, что суммарная длина всех слов не превосходит 106.

    Выходные данные

    Если возможно открыть дверь, поворачивая рычаг, выведите число x (0 ≤ x ≤ c - 1), обозначающее, сколько раз его надо повернуть по часовой стрелке. Если подходящих значений x несколько, выведите любое из них.

    Если, поворачивая рычаг, дверь открыть невозможно, выведите  - 1.

    Примечание

    Слово a1, a2, ..., am длины m лексикографически не превосходит слова b1, b2, ..., bk длины k, если выполняется одно из двух:

    • либо в первой позиции i, такой что ai ≠ bi, символ ai идёт раньше по алфавиту, чем символ bi, то есть в первой различающейся позиции символ слова a меньше символа слова b;
    • либо (если такой позиции нет) m ≤ k, то есть второе слово начинается с первого либо совпадает с ним

    Про последовательность слов говорят, что они идут в лексикографическом порядке, если каждое слово в нём (кроме последнего) лексикографически не превосходит следующего за ним.

    В первом примере после поворота рычага на 1 позицию по часовой стрелке слова примут следующий вид:


    1 3
    2
    3 1 2
    3 1 2 3

    Во втором примере слова уже идут в лексикографическом порядке.

    Можно проверить, что в последнем примере, какой бы сдвиг мы ни применили, слова не станут идти в лексикографическом порядке.

    F. Видеокарты

    математика Перебор реализация Структуры данных теория чисел *1900

    Маленький Влад обожает играть в популярную игру Bota-2 на своем компьютере. На днях разработчики сообщили о выходе её продолжения под названием Bota-3. Разумеется, Влад тут же её приобрёл, но оказалось, что компьютер Влада слишком старый для этой игры, поэтому он отправился в магазин за обновлением для него.

    В магазине Влад увидел n видеокарт, i-я из которых имеет свою мощность ai, выражаемую целым положительным числом. Для того, чтобы игра точно заработала, Влад решил купить не одну, а несколько видеокарт и объединить их мощности по новейшей технологии. Для использования этой технологии одна из видеокарт выбирается в качестве ведущей, а все остальные видеокарты подключаются к ней в качестве вторичных. Для корректной работы этой конструкции необходимо, чтобы мощность каждой видеокарты была кратна мощности ведущей видеокарты. Для обеспечения совместимости мощность каждой вторичной видеокарты может быть понижена до любого меньшего целого положительного значения. При этом мощность опорной видеокарты должна оставаться оригинальной, то есть не может быть уменьшена.

    У Влада очень много денег, поэтому он может купить любые видеокарты. Помогите ему выбрать такие видеокарты, чтобы после необходимого понижения их мощностей и соединения их по новой технологии суммарная итоговая мощность видеокарт была максимальной.

    Входные данные

    В первой строке находится целое число n (1 ≤ n ≤ 200 000) — количество видеокарт в магазине.

    Во второй строке находится n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 200 000), обозначающих мощности видеокарт.

    Выходные данные

    В единственной строке выведите целое число — максимальную возможную суммарную итоговую мощность видеокарт.

    Примечание

    В первом примере выгодно купить видеокарты с мощностями 3, 15 и 9. В таком случае можно выбрать видеокарту с мощностью 3 ведущей, а все остальные видеокарты будут с ней совместимы. Суммарная мощность в таком случае будет равна 3 + 15 + 9 = 27. Если же купить все видеокарты и выбрать видеокарту с мощностью 2 ведущей, то мощности каждой из остальных трёх видеокарт придётся понизить на 1, чтобы они стали кратны 2, а значит итоговая мощность будет 2 + 2 + 14 + 8 = 26, что менее выгодно. Обратите внимание, что не разрешается понижать мощность ведущей видеокарты, то есть получить сумму мощностей 3 + 1 + 15 + 9 = 28 нельзя.

    Во втором примере выгодно купить все видеокарты, а в качестве ведущей выбрать видеокарту с мощностью 2. Видеокарта с мощностью 7 с ней несовместима, поэтому её мощность придется понизить до 6. Суммарная мощность будет равна 8 + 2 + 2 + 6 = 18.

    D. Скульптор Костя

    Структуры данных хэши *1600

    Костя — гениальный скульптор, его посетила мысль: высечь мраморную скульптуру в форме шара. У Кости есть друг Захар, работающий на карьере. Захар узнал об идее Кости и теперь хочет подарить Косте прямоугольный параллелепипед мрамора, из которого можно высечь шар.

    Захару доступны n камней, i-ый из которых представляет собой прямоугольный параллелепипед с длинами рёбер ai, bi и ci. Он может взять из них не больше двух камней и подарить их Косте.

    Если Захар берёт два камня, то он должен склеить их по одной из граней так, чтобы получился новый кусок мрамора, являющийся цельным прямоугольным параллелепипедом. Таким образом, склеивать по грани можно только такие пары камней, если две грани, по которым будет происходить склейка, совпадают как прямоугольники. При таком склеивании разрешается поворачивать и переворачивать камни произвольным образом.

    Помогите Захару выбрать такой подарок, чтобы Костя смог высечь шар наибольшего объёма и подарить его Захару.

    Входные данные

    Первая строка входных данных содержит целое число n (1 ≤ n ≤ 105). Далее следуют n строк, в i-й из которых содержатся три целых числа ai, bi и ci (1 ≤ ai, bi, ci ≤ 109) — длины рёбер i-го камня. Обратите внимание, даже если два камня имеют совершенно одинаковые размеры, они всё равно считаются двумя различными камнями и их можно склеивать.

    Выходные данные

    В первой строке выведите k (1 ≤ k ≤ 2) — количество камней, выбранных Захаром. Во второй строке выведите k различных чисел от 1 до n — номера камней, которые нужно выбрать. Считайте, что камни пронумерованы от 1 до n в порядке их задания во входных данных.

    Вы можете выводить номера камней в любом порядке. Если решений несколько, выведите любое.

    Примечание

    В первом примере мы можем соединить пары камней:

    • 2 и 4, размер параллелепипеда: 3 × 2 × 5, радиус вписанного шара 1
    • 2 и 5, размер параллелепипеда: 3 × 2 × 8, или 6 × 2 × 4, или 3 × 4 × 4, радиус вписанного шара 1, или 1, или 1.5 соответственно
    • 2 и 6, размер параллелепипеда: 3 × 5 × 4, радиус вписанного шара 1.5
    • 4 и 5, размер параллелепипеда: 3 × 2 × 5, радиус вписанного шара 1
    • 5 и 6, размер параллелепипеда: 3 × 4 × 5, радиус вписанного шара 1.5

    Либо взять только один камень:

    • 1, размер параллелепипеда: 5 × 5 × 5, радиус вписанного шара 2.5
    • 2, размер параллелепипеда: 3 × 2 × 4, радиус вписанного шара 1
    • 3, размер параллелепипеда: 1 × 4 × 1, радиус вписанного шара 0.5
    • 4, размер параллелепипеда: 2 × 1 × 3, радиус вписанного шара 0.5
    • 5, размер параллелепипеда: 3 × 2 × 4, радиус вписанного шара 1
    • 6, размер параллелепипеда: 3 × 3 × 4, радиус вписанного шара 1.5

    Выгоднее всего взять только первый камень.

    E. Сон на уроке

    Конструктив математика Структуры данных *2400

    Учебный год только начался, а уроки и олимпиады уже занимают всё свободное время. Неудивительно, что сегодня Ольга уснула на уроке литературы. Оле приснилось, что она находится на лестнице.

    Лестница состоит из n ступенек. Ступеньки пронумерованы снизу вверх (то есть 1-я — самая нижняя, а n-я — самая верхняя). Над каждой ступенькой висит стрелка, указывающая направление движения (вверх или вниз) с этой ступеньки, причем, как только Оля уходит с очередной ступеньки, направление стрелки над ней меняется на противоположное, то есть направление «вверх» меняется на направление «вниз», а направление «вниз» — на направление «вверх».

    Оля всегда перемещается на следующую ступеньку в том направлении, что указано на текущей ступеньке.

    Если Оля выйдет за пределы лестницы, то она упадёт и проснётся. Выходом за пределы лестницы считается движение вниз с первой ступеньки или движение вверх с последней (то есть n-й) ступеньки.

    За одну секунду Оля движется на одну ступеньку вверх или вниз в соответствии с направлением стрелки, расположенной на ступеньке, на которой была Оля в начале секунды.

    Для каждой ступеньки посчитайте длительность сна, если Оля оказывается на этой ступеньке в самом начале сна.

    Падение Оли занимает тоже одну секунду, то есть, если она оказалась на первой ступеньке и идёт вниз, то она проснётся в следующую секунду.

    Входные данные

    В первой строке находится целое число n (1 ≤ n ≤ 106) — количество ступенек на лестнице.

    Вторая строка содержит строку s длины n, обозначающую направление стрелок на ступеньках. Символ i строки s обозначает изначальное направление на стрелке над i-ой ступенькой и равен либо 'U' (означает, что стрелка направленна вверх), либо 'D' (означает, что стрелка направленна вниз).

    Выходные данные

    Выведите n чисел, i-е из которых соответствует продолжительности сна Оли в секундах, или равно  - 1 в том случае, если Оля никогда не выйдет за пределы лестницы, если в начале сна она окажется на i-й ступеньке.

    F. Недовольство автомобилистов

    графы Деревья снм Структуры данных *2200

    В одном королевстве имеется n городов и m двусторонних дорог. Каждая дорога соединяет пару городов, причём для каждой дороги известен уровень недовольства ею автомобилистами — величина wi.

    Для каждой дороги известна величина ci — сколько надо потратить лямзиков, чтобы уменьшить уровень недовольства этой дорогой на единицу. Таким образом, чтобы уменьшить недовольство i-й дорогой на k, надо потратить k·ci лямзиков. При этом допустимо, чтобы недовольство стало нулевым или даже отрицательным.

    В соответствии с приказом короля, необходимо выбрать n - 1 дорогу, сделав их главными дорогами. Должно выполняться важное условие: из любого города должно быть возможно проехать в любой другой по главным дорогам.

    У министерства дорог есть бюджет S лямзиков на проведение реформы. Министерство планирует потратить этот бюджет на ремонт некоторых дорог (то есть уменьшить недовольство ими), а уже затем выбрать n - 1 главную дорогу.

    Помогите потратить бюджет так, а затем и произвести выбор главных дорог, чтобы суммарное недовольство главными дорогами было как можно меньше. При этом величина недовольства некоторыми дорогами может стать отрицательной. Не обязательно тратить весь бюджет S полностью.

    Гарантируется, что из любого города королевства можно добраться по дорогам в любой другой город королевства. Каждая дорога в королевстве — двусторонняя.

    Входные данные

    В первой строке входных данных находится два целых числа n и m (2 ≤ n ≤ 2·105, n - 1 ≤ m ≤ 2·105) — количество городов и дорог в королевстве соответственно.

    Во второй строке входных данных содержатся m целых чисел w1, w2, ..., wm (1 ≤ wi ≤ 109), где wi — недовольство автомобилистов i-й дорогой.

    В третьей строке входных данных содержатся m целых чисел c1, c2, ..., cm (1 ≤ ci ≤ 109), где ci  — стоимость в лямзиках уменьшения недовольства i-й дорогой на единицу.

    В следующих m строках находятся описания дорог. В i-ой из этих строк находится пара целых чисел ai и bi (1 ≤ ai, bi ≤ n, ai ≠ bi) — означающих, что i-я дорога соединяет города ai и bi. Так как все дороги двусторонние, то по i-й дороге можно переместиться как из ai в bi, так и наоборот. Допустимо, что пара городов соединена более чем одной дорогой.

    В последней строке входных данных находится одно число S (0 ≤ S ≤ 109) — количество лямзиков, которые можно потратить на проведение реформы.

    Выходные данные

    В первой строке выведите K — минимально возможное суммарное недовольство главными дорогами.

    В следующих n - 1 строках выведите по два целых числа x, vx — означающих, что дорога x является главной, и дорога x после реформы имеет уровень недовольства vx.

    Считайте, что дороги пронумерованы от 1 до m в порядке их задания во входных данных. Номера рёбер можно выводить в произвольном порядке. Если решений несколько, выведите любое.

    B. Алёна и дерево

    Бинарный поиск графы Деревья поиск в глубину и подобное Структуры данных *1900

    У Алёны есть дерево из n вершин. Корень дерева — вершина с номером 1. В вершину с номером i Алёна записала положительное целое число ai. Также, девочка записала на каждом ребре дерева какое-то положительное целое число (возможно, различные числа на различных ребрах).

    Определим dist(v, u) как сумму чисел, записанных на ребрах, которые лежат на кратчайшем пути из v в u.

    Вершина дерева v контролирует вершину u (v ≠ u), если u лежит в поддереве v и dist(v, u) ≤ au.

    Девочка хочет поселиться в некоторой вершине дерева. Для этого она хотела бы знать для каждой вершины v, сколько в дереве есть вершин u таких, что вершина v контролирует вершину u.

    Входные данные

    В первой строке находится одно число n (1 ≤ n ≤ 2·105).

    Во второй строке находится n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — числа, записанные в вершинах.

    В следующих (n - 1)-й строке находятся по 2 числа. В i-й из этих строк находятся целые числа pi и wi (1 ≤ pi ≤ n, 1 ≤ wi ≤ 109) — предок вершины (i + 1) и число, написанное на ребре от pi к (i + 1).

    Гарантируется, что заданный граф — дерево.

    Выходные данные

    Выведите в одной строке n чисел — i-е из этих чисел должно равняться количеству вершин, которое контролируется вершиной с номером i.

    Примечание

    В тесте из условия вершина 1 контролирует вершину 3, также вершина 3 контролирует вершину 5 (обратите внимание, отсюда не следует, что вершина 1 контролирует вершину 5).

    C. Алёна и башни

    Структуры данных *2500

    У Алёны есть n башен из кубиков. Каждый кубик имеет размеры 1 × 1 × 1. Башня представляет из себя ненулевое количество кубиков, стоящих друг на друге. Башни стоят вплотную в один ряд.

    Алёна выбирает некую непрерывную последовательность башен и на каждую башню сверху кладет еще сколько-то кубиков. Более формально: Алёна выбирает последовательность башен с li по ri и на каждую из этих башен кладет сверху еще по di кубиков.

    Пусть a1, a2, ..., an — высоты башен слева направо. Назовем непрерывную последовательность башен al, al + 1, ..., ar горой, если существует такое k (l ≤ k ≤ r), что al < al + 1 < al + 2 < ... < ak > ak + 1 > ak + 2 > ... > ar.

    После каждого добавления di кубиков на непрерывной последовательности башен с li по ri Алёна хотела бы знать максимальную ширину горы. Ширина непрерывной последовательности башен равна количеству башен в ней.

    Входные данные

    В первой строке находится целое число n (1 ≤ n ≤ 3·105) — количество башен из кубиков.

    Во второй строке находятся n целых чисел — a1, a2, ..., an (1 ≤ ai ≤ 109) — количество кубиков в каждой башне.

    В третьей строке находится целое число m (1 ≤ m ≤ 3·105) — количество запросов.

    В следующих m строках находятся по 3 числа. В i-й из этих строк записаны целые числа li, ri и di (1 ≤ l ≤ r ≤ n, 1 ≤ di ≤ 109), которые обозначают, что нужно на каждую башню с li-й по ri-ю положить сверху по di кубиков.

    Выходные данные

    Выведите m строк. В i-й строке выведите максимальную ширину горы после обработки i-го запроса.

    Примечание

    Рассмотрим тест из условия:

    После добавления по 2 кубика на каждую башню с первой по третью высоты станут равны [7, 7, 7, 5, 5]. Максимальная по ширине гора — [7, 5], следовательно, ответ 2.

    После добавления 1 кубика на вторую башню высоты станут равны [7, 8, 7, 5, 5]. Максимальная по ширине гора — [7, 8, 7, 5], следовательно, ответ 4.

    После добавления 1 кубика на четвертую башню высоту станут равны [7, 8, 7, 6, 5]. Максимальная по ширине гора — [7, 8, 7, 6, 5], следовательно, ответ 5.

    E. Гоша выходит на охоту

    дп математика Перебор Потоки сортировки Структуры данных Теория вероятностей *3000

    Гоша выходит на охоту. Его цель — поймать как можно больше покемонов. У Гоши есть a покеболов и b ультраболов. Всего покемонов n. Они пронумерованы числами от 1 до n. Про i-го покемона Гоша знает, что если бросить в него покеболом, то с вероятностью pi данный покемон будет пойман. Если бросить в i-го покемона ультраболом, то он будет пойман с вероятностью ui. В каждого покемона можно бросить не более чем одним болом каждого типа.

    Охота происходит следующим образом: Гоша сначала выбирает не более чем a покемонов, в которых он будет бросать покеболами, и не более чем b покемонов, в которых он будет бросать ультраболами. После этого Гоша бросает в выбранных покемонов выбранными болами. Если он бросает в покемона и покеболом, и ультраболом, то данный покемон будет пойман, если он будет пойман хотя бы одним из двух болов. Результаты бросков независимы.

    Гоша хочет узнать, чему равно математическое ожидание количества пойманных покемонов, если он будет действовать оптимально. Иными словами, он хочет узнать максимально возможное математическое ожидание.

    Входные данные

    В первой строке входных данных записано три целых числа n, a и b (2 ≤ n ≤ 2000, 0 ≤ a, b ≤ n) — количество покемонов, количество покеболов и количество ультраболов.

    Во второй строке записано n вещественных чисел p1, p2, ..., pn (0 ≤ pi ≤ 1), где pi — вероятность, что Гоша поймает i-го покемона, если бросит в него покеболом.

    В третьей строке записано n вещественных чисел: u1, u2, ..., un (0 ≤ ui ≤ 1), где ui — вероятность, что Гоша поймает i-го покемона, если бросит в него ультраболом.

    Все вероятности заданы ровно с тремя знаками после десятичного разделителя.

    Выходные данные

    Выведите максимально возможное математическое ожидание количества пойманных покемонов. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не превышает 10 - 4.

    D. Вешалка

    Структуры данных *2400

    В одной очень большой и очень солидной компании в раздевалке есть вешалка для пальто. Она представляет собой n крючков, расположенных в ряд. Крючки пронумерованы натуральными числами от 1 до n слева направо.

    В компании очень сложный распорядок работ у сотрудников. В начале рабочего дня все сотрудники находятся не на работе, а вешалка в раздевалке пуста. В некоторые моменты времени сотрудники приходят на работу, а в некоторые уходят.

    Когда сотрудник приходит на работу, он вешает на один из свободных крючков свое пальто. Чтобы доставить своим коллегам как можно меньше неудобств, крючок, на который будет повешено пальто, выбирается следующим образом. Сначала выбирается самый длинный отрезок из подряд идущих пустых крючков. Если таких отрезков несколько, то выбирается самый правый из них. После этого пальто вешается на крючок, расположенный в середине этого отрезка. Если в отрезке четное количество крючков, то пальто вешается на правый из двух срединных крючков.

    Когда сотрудник уходит с работы — он забирает свое пальто. Так как все сотрудники в компании очень уважают друг друга, никто не трогает чужие пальто.

    Время от времени директору этой очень солидной компании становится скучно и он отправляет свою секретаршу посмотреть сколько пальто висят на вешалке с i-го по j-ый крючок включительно. И эту прихоть приходится всегда выполнять — иначе директор начинает злиться и у него случается нервный срыв.

    Чтобы не тратить слишком много времени на перемещение от кабинета директора до раздевалки и обратно, секретарша попросила вас написать программу, эмулирующую работу раздевалки компании.

    Входные данные

    В первой строке содержатся два целых числа n, q (1 ≤ n ≤ 109, 1 ≤ q ≤ 105) — количество крючков на вешалке и количество запросов соответственно. Далее идет q строк с запросами, отсортированными по времени. Запрос вида «0 i j» (1 ≤ i ≤ j ≤ n) — запрос директора. Во входных данных имеется хотя бы один запрос директора. Во всех остальных случаях запрос содержит натуральное число, не превышающее 109 — идентификатор сотрудника. Каждое нечетное появление идентификатора сотрудника в списке запросов — это его приход на работу, каждое четное — его уход. Все сотрудники имеют различные идентификаторы. Во время любого прихода любого сотрудника всегда имеется хотя бы один свободный крючок.

    Выходные данные

    На каждый запрос директора в выходных данных выведите одно число на отдельной строке — количество пальто, висящих на крючках с i-го по j-ый включительно.

    D. Помеченное буквами дерево Arpa и забавные пути Mehrdad

    Деревья поиск в глубину и подобное Структуры данных *2900

    Если вдруг кто-то пропустил, у нас в стране Arpa чудесные девушки.

    У Arpa есть подвешенное дерево (связный ациклический граф), состоящее из n вершин. Вершины пронумерованы от 1 до n, вершина 1 является корнем. На каждом ребре дерева написана некоторая буква. Mehrdad — фанат самовлюбленных вещей. Он называет строку самовлюбленной, если возможно переставить местами символы строки так, чтобы она стала палиндромом.

    Он спросил Arpa про каждую вершину v, какая наибольшая длина среди простых путей в поддереве вершины v таких, что буквы на пути образуют самовлюбленную строку.

    Входные данные

    Первая строка содержит целое число n (1  ≤  n  ≤  5·105) — количество вершин в дереве.

    Далее следует (n  -  1) строка, i-я из них содержит целое число pi + 1 и букву ci + 1 (1  ≤  pi + 1  ≤  i, ci + 1 — строчная буква латинского алфавита, между a и v включительно), которые означают, что между вершинами pi + 1 и i + 1 есть ребро и на нем написана буква ci + 1.

    Выходные данные

    Выведите n чисел. i-е из них должно быть равно наибольшей длине среди простых путей в поддереве вершины i таких, что буквы на пути образуют самовлюбленную строку.

    E. Необычный ДНК Arpa и повышенный интерес Mehrdad

    строковые суфф. структуры Структуры данных *3400

    Все знают, что девушки в стране Arpa... ладно, мысль вам понятна :D

    Все знают, что Arpa — ненормальный человек, он... хорошо, я не могу это объяснить. Mehrdad заинтересовался в причине этого и попросил помощи у Sipa, одного из лучших биологов в стране Arpa. У Sipa есть редактор ДНК.

    Sipa провел анализ ДНК Arpa. Редактор ДНК представляет ДНК Arpa как строку S, состоящую из n строчных букв латинского алфавита. Также, у Sipa есть ДНК нормального человека — строка T, состоящая из строчных букв латинского алфавита.

    Существует (n + 1) способ изменить ДНК Arpa, способы пронумерованы от 0 до n. i-й из них состоит в том, чтобы вставить строку T между i-м и (i + 1)-м символами строки S (0 ≤ i ≤ n). Если i = 0, то T будет вставлена перед S, а если i = n, то после S.

    Mehrdad хочет выбрать наиболее интересный вариант для ДНК Arpa среди этих n + 1 способов. Sipa считает, что ДНК A интереснее ДНК B, если строка A лексикографически меньше строки B. Mehrdad задал Sipa q вопросов:

    Пусть даны целые числа l, r, k, x, y. Какой способ наиболее интересный, если рассматривать только такие способы i, что l ≤ i ≤ r и ? Если существуют несколько наиболее интересных способов, Mehrdad хочет узнать способ с наименьшим номером i.

    Так как Sipa — биолог, а не программист, вы должны помочь ему.

    Входные данные

    Первая строка содержит строки S, T и целое число q (1 ≤ |S|, |T|, q ≤ 105) — ДНК Arpa, ДНК нормального человека и количество вопросов. Строки S и T состоят из строчных букв латинского алфавита.

    Следующие q строк содержат описания вопросов Mehrdad. Каждая из этих строк содержит пять целых чисел l, r, k, x, y (0 ≤ l ≤ r ≤ n, 1 ≤ k ≤ n, 0 ≤ x ≤ y < k).

    Выходные данные

    Выведите q целых чисел. j-е из них должно равняться номеру i наиболее интересного способа среди подходящих под условия j-го вопроса. Если нет ни одного способа i, подходящего под условия некоторого вопроса, выведите -1.

    Примечание

    Рассмотрим первый тест из примера:

    В первом вопросе у Sipa есть два способа: dabc (i = 0) и abdc (i = 2). Последняя (abcd) лучше чем abdc, поэтому ответ равен 2.

    В последнем вопросе нет ни одного i удовлетворяющего 0 ≤ i ≤ 1 and .

    F. Музыка в машине

    жадные алгоритмы Структуры данных *2200

    Саша ездит на работу на машине, и дорога занимает ровно k минут. По дороге он слушает музыку. Все песни в его плейлисте расположены друг за другом и от прослушивания i-й из них Саша получает удовольствие равное ai. При этом i-я песня длится ti минут.

    Перед началом пути Саша включит произвольную песню под номером x, и будет слушать песни по очереди: сначала песню под номером x, затем песню под номером (x + 1), затем песню под номером (x + 2), и так далее. Он будет слушать песни пока не приедет на работу, либо пока не послушает последнюю песню из своего плейлиста.

    Каждую песню Саша может либо прослушать полностью, либо прослушать ее частично. Во втором случае он слушает песню целое число минут хотя бы половину её длительности. Формально, если длина песни равна d минут, то Саша послушает ее в течение не менее минут, а затем сразу переключит на следующую песню (если она есть). Например, если длина песни, которую Саша будет слушать частично, равна 5 минутам, то он должен послушать её хотя бы 3 минуты, а если длина песни равна 8 минутам — хотя бы 4 минуты.

    Переключение песен происходит мгновенно.

    При этом Саша согласен прослушать частично не более w песен. Если последняя прослушанная песня играла менее, чем половину своей длительности, то она не приносит Саше удовольствия и не учитывается в песнях, прослушанных частично. Пропускать песни нельзя. Удовольствие от песни не зависит от режима ее прослушивания, для i-й песни эта величина равна ai.

    Помогите Саше выбрать такое x и выбрать не более w песен для частичного прослушивания, чтобы он получил максимальное удовольствие. Напишите программу находящую максимальное удовольствие, которое может получить Саша, от прослушивания песен по дороге на работу.

    Входные данные

    В первой строке следуют три целых числа n, w и k (1 ≤ w ≤ n ≤ 2·105, 1 ≤ k ≤ 2·109) — количество песен в плейлисте, количество песен, которые Саша согласен послушать частично и время в минутах, за которое Саша доезжает до работы.

    Во второй строке следуют n целых положительных чисел a1, a2, ..., an (1 ≤ ai ≤ 104), где ai равно удовольствию, которое Саша получит от прослушивания i-й песни.

    В третьей строке следуют n целых положительных чисел t1, t2, ..., tn (2 ≤ ti ≤ 104), где ti равно длительности i-й песни в минутах.

    Выходные данные

    Выведите максимальное удовольствие, которое может получить Саша, от прослушивания песен по дороге на работу.

    Примечание

    В первом примере Саше нужно начать прослушивание с песни номер 2. Ее он должен прослушать частично (за 4 минуты), затем полностью прослушать песню номер 3 (за 3 минуты) и потом частично прослушать песню номер 4 (за 3 минуты). После прослушивания этих песен Саша получит удовольствие равное 4 + 3 + 5 = 12. Песню номер 5 Саша прослушать не успеет, так как потратит на прослушивание песен 2, 3 и 4 время равное 4 + 3 + 3 = 10 минутам и до работы останется ехать всего 1 минуту.

    D. Санта-Клаус и палиндром

    жадные алгоритмы Конструктив Структуры данных *2100

    Санта-Клаус очень любит палиндромы. Недавно у него был день рождения. В гости к Санта-Клаусу пришли k друзей, каждый из них подарил ему строку si одной и той же длины n, красота i-й строки равна ai. Возможно, что ai является отрицательным — это значит, что строка не является красивой по мнению Санта-Клауса.

    Санта-Клаус без ума от палиндромов. Ему стало интересно: какую максимальную суммарную красоту может иметь палиндром, если склеить какие-то (возможно все) из подаренных строк? Каждый подарок можно использовать не более одного раза. Обратите внимание, что все подаренные строки имеют одинаковую длину n.

    Напоминаем, что палиндром — это строка, которая не изменится, если её развернуть задом наперёд.

    Так как пустая строка является палиндромом, то искомая максимальная красота — неотрицательна. Даже если все ai отрицательны, Санта-Клаус может получить пустую строку в качестве палиндрома.

    Входные данные

    В первой строке задано два целых числа через пробел, k и n — количество друзей Санта-Клауса и длина строки, подаренной каждым другом (1 ≤ k, n ≤ 100 000; n·k  ≤ 100 000).

    Далее следуют k строк. i-я из них содержит подаренную строку si и её красоту ai ( - 10 000 ≤ ai ≤ 10 000). Строка состоит из n строчных букв латинского алфавита, а её красота — целое число. Подаренные строки могут совпадать. Одинаковые строки могут иметь разную красоту.

    Выходные данные

    Выведите искомую максимальную суммарную красоту.

    Примечание

    В первом примере из условия Санта-Клаус может склеить палиндром abbaaaxyxaaabba, используя строки 5, 2, 7, 6, 3 (склеив их именно в этом порядке).

    E. Санта-Клаус и мандарины

    Бинарный поиск жадные алгоритмы Структуры данных *2100

    У Санта-Клауса есть n мандаринов, причём i-й из них имеет ai долек. Санта-Клаус пришел в школу, где учится k учеников. Он решил угостить их мандаринами.

    Так как на всех мандаринов может не хватить, Санта-Клаус решил поделить их на части, чтобы никто не обиделся. Для этого он может делить мандарины пополам, а также делить любую часть пополам. Если количество долек в мандарине или в части, которую Санта-Клаус делит, нечётное, то в одной получившейся части окажется на одну дольку больше, чем в другой. Делить мандарин или часть мандарина можно лишь в том случае, если после деления каждая получившаяся часть будет иметь хотя бы одну дольку.

    Санта-Клаус хочет дать каждому из школьников ровно один мандарин или одну часть мандарина (в частности, каждый ученик должен получить положительное количество долек). Возможно, что у Санта-Клауса останется несколько мандаринов или частей после того, как он раздаст часть из них школьникам.

    Пусть в результате угощения i-му ученику достанется bi долек. В таком случае радость Санта-Клауса будет равна минимальному значению среди всех bi.

    Найдите максимальную возможную величину радости Санта-Клауса, которую он может получить после угощения учеников мандаринами.

    Входные данные

    В первой строке находятся два целых положительных числа n и k (1 ≤ n ≤ 106, 1 ≤ k ≤ 2·109) — количество мандаринов и количество учеников.

    Во второй строке находится последовательность из n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 107), где ai равно количеству долек в i-м мандарине.

    Выходные данные

    Если невозможно раздать всем ученикам по манадарину или части мандарина, выведите -1. В противном случае выведите максимально возможную величину радости Санта-Клауса.

    Примечание

    В первом примере Санта-Клаусу нужно разделить второй манадрин пополам, чтобы в одной части было 5 долек, а в другой 4. Тогда он сможет отдать одному ученику часть, в которой 5 долек, а второму целый первый манадарин, в котором также 5 долек.

    Во втором примере Санта-Клаусу нужно разделить пополам оба манадрина, тогда он сможет отдать двум ученикам части по 6 долек, а двум другим ученикам — части по 7 долек.

    В третьем примере Санта-Клаус не сможет дать всем ученикам хотя бы по одной дольке, так как у него есть всего 2 дольки и 3 ученика.

    D. Побег с аукциона

    Бинарный поиск Структуры данных *2000

    Сегодня проходит аукцион, в котором принимают участие n человек. Аукцион проходит по классическим правилам. Известно, что было сделано n ставок, при этом не гарантируется, что каждая ставка была сделана уникальным участником, то есть какие-то участники могли и вовсе не делать ставок.

    Каждая ставка определяется парой целых чисел (ai, bi), где ai — номер участника, сделавшего ставку, а bi — величина ставки. Все ставки даны в хронологическом порядке, то есть bi < bi + 1 для всех i < n. Кроме того, ни один из участников не делал две ставки подряд (не перебивал свою ставку), то есть ai ≠ ai + 1 для всех i < n.

    Из праздного любопытства вы заинтересовались следующим вопросом: кто и с какой ставкой выиграет в аукционе, если бы некоторые из участников на самом деле отсутствовали? При этом считается, что этих участников и их ставок просто не было, а среди оставшихся участников новых ставок не появится.

    Обратите внимание, что если после мысленного вычёркивания каких-либо участников получится ситуация, когда кто-то перебивает свою ставку, то необходимо считать, что этого не происходит и из серии последовательных ставок одного и того же человека останется только первая. Для лучшего понимания, посмотрите примеры.

    У вас есть несколько подобных предположений, вычислите ответ для каждого из них.

    Входные данные

    В первой строке дано число n (1 ≤ n ≤ 200 000) — количество участников аукциона и сделанных ставок.

    В следующих n строках расположены по два числа ai и bi (1 ≤ ai ≤ n, 1 ≤ bi ≤ 109, bi < bi + 1) — номер участника, сделавшего i-ю ставку, и размер этой ставки.

    В следующей строке дано число q (1 ≤ q ≤ 200 000) — количество запросов.

    В каждой из следующих q строк дано число k (1 ≤ k ≤ n), а затем k чисел lj (1 ≤ lj ≤ n) — количество отсутствующих участников, и их номера. Все номера в пределах одного запроса различны.

    Гарантируется, что сумма всех k во всех запросах не превосходит 200 000.

    Выходные данные

    Для каждого запроса выведите два числа в одной строке через пробел — номер победителя и величину его ставки. Если победитель отсутствует (то есть не было сделано ни одной ставки), выведите два нуля.

    Примечание

    Пояснение к первому примеру:

    • В первом запросе отсутствует только участник с номером 3, тогда последовательность ставок будет выглядеть следующим образом:
      1. 1 10
      2. 2 100
      3. 1 10 000
      4. 2 100 000
      В такой ситуации побеждает участник с номером 2, при этом его ставка составляет 100 000.
    • Во втором запросе отсутствуют участники 2 и 3, тогда последовательность ставок будет выглядеть следующим образом:
      1. 1 10
      2. 1 10 000
      Здесь победил участник с номером 1, но поскольку участнику не выгодно перебивать свою ставку, то выигрышной ставкой является 10, а не 10 000.
    • В третьем запросе отсутствуют участники 1 и 2, тогда последовательность ставок будет выглядеть следующим образом:
      1. 3 1 000
      2. 3 1 000 000
      Побеждает участник 3 со ставкой 1 000.

    E. Инверсии после перемешивания

    Структуры данных Теория вероятностей *2400

    Дана перестановка целых чисел от 1 до n. Ровно один раз с перестановкой проделывается следующее преобразование: выбирается некоторый случайный отрезок и все его элементы перемешиваются. Формально:

    1. Выбирается случайный подотрезок (непрерывная подпоследовательность) от l до r включительно. При этом все отрезков равновероятны.
    2. Пусть k = r - l + 1, то есть длине выбранного отрезка. Выбирается случайная перестановка чисел от 1 до k, p1, p2, ..., pk. При этом все k! перестановок равновероятны.
    3. К элементам отрезка применяется данная перестановка, то есть перестановка a1, a2, ..., al - 1, al, al + 1, ..., ar - 1, ar, ar + 1, ..., an переходит в перестановку a1, a2, ..., al - 1, al - 1 + p1, al - 1 + p2, ..., al - 1 + pk - 1, al - 1 + pk, ar + 1, ..., an.

    Инверсией в перестановке называется пара элементов (не обязательно соседних), нарушающих порядок сортировки по возрастанию, то есть количество инверсий равно количеству пар (i, j), таких что i < j и ai > aj. Найдите математическое ожидание количества инверсий после выполнения данной операции.

    Входные данные

    В первой строке записано целое число n (1 ≤ n ≤ 100 000) — длина перестановки.

    Во второй строке записано n различных целых чисел от 1 до n — элементы перестановки.

    Выходные данные

    Выведите единственное вещественное число — математическое ожидание количества инверсий. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 9.

    А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

    D. Максимальная сумма

    Деревья дп жадные алгоритмы математика реализация Структуры данных *2000

    Ахмед и Мостафа участвуют в соревнованиях по программированию уже много лет. Однажды их тренер Фегла попросил их решить одну непростую задачу. Конечно же, Ахмед справился, а Мостафа — нет.

    Эта задача похожа на классическую задачу, но имеет другую структуру и ограничения.

    В классической задаче дан массив целых чисел, требуется найти такой подмассив данного массива, что сумма чисел в нем максимальная возможная. Подмассив — последовательность из одного или нескольких подряд идущих элементов данного массива.

    Но в данной задаче дано n маленьких массивов. Из них получается один большой массив — конкатенацией одного или нескольких экземпляров маленьких массивов (каждый маленький массив может встречаться в большом более одного раза). Большой массив задан в виде массива индексов (1-индексированных) маленьких массивов. Конкатенация должна быть выполнена в том же порядке, в котором числа записаны в массиве. После конкатенации на большом массиве решается описанная выше классическая задача.

    Например, пусть маленькие массивы — {1, 6, -2}, {3, 3} и {-5, 1}. Индексы большого массива — {2, 3, 1, 3}. Так, после конкатенации большой массив будет {3, 3, -5, 1, 1, 6, -2, -5, 1}. В этом примере максимальная сумма равна 9.

    Помогите Мостафе решить эту задачу.

    Входные данные

    В первой строке записано два целых числа n и m, где n — количество маленьких массивов (1 ≤ n ≤ 50), а m — количество индексов большого массива (1 ≤ m ≤ 250000). Далее следует n строк. Первое число в i-ой — целое число l, размер i-го маленького массива (1 ≤ l ≤ 5000). Далее следует l целых чисел, каждое из которых не меньше -1000 и не больше 1000. Последняя строка содержит m целых чисел — индексы большого массива. Вы должны конкатенировать маленькие массивы в этом порядке. Каждый индекс не меньше 1 и не больше n.

    Маленькие массивы нумеруются от 1 до n в том же порядке, в котором они заданы во входных данных. Некоторые маленькие массивы могут не использоваться для построения большого массива.

    Заметьте, что массив очень большой. Поэтому, если Вы попытаетесь построить его в явном виде, вы скорее всего превысите ограничения по времени и/или по памяти.

    Выходные данные

    Выведите одно число — наибольшую сумму на каком-либо подмассиве сформированного большого массива. Учтите, что подмассив суммирования не может быть пустым, то есть он должен включать в себя хотя бы один элемент.

    Пожалуйста, не используйте спецификатор %lld для записи 64-х битовых чисел на С++. Рекомендуется использовать поток cout (также вы можете использовать спецификатор %I64d).

    D. Новый год и фейерверки

    дп Перебор поиск в глубину и подобное реализация Структуры данных *1900

    Одной из популярных традиций встречи нового года является запуск в небо фейерверков. Обычно фейерверк взлетает вертикально вверх в течение некоторого времени, после чего взрывается и разделяется на несколько частей, летящих в разных направлениях. Иногда эти части через некоторое время снова взрываются, также разделяясь на несколько частей и так далее.

    Лимак живёт на бесконечном клетчатом поле и у него есть один фейерверк. Поведение этого фейерверка после запуска описывается рекурсией глубины n и продолжительностью каждого из уровней рекурсии t1, t2, ..., tn. Как только Лимак запустит фейерверк в какой-нибудь клетке поля, тот начнёт двигаться вверх. После прохождения t1 клеток (включая стартовую) он взрывается и разделяется на две части, каждая из которых двигается в направлении, изменённом на 45 градусов (для лучшего понимания посмотрите картинки ниже). Таким образом, одна часть будет двигаться в направлении вверх и влево, а другая в направлении вверх и вправо. Каждая из этих частей пройдёт t2 клеток, после чего также разделится на две части, каждая из которых также изменит траекторию на 45 градусов. Процесс будет продолжаться до n-го уровня рекурсии, после чего все 2n - 1 частей взорвутся и исчезнут не создавая новых частей.

    После нескольких уровней рекурсивного разделения частей фейерверка может так оказаться, что две или более частей находятся в одной и той же клетке в один и тот же момент времени — такая ситуация разрешена и эти части не сталкиваются.

    Перед тем как запустить данный фейерверк Лимак хочет убедиться в безопасности этого запуска. Сможете ли вы посчитать количество клеток, которые хотя бы один раз будут посещены какой-либо частью фейерверка?

    Входные данные

    В первой строке входных данных записано целое число n (1 ≤ n ≤ 30) — глубина рекурсии разделения фейерверка на части.

    Во второй строке записаны n целых чисел t1, t2, ..., tn (1 ≤ ti ≤ 5). На i-м уровне каждая из 2i - 1 частей фейерверка пройдёт ti клеток перед тем как взорвётся.

    Выходные данные

    Выведите одно целое число, равное количеству клеток которые будут посещены хотя бы одной частью фейерверка хотя бы один раз.

    Примечание

    Рассмотрим первый пример. Рисунки ниже показывают как будет выглядеть процесс работы фейерверка после каждого уровня рекурсии. Лимак запускает фейерверк из самой нижней красной клетки. После прохождения t1 = 4 клеток (отмеченных красным) он взрывается и делится на две части (их дальнейшее движение показано зелёным). Все взрывы отмечены символом «X». На последнем рисунке присутствуют 4 красных, 4 зелёных, 8 оранжевых и 23 розовых клетки. Таким образом, итоговое количество посещённых клеток равняется 4 + 4 + 8 + 23 = 39.

    Для второго примера рисунки демонстрируют ситуацию на 4, 5 и 6 уровнях рекурсии. На рисунке посередине показаны направления всех частей, которые будут двигаться на следующем уровне.

    E. Новый год и старая подпоследовательность

    дп матрицы разделяй и властвуй Структуры данных *2600

    Строка t называется красивой, если строка «2017» встречается в t в качестве подпоследовательности, а строка «2016» не встречается в t в качестве подпоследовательности. Например, строки «203434107» и «9220617» являются красивыми, а строки «20016», «1234» и «20167» не являются красивыми.

    Уродством строки называется минимальное количество символов, которые надо удалить, чтобы получить красивую строку. Если получить красивую строку удаляя символы невозможно, то её уродство равняется  - 1.

    У Лимака есть строка s длины n, символы которой пронумерованы от 1 до n. Также у него есть q запросов. В i-м запросе выведите уродство подстроки (непрерывной подпоследовательности) s начинающейся с позиции номер ai и заканчивающейся в позиции номер bi (включительно).

    Входные данные

    В первой строке входных данных записаны два числа n и q (4 ≤ n ≤ 200 000, 1 ≤ q ≤ 200 000) — длина строки s и количество запросов соответственно.

    Во второй строке записана строка s длины n. Каждый из символов этой строки является цифрой «0»–«9».

    В i-й из последующих q строк записаны два целых числа ai и bi (1 ≤ ai ≤ bi ≤ n), описывающих подстроку из i-го запроса.

    Выходные данные

    Для каждого запроса выведите уродство соответствующей подстроки.

    Примечание

    Рассмотрим первый пример. Далее запись ugliness(t) означает уродство строки t.

    • В первом запросе ugliness(«20166766») = 4, потому что потребуется удалить все четыре шестёрки.
    • Во втором запросе ugliness(«2016676») = 3, поскольку потребуется удалить все три шестёрки.
    • В третьем запросе ugliness(«0166766») =  - 1, так как нельзя сделать данную строку красивый удалением какого-либо числа символов.

    Во втором примере:

    • Во втором запросе ugliness(«01201666209167») = 2. Оптимальным ответом будет удалить первую цифру «2» и последнюю цифру «6», что даст строку «010166620917», которая является красивой.
    • В третьем запросе ugliness(«016662091670») = 1. Оптимальным ответом является удалить последнюю цифр «6», что даст красивую строку «01666209170».

    D. Федор и купоны

    Бинарный поиск жадные алгоритмы сортировки Структуры данных *2100

    Все наши герои имеют хобби. И Федор не исключение. Ему очень нравится ходить в супермаркет около дома и покупать всякие вещи.

    Все товары в супермаркете имеют уникальный целый номер. И для каждого уникального целого номера найдется ровно один товар в супермаркете. Так как Федор делает много покупок, ему хотелось бы посещать супермаркет с экономией. Поэтому у него есть n скидочных купонов. i-й купон действует на товарах с номерами с li-го по ri-й включительно. Сегодня он решил взять с собой в супермаркет ровно k купонов.

    Федор хочет выбрать k купонов так, чтобы количество таких товаров x, что на товар x действуют все купоны, было максимально (для лучшего понимания посмотрите примеры). Федор, кроме денег, ещё хочет сэкономить силы и время, поэтому просит вас сделать выбор купонов. Помогите Федору!

    Входные данные

    В первой строке входных данных находятся два целых числа n, k (1 ≤ k ≤ n ≤ 3·105) — количество купонов у Федора и количество купонов, которые следует выбрать.

    В каждой из следующих n строк входных данных находятся два целых числа li и ri ( - 109 ≤ li ≤ ri ≤ 109) — описание i-го купона. Купоны могут совпадать.

    Выходные данные

    В первой строке следует вывести единственное целое число — максимальное количество товаров, на которые действуют все купоны. То есть товар, на который не действует какой-то из выбранных купонов, не считается.

    В следующей строке выходных данных следует вывести k различных целых чисел p1, p2, ..., pk (1 ≤ pi ≤ n) — номера купонов, выбрав которые, мы получим максимальное количество товаров, на которые действуют все эти купоны.

    Если оптимальных ответов несколько, выведите любой.

    Примечание

    В первом примере, если Федор возьмет первые два купона, то они оба будут действовать на все товары в отрезке [40, 70]. Всего таких товаров 31.

    Во втором примере ни на один товар не действуют два купона, поэтому ответ 0. Федор может взять любые два купона в этом примере.

    B. Польшар и Игра

    Бинарный поиск жадные алгоритмы игры сортировки Строки Структуры данных *1100

    Польшар играет со Врагошаром в некоторую игру. Правила просты. Игроки по очереди называют слова, называть слово, которое уже прозвучало, нельзя. Начинает Польшар. Проигрывает тот шар, который не может сказать ранее неназванного слова.

    Вам даны списки слов, известных Польшару и Врагошару. Определите, кто выиграет, если оба играют оптимально?

    Входные данные

    Первая строка содержит два целых числа n и m (1 ≤ n, m ≤ 103) — число слов, которые знают Польшар и Врагошар соответственно.

    Затем следуют n строк, по одной в строке — слова, известные Польшару.

    Затем следуют m строк, по одной в строке — слова, известные Врагошару.

    Заметьте, что ни один из шаров не может знать слово больше одного раза (слова различны), но некоторые слова могут быть известны обоим игрокам.

    Каждое слово непустое и состоит из не более чем 500 строчных букв латинского алфавита.

    Выходные данные

    В единственной строке выведите ответ: «YES», если выиграет Польшар, и «NO» иначе. Оба шара играют оптимально.

    Примечание

    В первом примере Польшар знает намного больше слов и выиграет без труда.

    Во втором примере если Польшар скажет вначале kremowka, то Врагошар не сможет использовать это слово. Единственное, что может сделать Врагошар — сказать wiedenska. Польшар скажет wadowicka и выиграет.

    D. Польшар и Многоугольник

    Структуры данных *2000

    У Польшара есть выпуклый многоугольник с n вершинами, причем никакие три его диагонали не пересекаются в одной точке. Польшар захотел улучшить его, нарисовав несколько красных отрезков.

    Он выбрал число k такое, что gcd(n, k) = 1 и пронумеровал вершины многоугольника от 1 до n в порядке обхода по часовой стрелке. Польшар затем повторил следующее действие n раз, стартуя с вершины номер 1:

    Пусть вы закончили предыдущее действие в вершине x (положим x = 1, если текущее действие первое). Нарисуйте отрезок, соединяющий вершину x с k-й следующей вершиной в порядке обхода по часовой стрелке. Это будет либо вершина x + k, либо вершина x + k - n в зависимости от того, какое из этих чисел является корректным номером вершины.

    Ваша задача состоит в том, чтобы посчитать число секций многоугольника после каждого действия. Секцией называется чистая площадь внутри многоугольника, ограниченная нарисованными диагоналями или сторонами многоугольника.

    Входные данные

    Единственная строка содержит два числа n и k (5 ≤ n ≤ 106, 2 ≤ k ≤ n - 2, gcd(n, k) = 1).

    Выходные данные

    Выведите n чисел. i-е из них должно быть равно числу секций после того, как будут нарисованы первые i отрезков.

    Примечание

    Наибольший общий делитель (gcd) двух чисел a и b равен наибольшему натуральному числу, делящему и a, и b без остатка.

    В первом примере вы должны вывести «2 3 5 8 11». Рисунки соответствуют ситуации до и после каждой нарисованной линии.

    C. Никита и стек

    Структуры данных *2200

    У Никиты есть стек. Стек в данной задачи — структура данных, поддерживающая две операции. Операция push(x) кладет число x на верх стека, а операция pop() удаляет верхнее число из стека, то есть последнее добавленное. Если стек пустой, то операция pop() ничего не делает.

    Никита сделал со стеком m операций, да забыл какие. Сейчас Никита пытается вспомнить, какие он сделал операции. Он вспоминает операции по одной. на i-м шаге он вспоминает, какой была операция, что была pi-й по очереди. Другими словами, он вспоминает операции в порядке некоторой перестановки p1, p2, ..., pm. После каждого шага Никита хочет знать, какое число лежало бы сверху стека после выполнения тех операций, что он вспомнил, в соответствующем порядке. Помогите ему!

    Входные данные

    В первой строке записано число m (1 ≤ m ≤ 105) — количество операций, которое сделал Никита.

    В последующих m строках содержатся операции, которые вспоминает Никита. В строке i сначала записаны два числа pi и ti (1 ≤ pi ≤ m, ti = 0 или ti = 1) — номер по порядку, на котором была выполнена операция, которую Никита вспомнил на шаге i, и тип этой операции. ti равняется 0, если это операция pop(), и 1, если это операция push(x). При этом, если это операция push(x), то в этой же строке записано число xi (1 ≤ xi ≤ 106) — число, добавляемое в стек.

    Гарантируется, что среди чисел pi каждое из чисел от 1 до m встретится ровно один раз.

    Выходные данные

    Выведите m чисел. Число i должно равняться числу на вершине стека после выполнения всех операций, которые Никита вспомнил на шагах от 1 до i. Если стек после выполнения этих операций пуст, то выведите -1.

    Примечание

    В первом примере, после того, как Никита вспомнил операцию на первом шаге, операция push(2) — единственная, и поэтому ответ равен 2. После того, как он вспомнил операцию pop(), которая была сделана до push(2), ответ не изменится.

    Во втором примере операции следующие: push(2), push(3) и pop(). Никита вспоминает их в том порядке, в котором они были сделаны.

    В третьем примере Никита вспоминает операции в обратном порядке.

    C. Фестиваль близко!

    сортировки Строки Структуры данных хэши *1900

    В это время года близок фестиваль и вы можете видеть празднующих людей повсюду в Гималаях. В Гималаях есть n школ. Школа i учит gi покемонов. В Гималаях существуют m различных типов покемонов, типы пронумерованы от 1 до m.

    На площадке фестиваля организован специальный эволюционный лагерь, в котором каждый покемон может эволюционировать. Тип покемона может измениться после того, как покемон эволюционирует, однако, если два покемона были одного типа до эволюционирования, то они будут одного типа после. Также, если два покемона были различных типов до эволюционирования, то они будут различными и после него. Возможно, что покемон не поменяет свой тип после эволюционирования.

    Формально, планом эволюционирования называется перестановка f чисел {1, 2, ..., m}, при этом f(x) = y означает, что покемон типа x эволюционирует в тип y.

    Руководители школ заинтригованы специальным лагерем, и все из них хотят эволюционировать всех своих покемонов. Устав Гималаев гласит, что в каждой школе количество покемонов каждого типа до эволюционирования должно быть равно количеству покемонов этого типа после эволюционирования. Руководители хотят найти количество различных планов эволюционирования, удовлетворяющих уставу Гималаев.

    Два плана эволюционирования f1 и f2 считаются различными, если как минимум один тип покемонов эволюционирует в разные типы в этих двух планов, то есть существует i такое, что f1(i) ≠ f2(i).

    Ваша задача — найти число различных планов эволюционирования таких, что если все покемоны во всех школах эволюционируют, количество покемонов каждого типа в каждой из школ останется таким же. Так как это число может быть большим, выведите остаток от его деления на 109 + 7.

    Входные данные

    В первой строке находятся два целых числа n и m (1 ≤ n ≤ 105, 1 ≤ m ≤ 106) — количество школ и количество типов покемонов.

    Следующие n строк содержат описание покемонов в школах. i-я из этих строк начинается с целого числа gi (1 ≤ gi ≤ 105) — числа покемонов в i-й школе. После этого следуют gi целых чисел, означающие типа покемонов в i-й школе. Каждое из этих чисел находится в пределах от 1 до m.

    Общее число покемонов (сумма чисел gi) не превышает 5·105.

    Выходные данные

    Выведите остаток от деления числа удовлетворяющих уставу планов эволюционирования на 109 + 7.

    Примечание

    В первом примере единственный корректный план эволюционирования выглядит так:

    Во втором примере подходит любая перестановка чисел (1,  2,  3).

    В третьем примере есть два корректных плана:

    В четвертом примере единственный корректный план эволюционирования выглядит так:

    F. Команда Р снова на высоте!

    графы кратчайшие пути Структуры данных *2800

    Сейчас новый год, поэтому Баш хочет подарить подарки своим друзьям. В Гималаях n городов, и m двусторонних дорог между ними. Баш живет в городе s. У Баша ровно один друг в каждом из остальных городов. Так как Баш хочет сделать сюрприз своим друзьям, он решил отправить Пикачу к каждому из своих друзей. Так как не все города достижимы из города, где живет Баш, он посылает Пикачу только тем друзьям, которые живут в достижимых городах. Также, он хочет послать их как можно раньше.

    Баш нашел, какое минимальное время необходимо каждому из Пикачу, чтобы добраться до места назначения. Так как он перфекционист, он уведомил всех своих друзей о времени прибытия подарка. Все Пикачу двигаются со скоростью 1 метр в секунду. Друзья Баша будут расстроены, если подарки задержаться. К сожалению, команда Р на свободе и знает о плане Баша. Они хотят максимизировать число друзей Баша, которые расстроятся.

    Они планируют разрушить ровно один из n - 1 городов, в которых живут друзья. Друг, которых жил в этом городе, умирает, поэтому он тоже расстраивается.

    Заметьте, что если город разрушен, то все дороги, ведущие в этот город, также разрушены, поэтому некоторым Пикачу может потребоваться выбрать другой, более длинный путь.

    Также заметьте, что только те друзья, которые ждут подарка, могут считаться расстроенными, даже если они умирают.

    Так как Баш — уже легенда, помогите в этот раз команде Р и найдите максимальное возможное число друзей, которые будут расстроены, если разрушен ровно один город.

    Входные данные

    Первая строка содержит три целых числа n, m и s (2 ≤ n ≤ 2·105, , 1 ≤ s ≤ n) — число городов, число дорог в Гималаях и город, в котором живет Баш.

    Каждая из следующих m строк содержит три целых числа u, v и w (1 ≤ u, v ≤ n, u ≠ v, 1 ≤ w ≤ 109), означающих, что существует дорога между городами u и v длины w метров.

    Гарантируется, что не существует дороги, которая соединяет один и тот же город, а также, не существует нескольких дорог между одной и той же парой городов.

    Выходные данные

    Выведите единственное число — ответ на задачу.

    Примечание

    В первом примере после разрушения города 2 длина кратчайших путей между парами городов (3, 2) и (3, 4) изменится. Поэтому ответ равен 2.

    G. Может ли Баш выйти из положения?

    графы Деревья разделяй и властвуй Структуры данных *3400

    Вау! Вы отлично помогли команде Р поймать всех покемонов, посланных Башем. Мяут, член частью команды Р, уже выучил человеческий язык, и теперь хочет обучиться программированию. Он согласился освободить покемонов, если Баш ответит на его вопросы.

    В начале Мяут дает Башу взвешенное дерево из n вершин и последовательность a1, a2..., an, которая является перестановкой чисел 1, 2, ..., n. Теперь Мяут задает q запросов в одной из следующих форм:

    • 1 l r v значит, что Баш должен посчитать , где dist(a, b) — длина кратчайшего пути от вершины a до вершины b в данном дереве.
    • 2 x значит, что Баш должен поменять местами ax и ax + 1 в заданной последовательности. Новая последовательность будет использоваться для следующих запросов.

    Помогите Башу ответит на запросы!

    Входные данные

    Первая строка содержит два целых числа n и q (1 ≤ n ≤ 2·105, 1 ≤ q ≤ 2·105) — количество вершин в дереве и число запросов, соответственно.

    Следующая строка содержит n целых чисел — последовательность a1, a2, ..., an, являющуюся перестановкой чисел 1, 2, ..., n.

    Каждая из следующих n - 1 строк содержит три целых числа u, v, и w, означающих, что существует ребро между вершинами u и v длины w, (1 ≤ u, v ≤ n, u ≠ v, 1 ≤ w ≤ 106). Гарантируется, что заданный граф является деревом.

    Далее следуют запросы. Каждый запрос записан в двух строках. В первой строке находится целое число t, обозначающее тип запроса. Следующая строка содержит описание запроса:

    • t = 1: Вторая строка содержит три числа a, b и c (1 ≤ a, b, c < 230), используя которые, l, r и v могут быть получены по следующей формуле:
      • ,
      • ,
      • .
    • t = 2: Вторая строка содержит целое число a (1 ≤ a < 230), используя которое, x может быть получено по следующей формуле:
      • .

    Число ansi равно ответу на i-й запрос, можете считать, что ans0 = 0. Если i-й запрос имеет тип 2, то ansi = ansi - 1. Гарантируется, что:

    • для каждого запроса типа 1: 1 ≤ l ≤ r ≤ n, 1 ≤ v ≤ n,
    • для каждого запроса типа 2: 1 ≤ x ≤ n - 1.

    Операция означает побитовое исключающее ИЛИ.

    Выходные данные

    Для каждого запроса типа 1 выведите единственное число в отдельной строке — ответ на запрос.

    Примечание

    В примере запросы следующие:

    • 1 1 5 4
    • 1 1 3 3
    • 2 3
    • 2 2
    • 1 1 3 3

    F. Турист

    Бинарный поиск дп Структуры данных *2300

    Турист путешествует пешком вдоль координатной оси Ox. Идти можно в любом из двух возможных направлений и с любой скоростью, не превышающей V, в том числе находиться на месте. Из газетных анонсов он знает, что в момент t1 в точке с координатой x1 состоится одно интересное событие, в момент t2 в точке с координатой x2 — еще одно, и т. д., до (xN, tN). Интересные события достаточно кратковременны, их можно считать мгновенными. Считается, что турист посетил событие i, если в момент ti он находился в точке с координатой xi.

    Напишите программу, которая найдет максимальное количество событий, которые сможет посетить турист, для таких двух предположений: А) сначала движения (в момент времени 0) турист находится в точке 0; Б) турист может выбрать начальную точку, из которой он стартует.

    Входные данные

    Первая строка входного файла содержит единственное натуральное число N (1 ≤ N ≤ 100 000) — количество интересных событий. Последующие N строк содержат по два целых числа xi и ti — координату и момент времени события с номером i. Последняя (N + 2)-ая строка файла содержит единственное целое число V — значение максимальной скорости движения туриста. Все значения xi принадлежат диапазону  - 2·108 ≤ xi ≤ 2·108, все значения ti принадлежат диапазану 1 ≤ ti ≤ 2·106, значение V принадлежит диапазону 1 ≤ V ≤ 1000. Во входных данных возможны различные события, имеющие одинаковую координату x или одинаковое время t, но невозможны различные события, имеющие одинаковые x и t одновременно.

    Выходные данные

    Единственная строка выходного файла должна содержать два целых числа — максимально возможное количество событий, которые турист может посетить, если он начнет движение в момент 0 из точки 0, затем максимально возможное количество событий, которые турист может посетить, самостоятельно выбрав точку старта.

    F. Даша и фотографии

    дп Перебор реализация Структуры данных *2600

    Даша решила немного отдохнуть после решения задачи D и стала просматривать фотографии с прошедших олимпиад.

    Назовем фотографией матрицу размера n × m, состоящую из строчных латинских букв.

    Некоторые k фотографий особенно заинтересовали её, так как их можно было получить из фотографии-шаблона путем покраски прямоугольной области в некоторый цвет. Назовем такие фотографии особенными.

    Более формально i-я особенная фотография получается из фотографии-шаблона путем замены всех символов на некотором прямоугольнике с левым верхним углом в клетке с координатами (ai, bi) и с правым нижним углом в клетке с координатами (ci, di) на символ ei.

    Даша просит вас найти особенную фотографию, суммарное расстояние от которой до всех остальных особенных фотографий минимально. И вычислить это расстояние.

    Определим расстояние между двумя фотографиями, как сумму расстояний между всеми соответствующими буквами. Расстоянием между двумя буквами является модуль разницы их позиций в алфавите. Например, расстояние между буквами 'h' и 'm' равно |8 - 13| = 5, потому что буква 'h' 8-я в алфавите, а буква 'm' — 13-я.

    Входные данные

    Первая строка содержит три целых числа n, m, k (1 ≤ n, m ≤ 103, 1 ≤ k ≤ 3·105) — количество строк в фотографии-шаблоне, количество столбцов и количество особенных фотографий заинтересовавших Дашу.

    Следующие n строк содержат строку длины m состоящую из маленьких латинских символов — описание фотографии-шаблона.

    Каждая из следующих k строк содержат описание особенной фотографии в следующем формате, «ai bi ci di ei» (1 ≤ ai ≤ ci ≤ n, 1 ≤ bi ≤ di ≤ m), где (ai, bi) — координата левого верхнего угла прямоугольника, (ci, di) — правого нижнего, а ei — маленькая латинская буква на которую происходит замена в описанном прямоугольнике фотографии-шаблона.

    Выходные данные

    В единственную строку выходных данных необходимо вывести минимальное суммарное расстояние от найденной особенной фотографии до всех остальных особенных фотографий.

    Примечание

    В первом примере фотографии выглядят так:


    bba aaa
    bba acc
    aaa acc

    Расстояние между ними равно 10.

    E. Радиостанции

    Бинарный поиск Структуры данных *2200

    В целочисленных точках прямой расположены n радиостанций, причём i-я из них характеризуется тремя целыми числами:

    • xi — координата i-й радиостанции на прямой,
    • ri — радиус вещания i-й радиостанции,
    • fi — частота вещания i-й радиостанции.

    Считается, что две радиостанции с номерами i и j достают друг до друга, если радиус вещания каждой из них больше либо равен расстоянию между ними, то есть min(ri, rj) ≥ |xi - xj|.

    Назовём пару радиостанций (i, j) плохой, если i < j, радиостанции i и j достают друг до друга и они близки по частотам, а именно, |fi - fj| ≤ k.

    Найдите количество пар плохих радиостанций.

    Входные данные

    В первой строке следуют два целых числа n и k (1 ≤ n ≤ 105, 0 ≤ k ≤ 10) — количество радиостанций и максимальная разность частот, при которой пара достающих друг до друга радиостанций считается плохой.

    Далее в n строках следует описание радиостанций. В каждой строке через пробел записаны три целых числа xi, ri и fi (1 ≤ xi, ri ≤ 109, 1 ≤ fi ≤ 104) — координата i-й радиостанции, радиус её вещания и частота её вещания. Никакие две радиостанции не расположены в одной и той же координате.

    Выходные данные

    Выведите количество пар плохих радиостанций.

    D. Тимофей и плоское дерево

    графы Деревья кратчайшие пути Структуры данных хэши *2900

    У маленького Тимофея есть большое дерево — неориентированный связный граф из n вершин, не содержащий ни одного простого цикла. Он очень любит по нему гулять. Дерево Тимофея плоское и когда он гуляет по нему, он видит всё дерево целиком. Вполне естественно, что, находясь в вершине, он видит дерево подвешенным за эту вершину.

    Тимофей считает, что чем больше в дереве вершин, поддеревья которых попарно неизоморфны, тем лучше выглядит подвешенное дерево. Под поддеревом вершины подвешенного дерева он понимает подграф, состоящий из этой вершины и всех ее потомков. Помогите ему встать в такую вершину, что размер максимального подмножества вершин, поддеревья которых попарно неизоморфны при подвешивании за эту вершину, был максимально возможным.

    Поддеревья вершин u и v изоморфны, если число сыновей у u и v совпадают, и можно так упорядочить сыновей, что поддерево первого сына u изоморфно поддереву первого сына v, поддерево второго сына u изоморфно поддереву второго сына v, и так далее. В частности, поддеревья, состоящие из одной вершины, всегда изоморфны друг другу.

    Входные данные

    В первой строке находится одно целое число n(1 ≤ n ≤ 105) — количество вершин в дереве.

    В следующих n - 1 строках заданы по два числа ui и vi (1 ≤ ui, vi ≤ 105, ui ≠ vi), означающие номера вершин, соединенных i-м ребром.

    Гарантируется, что заданный граф является деревом.

    Выходные данные

    Выведите одно число — номер вершины, в которую надо встать Тимофею. Если ответов несколько, можно вывести любой.

    Примечание

    В первом примере можно встать в вершину 1 или вершину 3, тогда все поддеревья будут неизоморфны. Если же встать в вершину 2, то поддеревья вершин 1 и 3 будут изоморфны друг другу.

    Во втором примере, если встать в вершину 1, то только поддеревья вершин 4 и 5 будут изоморфны.

    В третьем примере, если встать в вершину 1, то поддеревья вершин 2, 3, 4, 6, 7 и 8 будут изоморфны друг другу. Если же встать в вершину 2, то изоморфны будут только воддеревья вершин 3, 4, 6, 7 и 8. А если, например, встать в вершину 5, то будут изоморфны поддеревья вершин 2, 3, 4, 6, 7 и 8, а также поддеревья вершин 1 и 9:


    1 9
    /\ /\
    7 8 4 2

    E. Тимофей и братья наши меньшие

    разделяй и властвуй снм Структуры данных *2900

    После празднования дня рождения Тимофей пошел на свою любимую березовую аллею, чтобы покормить своих любимых птиц — ворон. Вороны уже привыкли к маленькому Тимофею, поскольку он очень добрый и заботливый мальчик — постоянно подкармливает своих любимцев.

    Как известно, на каждой березе живет ровно одно семейство ворон. Березы в аллее стоят в ряд и пронумерованы от 1 до n. Также известно, что некоторые семейства дружат между собой. По некоторым причинам одно семейство может дружить с другим, только если они живут на достаточно близком расстоянии, а именно, между любыми двумя дружащими семействами должна быть не более чем k - 1 береза. Более формально, семейство, живущее на дереве u, может дружить с семейством, живущим на дереве v, только если |u - v| ≤ k.

    Одно из проявлений дружбы заключается в том, что если некоторое семейство узнает, что Тимофей где-то кормит ворон, то оно немедленно сообщит об этом всем семействам, с которыми оно дружит. Таким образом, после того, как Тимофей начнет кормить ворон около некоторой березы, к месту кормежки слетятся все семейства, которые дружат с семейством, живущим на этой березе, непосредственно или через цепочку нескольких дружественных отношений. Разумеется, обитатели данной березы тоже слетятся.

    Сегодня Тимофей пришел на аллею, и обнаружил, что все семейства, живущие на березах с номерами, строго меньшими l или строго большими r, куда-то улетели. Таким образом, передача информации о кормежке через них невозможна. Кроме того, кормить их также не нужно. Помогите Тимофею узнать, возле какого минимального числа берез Тимофею необходимо покормить ворон, чтобы все оставшиеся семейства узнали о кормежке. Вам дано несколько возможных ситуаций, определяемых числами l и r, и требуется посчитать ответ для каждой из них.

    Входные данные

    В первой строке входных данных дается два целых числа n и k (1 ≤ n ≤ 105, 1 ≤ k ≤ 5), где n — количество берез, k — максимально допустимое расстояние между дружащими семействами.

    В следующей строке входных данных дается одно целое число m (0 ≤ m ≤ n·k) — количество дружащих пар семейств.

    В каждой из следующих m строк находятся два целых числа u и v (1 ≤ u, v ≤ 105), означающих, что семейства, живущие на березах u и v, дружат между собой. Гарантируется, что u ≠ v и |u - v| ≤ k. Все пары дружащих семейств различны.

    В следующей строке находится одно целое число q (1 ≤ q ≤ 105) — количество ситуаций, для которых нужно узнать ответ.

    В каждой из следующих q строк находятся два целых числа l и r (1 ≤ l ≤ r ≤ 105), означающих, что в этой ситуации улетели все семейства с такими номерами x, что либо x < l, либо x > r.

    Выходные данные

    Выведите q строк: в i-той строке должно быть одно число — ответ на i-ю ситуацию.

    Примечание

    В первом примере дружат пары семейств (1, 3), (2, 3) и (4, 5).

    • В первой ситуации осталось только первое семейство, поэтому ответ 1.
    • Во второй ситуации остались первые два семейства, при этом они не дружат непосредственно, а значит ответ 2.
    • В третьей ситуации семейства 2 и 3 дружат, поэтому достаточно покормить любое из них, ответ 1.
    • В четвертой ситуации можно покормить, например, первое семейство, от него о кормежке узнает третье, а он него — второе. Ответ 1.
    • В пятой ситуации достаточно покормить первое и пятое семейства, ответ 2.

    F. Сувениры

    Структуры данных *3100

    Артём поехал на море и хочет привести двум своим сокомандникам сувениры. На главной туристической улице города есть n магазинов. В i-м магазине Артём может купить один сувенир за ai рублей, покупать больше одного сувенира в одном магазине нельзя. Артём не хочет сеять зависть в своей команде, поэтому цена двух сувениров, которые он привезёт друзьям, должна отличаться как можно меньше.

    Артём заходил на улицу с магазинчиками m раз. По неизвестной причине в его i-й визит работали только магазины с номерами с li по ri (бред? да, но вы сами когда-нибудь пытались придумать вразумительную легенду к задаче про запросы на отрезках?). Для каждого визита Артём хочет узнать минимальную возможную разность между ценой сувениров, которые он может купить в открытых магазинах.

    Другими словами, для каждого раза, когда Артём заходил на улицу, найдите минимально возможное значение |as - at|, где li ≤ s, t ≤ ri, s ≠ t.

    Входные данные

    В первой строке входного файла содержится целое число n (2 ≤ n ≤ 105).

    Во второй строке содержатся n целых чисел a1, ..., an (0 ≤ ai ≤ 109).

    В третьей строке содержится целое число m — количество запросов (1 ≤ m ≤ 3·105).

    Следующие m строк описывают запросы. i-я строка содержит два числа li, ri, обозначающих отрезок работающих в i-й день магазинов (1 ≤ li < ri ≤ n).

    Выходные данные

    Для каждого запроса выведите в отдельной строке минимальную разницу между ценой сувениров.

    D. Махмуд и словарь

    графы дп поиск в глубину и подобное снм Структуры данных *2000

    Махмуд хочет составить новый словарь, содержащий n слов и отношения между ними. Бывает два типа отношений: синонимичность (что значит, что два слова означают одно и тоже) и антонимичность (что значит, что два слова означают противоположные вещи). Время от времени он узнает новые отношения между некоторыми словами.

    Махмуд знает, что если между двумя словами есть отношение, то каждое из этих слов имеет отношения со всеми словами, которые имеют отношения к другому слову из пары. Например, если like означает то же, что и love, и love — противоположность hate, то like — тоже противоположность hate. Еще один пример: если love — противоположность hate, и hate — противоположность like, то love — то же, что и like, и так далее.

    Иногда Махмуд узнает неверное отношение. Неверное отношение это такое отношение, которое делает два слова одним и тем же и противоположностями одновременно. Например, если он знает, что love — то же, что и like, и like — противоположность hate, и затем узнает, что hate — то же, что и like, то последнее отношение, конечно, неверное, потому что оно делает hate и like антонимами и синонимами одновременно.

    После того, как Махмуд узнал много отношений между словами, он обеспокоился тем, что некоторые отношения могут быть неверными. Он решил рассказать о каждом отношении знакомому программисту Ехабу. Махмуд хочет знать для каждого отношения, верное оно или неверное, основываясь на отношениях, которые он узнал раньше. Если отношение неверное, то Махмуд его игнорирует и не использует его для проверки последующих отношений.

    После того, как Махмуд расскажет о всех отношениях, он спросит Ехаба об отношениях между некоторыми словами, основываясь на информации, которую дал. Ехаб занят подготовкой раунда Codeforces, поэтому вы должны ему помочь.

    Входные данные

    В первой строке находятся три целых числа n, m и q (2 ≤ n ≤ 105, 1 ≤ m, q ≤ 105), где n — число слов в словаре, m — число отношений, которые узнал Махмуд, и q — число вопросов, которые Махмуд спросит после того, как расскажет о всех отношениях.

    Вторая строка содержит n различных слов a1, a2, ..., an, состоящих из строчных букв латинского алфавита длиной не более 20 — слова в словаре.

    Затем следуют m строк, каждая из них содержит целое число t (1 ≤ t ≤ 2), а за ним два различных слова xi и yi, которые встречались в словаре. Если t = 1, то xi — синоним yi, иначе xi — антоним yi.

    Затем следуют q строк, каждая из них содержит два различных слова из словаря. Это те пары слов, для которых Махмуд хочет знать отношение на основе тех отношений, которые он узнал.

    Все слова во входных данных состоят только из строчных букв латинского алфавита, их длина не превышает 20 символов.

    Выходные данные

    В начале выведите m строк, по одной на каждое отношение. Если некоторое отношение неверно (т. е. делает два слова синонимами и антонимами одновременно), выведите «NO» (без кавычек) и игнорируйте его, иначе выведите «YES» (без кавычек).

    После этого выведите q строк, по одной на каждый вопрос. Если два слова синонимы, выведите 1. Если они антонимы, выведите 2. Если между ними нет отношения, выведите 3.

    Обратите внимание на тесты из условия для лучшего понимания.

    E. Махмуд и xor-поездка

    битмаски Деревья дп Конструктив математика поиск в глубину и подобное Структуры данных *2100

    Махмуд и Ехаб живут в стране, в которой n городов, пронумерованных от 1 до n, соединенных n - 1 двунаправленными дорогами. Гарантируется, что из любого города можно добраться в любой другой используя только эти дороги. Про каждый город известна некоторая величина ai.

    Определим расстояние от города x до города y как xor чисел, известных про города на пути от x до y (включая как x, так и y). Другими словами, если мы выпишем все величины городов на пути от x до y в массив p длины l, то расстояние между ними будет равно , где  — операция побитовый xor.

    Махмуд и Ехаб хотят выбрать два города и проехать от одного до другого. Номер города, в котором они стартуют, всегда не больше номера города, в котором они финишируют (они могут стартовать и закончить в одном и том же городе, тогда расстояние будет равно величине, известной про этот город). Они никак не могут выбрать эти два города, поэтому они попробуют каждый город как старт и каждый город с не меньшим индексом как финиш. Определите суммарное расстояние между всеми этими парами городов.

    Входные данные

    В первой строке находится целое число n (1 ≤ n ≤ 105) — число городов в стране Махмуда и Ехаба.

    Вторая строка содержит n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 106), которые описывают величины, известные про города. Величина ai известна про город i.

    Каждая из следующих n  -  1 строк содержит два числа u и v (1  ≤  u,  v  ≤  n, u  ≠  v), означающие, что между городами u и v существует двунаправленная дорога. Гарантируется, что можно доехать от любого города до любого другого по данным дорогам.

    Выходные данные

    Выведите одно число — суммарное расстояние между всеми возможными парами городов.

    Примечание

    Операция побитовый xor принимает два целых битовых числа одинаковой длины и выполняет логическую операцию xor на каждой паре соответсвующих бит. Результат в позиции равен 1, если и только если только первый бит 1 или только второй бит 1, и результат равен 0 если оба бита 0 или оба бита 1. Больше информации о побитовом xor можно найти здесь: https://ru.wikipedia.org/wiki/Битовые_операции#.D0.98.D1.81.D0.BA.D0.BB.D1.8E.D1.87.D0.B0.D1.8E.D1.89.D0.B5.D0.B5_.D0.98.D0.9B.D0.98_.28XOR.29.

    В первом тесте из примера возможные пути следующие:

    • из города 1 в него самого, расстояние 1,
    • из города 2 в него самого, расстояние 2,
    • из города 3 в него самого, расстояние 3,
    • из города 1 в город 2, расстояние ,
    • из города 1 в город 3, расстояние ,
    • из города 2 в город 3, расстояние .
    Суммарное расстояние равно 1 + 2 + 3 + 3 + 0 + 1 = 10.

    A. Снековик

    реализация Структуры данных *1100

    Согласно древней легенде, давным-давно жители Анк-Морпорка провинились перед Госпожой Удачей, и та прокляла их. Она сказала, что однажды на город упадут n снеков разных размеров, а жители должны будут составить их в один большой Снековик. При этом, естественно, внизу должны будут быть самые большие снеки, а наверху — самые маленькие.

    Прошли годы, и однажды на город стали действительно падать самые разнообразные снеки — от огромных Кендер-сюр до маленьких Что-по-чёмс. И жители города принялись строить из них Снековика.

    Правда, их поджидала одна неприятность. Каждый день на город выпадал один снек, но падали они в каком-то странном порядке. Поэтому жители не всегда могли водрузить очередной снек на вершину Снековика; иногда им приходилось выпавший только что снек откладывать до тех пор, пока не выпадут все снеки больше его. Конечно, чтобы не разозлить Госпожу Удачу, жители все-таки устанавливали каждый снек, как только для того появлялась возможность.

    Напишите программу, которая будет моделировать деятельность жителей города по постройке Снековика.

    Входные данные

    В первой строке находится одно натуральное число n (1 ≤ n ≤ 100 000) — общее количество снеков, которые выпадут в городе.

    Во второй строке находятся n чисел, i-е из которых равно размеру снека, выпадающего в i-й день. Все размеры — различные натуральные числа от 1 до n.

    Выходные данные

    Выведите в выходной файл n строк. На i-й из них выведите размеры всех снеков, которые будут установлены на снековик в i-й день, в том порядке, в котором они будут установлены. Если в какой-то день не будет установлен ни один снек, оставьте соответствующую строку выходного файла пустой.

    Примечание

    В примере в первый день выпадает снек размера 3, и его сразу можно устанавливать. Во второй день выпадает снек размера 1, его устанавливать еще нельзя, т.к. снек размера 2 пока отсутствует. В третий день выпадает снек размера 2, его тут же устанавливают, после чего устанавливают выпавший ранее снек размера 1.

    D. Кефир

    Бинарный поиск жадные алгоритмы сортировки Структуры данных *2100

    Маленькая девочка Оля очень любит кефир. Каждый день она выпивает ровно k пакетов кефира, если их имеется хотя бы k, в противном случае — все, что есть. Но есть одна проблема: сроки годности. На каждом пакете написан день, позже которого этот пакет пить нельзя (ровно в этот день еще можно). Поэтому если в холодильнике у Оли в какой-то момент оказывается просроченный пакет, она его выкидывает.

    Оля очень не любит выкидывать пакеты с кефиром, поэтому она применяет следующую стратегию: каждый раз, когда надо выпить очередной пакет, она выбирает тот, у которого срок годности заканчивается раньше всего. Несложно видеть, что эта стратегия минимизирует количество выкинутых пакетов и, в частности, позволяет обойтись без выкидывания, если это вообще возможно.

    Но основная проблема, с которой столкнулась Оля, — это покупка нового кефира. Сейчас у Оли в холодильнике есть n пакетов кефира, про каждый известен его срок годности (через сколько дней он заканчивается). Оля пришла в магазин, и там есть m пакетов кефира, про каждый тоже известен его срок годности.

    Определите, какое максимальное количество пакетов может купить Оля так, чтобы потом не пришлось ничего выбрасывать. Считайте, что Оля сегодня еще не пила ни одного пакета кефира.

    Входные данные

    В первой строке находятся три целых числа n, m, k (1 ≤ n, m ≤ 106, 1 ≤ k ≤ n + m) — число пакетов кефира у Оли в холодильнике, число пакетов кефира в магазине и сколько пакетов выпивает Оля каждый день.

    Во второй строке находятся n целых чисел f1, f2, ..., fn (0 ≤ fi ≤ 107) — сроки годности пакетов кефира, которые уже есть у Оли в холодильнике. Срок годности выражается числом дней, на которые еще можно отложить употребление этого пакета. Таким образом, срок годности 0 означает, что пакет нужно выпить сегодня, 1 — что не позже завтра, и так далее.

    Наконец, в третьей строке находятся m целых чисел s1, s2, ..., sm (0 ≤ si ≤ 107) — сроки годности пакетов, которые есть в магазине, в аналогичном формате.

    Выходные данные

    Если в любом случае Оля не сможет выпить даже уже имеющиеся у нее пакеты, выведите ровно одно число -1.

    Иначе в первой строке выведите максимальное количество пакетов x, которые Оля может купить так, чтобы ничего не выбрасывать. В следующей строке выведите ровно x чисел — номера пакетов, которые следует взять (пакеты нумеруются в том порядке, в котором они заданы во входном файле, начинается с 1). Естественно, числа не должны повторяться, однако могут идти в произвольном порядке. Если существует несколько подходящих наборов, разрешается вывести любой.

    Примечание

    В первом примере из условия k = 2 и дома у Оли есть три пакета со сроками годности 0, 1 и 1 (т. е. истекающими сегодня, завтра и завтра), а в магазине есть 3 пакета со сроком годности 0 и 3 пакета со сроком годности 2. Оля может купить три пакета, например, один со сроком годности 0 и два со сроком годности 2.

    Во втором примере все три уже имеющихся пакета имеют срок годности, оканчивающийся сегодня, и поэтому Оля не успеет их выпить вне зависимости от того, возьмет ли она еще один пакет в магазине или нет.

    В третьем примере сегодня Оля выпьет k = 2 пакета (один уже имеющийся и один из магазина), а завтра — оставшийся один пакет.

    G. Ветры зимы

    Бинарный поиск Структуры данных *3300

    Дано корневое дерево с n вершинами. Король Ночи удаляет ровно одну вершину дерева и все ребра из этой вершины. После этого дерево распадается, и образуется лес деревьев. Вершина, которая удалена, больше не является частью дерева.

    Корнем дерева в лесу деревьев является вершина в этом дереве, которая не имеет вершину-родитель. Определим силу леса, как размер самого большого дерева в лесу деревьев.

    Джон Сноу хочет минимизировать силу леса дерева. Чтобы сделать это, он может выполнить следующую операцию максимум один раз.

    Он удаляет ребро между вершиной и ее родителем и вставляет новое ребро между этой вершиной и любой другой вершиной в лесу, так чтобы количество деревьев в лесу оставалось таким же.

    Для каждой вершины v необходимо узнать минимальное значение силы леса, сформированного удалением вершины v.

    Входные данные

    Первая строка входных данных содержит единственное целое число n (1  ≤  n  ≤  105) — количество вершин в дереве. Каждая из следующих n строк содержит два целых числа ui и vi (1  ≤  ui,  vi  ≤  n), где ui родитель вершины vi. Если ui = 0, тогда vi корень дерева.

    Выходные данные

    Выведите n строк. i-я строка должна содержать минимальное значение силы леса, сформированного удалением i-й вершины, и применением Джоном Сноу максимум одной операции, описанной выше.

    Примечание

    Дерево в первом тестовом примере изображено ниже. При удалении первой вершины дерево распадается и формирует следующий лес. Сила этого леса равна 4. Джон Сноу может поменять родителя вершины 10 с 5 на 3. Сила леса становится равной 3.

    E. Оценивание блогпостов

    сортировки Структуры данных *3000

    Как известно, важной составляющей платформы Codeforces являются блогпосты. Каждый блогпост имеет глобальную характеристику, изменяющуюся во времени — оценку блогпоста сообществом. Когда блогпост только создан, его оценка сообществом равна 0. Пользователи Codeforces имеют право заходить на страницу блогпоста и оценивать его, изменяя его оценку сообществом на +1 или -1.

    Рассмотрим следующую модель поведения пользователей Codeforces. i-й пользователь имеет собственную оценку блогпоста, выраженную некоторым целым числом ai. Когда пользователь заходит на страницу с блогпостом, он сравнивает собственную оценку блогпоста с текущей оценкой блогпоста сообществом. Если собственная оценка оказалась выше, пользователь ставит блогпосту оценку +1 (таким образом, оценка блогпоста сообществом увеличивается на 1). Если собственная оценка ниже, пользователь ставит блогпосту оценку -1 (понижая его оценку сообществом на 1). Если оценки совпали, пользователь не ставит блогпосту ни +1, ни -1 (мы будем говорить, что в таком случае пользователь поставил блогпосту оценку 0). В любом случае, после данной процедуры пользователь закрывает блогпост и больше никогда к нему не возвращается.

    Рассмотрим некоторый только что созданный блогпост, исходная оценка которого сообществом равна 0. Про каждого из n пользователей Codeforces, пронумерованных от 1 до n, известна его собственная оценка данного блогпоста ai.

    Для каждого k от 1 до n, включительно, требуется ответить на следующий вопрос. Пусть пользователи с индексами от 1 до k в некотором порядке откроют страницу с данным блогпостом, оценят его и закроют страницу. Каждый пользователь открывает блогпост только после того, как его закрыл предыдущий пользователь. Какую максимальную оценку сообществом может иметь данный блогпост по итогам этих k просмотров?

    Входные данные

    Первая строка содержит целое число n (1 ≤ n ≤ 5·105) — количество пользователей Codeforces.

    Вторая строка содержит n целых чисел a1, a2, ..., an ( - 5·105 ≤ ai ≤ 5·105) — собственные оценки блогпоста пользователей в порядке от 1 до n.

    Выходные данные

    Для каждого k от 1 до n выведите целое число, равное максимальной возможной оценке блогпоста сообществом после того, как пользователи с индексами от 1 до k в некотором порядке зайдут на страницу с блогпостом, оценят его и закроют страницу.

    B. Значимые кубки

    *особая задача Бинарный поиск Структуры данных *2100

    Степан — опытный участник олимпиад. У него есть n кубков за олимпиады по физике и m — по информатике. Каждый кубок характеризуется двумя параметрами — своей значимостью ci и шириной wi.

    Степан решил выставить часть своих кубков на полке общей ширины d так, чтобы:

    • на полке был хотя бы один кубок по физике и хотя бы один кубок по информатике,
    • суммарная ширина выставленных кубков не превышала d,
    • от каждого предмета были выставлены несколько самых значимых кубков (то есть, если по какому-то предмету выставлен кубок с значимостью x, то должны быть выставлены все кубки по этому предмету, чья значимость превышает x).

    Перед вами стоит задача определить максимально возможную суммарную значимость кубков, которые Степан может выставить на полку ширины d, учитывая все описанные выше условия.

    Входные данные

    В первой строке следует три целых числа n, m и d (1 ≤ n, m ≤ 100 000, 1 ≤ d ≤ 109) — количество кубков по физике и по информатике, которые есть у Степана, а также ширина полки.

    Во следующих n строках следует по два целых числа ci и wi (1 ≤ ci, wi ≤ 109) — значимость и ширина i-го кубка по физике.

    В следующих m строках следует по два целых числа cj и wj (1 ≤ cj, wj ≤ 109) — значимость и ширина j-го кубка по информатике.

    Выходные данные

    Выведите максимально возможную суммарную значимость кубков, которые Степан может выставить на полку ширины d, учитывая все необходимые требования.

    Если не существует ни одного способа выставить кубки, выведите 0.

    Примечание

    В первом примере у Степана есть всего один кубок по информатике, который обязательно нужно выставить. Его значимость равна 3, а ширина 2, поэтому после его выставления ширина оставшегося места на полке равна 6. Также Степан должен выставить второй кубок с шириной 5 по физике, так как он самый значимый (его значимость равна 5). После этого на полку больше нельзя поставить ни одного кубка. Поэтому максимальная суммарная значимость выставленных кубков равна 8.

    C. Химикаты Молли

    Бинарный поиск математика Перебор реализация Структуры данных *1800

    У Молли Хупер есть n химикатов, расположенных в ряд. Каждый из химикатов имеет величину влиятельности, для химиката i эта величина равна ai.

    Молли хочет, чтобы Шерлок в нее влюбился. Она собирается смешать все химикаты из некоторого отрезка так, чтобы сделать любовное зелье с величиной влиятельности, равной некоторой целой неотрицательной степени числа k. Величина влиятельности зелья равна сумме величин влиятельности химикатов на отрезке, из которого зелье составлено.

    Помогите Молли найти количество отрезков, которые она может выбрать.

    Входные данные

    Первая строка содержит два целых числа n и k (1 ≤ n ≤ 105, 1 ≤ |k| ≤ 10) — количество химикатов и число k, неотрицательной степенью которого должна быть величина влиятельности зелья.

    Вторая строка содержит n целых чисел a1, a2, ..., an ( - 109 ≤ ai ≤ 109) — величины влиятельности химикатов.

    Выходные данные

    Выведите единственное целое число — число пригодных отрезков.

    Примечание

    Помните, что k0 = 1.

    В первом примере Молли может получить следующие величины влиятельности:

    • 2: отрезки [1, 1], [2, 2], [3, 3], [4, 4];

    • 4: отрезки [1, 2], [2, 3], [3, 4];

    • 6: отрезки [1, 3], [2, 4];

    • 8: отрезки [1, 4].

    Среди них величины 2, 4 и 8 являются степенями k = 2. Таким образом, ответ 8.

    Во втором примере Молли может выбрать отрезки [1, 2], [3, 3], [3, 4].

    F. Пари Шерлока и Мориарти

    геометрия графы Деревья Конструктив разделяй и властвуй реализация Структуры данных *2800

    Шерлок и Мориарти встретились для финальной битвы умов. Шерлок дал Мориарти правильный выпуклый n-угольник. Кроме того, он дал ему некоторые диагонали в этом многоугольнике, которые разделяют его на регионы. Гарантируется, что диагонали не пересекаются во внутренних точках.

    Шерлок посчитал для каждого региона его важность. Важность региона, образованного вершинами многоугольника с номерами a1, a2, ... , ax, равна 2a1 + 2a2 + ... + 2ax. Затем Шерлок упорядочил регионы в порядке увеличения важности. После этого он присвоил каждому региону уникальный номер от 1 до k, где k — количество регионов, а номер региона это его позиция в упорядоченном по важности списке.

    Шерлок хочет, чтобы Мориарти раскрасил регионы, используя не более чем 20 цветов так, чтобы все простые пути между двумя одноцветными регионами проходили через хотя бы один регион, покрашенный в цвет с номером меньше, чем номер цвета данных регионов. Простой путь между двумя регионами f и h это последовательность регионов r1, r2, ... rt такая, что r1 = f, rt = h, для каждого 1 ≤ i < t регионы ri и ri + 1 имеют общую сторону, а также ri = rj если и только если i = j.

    Мориарти не смог ответить и спросил решение у Шерлока. Помогите Шерлоку предоставить ответ Мориарти.

    Входные данные

    В первой строке содержатся два целых числа n и m (3 ≤ n ≤ 100000, 0 ≤ m ≤ n - 3) — количество вершин в многоугольнике и количество проведенных диагоналей.

    Следующие m строк содержат по два целых числа a и b (1 ≤ a, b ≤ n), которые описывают диагональ между вершинами a и b. Гарантируется, что заданы корректные диагонали, то есть a и b не совпадают и не являются соседними вершинами. Гарантируется, что диагонали не пересекаются.

    Выходные данные

    Пусть число регионов равно k.

    Выведите k целых чисел, каждое от 1 до 20 — цвета регионов в порядке увеличения важности.

    Если существует несколько решение, выведите любое из них. Можно показать, что существует хотя бы одно решение.

    Примечание

    Во втором примере регионы будут в таком порядке: (1, 2, 3), (1, 3, 4), (1, 4, 5), (1, 5, 6), т. е. регион (1, 2, 3) будет первым, затем регион (1, 3, 4) и так далее.

    Мы можем покрасить регионы 1 и 3 в один цвет, так как регион 2 будет на пути из 1 в 3, и его цвет равен 1, что меньше, чем цвет регионов 1 и 3, который равен 2.

    B. Игра: Банковские карты

    дп жадные алгоритмы сортировки Структуры данных *1300

    После четвёртого сезона Шерлок и Мориарти осознали бессмысленность баталии, развернувшейся между ними, и решили дальше соревноваться в мирную игру «Банковские карты».

    Правила у этой игры предельно просты: каждый игрок приносит свою любимую банковскую карту с n-значным номером. Далее оба игрока по очереди называют последовательные цифры из банковской карты. Если цифры не совпадают, то участник, цифра которого оказывается меньше, получает щелбан от другого игрока. Например, если n = 3 и у Шерлока номер карты 123, а у Мориарти 321, то сначала Шерлок называет число 1, а Мориарти называет число 3 и Шерлок получает щелбан. Затем и Шерлок и Мориарти называют число 2, и щелбан не получает никто. Наконец на третьем шаге, Шерлок называет 3, а Мориарти называет 1 и получает щелбан.

    Шерлок, конечно, будет играть честно, но Мориарти, как настоящий злодей, подсмотрел номер карты Шерлока и теперь хочет называть цифры своей банковской карты не последовательно, а в некотором другом порядке (однако количество каждой из цифр он не изменяет). Например в случае выше, Мориарти мог бы назвать цифры в последовательности 1, 2, 3 и не получил бы щелбанов вообще, а мог назвать 2, 3 и 1 и выдать Шерлоку целых два щелбана.

    Вам поручено вычислить, какое минимальное количество щелбанов Мориарти точно получит и какое максимальное число Мориарти может дать Шерлоку. Обратите внимание, что это две разные цели, и они могут достигаться при использовании разных порядков.

    Входные данные

    В первой строке находится одно целое число n (1 ≤ n ≤ 1000) — количество цифр в банковских картах Шерлока и Мориарти.

    Во второй строке записана последовательность из n цифр — номер кредитной карточки Шерлока.

    В третьей строке записана последовательность из n цифр — номер кредитной карточки Мориарти.

    Выходные данные

    Сначала выведите минимальное число щелбанов, которое обязательно получит Мориарти. Затем выведите максимальное число щелбанов, которое Мориарти может дать Шерлоку.

    Примечание

    Первый пример совпадает с примером, разобранным в условии задачи. Во втором примере Мориарти никак не сможет избежать двух щелбанов.

    C. Алёна и таблички

    Бинарный поиск дп жадные алгоритмы реализация Структуры данных *1600

    На уроке информатики маленькая девочка Алёна осваивает редактирование таблиц в одной очень известной программе.

    Сейчас у неё есть таблица из целых чисел, состоящая из n строк и m столбцов. Через ai, j будем обозначать число в i-й строке и j-м столбце. Будем говорить, что таблица отсортирована по неубыванию по j-му столбцу, если ai, j ≤ ai + 1, j для всех i от 1 до n - 1.

    Учительница дала Алёне k заданий. Для каждого из заданий известны два числа l и r и требуется ответить на вопрос: если от таблицы оставить только строки с l по r включительно, то будет ли она отсортирована по неубыванию хотя бы по одному столбцу? Другими словами, существует ли такое j, что ai, j ≤ ai + 1, j для всех i от l до r - 1 включительно.

    Алёна ещё слишком маленькая, чтобы справиться с заданием самостоятельно — помогите ей!

    Входные данные

    В первой строке входных данных записаны два целых положительных числа n и m (1 ≤ n·m ≤ 100 000) — количество строк и столбцов в таблице соответственно. Обратите внимание, что дано ограничение только на произведение этих чисел, то есть на количество элементов таблицы.

    В каждой из следующих n строк записаны m целых чисел, j-e число в i-й из этих строк соответствует значению ai, j (1 ≤ ai, j ≤ 109).

    В следующей строке входных данных задано число k (1 ≤ k ≤ 100 000) — количество заданий учительницы, которые нужно выполнить Алёне.

    В i-й из последующих k строк числа li и ri (1 ≤ li ≤ ri ≤ n).

    Выходные данные

    В i-й строке выведите "Yes", если в таблице, полученной из исходной оставлением строк с li по ri включительно будет столбец, по которому она отсортирована по неубыванию, и "No" в противном случае.

    Примечание

    В приведенном примере таблица не отсортирована ни по одному столбцу, но, например, строки 1–3 отсортированы по столбцу 1, а строки 4–5 по столбцу 3.

    E. Ханойская фабрика

    дп жадные алгоритмы Перебор сортировки Структуры данных *2000

    Наверняка вы слышали об известной задаче про Ханойские башни, но мало кто знает, что существует целая фабрика, производящая кольца для этой замечательной игры. Однажды на эту фабрику пришел срочный заказ от властителя Египта — Солнцеликого. Солнцеликий требует немедленно прислать ему для игры как можно более высокую башню. Работники фабрики не были готовы к такому необычному заказу, поэтому им придётся собрать какую-то башню из уже произведённых колец.

    На складах фабрики находятся n колец, i-е кольцо имеет внутренний радиус ai, внешний радиус bi и высоту hi. Требуется выбрать некоторые из этих колец и упорядочить их таким образом, чтобы выполнялись следующие условия:

    • Внешние радиусы колец образовывали невозрастающую последовательность, то есть кольцо j можно поставить на кольцо i только если bj ≤ bi.
    • Кольца не должны проваливаться друг в друга, то есть кольцо j можно поставить на кольцо i только если bj > ai.
    • Суммарная высота всех использованных колец должна быть максимальна.
    Входные данные

    В первой строке входных данных записано целое число n (1 ≤ n ≤ 100 000) — количество колец на складах фабрики.

    В i-й из последующих n строк записаны три числа ai, bi и hi (1 ≤ ai, bi, hi ≤ 109, bi > ai) — внутренний радиус, внешний радиус и высота i-го кольца соответственно.

    Выходные данные

    Выведите максимальную высоту башни, которую смогут получить работники фабрики.

    Примечание

    В первом примере выгодно поставить друг на друга все имеющиеся кольца в порядке 3, 2, 1.

    Во втором примере можно либо поставить кольцо 3 на кольцо 4 и получить башню высоты 3, либо поставить кольцо 1 на кольцо 2 и получить башню высоты 4.

    G. Андрюша и живые барьеры

    дп Структуры данных *2700

    Недавно Андрюша нашел удивительный игровой автомат. Он представлял из себя доску, расположенную вертикально, разбитую на квадраты. Всего на доске было w столбцов, пронумерованных от 1 до w слева направо, и h строк, пронумерованных снизу вверх от 1 до h.

    Кроме того, в некоторых строках автомата были расположены перегородки. Всего перегородок было n, и i-я из них располагалась в строке ui, занимая все клетки в столбцах с li по ri. Никакие две перегородки не находились в одной строке, Андрюша это точно запомнил. Кроме того, в каждой строке была хотя бы одна клетка, в которой не было перегородки.

    В любой столбец автомата можно было сверху бросить шарик. В таком случае шарик начинал падать вниз, пока не натыкался на какую-либо перегородку или не выпадал из автомата снизу. Если шарик натыкался на перегородку, то он исчезал, а вместо него возникали два шарика слева и справа от перегородки, и продолжали падать по тем же правилам. Если слева или справа от перегородки находился край доски, то оба шарика появлялись с той стороны, где нет края. При этом могло быть, что в какой-то клетке оказывались два или более шарика одновременно, это никак не влияло на их движение. В конце все шарики выпадали из автомата снизу.

    Примеры того, как шарики взаимодействуют с барьерами.

    Особенность автомата была в том, что иногда шарики проходили сквозь перегородки, как через свободные клетки. Это связано с тем, что перегородки были живыми и боялись шариков, падающих с большой высоты. А именно, если на перегородку номер i падал шарик, который перед этим падал более, чем si клеток (то есть шарик появился в строке с номером строго больше, чем ui + si), то перегородка пропускает этот шарик, как будто ее нет. Если шарик был брошен в автомат сверху, считайте, что он появился на высоте (h + 1).

    Андрюша помнит, что он бросил по одному шарику в каждый из столбцов. Найдите для него общее количество шариков, выпавших снизу. Так как это число может быть большим, выведите остаток от деления этого числа на 109 + 7.

    Входные данные

    В первой строке находятся три целых числа h, w и n (1 ≤ h ≤ 109, 2 ≤ w ≤ 105, 0 ≤ n ≤ 105) — число строк, число столбцов и число перегородок в автомате.

    В каждая из следующих n строк находятся четыре целых числа. В i-й из этих строк находятся числа ui, li, ri, si (1 ≤ ui ≤ h, 1 ≤ li ≤ ri ≤ w, 1 ≤ si ≤ 109) — строка, в которой находится i-я перегородка. столбцы, в которых находятся края этой перегородки, и максимальная высота, с которой перегородка не пропускает шарики. Гарантируется, что в каждой строке есть хотя бы одна клетка, в которой нет перегородки, а также то, что все ui различны.

    Выходные данные

    Выведите единственное число — остаток от деления суммарного числа выпавших шариков на 109 + 7.

    Примечание

    В первом примере один барьер: если бросить шарик во второй или третий столбец, то выпадет два шарика, иначе — один. Итого ответ 7.

    Во втором примере количество выпавших шариков равно 2, 2, 4, 4, 4 при бросании шариков в столбцы слева направо соответственно.

    В третьем примере количество выпавших шариков равно 1, 1, 4, 4, 4 при бросании шариков в столбцы слева направо соответственно. Обратите внимание, первый барьер пропускает шарики, падающие на него напрямую, но не пропускает те, что падают на него со второго барьера.

    В четвертом примере количество выпавших шариков равно 2, 2, 6, 6, 6, 6, 6, 6, 6, 1, 2, 1, 1, 1, 1 при бросании шариков в столбцы слева направо соответственно. Случай, когда шарик брошен в седьмой столбец, рассмотрен на рисунке ниже.

    Результат, если бросить шарик в седьмой столбец.

    E. Антон и перестановка

    Перебор Структуры данных *2200

    Антон обожает перестановки. Особенно ему нравится переставлять в них элементы местами. Напомним, что перестановкой из n элементов называется последовательность из чисел {a1, a2, ..., an}, в которой каждое из чисел от 1 до n встречается ровно по одному разу.

    Однажды Антон получил новую перестановку и начал с ней играть. Он q раз делал следующую операцию: брал какие-то два элемента перестановки и менял их местами. После каждой операции он спрашивал своего друга Ваню: а сколько же инверсий в новой перестановке? Количеством инверсий в перестановке называется количество различных пар (i, j), таких, что 1 ≤ i < j ≤ n и ai > aj.

    Ване надоело отвечать на глупые вопросы Антона и он попросил Вас написать программу, которая будет отвечать на эти вопросы за него.

    Изначально перестановка Антона имела вид {1, 2, ..., n}, то есть ai = i для всех i таких, что 1 ≤ i ≤ n.

    Входные данные

    В первой строке входных данных находятся целые числа n и q (1 ≤ n ≤ 200 000, 1 ≤ q ≤ 50 000) — длина перестановки и количество операций, которые сделал Антон.

    В каждой из следующих q строк находятся целые числа li и ri (1 ≤ li, ri ≤ n) — номера элементов, которые поменял местами Антон в ходе i-й операции. Обратите внимание, что позиции элементов, которые поменял местами Антон в ходе i-й операции могут совпадать. Элементы в перестановке нумеруются, начиная с единицы.

    Выходные данные

    Выведите q целых чисел, по одному числу в каждой строке — ответы на глупые вопросы Антона. i-е число в выходных данных должно обозначать количество инверсий в перестановке после выполнения i-й операции.

    Примечание

    Рассмотрим первый пример.

    После первой операции Антона перестановка будет иметь вид {1, 2, 3, 5, 4}. В ней всего одна инверсия: (4, 5).

    После второй операции Антона перестановка будет иметь вид {1, 5, 3, 2, 4}. В ней четыре инверсии: (2, 3), (2, 4), (2, 5) и (3, 4).

    После третьей операции Антона перестановка будет иметь вид {1, 4, 3, 2, 5}. В ней три инверсии: (2, 3), (2, 4) и (3, 4).

    После четвертой операции Антона перестановка не меняется. В ней по-прежнему остается три инверсии.

    B. Наследство

    графы кратчайшие пути Структуры данных *2300

    Рик и его коллеги сделали новую радиактивную формулу, и она понадобилась многим плохим парням. Поэтому Рик хочет оставить свое наследство Морти до того, как плохие парни поймают его.

    Всего есть n планет в их вселенной, пронумерованных от 1 до n. Рик находится на планете номер s (планетя Земля) и он не знает, где сейчас Морти. Всё, что мы знаем, что Рику принадлежит портальное оружие. С помощью этой пушки он может открыть односторонний портал с одной планеты на любую другую (включая эту планету). Но у этого оружия есть ограничения, потому что он все еще использует бесплатную версию.

    По умолчанию он не может открыть любой портал этим оружием. Всего есть q планов на сайте, который продает это оружие. Каждый раз, когда происходит покупка плана, его можно использовать только один раз. Но можно покупать один и тот же план произвольное количество раз.

    Планы на сайте имеют три типа:

    1. С планом этого типа вы можете открыть портал с планеты v до планеты u.
    2. С планом этого типа вы можете открыть портал с планеты v до любой планеты с номером из диапазона [l, r].
    3. С планом этого типа вы можете открыть портал с любой планеты с номером из диапазона [l, r] до планеты v.

    Рик не знает, где находится Морти, но Юнити собирается проинформировать его, и он хочет быть готовым к тому, чтобы начать свое путешествие немедленно. Поэтому для каждой планеты (включая Землю) он хочет знать минимальное количество денег, которое ему необходимо чтобы добраться от Земли до этой планеты.

    Входные данные

    Первая строка входных данных содержит три целых числа n, q и s (1 ≤ n, q ≤ 105, 1 ≤ s ≤ n) — количество планет, количество планов и номер планеты Земля соответственно.

    Следующие q строк содержат планы. Каждая строка начинается целым числом t — тип плана (1 ≤ t ≤ 3). Если t = 1, тогда далее следуют три числа v, u и w, где w — стоимость плана (1 ≤ v, u ≤ n, 1 ≤ w ≤ 109). Иначе следуют четыре числа v, l, r и w, где w — стоимость плана (1 ≤ v ≤ n, 1 ≤ l ≤ r ≤ n, 1 ≤ w ≤ 109).

    Выходные данные

    В первой и единственной строке выведите n целых чисел разделенных пробелами. i-е из них должно быть равно минимальному количеству денег, необходимых, чтобы добраться с планеты Земля до i-й планеты, или  - 1, если невозможно добраться до этой планеты.

    Примечание

    В первом тестовом примере, Рик покупает 4-й план единожды, далее 2-й план, чтобы добраться до планеты номер 2.

    C. Пока я срываюсь

    разделяй и властвуй Структуры данных *2400

    Рик и Морти хотят найти мистера PBH, и они не могут сделать это сами. Поэтому они нуждаются в мистерах Мисиксах. Они сгенерировали n мистеров Мисиксов, стоящих в линию и пронумерованных от 1 до n. У каждого из них имеется собственный цвет. i-й мистер Мисикс имеет цвет ai.

    Рик и Морти собирают свою армию и хотят разделить мистеров Мисиксов на некоторые отряды. Они не хотят, чтобы отряд был слишком разноцветным, поэтому каждый отряд должен иметь мистеров Мисиксов не более, чем k различных цветов. Также каждый отряд должен быть непрерывным отрезком мистеров Мисиксов на этой линии. Это значит, что для всех 1 ≤ i ≤ e ≤ j ≤ n, если мистер Мисикс номер i и мистер Мисикс номер j в одном и том же отряде, то и мистер Мисикс номер e должен быть в том же отряде.

    Также каждый отряд нуждается в собственной крепости, и постройка крепости стоит денег, поэтому они хотят найти минимальное количество отрядов, которое можно получить.

    Рик и Морти окончательно не выбрали точное значение k, поэтому для каждого k от 1 до n (включительно) необходимо узнать минимальное количество крепостей.

    Входные данные

    Первая строка входных данных содержит единственное целое число n (1 ≤ n ≤ 105) — количество мистеров Мисиксов.

    Вторая строка входных данных содержит n целых чисел a1, a2, ..., an, разделенных пробелами (1 ≤ ai ≤ n) — цвета мистеров Мисиксов в порядке, в котором они стоят в линию.

    Выходные данные

    В единственной строке выведите n целых чисел разделенных пробелом. i-е число должно быть равно минимальному количеству крепостей необходимых, если значение k равно i.

    Примечание

    Для первого тестового примера некоторые оптимальные пути разделения армии на отряды для каждого k:

    1. [1], [3], [4], [3, 3]
    2. [1], [3, 4, 3, 3]
    3. [1, 3, 4, 3, 3]
    4. [1, 3, 4, 3, 3]
    5. [1, 3, 4, 3, 3]

    Для второго тестового примера некоторые оптимальные пути разделения армии на отряды для каждого k:

    1. [1], [5], [7], [8], [1], [7], [6], [1]
    2. [1, 5], [7, 8], [1, 7], [6, 1]
    3. [1, 5, 7], [8], [1, 7, 6, 1]
    4. [1, 5, 7, 8], [1, 7, 6, 1]
    5. [1, 5, 7, 8, 1, 7, 6, 1]
    6. [1, 5, 7, 8, 1, 7, 6, 1]
    7. [1, 5, 7, 8, 1, 7, 6, 1]
    8. [1, 5, 7, 8, 1, 7, 6, 1]

    D. Бог рэпа

    Деревья поиск в глубину и подобное Строки Структуры данных хэши *3400

    Рик влюблен в Юнити. Но и мистер Мисикс также любит Юнити. Поэтому Рик и мистер Мисикс «любовные соперники».

    Юнити нравится рэп, поэтому было решено, что они должны участвовать в рэп игре (баттле), чтобы выбрать лучшего. Рик слишком ботаник, поэтому вместо этого он собирается сделать свой текст используя его оригинальный алгоритм на лирике песни «Rap God».

    Его алгоритм немного сложен. Он делает дерево с n вершинами, пронумерованными от 1 до n. На каждом ребре дерева написана маленькая латинская буква. Он определил str(a, b), как строку сформированную написанием всех букв, одну за другой, на кратчайшем пути от a до b (длина строки равна расстоянию от a до b). Заметьте, что str(a, b) это, записанная задом наперед, строка str(b, a). Также строка str(a, a) является пустой строкой.

    Чтобы сделать лучший текст, ему необходимо отвечать на некоторые запросы, но он не ученый-компьютерщик и не может ответить на эти запросы, поэтому он просит вас помочь ему. Каждый запрос характеризуется двумя вершинами x и y (x ≠ y). Ответом на этот запрос является кол-во таких вершин z, что z ≠ x, z ≠ y и str(x, y) лексикографически больше, чем str(x, z).

    Строка x  =  x1x2...x|x| лексикографически больше, чем строка y  =  y1y2...y|y|, если |x|  >  |y| и x1  =  y1,  x2  =  y2,  ...,  x|y|  =  y|y|, или существует такое r (r  <  |x|,  r  <  |y|), что x1  =  y1,  x2  =  y2,  ...,  xr  =  yr и xr  +  1  >  yr  +  1. Символы сравниваются, как их ASCII коды (или как их позиции в алфавите).

    Помогите Рику заполучить девушку.

    Входные данные

    Первая строка входных данных содержит два целых числа n и q (2 ≤ n ≤ 20000, 1 ≤ q ≤ 20000) — количество вершин в дереве и количество запросов соответсвенно.

    Следующие n - 1 строк содержат ребра. Каждая строка содержит два целых числа v и u (концы ребра), за которыми следует маленькая латинская буква c (1 ≤ v, u ≤ n, v ≠ u).

    Следующие q строк содержат запросы. Каждая строка содержит два целых числа x и y (1 ≤ x, y ≤ n, x ≠ y).

    Выходные данные

    Для каждого запроса выведите ответ в одну строку.

    Примечание

    Дерево для первого теста из условия:

    Дерево для второго теста из условия:

    В этом тесте:

    • str(8, 1) = poo
    • str(8, 2) = poe
    • str(8, 3) = po
    • str(8, 4) = pop
    • str(8, 5) = popd
    • str(8, 6) = popp
    • str(8, 7) = p

    Поэтому для первого запроса и для третьего запроса это ответ.

    E. Альт

    графы Деревья Потоки Структуры данных *3200

    Альт — планета в галактике «Энкор». Люди управляют этой планетой, но по некоторым причинам здесь нет собак, на их планете. Поэтому люди в депрессии и грустят. Рик и Морти вселенские филантрописты и они хотят сделать людей на планете Альт счастливыми.

    Альт имеет n городов пронумерованных от 1 до n и n - 1 двунаправленных дорог, пронумерованных от 1 до n - 1. От любого города до любого можно доехать используя эти дороги.

    На Альте есть два типа людей:

    1. Стражи. Страж живет в доме вдоль дороги и охраняет дорогу.
    2. Граждане. Гражданин живет дома, внутри города, и работает в офисе, в другом городе.

    Каждый человек на Альте является либо стражем либо гражданином. Вдоль каждой дороги живет один страж.

    Рик и Морти обратились ко всем людям на Альте, и вот что они получили:

    • m граждан живет на Альте.
    • Гражданин номер i живет в городе номер xi и работает в городе номер yi.
    • Каждый день гражданин едет по дорогам вдоль кратчайшего пути от его дома на работу.
    • Гражданин будет счастлив, если и только если он будет иметь щенка, или все стражи вдоль пути на его работу будут иметь щенка (он видит щенков у стражей на каждой дороге и он счастлив).
    • Страж всегда счастлив.

    Вам необходимо сказать Рику и Морти минимальное количество щенков необходимое, чтобы сделать всех на Альте счастливыми, и также предоставить оптимальный путь раздать щенков.

    Входные данные

    В первой строке входных данных содержатся два целых числа n и m (2 ≤ n ≤ 2 × 104, 1 ≤ m ≤ 104) — количество городов и количество граждан соответственно.

    Следующие n - 1 строк содержат дороги, i-я строка содержит концы i-го ребра, v и u (1 ≤ v, u ≤ n, v ≠ u).

    Следующие m строк содержат информацию о гражданах. i-я строка содержит два целых числа xi и yi (1 ≤ xi, yi ≤ n, xi ≠ yi).

    Выходные данные

    В первой строке выведите целое число k — суммарное необходимое количество щенков (1 ≤ k ≤ n).

    Во второй строке выведите число q — количество щенков, которых необходимо раздать гражданам, за которым следует q различных чисел a1, a2, ..., aq — номера граждан, которым необходимо раздать щенков (0 ≤ q ≤ min(m, k), 1 ≤ ai ≤ m).

    В третьей строке выведите число e — количество щенков, которых необходимо раздать стражам, за которым следует e различных целых чисел b1, b2, ..., be — номера дорог, стражам которых необходимо раздать щенков (0 ≤ e ≤ min(n - 1, k), 1 ≤ bi ≤ n - 1).

    Сумма q и e должна быть равна k.

    Примечание

    Карта Альта для первого тестового примера (числа, написанные на дорогах, это их номера):

    Карта Альта для второго тестового примера (числа, написанные на дорогах, это их номера):

    E. Новое задание

    Структуры данных *2900

    На 228-й международный турнир по стратегической игре Uzhlyandian Wars было решено установить следующие правило: каждую страну-участницу представляет ровно одна команда из 5 человек.

    Разумеется, Ужляндию будет представлять команда, состоящая из солдат национальной армии, так как геймеров здесь не водится.

    После очередных выборов президента Ужляндии, на которых победил Сергей Александрийский, новый глава государства назначил министром обороны и игровой промышленности генерала Машу. Разумеется, главным приоритетом министра является подсчет боеспособности армии Ужляндии, которая состоит из одной упорядоченной шеренги из n солдат, пронумерованных от 1 до n. Для каждого солдата известно его умение играть в Uzhlyandian Wars: для солдата с номером i умение равно ai.

    Было решено, что для участия в турнире будет выбрана команда из трех солдат-игроков и двух солдат-помощников. У игроков умение должно быть равным (для лучшей слаженности команды), а у помощников оно не может быть больше, чем у игроков. Также Маше кажется важным, чтобы один помощник стоял в шеренге левее, а второй — правее всех игроков. Более формально, команда представляет собой пятерку солдат с номерами i, j, k, l, p, так что 1 ≤ i < j < k < l < p ≤ n и ai ≤ aj = ak = al ≥ ap.

    Боеспособностью армии является количество различных возможных команд от Ужляндии. Две команды являются различными, если существует такое i, что солдат с номером i является членом первой команды, но не является членом второй.

    Но игры играми, а армия должна оставаться армией. Поэтому Маша время от времени отправляет некоторых солдат на боевые учения. В некоторых случаях после них солдаты временно не могут выполнять роль игрока, а иногда после учений солдаты снова могут выполнять роль игрока. Роль помощника солдат может выполнять всегда. До выборов боевых учений не проводилось, то есть изначально все солдаты могут выполнять роль игрока. Маше нужно постоянно контролировать боеспособность Ужляндской армии. Так как Маша генерал, а не программист, она попросила помощи у вас. Вам даны умения солдат, а также данные о результатах учений. После каждого учения вы должны найти количество различных возможных команд по модулю 1000000007 (109 + 7).

    Входные данные

    В первой строке строке входных данных задано единственное целое число n (1 ≤ n ≤ 105) — количество солдат в армии Ужляндии.

    Во второй строке задано n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — умения игроков.

    В третьей строке задано единственное целое число m (1 ≤ m ≤ 105) — количество боевых учений.

    В следующих m стоках идет описание учений, каждое задается двумя целыми числами t и x (1 ≤ t ≤ 2, 1 ≤ x ≤ n) в отдельной строке. Если t = 1, то солдат номер x временно не может выполнять роль игрока после этих учений. Если t = 2, то солдат номер x снова может выполнять роль игрока после этих учений.

    Гарантируется, что перед каждым запросом первого типа солдат может выполнять роль игрока, и то, что перед каждым запросом второго типа солдат не может выполнять роль игрока.

    Выходные данные

    Выведите m чисел — количество различных возможных команд после каждого учения.

    Ответы нужно выводить по модулю 1000000007 (109 + 7).

    Примечание

    В первом примере после первых боевых учений можно составить только одну команду с солдатами с номерами [1, 2, 4, 5, 6]. После вторых боевых учений команду можно составить из любых пяти солдат.

    Во втором примере после первых боевых учений можно составить только одну команду с солдатами с номерами [1, 2, 3, 7, 8]. После вторых учений можно составить команды с такими номерами солдат: [1, 2, 3, 5, 7], [1, 2, 3, 5, 8], [1, 2, 3, 7, 8], [1, 2, 5, 7, 8], [1, 3, 5, 7, 8], [2, 3, 5, 7, 8]. После третьих учений можно составить команды с такими номерами солдат: [1, 3, 5, 7, 8], [2, 3, 5, 7, 8].

    C. Скучные строки

    дп жадные алгоритмы Строки Структуры данных хэши *1800

    После того как лиса Кейл вышла из автобуса, она обнаружила, что ошиблась маршрутом. Теперь она была в каком-то странном и незнакомом городе. К счастью, ей вскоре повстречался ее друг — бобром Таро. Лиса поинтересовалась у бобра, как ей пройти к замку. Однако, бобер ответил ей лишь строкой s, которую лиса Кейл постаралась запомнить.

    У Кейл — особенные отношения со строками. Например, n строк b1, b2, ... , bn она считает скучными. По этой причине ей никогда не удается запомнить строку, которая содержит хотя бы одну скучную в качестве подстроки.

    Таким образом, лиса Кейл опасается, что ей не удастся запомнить строку s целиком, а получится только запомнить некоторую ее подстроку (такую, которая не содержит скучных слов). Ваша задача помочь Кейл, найдите наидлиннейшую подстроку s такую, что подстрока не содержит ни одного скучного слова.

    Входные данные

    Первая строка входных данных содержит s. Длина s может быть от 1 до 105 включительно.

    Вторая строка содержит целое число n (1 ≤ n ≤ 10). Следующие n строк содержат b1, b2, ..., bn, где bi содержится в i-ой из рассматриваемых n строк. Длина каждой строки bi — от 1 до 10, включительно.

    Каждый символ в строках s, b1, b2, ..., bn — это либо прописная или строчная буква латинского алфавита, символ подчеркивания («_») или цифра. Символы надо сравнивать с учетом регистра.

    Выходные данные

    В первую строку выведите два разделенных пробелом целых числа len и pos, где len — длина искомой наидлиннейшей подстроки, а pos — индекс первого (самого левого) символа из s в искомой подстроке (нумерация от 0). Число pos должно находиться в границах от 0 до |s| - len включительно, где |s| обозначает длину строки s.

    Если решений несколько, то выведите любое.

    Примечание

    В первом примере искомой подстрокой является «traight_alon».

    Во втором примере искомой подстрокой является пустая строка.

    В третьем примере искомой подстрокой является либо «nagio» либо «oisii».

    F. Маги и монстры

    геометрия Структуры данных *3100

    Вова играет в компьютерную игру Mages and Monsters. Персонаж Вовы — маг, но так как Вова только начал играть, персонаж ещё не знает ни одного заклинания.

    В течение игры персонаж Вовы может учить новые заклинания. Каждое заклинание характеризуется двумя числами xi и yi — урон, наносимый заклинанием в секунду, и расходы маны в секунду соответственно, когда Вова использует это заклинание. Вова не обязательно должен использовать заклинание целое количество секунд, тогда урон и затраты маны изменятся пропорционально — более формально, если персонаж использует заклинание с уроном x и затратами маны y в течение z секунд, то он нанесёт x·z урона и потратит y·z маны (без округлений). Если запас маны исчерпан (его значение в начале каждого боя одинаково и известно с самого начала), персонаж не может использовать заклинания вообще; нельзя одновременно применять более одного заклинания.

    Также Вова может сражаться с монстрами; каждый монстр характеризуется величинами tj и hj — монстр убивает персонажа Вовы за tj секунд и имеет hj здоровья. После каждого боя с монстром персонаж Вовы восстанавливает ману (или возрождается с полным запасом), так что результаты предыдущих боёв никак не влияют на последующие.

    Считается, что Вова может уничтожить монстра, если он способен при помощи своих заклинаний (можно использовать несколько разных заклинаний в одном и том же бою) нанести ему hj урона не более чем за tj секунд, учитывая расходы маны. Если здоровье монстра становится равным нулю ровно через tj секунд после начала боя (то есть монстр и персонаж убивают друг друга одновременно), считается, что Вова может победить.

    Необходимо написать программу, обрабатывающую два вида запросов:

    • 1 x y — Вова учит заклинание, наносящее x урона в секунду и тратящее y маны в секунду.
    • 2 t h — Вова сражается с монстром, который способен убить персонажа за t секунд и которому нужно нанести h урона для победы.

    Обратите внимание, что запросы подаются в изменённом виде. Помните, что персонаж Вовы не знает ни одного заклинания в начале игры.

    Для каждого запроса второго типа нужно определить, может ли Вова победить соответствующего монстра.

    Входные данные

    В первой строке записаны два целых числа q и m (2 ≤ q ≤ 105, 1 ≤ m ≤ 1012) — количество запросов и запас маны персонажа в начале каждого боя.

    Далее идут q строк. В i-й из них записаны три числа ki, ai и bi (1 ≤ ki ≤ 2, 1 ≤ ai, bi ≤ 106).

    Запрос по ним восстанавливается следующим образом: пусть j — номер последнего запроса второго типа, на который был дан положительный ответ (если таких ещё не было, j = 0).

    • Если ki = 1, то персонаж учит заклинание, параметры которого вычисляются по формулам x = (ai + j) mod 106 + 1, y = (bi + j) mod 106 + 1.
    • Если ki = 2, то необходимо определить, может ли Вова победить монстра с характеристиками, вычисляемыми таким же образом (t = (ai + j) mod 106 + 1, h = (bi + j) mod 106 + 1).
    Выходные данные

    На каждый запрос второго типа выведите по одной строке — YES, если Вова может победить соответствующего монстра, и NO в противном случае.

    Примечание

    В первом тесте персонаж сначала учит заклинание, наносящее 5 урона за 10 маны в секунду. Следующим запросом он сражается с монстром, побеждающим его за 20 секунд и имеющим 50 здоровья, и убивает его за 10 секунд (тратя 100 маны). Следующий монстр уже имеет 52 здоровья, и Вова не может нанести такой урон, имея только 100 маны.

    F. Улитка Юля

    дп разделяй и властвуй Структуры данных *3000

    После тяжелой работы аналитику Игорю захотелось немного спокойствия.

    Он решил завести себе улитку. Для этого он купил аквариум, в середине которого стоял крошечный гладкий ствол дерева и поместил в аквариум улитку, которую он назвал Юля.

    Игорь заметил, что иногда Юля пытается подняться по стволу дерева, однако не может этого сделать, так как ствол гладкий. Чтобы помочь улитке, он подвесил на это дерево нитки, прицепив нижний конец i-й нитки на высоте li над землей, а верхний — на высоте ri.

    Так получилось, что верхние концы всех ниток располагаются на разной высоте, то есть все ri различны. Теперь Юля может сползать по стволу вниз, а также подниматься вверх от нижнего конца некоторой веревки до верхнего. Игорь остался доволен своей работой, и теперь, когда он хочет отвлечься от работы, он задается вопросами о возможных перемещениях улитки. А именно, его интересуют вопросы следующего вида: «Предположим, сейчас Юля сидит на стволе на высоте x. Как высоко на стволе дерева она сможет оказаться, если никогда не будет опускаться ниже высоты x и никогда не будет подниматься выше высоты y?» Обратите внимание, Юля не может сползать с веревки на ствол до того, как доберется до верха веревки, и Игоря интересует конечное положение Юли на стволе дерева.

    Игорь задается различными вопросами, и не всегда может самостоятельно на них ответить. Помогите Игорю, напишите программу, которая отвечает на соответствующие вопросы.

    Входные данные

    Первая строка содержит одно целое число n (1  ≤  n ≤  100000) — высота ствола дерева.

    Вторая строка содержит одно целое число m (1  ≤  m  ≤  100000) — количество ниток.

    Следующие m строк содержат информацию о нитках.

    В i-й их этих строк содержатся два целых числа li и ri (1  ≤ li ≤ ri ≤ n), обозначающие высоты, на которых закреплены верхний и нижний конец i-й нитки, соответственно. Гарантируется, что все ri различны.

    Следующая строка содержит одно целое число q (1  ≤  q  ≤  100000) — количество вопросов Игоря.

    Следующие q строк содержат информацию о вопросах Игоря.

    В этих строках содержатся по два целых числа x и y, (1  ≤ x ≤ y ≤ n), где x — высота, где Юля начнет свой путь (и ниже которой не может спускаться), и y — высота, выше которой она забираться не может.

    Выходные данные

    Для каждого вопроса выведите одно целое число: максимальную высоту, на которую может подняться Юля.

    Примечание

    Иллюстрация к первому примеру слева, иллюстрация ко второму примеру — справа. Различные цвета веревок ничего не значат и служат лишь для ясности изображений.

    G. Олег и шахматы

    Паросочетания Потоки разделяй и властвуй Структуры данных *3400

    Обычный клиент банка Олег решает интересную шахматную задачу: расставить на шахматной доске n × n наибольшее число ладей, чтобы они не били друг друга.

    Напомним, что ладья, которая стоит в клетке (a, b), бьет ладью, стоящую в клетке (x, y), тогда и только тогда, когда a = x или b = y.

    К сожалению (или радости?) Олега ответ в этой задаче всегда получался равным n, поэтому вскоре задача ему наскучила. Он решил её усложнить, удалив некоторые клетки из шахматной доски. Удалив клетку, Олег подразумевает, что на нее нельзя ставить ладью, однако, бить «сквозь» удаленные клетки ладьи могут.

    Олег удаляет клетки группами, а именно, он раз за разом выбирает некоторый прямоугольник по сторонами, параллельными осям координат, и удаляет все клетки в нем. Формально, если он выбрал некоторый прямоугольник, левая нижняя и правая верхняя клетки которого имеют координаты (x1, y1) и (x2, y2), соответственно, то он удаляет все такие клетки (x, y) что x1 ≤ x ≤ x2 и y1 ≤ y ≤ y2. Гарантируется, что никакую клетку два раза Олег удалять не будет, то есть все выбранные прямоугольники не пересекаются.

    Эту версию задачи Олег решить не смог, а его друг, к которому он часто обращается за советами, — аналитик Игорь — сейчас очень занят на конференции, и не может помочь Олегу.

    Вы — последняя надежда Олега! Помогите ему: по заданному размеру доски и прямоугольникам, клетки в которых удалены, выясните, какое максимальное число ладей можно расставить на доске так, чтобы никакая ладья не била никакую другую.

    Входные данные

    Первая строка содержит одно целое число n (1  ≤  n ≤  10000) — размеры доски.

    Вторая строка содержит одно целое число q (0  ≤  q  ≤  10000) — количество прямоугольников, которые удалил Олег.

    Следующие q строк содержат информацию о прямоугольниках.

    В каждой из этих строк содержится четыре целых числа x1, y1, x2 и y2 (1  ≤ x1 ≤ x2 ≤ n, 1  ≤ y1 ≤ y2 ≤ n) — координаты левой нижней и правой верхней клеток прямоугольника, в котором он удаляет клетки.

    Гарантируется, что прямоугольники попарно не пересекаются.

    Выходные данные

    В единственной строке выведите максимальное число ладей, которое Олег сможет расставить на поле так, чтобы они не били друг друга.

    Примечание

    Ниже приведено изображения поля и пример расстановки ладей на нем в первом примере.

    F. Леха и система безопасности

    Структуры данных *2800

    В уже известном вам городе Банкополисе наконец-то появился новый банк! К сожалению, еще не до конца готова его система безопастности... Тем временем в Банкополисе появился хакер Леха, который решил протестировать систему на прочность!

    В банке хранятся n ячеек клиентов. Последовательность из n чисел a1, a2, ..., an описывает количество денег в ячейке каждого клиента. Леха желает обращаться к базе данных банка, узнавая суммарное количество денег в ячейках на промежутке последовательсти и изменяя значения в ячейках на промежутке. Через лазейку в системе хакеру Лехе доступно два вида запросов к базе данных банка:

    • 1 l r x y, означающий, что Леха может изменить каждую цифру x на цифру y во всех таких элементах ai последовательности, для которых верно l ≤ i ≤ r. Например, если в числе 11984381 цифру 8 заменить на 4, то получится число 11944341. Стоит заметить, что Леха, чтобы остаться незамеченным, никогда не изменяет цифры на 0, то есть y ≠ 0.
    • 2 l r, означающий, что Леха может запросить сумму таких элементов ai последовательности, для которых верно l ≤ i ≤ r.

    Так как Леха — белый хакер, то он не хочет исследовать уязвимость на реальной базе данных. Вам необходимо реализовать для Лехи похожую базу данных, способную отвечать на его запросы!

    Входные данные

    В первой строке находится два целых числа n и q (1 ≤ n ≤ 105, 1 ≤ q ≤ 105), означающих количество ячеек в банке и суммарное количество запросов Лехи соответственно.

    В следующей строке записано n целых чисел a1, a2, ..., an (1 ≤ ai < 109) — числа, означающие изначальное количество денег в ячейках. Эти числа не содержал лидирующих нулей.

    Каждая из последующих q строк имеет один из форматов:

    • 1 l r x y (1 ≤ l ≤ r ≤ n, 0 ≤ x ≤ 9, 1 ≤ y ≤ 9), означающий, что Леха запрашивает изменить каждую цифру x на цифру y во всех таких элементах ai последовательности, для которых верно l ≤ i ≤ r;
    • 2 l r (1 ≤ l ≤ r ≤ n), означающий, что Вы должны вычислить и вывести сумму таких элементов ai последовательности, для которых верно l ≤ i ≤ r.
    Выходные данные

    На каждый запрос о сумме чисел на промежутке последовательности в отдельной строке выведите одно целое число — искомую сумму.

    Примечание

    Рассмотрим первый пример.

    Первоначально последовательность имеет вид [38, 43, 4, 12, 70].

    После первого изменения все цифры, равные 4, изменяются на 8 у элементов последовательности, имеющих индексы в промежутке [1; 3]. Таким образом, новая последовательность — [38, 83, 8, 12, 70].

    Ответом на первый запрос суммы является сумма на промежутке [2; 4], равная 83 + 8 + 12 = 103, поэтому ответ на первый запрос суммы равен 103.

    После второго изменения последовательность приобретает вид [38, 83, 8, 12, 78], а после третьего — [38, 73, 7, 12, 77].

    Ответом на второй запрос суммы является 38 + 73 + 7 + 12 + 77 = 207.

    C. Взлом банков

    Деревья дп Конструктив Структуры данных *1900

    Несмотря на то, что Инзейн нашел свою кость, его хозяин Зейн еще не вернулся. Чтобы найти Зейна, Инзейну потребуется много денег, которых у него сейчас совсем нет. Чтобы стправиться с этим, он решил взломать банки.

    Всего есть n банков, пронумерованных от 1 до n. Банки соединены n - 1 проводами. все банки изначально находятся в состоянии онлайн. У каждого банка есть изначальная защита: защита банка i изначально равна ai.

    Определим некоторые понятия перед тем, как продолжить. Банки i и j называются соседними, если и только если между ними существует провод напрямую. Банки i и j называются полу-соседними, если и только если существует такой онлайн банк k, что банки i и k являются соседними, и банки k и j являются соседними.

    Когда некоторый банк взломан, он переходит в состояние оффлайн (и никогда не возвращается в онлайн), а другие банки, которые являются соседними или полу-соседними к взломанному, увеличивают свою защиту на 1.

    Вначале Инзейн выберет банк, который он взломает первым. Конечно, защита этого банка не должна превышать мощности его компьютера. После этого, он будет выбирать для взлома некоторый банк до тех пор, пока не будут взломаны все банки, но он может выбрать для взлома банк номер x если и только если все следующие условия выполнены:

    1. Банк x находится в состоянии онлайн. То есть, банк x еще не взломан.
    2. Банк x является соседним к какому-то оффлайн банку.
    3. Защита банка x не превосходит мощности компьютера Инзейна.

    Определите минимальную необходимую мощность компьютера, с помощью которого Инзейн сможет взломать все банки.

    Входные данные

    Первая строка содержит одно целое число n (1 ≤ n ≤ 3·105) — число банков.

    Вторая строка содержит n целых чисел a1, a2, ..., an ( - 109 ≤ ai ≤ 109) — защиты банков.

    Каждая из следующих n - 1 строк содержит два целых числа ui и vi (1 ≤ ui, vi ≤ n, ui ≠ vi), что означает, что есть прямой провод между банками ui и vi.

    Гарантируется, что провода соединяют банки так, что Инзейн может взломать все банки, используя компьютер некоторой мощности.

    Выходные данные

    Выведите одно число — минимальная мощность компьютера, с которым Инзейн сможет взломать все банки.

    Примечание

    В первом примере Инзейн может взломать все банки, используя компьютер мощности 5:

    • Изначально защиты банков равны [1, 2, 3, 4, 5].
    • Он взламывает банк 5, силы банков становятся равными [1, 2, 4, 5,  - ].
    • Он взламывает банк 4, силы банков становятся равными [1, 3, 5,  - ,  - ].
    • Он взламывает банк 3, силы банков становятся равными [2, 4,  - ,  - ,  - ].
    • Он взламывает банк 2, силы банков становятся равными [3,  - ,  - ,  - ,  - ].
    • Он взламывает банк 1 и достигает своей цели.

    Во втором примере Инзейн может взламывать банки в порядке 4, 2, 3, 1, 5, 7 и 6. Таким образом, ему достаточно компьютера мощностью 93.

    F. Восстановление последовательности

    битмаски жадные алгоритмы Структуры данных *2800

    Однажды у Зейна была хорошая последовательность a из n целых чисел a1, a2, ..., an, но он ее потерял.

    Последовательность называется хорошей, если и только если все ее элементы — целые неотрицательные числа, не превосходящие 109.

    Однако, Зейн помнит, что он играл с последовательностью, применяя к ней m операций.

    Было два типа операций:

    1. Найти максимальное значение среди чисел с индексами i такими, что l ≤ i ≤ r, по данным l и r.

    2. Присвоить значение d элементу последовательности с индексом k, по данным k и d.

    После того, как он поиграл с последовательностью, он восстановил массив до исходного состояния. Это значит, что пропали изменения в последовательности a, внесенные операциями типа 2. После этого Зейн потерял последовательность.

    К счастью, Зейн помнит все операции, их порядок, а также результат всех операций типа 1, которые оказались различными. Кроме этого, Зейн знает, что среди всех хороших последовательностей, которые произвели бы те же результаты после применения этих операций в соответствующем порядке, последовательность a имела наибольшую красоту.

    Красота последовательности — это побитовый OR всех элементов последовательности. Например, красота последовательности Зейна a равняется a1 OR a2 OR ... OR an.

    Зейн понимает, что не всегда возможно точно восстановить потерянную последовательность по данной информации, поэтому он будет доволен получить любую хорошую последовательность b, состоящую из n целых чисел b1, b2, ..., bn такую, что:

    1. она даст такой же результат при применении данных операций;

    2. имеет такую же красоту, как и последовательность Зейна a.

    Если такая последовательность существует, найдите ее. Иначе сообщите, что Зейн запомнил что-то неправильно.

    Входные данные

    Первая строка содержит два целых числа n и m (1 ≤ n, m ≤ 3·105) — число элементов в последовательности Зейна и число операций, соответственно.

    Строка i из следующих m строк начинается с одного целого числа ti () — типа i-й операции.

    Если операция типа 1 (ti = 1), то далее три числа li, ri и xi следуют (1 ≤ li ≤ ri ≤ n, 0 ≤ xi ≤ 109) — параметры операции и максимальный элемент среди элементов с индексами от li до ri, включительно.

    Если операция типа 2 (ti = 2), то далее следуют два целых числа ki и di (1 ≤ ki ≤ n, 0 ≤ di ≤ 109), что означает, что элемент с индексом ki должен стать равным di после этой операции.

    Гарантируется, что xi ≠ xj для всех пар (i, j) таких, что 1 ≤ i < j ≤ m, и ti = tj = 1.

    Операции даны в том порядке, в котором они применялись. То есть, первой дана операция, которая применялась первой, и так далее.

    Выходные данные

    Если не существует подходящей хорошей последовательности, выведите «NO» (без кавычек) в единственной строке.

    Иначе, выведите «YES» (без кавычек) на первой строке, и n целых чисел b1, b2, ..., bn (0 ≤ bi ≤ 109) на второй строке.

    Если существует несколько ответов, выведите любой из них.

    Примечание

    В первом примере легко показать, что данная хорошая последовательность подходит. В частности, ее красота равна 19 OR 0 OR 0 OR 0 OR 1  =  19.

    Во втором примере ясно, что две операции противоречат друг другу, поэтому не существует подходящей хорошей последовательности.

    C. Минимальная строка

    жадные алгоритмы Строки Структуры данных *1700

    На день рождения Пете подарили строку s длиной до 105 символов. Он взял еще две пустые строки t и u и решил сыграть в игру. По правилам в игре допускается два варианта ходов:

    • Изъять символ из начала строки s и приписать его в конец строки t.
    • Изъять символ из конца t и приписать его в конец строки u.

    В результате Петя хочет, чтобы строка u была лексикографически минимальна, а s и t — пусты.

    Напишите программу, которая поможет Пете выиграть в игру.

    Входные данные

    В единственной строке задана непустая строка s (1 ≤ |s| ≤ 105), состоящая из строчных латинских букв.

    Выходные данные

    Выведите полученную строку u.

    D. Сломанное BST

    поиск в глубину и подобное Структуры данных *2100

    Пусть T — произвольное бинарное дерево, т.е. дерево, у каждой вершины которого не больше двух сыновей. Данное дерево является корневым, т.е существует единственная вершина, у которой нет родителя — корень дерева. В вершинах данного дерева записаны целые числа. Каждое число, которое есть в дереве T попытаются найти следующим алгоритмом:

    1. Поставить указатель на корень дерева
    2. Сообщить, что число найдено, если значение, записанное в текущей вершине, равно искомому числу
    3. Перейти в левого сына вершины, если значение, записанное в текущей вершине, больше искомого числа
    4. Перейти в правого сына вершины, если значение, записанное в текущей вершине, меньше искомого числа
    5. Сообщить, что число не найдено, если вершина, в которую надо перейти, не существует

    Ниже приведен псевдокод описанного алгоритма:


    bool find(TreeNode t, int x) {
    if (t == null)
    return false;
    if (t.value == x)
    return true;
    if (x < t.value)
    return find(t.left, x);
    else
    return find(t.right, x);
    }
    find(root, x);

    Данный алгоритм работает корректно, если поиск осуществляется в бинарном дереве поиска (то есть таком дереве, где для каждого узла значение в нем больше значений в его левом поддереве и меньше значений в правом поддереве). На произвольном дереве этот алгоритм, разумеется, может вернуть неправильный результат.

    Так как заданное дерево не является в общем случае бинарным деревом поиска, то не все числа возможно найти таким способом. Ваша задача — посчитать, сколько раз найти число не удастся, если алгоритм запущен для всех возможных значений, которые содержатся в дереве.

    Если в дереве есть несколько вершин с одинаковыми числами на них, то алгоритм следует запустить для каждой из них отдельно.

    Входные данные

    В первой строке записано целое число n (1 ≤ n ≤ 105) — количество вершин в дереве.

    В следующих n строках заданы по 3 числа v, l, r (0 ≤ v ≤ 109) — число, записанное в вершине, индекс левого сына вершины и индекс правого сына вершины, соответственно. Если какого-либо из сыновей не существует, то записано число  - 1. Обратите внимание, что в различных вершинах дерева могут быть записаны одинаковые значения.

    Выходные данные

    Выведите количество чисел, которые не будут найдены описанным алгоритмом.

    Примечание

    В первом примере корнем дерева является вершина 2. Поиск чисел 5 и 15 завершится неудачей, так как на первом шаге будут совершены переходы в поддеревья, в которых нет искомых чисел.

    E. Запросы на массиве

    дп Перебор Структуры данных *2000

    Дан массив a из n элементов, все элементы — натуральные числа, не превышающие n.

    Необходимо обработать q запросов к этому массиву. Каждый запрос задаётся двумя числами p и k. Запрос состоит из нескольких операций, каждая операция заменяет число p числом p + ap + k. Эти операции проводятся, пока p не станет больше, чем n. Для каждого запроса необходимо выяснить количество таких операций.

    Входные данные

    В первой строке входного файла задано единственное число n (1 ≤ n ≤ 100000).

    Во второй строке задано n целых чисел — массив a (1 ≤ ai ≤ n для всех i от 1 до n).

    В третьей строке задано число q — количество запросов (1 ≤ q ≤ 100000).

    В следующих q строках задано по два числа p и k (1 ≤ p, k ≤ n) — описание очередного запроса.

    Выходные данные

    Выведите q чисел, i-е из них должно быть равно ответу на запрос под номером i.

    Примечание

    Разберём пример из условия:

    В первом запросе после первой операции p = 3, после второй p = 5.

    Во втором и третьем запросах p становится больше n уже после первой операции.

    F. Мышки и норки

    дп жадные алгоритмы сортировки Структуры данных *2600

    Однажды Маша неожиданно вернулась домой и застала n мышей в коридоре своей квартиры. Как и положено девушке, она настолько громко закричала, что мыши в ужасе стали разбегаться по своим норкам.

    Коридор можно представить числовой прямой, на которой расположены n мышей и m норок. i-я мышка изначально находится в точке xi, а j-я норка — в точке pj. Вместимость j-й норки составляет cj, то есть в эту норку может поместиться не более cj мышек.

    Какой минимальный суммарный путь проделают мышки, чтобы после крика Маши все они спрятались по норкам? Если i-я мышка выберет в качестве укрытия норку j, то пройденный путь следует считать по формуле |xi - pj|.

    Выведите минимальный суммарный путь мышек до норок.

    Входные данные

    В первой строке записаны два целых числа n, m (1 ≤ n, m ≤ 5000) — количество мышек и количество норок соответственно.

    Вторая строка содержит последовательность из n целых чисел x1, x2, ..., xn ( - 109 ≤ xi ≤ 109), где xi — начальная координата i-й мышки.

    Следующие m строк содержат пары целых чисел — описания норок pj, cj ( - 109 ≤ pj ≤ 109, 1 ≤ cj ≤ 5000), где pj — координата j-й норки, а cj — вместимость j-й норки (в мышках).

    Выходные данные

    Выведите единственное целое число — минимальный суммарный путь мышек, чтобы каждая мышка оказалась в норке. Выведите -1, если решения не существует.

    E. Майк и код перестановки

    графы Конструктив сортировки Структуры данных *3000

    Майк открыл новый способ кодирования перестановок. Если у него есть перестановка P = [p1, p2, ..., pn], он закодирует ее следующим образом:

    Пусть A = [a1, a2, ..., an] — последовательность длины n, которая будет представлять код перестановки. Для каждого i от 1 до n последовательно он будет выбирать наименьшее непомеченное j (1 ≤ j ≤ n) такое, что pi < pj и присвоит в ai число j (другими словами выполнит ai = j) и пометит j. Если такого j не существует, то он присвоит в ai число  - 1 (он выполнит ai =  - 1).

    Майк забыл свою изначальную перестановку, но он помнит ее код. Ваша задача проста: найдите любую перестановку такую, что ее код такой же, как и код изначальной перестановки Майка.

    Вы можете предположить, что всегда существует хотя бы одна перестановка.

    Входные данные

    Первая строка содержит единственное целое число n (1 ≤ n ≤ 500 000) — длина перестановки.

    Вторая строка содержит n целых чисел, разделенных пробелами, a1, a2, ..., an (1 ≤ ai ≤ n или ai =  - 1) — код перестановки Майка.

    Вы можете предположить, что все положительные числа из A различны.

    Выходные данные

    В первой и единственной строке выведите n чисел p1, p2, ..., pn (1 ≤ pi ≤ n) — перестановка P, которая имеет такой же код, что и данный. Заметьте, что числа в перестановке различны.

    Примечание

    Для перестановки из первого примера:

    i = 1, наименьшее j равно 2, потому что p2 = 6 > p1 = 2.

    i = 2, нет такого j, потому что p2 = 6 наибольший элемент в перестановке.

    i = 3, наименьшее j равно 1 потому что p1 = 2 > p3 = 1.

    i = 4, наименьшее j равно 5 (2 уже помечено), потому что p5 = 5 > p4 = 4.

    i = 5, нет такого j, потому что 2 уже помечено.

    i = 6, наименьшее j равно 4, потому что p4 = 4 > p6 = 3.

    B. Покупка футболок

    реализация Структуры данных *1400

    В магазин привезли партию новых футболок, состоящую из n штук. Каждая футболка характеризуется тремя параметрами pi, ai и bi, где pi — это цена i-й футболки, ai — цвет i-й футболки спереди, а bi — цвет i-й футболки со спины. Все pi — различны, а величины ai и bi — целые числа от 1 до 3.

    Известно, что в магазин придут m покупателей. Каждый из них хочет купить ровно одну футболку. Про каждого из покупателей известен его любимый цвет, cj — любимый цвет j-го покупателя.

    Покупатель согласен купить футболку, если хотя бы с одной стороны она его любимого цвета. При этом среди всех футболок, которые покупатель согласен купить, он выберет самую дешёвую. Если в магазине не осталось подходящих футболок, то покупатель не будет ничего покупать. Считайте, что все покупатели приходят по очереди, и обслуживание нового покупателя не начнется, пока не закончится обслуживание предыдущего.

    Перед вами стоит задача для каждого покупателя определить цену футболки, которая будет им куплена.

    Входные данные

    В первой строке следует целое положительное число n (1 ≤ n ≤ 200 000) — количество футболок в магазине.

    В следующей строке следует последовательность целых чисел p1, p2, ..., pn (1 ≤ pi ≤ 1 000 000 000), где pi равно цене i-й футболки.

    В следующей строке следует последовательность целых чисел a1, a2, ..., an (1 ≤ ai ≤ 3), где ai равно цвету футболки i спереди.

    В следующей строке следует последовательность целых чисел b1, b2, ..., bn (1 ≤ bi ≤ 3), где bi равно цвету футболки i со спины.

    В следующей строке следует целое положительное число m (1 ≤ m ≤ 200 000) — количество покупателей.

    В следующей строке следует последовательность c1, c2, ..., cm (1 ≤ cj ≤ 3), где cj равно любимому цвету покупателя j.

    Покупатели будут приходить в магазин в том же порядке, что перечислены во входных данных. Обслуживание нового покупателя не начнется, пока не закончится обслуживание предыдущего.

    Выходные данные

    Выведите в первую строку m целых чисел, причём j-е число должно быть равно стоимости футболки, которую приобретёт покупатель j. Если покупатель j не сможет найти подходящей футболки, выведите -1.

    C. Фонтаны

    Бинарный поиск реализация Структуры данных *1800

    Аркадий — заядлый игрок в Gardenscapes. Аркадий хочет построить два новых фонтана. Есть список из n доступных ему фонтанов, про каждый фонтан известна его красота и стоимость. В игре есть два вида денежных ресурсов: монеты и алмазы, поэтому стоимость каждого из фонтанов может быть выражена в монетах или алмазах. Монеты и алмазы нельзя обменивать друг на друга.

    Помогите Аркадию выбрать два фонтана с максимальной суммарной красотой таких, что он может купить на имеющиеся у него ресурсы оба одновременно.

    Входные данные

    Первая строка содержит три целых числа n, c и d (2 ≤ n ≤ 100 000, 0 ≤ c, d ≤ 100 000) — количество фонтанов, количество монет и количество алмазов, которые есть у Аркадия.

    В следующих n строках следует описание фонтанов. В каждой строке сначала следует два целых числа bi и pi (1 ≤ bi, pi ≤ 100 000) — красота и стоимость фонтана номер i, а затем буква «C» или «D» — в чем измеряется стоимость фонтана номер i — в монетах или в алмазах, соответственно.

    Выходные данные

    Выведите максимальную суммарную красоту ровно двух фонтанов, которые Аркадий может построить. Если невозможно построить два фонтана, выведите 0.

    Примечание

    В первом примере Аркадию нужно построить второй фонтан с красотой 4, который стоит 3 монеты. Первый фонтан он построить не сможет, так как ему не хватит на это монет. Также, Аркадию нужно построить третий фонтан с красотой 5, который стоит 6 алмазов. Таким образом, суммарная красота построенных фонтанов равна 9.

    Во втором примере всего два фонтана, но Аркадий не сможет построить их оба, так как для постройки первого фонтана нужно 5 монет, а у Аркадия есть всего 4 монеты.

    E. Украшения для аквариума

    жадные алгоритмы Структуры данных *2500

    Аркадий и Маша хотят выбрать украшения для своего общего аквариума в игре Fishdom. Всего имеется n доступных украшений, каждое из которых стоит некоторое количество монет. Для выполнения задания Аркадий и Маша должны выбрать ровно m из данных украшений, причем, конечно, они собираются потратить как можно меньше монет.

    Есть одна трудность: Маше нравятся некоторые a из данных украшений, а Аркадию – некоторые b. При этом некоторые украшения могут не нравиться ни Аркадию, ни Маше, или, наоборот, нравиться обоим. Ребята хотят выбрать украшения так, чтобы каждому нравились хотя бы k из выбранных. Помогите Маше и Аркадию найти минимальную сумму монет, которую придется потратить для этого.

    Входные данные

    В первой строке заданы три натуральных числа n, m и k (1 ≤ n ≤ 200000, 1 ≤ m ≤ n, 1 ≤ k ≤ n) — количество доступных украшений, сколько украшений надо выбрать, сколько украшений должно понравиться каждому.

    Во второй строке заданы n натуральных чисел c1, c2, ..., cn (1 ≤ ci ≤ 109) — стоимости украшений.

    В третьей строке дано число a (1 ≤ a ≤ n) — количество украшений, которые нравятся Маше. В четвертой строке даны a различных чисел x1, x2, ..., xa (1 ≤ xi ≤ n) — номера украшений, которые нравятся Маше.

    В следующих двух строках описаны номера украшений, которые нравятся Аркадию, в том же формате.

    Выходные данные

    Вывести единственное число — минимальное количество монет, которое придется потратить для выполнения всех условий. Если выполнить все требования не удастся, нужно вывести -1.

    Примечание

    В первом примере существует единственный вариант выбрать 3 украшения, удовлетворяющих всем требованиям — нужно взять украшения с номерами 1, 2, 3.

    Во втором примере вместо украшения 3 можно взять украшение 4, которое тоже нравится Аркадию, но дешевле на одну монету.

    В третьем примере невозможно выбрать 2 украшения так, чтобы они оба понравились и Маше, и Аркадию.

    F. Красивые ряды фонтанов

    Структуры данных *3500

    Дворецкий Остин хочет показать Аркадию, что ряды из нечетного числа фонтанов — это красиво, а ряды из четного числа фонтанов — нет.

    Дворецкий хочет показать Аркадию n садов. Каждый сад представляет из себя ряд из m клеток, в i-м из садов в каждой клетке с li по ri включительно находится фонтан, и больше фонтанов в этом саду нет. Проблема в том, что некоторые из садов все-таки имею четное число фонтанов, что недопустимо показывать Аркадию.

    Остин хочет выбрать два числа a ≤ b и показать из каждого сада лишь участок, начинающийся в клетке a и кончающийся в клетке b. Конечно, подойдут лишь такие участки, что в каждом саду на этом отрезке либо нет фонтанов, либо нечетное число фонтанов. Кроме того, необходимо, чтобы хотя бы в одном саду на участке клеток от a до b был хотя бы один фонтан.

    Помогите Остину найти суммарную длину всех таких участков, то есть, просуммируйте величину (b - a + 1) для каждой подходящей пары (a, b).

    Входные данные

    В первой строке находятся два целых числа n и m (1 ≤ n, m ≤ 2·105) — число садов и длина каждого сада.

    Далее следуют n строк. В i-й из этих строк находятся два целых числа li и ri (1 ≤ li ≤ ri ≤ m) — границы участка, на котором в саду номер i есть фонтаны.

    Выходные данные

    Выведите одно число — суммарную длину всех подходящих участков.

    Примечание

    В первом примере подходят следующие пары (a, b): (1, 2), (1, 4), (1, 5), (2, 2), (2, 4), (2, 5), (3, 3), (4, 4), (4, 5).

    Во втором примере подходят следующие пары (a, b): (1, 2), (1, 5), (2, 2), (2, 5), (3, 3), (4, 4), (4, 6), (5, 5), (6, 6).

    G. Разрезать торт

    Бинарный поиск геометрия Структуры данных *3500

    Аркадий прошел n-й уровень в игре Township, и поэтому Маша решила испечь ему торт! Конечно, торт представляет из себя выпуклый n-угольник, то есть многоугольник с n сторонами.

    Будучи истинным джентльменом, Аркадий решил поделить торт на две равные по площади части одним прямым разрезом: одну часть он съест сам, другую съест Маша. Но вот незадача: Аркадий уже воткнул нож в одну из точек внутри торта, и теперь ему нужно разрезать торт по прямой линии, проходящей через эту точку.

    Помогите Аркадию: найдите такую прямую, что она проходит через точку, в которую Аркадий воткнул нож, и делит торт на две равные по площади части, или определите, что такой прямой нет. Ваша программа должна быстро отвечать на много запросов с одним и тем же тортом, но разными точками, в которые Аркадий втыкает нож.

    Входные данные

    В первой строке находятся два целых числа n и q (3 ≤ n ≤ 104, 1 ≤ q ≤ 105) — число вершин в торте-многоугольнике и число запросов.

    Далее следуют n строк, в которых находятся координаты вершин многоугольников в порядке обхода по часовой стрелке. В i-й из этих строк находятся два целых числа xi и yi ( - 106 ≤ xi, yi ≤ 106) — координаты i-й вершины. Гарантируется, что многоугольник строго выпуклый, в частности, никакие три вершины не лежат на одной прямой.

    Далее следует пустая строка.

    Далее следуют q строк, в которых находятся координаты точек, в которые Аркадий втыкает нож. В i-й из этих строк находятся два целых числа xi и yi ( - 106 ≤ xi, yi ≤ 106) — координаты точки, в которую Аркадий втыкает нож, в i-м запросе. Гарантируется, что в каждом запросе точка лежит строго внутри многоугольника, в частности, не лежит на его границе.

    Выходные данные

    Для каждого запроса выведите одно число — полярный угол прямой, являющейся ответом на соответствующий запрос. Угол должен принадлежать отрезку [0;π], углы отсчитываются от направления оси абцисс (OX) против часовой стрелки. Например, полярный угол направления оси ординат (OY) равен . Если в запросе не существует подходящей прямой, выведите -1.

    Если подходящий прямых несколько, выведите любую из них. Ваш ответ будет считаться правильным, если отношение модуля разности площадей получившихся частей к общей площади многоугольника, не превосходит 10 - 4. Иными словами, если a и b — площади получившихся частей многоугольника, то ваш ответ будет считаться правильным, если .

    B. Хайди и Библиотека (средняя)

    жадные алгоритмы Структуры данных *1800

    В то время как люди сегодня читают все меньше книг на бумаге, аудитория читателей среди сурков выросла. Хайди расширила хранилище библиотеки и теперь может обслуживать большее количество посетителей.

    Входные данные

    Входные данные те же, что и в простой версии задачи, но увеличены ограничения: 1 ≤ n, k ≤ 400 000.

    Выходные данные

    Выходные данные те же, что и в простой версии задачи.

    O. Первоапрельская задача (сложная)

    Бинарный поиск Потоки Структуры данных *2900

    Планы для HC2 довольно надуманны: остаётся чуть более чем 500 000 дней до HC2 3387, например, и, соответственно, мы планируем сделать несколько сотен тысяч задач в соответствующем году (мы надеемся, что соревнования по программированию станут более популярными). Суркам нужно приступать к работе, и они могли бы использовать хороший план ...

    Входные данные

    Входные данные те же, что и в средней версии этой задачи, но изменены ограничения: 1 ≤ k ≤ n ≤ 500 000.

    Выходные данные

    Выходные данные те же, что и в средней версии этой задачи.

    G. Периодическая задача RMQ

    Структуры данных *2300

    Дан массив a, состоящий из натуральных чисел, и q запросов к нему. Запросы бывают двух видов:

    • 1 l r x — для всех таких индексов i, что l ≤ i ≤ r, присвоить ai = x.
    • 2 l r — найти минимум по всем таким ai, что l ≤ i ≤ r.

    Мы решили, что эта задача слишком простая. Поэтому массив a задаётся в сжатом виде: во входном файле записаны массив b длины n и число k, а изначальный массив a — это k раз подряд записанный массив b (таким образом, длина массива a равна n·k).

    Входные данные

    В первой строке записаны два числа n и k (1 ≤ n ≤ 105, 1 ≤ k ≤ 104).

    Во второй строке записано n чисел — элементы массива b (1 ≤ bi ≤ 109).

    В третьей строке записано количество запросов q (1 ≤ q ≤ 105).

    Далее следуют q строк — описания запросов. Каждый запрос задаётся либо в формате 1 l r x — заменить все числа на отрезке массива от l до r включительно на x (1 ≤ l ≤ r ≤ n·k, 1 ≤ x ≤ 109), либо в формате 2 l r — найти минимум по всем числам на отрезке от l до r (1 ≤ l ≤ r ≤ n·k).

    Выходные данные

    Для каждого запроса 2 типа выведите ответ на него — число, равное минимуму на соответствующем подотрезке в момент запроса.

    B. Средняя продолжительность сна

    математика реализация Структуры данных *1300

    Уже неделю Поликарп не может отдохнуть — его мучает бессонница. Как известно, неделя в Берляндии длится целых k дней!

    С этой проблемой Поликарп обратился ко врачу. Врач спросил, сколько часов Поликарп спит в среднем в неделю. К счастью, Поликарп в течение n последних дней записывал в дневник количество часов сна в каждый из дней. Таким образом, у него есть последовательность a1, a2, ..., an, где ai — количество часов сна в i-й день.

    Записей накопилось так много, что он не может сам подсчитать среднее значение. Поэтому Поликарп просит вас помочь ему с расчетами. При подсчете искомого среднего значения Поликарп планирует учесть в качестве недели каждые k подряд идущих дней. Таким образом, при в подсчетах будет учтена n - k + 1 неделя. Например, если k = 2, n = 3, а a = [3, 4, 7], то искомое значение будет равно .

    Напишите программу, которая найдет среднее арифметическое суммарных продолжительностей сна Поликарпа за все недели.

    Входные данные

    В первой строке задано два целых положительных числа n и k (1 ≤ k ≤ n ≤ 2·105).

    Во второй строке задано n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 105).

    Выходные данные

    Выведите единственное число — среднее арифметическое суммарной продолжительности сна Поликарпа за неделю.

    Ответ считается правильным, если абсолютная или относительная погрешность не превосходит 10 - 6. В частности, это означает, что достаточно вывести вещественное число с 6 или более знаками после десятичной точки.

    Примечание

    В третьем примере всего n - k + 1 = 7 недель, поэтому ответ — сумма по всем неделям, деленная на 7.

    D. Разделение массива

    Бинарный поиск реализация Структуры данных *1900

    У Васи есть массив a, состоящий из положительных чисел. Вася хочет разделить этот массив на две непустые непрерывные части (префикс и суффикс) так, чтобы сумма всех элементов в левой части была равна сумме элементов в правой части.

    Такое разделение возможно не для каждого массива. Поэтому Вася перед тем, как разделить массив, переместит ровно один его элемент (т. е. удалит произвольный элемент массива и вставит его в массив на любую позицию).

    Вставка элемента в ту же самую позицию, из которой он был удалён, тоже считается перемещением.

    Может ли Вася, переместив нужный элемент в правильную позицию, разделить массив?

    Входные данные

    В первой строке задано единственное число n (1 ≤ n ≤ 100000) — размер массива.

    Во второй строке задано n чисел a1, a2... an (1 ≤ ai ≤ 109) — элементы массива.

    Выходные данные

    Выведите YES, если Вася может разделить массив после перемещения одного элемента. Иначе выведите NO.

    Примечание

    В первом тесте из условия можно перенести второй элемент в конец массива.

    Во втором тесте никакой перенос не позволит разделить массив.

    В третьем тесте можно переместить на одну позицию влево четвёртый элемент.

    D. Автостопом по Прибалтике

    дп Структуры данных *2900

    Леха и Нура решили отправиться в путешествие по Прибалтике. Всего они хотели бы посетить n городов. Но оказалось, что достопримечательности в i-м городе доступны для посещения только в промежуток дней с li по ri.

    Что же делать? Леха предложил выбрать для каждого города i день, в который они посетят этот город, то есть целое число xi, принадлежащее промежутку [li, ri]. После этого Нура должна выбрать некоторую последовательность городов, в которые поедут друзья, то есть такие номера городов id1, id2, ..., idk, что, во-первых, они идут в строго возрастающем порядке idi < idi + 1 для всех целых i от 1 до k - 1, а, во-вторых, для выбранных Нурой городов дни посещения также находятся в строго возрастающем порядке, то есть должно выполняться xidi < xidi + 1 для всех целых i от 1 до k - 1.

    Помогите Лехе и Нуре выбрать такие xi для каждого города i, а также некоторую последовательность городов id1, id2, ..., idk так, чтобы они смогли посетить как можно больше городов!

    Следует полагать, что Леха и Нура готовы начать путешествие в любой день.

    Входные данные

    В первой строке входного файла задано одно целое число n (1 ≤ n ≤ 3·105) — количество городов, которые планировали посетить Леха и Нура.

    Каждая строка i из следующих n строк содержит два целых числа li, ri (1 ≤ li ≤ ri ≤ 109), означающие, что достопримечательности в i-м городе доступны для посещения в любой день .

    Выходные данные

    Выведите одно число — максимальное количество городов, которое могут посетить Леха и Нура.

    Примечание

    Рассмотрим первый пример.

    Возьмем следующий план: посетим достопримечательность во втором городе в первый день, в третьем городе — в третий день, а в пятом городе — в четвертый. Это и будет оптимальным ответом.

    E. Владик и занимательные флаги

    графы снм Структуры данных *2600

    В свободное время Владик оценивает красоту флагов.

    Флаг можно представить как матрицу n × m из целых положительных чисел.

    Определим красоту матрицы, как количество пятен в ней. Пятном назовем некоторое множество клеток с одинаковыми числами таких, что между любой парой клеток множества существует путь по смежным по стороне клеткам. Пример разделения матрицы на пятна:

    Но в этот раз он решил что-то поменять и начать оценивать не весь флаг целиком, а только некоторый его отрезок. Отрезок флага можно описать как подматрицу матрицы флага с противоложными углами в (1, l) и (n, r), где 1 ≤ l ≤ r ≤ m.

    Помогите Владику посчитать красоту для некоторых отрезков флага!

    Входные данные

    В первой строке заданы три целых числа n, m, q (1 ≤ n ≤ 10, 1 ≤ m, q ≤ 105) — размеры флага и количество отрезков соответственно.

    В каждой из следующих n строк записано по m целых чисел — описание флага. Все элементы матрицы являются целыми натуральными числами не превышающими 106.

    Следующие q строк будут содержать по два целых числа l, r (1 ≤ l ≤ r ≤ m) — границы отрезка для которого Владик хочет посчитать красоту.

    Выходные данные

    Для каждого отрезка в отдельной строке выведите количество пятен на нем.

    Примечание

    Разделение на пятна для каждого отрезка:

    E. Создание армии

    Бинарный поиск Структуры данных *2200

    Как вы можете помнить из наших предыдущих контестов, Вова очень любит играть в компьютерные игры. Сейчас он играет в стратегию Rage of Empires.

    В игре Вове доступны для найма n различных воинов; i-й воин имеет тип ai. Вова хочет создать сбалансированную армию, наняв какое-то подмножество воинов. Армия называется сбалансированной, если в ней присутствует не более k воинов одного типа. Конечно же, Вова хочет, чтобы его армия была как можно больше.

    Но всё не так просто — Вове придётся рассмотреть q различных планов создания армии. i-й план позволяет ему нанимать только тех воинов, чей номер не меньше li и не больше ri.

    Помогите Вове определить максимальный размер сбалансированной армии для каждого плана.

    Обратите внимание, что параметры каждого плана заданы в изменённом виде. Подробнее в описании входных данных.

    Входные данные

    В первой строке записаны два числа n и k (1 ≤ n, k ≤ 100000).

    Во второй строке записаны n чисел a1, a2, ... an (1 ≤ ai ≤ 100000).

    В третьей строке записано единственное число q (1 ≤ q ≤ 100000).

    Затем следуют q строк. i-я строка содержит два числа xi и yi, описывающие i-й план (1 ≤ xi, yi ≤ n).

    Вам необходимо запоминать ответ на последний обработанный план (назовём этот ответ last). В самом начале last = 0. Числа li и ri для i-го плана восстанавливаются по следующему алгоритму:

    1. li = ((xi + lastmod n) + 1;
    2. ri = ((yi + lastmod n) + 1;
    3. Если li > ri, нужно поменять местами значения li и ri.
    Выходные данные

    Выведите q чисел. i-е число должно быть равно максимальному размеру сбалансированной армии при рассмотрении i-го плана.

    Примечание

    В первом примере планы создания армии следующие:

    1. 1 2
    2. 1 6
    3. 6 6
    4. 2 4
    5. 4 6

    F. Проверка на двудольность

    графы снм Структуры данных *2500

    Дан неориентированный граф, состоящий из n вершин. Изначально в графе нет рёбер. Также даны q запросов; каждый запрос либо добавляет ребро в граф, либо удаляет ранее добавленное. После каждого запроса необходимо проверить, что граф двудольный (т. е. можно покрасить все вершины в два цвета так, чтобы ни одно ребро не соединяло две вершины одного цвета).

    Входные данные

    В первой строке записаны два числа n и q (2 ≤ n, q ≤ 100000).

    Затем следуют q строк. В i-й строке записаны два числа xi и yi (1 ≤ xi < yi ≤ n). Эти числа описывают i-й запрос: если существует ребро между вершинами xi и yi, то удалить его, иначе добавить его.

    Выходные данные

    Выведите q строк. В i-й строке должно быть записано YES, если граф является двудольным после i-го запроса, и NO в противном случае.

    D. Карен и карты

    Бинарный поиск геометрия Комбинаторика Структуры данных *2800

    Карен пришла из супермаркета и собирается спать.

    После принятия душа и переодевания в пижаму она заметила альбом на своей полке. Заинтересовавшись, она открыла его и увидела коллекцию карт.

    Она вспомнила, что играла в них, когда была ребенком, но, несмотря на то, что она уже выросла, ее по-прежнему интересует один вопрос.

    Каждая карта имеет три характеристики: сила, защита и скорость. Значения всех характеристик всех карт являются положительными целыми числами. Максимальное значение силы любой карты равно p, максимальное значение защиты равно q, максимальное значение скорости равно r.

    В коллекции Карен n карт. i-я из этих карт имеет силу ai, защиту bi и скорость ci, соответственно.

    Карта бьет другую карту, если хотя бы две ее характеристики строго больше соответствующих характеристик другой карты.

    Карен интересует, сколько существует различных карт таких, что каждая из них бьет все карты из ее коллекции. Две карты различны, если хотя бы одна характеристика этих карт различна.

    Входные данные

    Первая строка содержит четыре целых числа n, p, q и r (1 ≤ n, p, q, r ≤ 500000) — число карт в коллекции, максимально возможная сила, максимально возможная защита, максимально возможная скорость, соответственно.

    Каждая из следующих n строк содержит три целых числа. А именно, i-я строка содержит ai, bi и ci (1 ≤ ai ≤ p, 1 ≤ bi ≤ q, 1 ≤ ci ≤ r) — силу, защиту и скорость i-й карты из коллекции, соответственно.

    Выходные данные

    Выведите одно число — число различных карт, которые бьют все карты из коллекции Карен.

    Примечание

    В первом примере максимально возможная сила равна 4, максимально возможная защита равна 4, а максимально возможная скорость равна 5.У Карен есть три карты:

    • У первой карты сила 2, защита 2, скорость 5.
    • У второй карты сила 1, защита 3, скорость 4.
    • У третьей карты сила 4, защита 1, скорость 1.

    Всего существуют 10 карт, которые бьют все карты из коллекции:

    1. Карта с силой 3, защитой 3 и скоростью 5.
    2. Карта с силой 3, защитой 4 и скоростью 2.
    3. Карта с силой 3, защитой 4 и скоростью 3.
    4. Карта с силой 3, защитой 4 и скоростью 4.
    5. Карта с силой 3, защитой 4 и скоростью 5.
    6. Карта с силой 4, защитой 3 и скоростью 5.
    7. Карта с силой 4, защитой 4 и скоростью 2.
    8. Карта с силой 4, защитой 4 и скоростью 3.
    9. Карта с силой 4, защитой 4 и скоростью 4.
    10. Карта с силой 4, защитой 4 и скоростью 5.

    Во втором примере максимально возможная сила равна 10, максимально возможная защита равна 10, максимально возможная скорость равна 10. У Карен пять карт, у всех из них сила 1, защита 1 и скорость 1.

    Каждая из 972 карт, у которых хотя бы две характеристики больше 1, бьет все карты из коллекции.

    B. Карен и кофе

    Бинарный поиск реализация Структуры данных *1400

    Для того, чтобы оставаться бодрой и внимательной во время занятий, Карен нужен кофе!

    Карен — поклонница кофе — хочет узнать оптимальную температуру заваривания кофе. Для этого она потратила некоторое время на чтение нескольких книг рецептов, в том числе общепризнанную книгу «Искусство ковфефе».

    Карен знает n рецептов кофе. i-й из них рекомендует заваривать кофе при температуре от li до ri градусов включительно.

    Карен считает, что температура является приемлемой, если хотя бы k рецептов рекомендуют ее.

    Карен очень непостоянная, поэтому у нее есть q вопросов. В каждом вопросе она хочет заварить кофе с целочисленной температурой от a до b градусов включительно, и хочет узнать, сколько приемлемых целочисленных температур находятся в этом промежутке.

    Входные данные

    В первой строке содержится три целых числа n, k (1 ≤ k ≤ n ≤ 200000) и q (1 ≤ q ≤ 200000) — число рецептов, минимальное количество рецептов, необходимое для признания температуры приемлемой, и количество вопросов Карен, соответственно.

    Следующие n строк описывают рецепты. А именно, i-я их этих строк содержит два целых числа li и ri (1 ≤ li ≤ ri ≤ 200000), означающих, что i-й рецепт рекомендует заваривать кофе с температурой между li и ri градусами включительно.

    Следующие q строк описывают вопросы Карен. Каждая их этих строк содержит два целых числа a и b (1 ≤ a ≤ b ≤ 200000), означающих, что она хочет узнать число приемлемых целочисленных температур между a и b градусами включительно.

    Выходные данные

    Для каждого вопроса выведите одно целое число — число приемлемых целочисленных температур между a и b градусами включительно.

    Примечание

    В первом примере Карен знает 3 рецепта.

    1. Первый рекомендует заваривать кофе при температуре между 91 и 94 градусами включительно.
    2. Второй рекомендует заваривать кофе при температуре между 92 и 97 градусами включительно.
    3. Третий рекомендует заваривать кофе при температуре между 97 и 99 градусами включительно.

    Температура является приемлемой, если хотя бы 2 рецепта ее рекомендуют.

    У Карен 4 вопроса.

    В первом вопросе она хочет узнать число приемлемых целочисленных температур между 92 и 94 градусами включительно. Таких 3: 92, 93 и 94 градуса являются приемлемыми.

    Во втором вопросе она хочет узнать число приемлемых целочисленных температур между 93 и 97 градусами включительно. Таких 3: 93, 94 и 97 градуса являются приемлемыми.

    В третьем вопросе она хочет узнать число приемлемых целочисленных температур между и 95 и 96 градусами включительно. Таких нет.

    В последнем вопросе она хочет узнать число приемлемых целочисленных температур между 90 and 100 градусами включительно. Таких 4: 92, 93, 94 и 97 градуса являются приемлемыми.

    Во втором примере Карен знает 2 рецепта.

    1. Первых их них, «wikiHow to make Cold Brew Coffee», рекомендует заваривать кофе при температуре ровно 1 градус.
    2. Второй, «Разве является кофе то, что не заварено при температуре не меньше 36.3306 температур Солнца?», рекомендует заваривать кофе при ровно 200000 градусов.

    Температура является приемлемой, если хотя бы 1 рецепт ее рекомендует.

    В первом и единственном вопросе Карен хочет узнать, сколько приемлемых температур действительно являются осмысленными. Таких нет.

    D. Несбалансированный массив

    разделяй и властвуй снм сортировки Структуры данных *1900

    Дан массив a, состоящий из n элементов. Назовём дисбалансом некоторого подотрезка массива разность между максимумом и минимумом на этом подотрезке. Дисбаланс всего массива — сумма дисбалансов всех подотрезков этого массива.

    Например, дисбаланс массива [1, 4, 1] равен 9, так как его 6 подотрезков имеют следующий дисбаланс:

    • [1] (с позиции 1 до позиции 1), дисбаланс равен 0;
    • [1, 4] (с позиции 1 до позиции 2), дисбаланс равен 3;
    • [1, 4, 1] (с позиции 1 до позиции 3), дисбаланс равен 3;
    • [4] (с позиции 2 до позиции 2), дисбаланс равен 0;
    • [4, 1] (с позиции 2 до позиции 3), дисбаланс равен 3;
    • [1] (с позиции 3 до позиции 3), дисбаланс равен 0;

    Ваша задача — вычислить дисбаланс массива a.

    Входные данные

    Первая строка содержит единственное целое число n (1 ≤ n ≤ 106) — размер массива a.

    Во второй строке записаны n целых чисел a1, a2... an (1 ≤ ai ≤ 106) — элементы массива.

    Выходные данные

    Выведите одно целое число — дисбаланс массива a.

    E. Выбор командира

    битмаски Деревья Структуры данных *2000

    Как вы, может быть, помните по предыдущему раунду, Вова играет в стратегическую компьютерную игру Rage of Empires.

    Вове удалось создать большую армию, но он забыл о самом главном человеке в армии - командире. Сейчас он пытается нанять командира для своей армии.

    У каждого воина в армии Вовы есть свой характер, обозначаемый числом pi. У каждого командира два параметра — характер командира pj и лидерство lj (оба параметра — целые числа). Воин i уважает командира j только в том случае, если ( — побитовое исключающее ИЛИ чисел x и y).

    Изначально армия Вовы пуста. С ней происходит последовательность событий трёх типов:

    • pi — один воин с характером pi присоединяется к армии;
    • pi — один воин с характером pi покидает армию;
    • pi li — Вова пытается нанять командира с характером pi и лидерством li.

    Для каждого события третьего типа Вова хочет знать, сколько воинов (считая только тех, кто присоединился к армии и не покинул её до этого события) уважают командира, которого он пытается нанять.

    Входные данные

    В первой строке записано единственное число q (1 ≤ q ≤ 100000) — количество событий.

    Затем следуют q строк. Каждая из них описывает событие:

    • pi (1 ≤ pi ≤ 108) — один воин с характером pi присоединяется к армии;
    • pi (1 ≤ pi ≤ 108) — один воин с характером pi покидает армию. Гарантируется, что хотя бы один такой воин на момент этого события был в армии;
    • pi li (1 ≤ pi, li ≤ 108) — Вова пытается нанять командира с характером pi и лидерством li. Гарантируется, что будет хотя бы одно событие этого типа.
    Выходные данные

    Для каждого события третьего типа выведите одно число — кол-во воинов, которые уважают командира, которого пытается нанять Вова в соответствующем событии.

    Примечание

    В первом тесте после первых двух событий армия Вовы состоит из двух воинов с характерами 3 и 4. Затем Вова пытается нанять командира с характером 6 и лидерством 3, и один воин уважает этого командира (, и 2 < 3, но , и 5 ≥ 3). Затем воин с характером 4 уходит, и когда Вова снова пытается нанять того же командира, ни один воин не уважает его.

    F. Запросы на MEX

    Бинарный поиск Деревья Структуры данных *2300

    Дано множество целых чисел, изначально пустое. Ваша задача — обработать n запросов.

    Запросы бывают трех типов:

    • 1 l r — Добавить все отсутствующие числа из интервала [l, r]
    • 2 l r — Удалить все присутствующие числа из интервала [l, r]
    • 3 l r — Инвертировать интервал [l, r] — добавить все отсутствующие и удалить все присутствующие числа из интервала [l, r]

    После каждого запроса выведите MEX множества — наименьшее положительное (MEX  ≥ 1) целое число, которого нет во множестве.

    Входные данные

    В первой строке записано одно целое число n (1 ≤ n ≤ 105).

    В следующих n строках записаны по три числа t, l, r (1 ≤ t ≤ 3, 1 ≤ l ≤ r ≤ 1018) — тип запроса, левая и правая границы.

    Выходные данные

    Выведите MEX множества после каждого запроса.

    Примечание

    Рассмотрим содержимое множества после каждого из запросов первого примера:

    1. {3, 4} — интервал [3, 4] добавлен
    2. {1, 2, 5, 6} — числа {3, 4} из интервала [1, 6] удалены, а остальные добавлены
    3. {5, 6} — числа {1, 2} удалены

    D. Разноцветные машины

    реализация Структуры данных *1700

    Алиса и Боб заскучали во время длинной поездки на машине, и поэтому решили сыграть в игру. Из окна они видят проезжающие мимо машины разных цветов. Машины едут подряд одна за другой.

    В игре следующие правила. Сначала Алиса выбирает некоторый цвет A, потом Боб выбирает некоторый цвет B (A ≠ B). После каждой машины они обновляют количество машин их выбранного цвета, проехавших мимо них. Назовем эти числа после i-й машины cntA(i) and cntB(i).

    • Если cntA(i) > cntB(i) для каждого i, то побеждает Алиса.
    • Если cntB(i) ≥ cntA(i) для каждого i, то побеждает Боб.
    • В ином случае игра завершается ничьей.

    Боб знает все цвета машин, которые проедут мимо них, и их порядок. Алиса уже выбрала цвет A, и Боб теперь хочет выбрать такой цвет B, что с ним он выиграет (ничья не считается победой). Помогите ему найти такой цвет.

    Если существует несколько решений, то выведите любое из них. Если не существует ни одного такого цвета, то выведите -1.

    Входные данные

    В первой строке записаны два целых числа n и A (1 ≤ n ≤ 105, 1 ≤ A ≤ 106) — количество машин и цвет, выбранный Алисой.

    Во второй строке записаны n целых чисел c1, c2, ..., cn (1 ≤ ci ≤ 106) — цвета машин, которые увидят Алиса и Боб, в порядке их появления.

    Выходные данные

    Выведите такой цвет B (1 ≤ B ≤ 106), что если Боб выберет его, то выиграет. Если существует несколько решений, то выведите любое из них. Если не существует ни одного такого цвета, то выведите -1.

    Гарантируется, что если существует хотя бы одно решение, то существует также решение с (1 ≤ B ≤ 106).

    Примечание

    Рассмотрим доступность цветов в первом примере:

    • cnt2(i) ≥ cnt1(i) для каждого i, соответственно, цвет 2 выигрышный.
    • cnt4(2) < cnt1(2), поэтому цвет 4 не является выигрышным для Боба.
    • Для всех остальных цветов cntj(2) < cnt1(2), поэтому они тоже недоступны.

    В третьем примере любой цвет, кроме цвета 10, приемлем.

    E. И снова карточная игра

    Бинарный поиск Структуры данных теория чисел *1900

    Вова опять пытается играть в одну компьютерную карточную игру.

    Правила создания колоды в этой игре очень просты. Изначально Вова получает колоду из n карт, а также магическое число k. Порядок карт в колоде строго фиксирован, нельзя её перемешивать. На картах записаны числа: ai — число на i-й карте в колоде, которую получает Вова.

    После этого Вова убирает x (возможно, что x = 0) первых карт из начала колоды и y (возможно, y = 0) карт из конца, и оставшиеся карты составляют колоду Вовы (хотя бы одна карта должна остаться). То есть новая колода Вовы включает в себя карты, которые были на позициях x + 1, x + 2, ... n - y - 1, n - y в колоде, которую он получил.

    Новая колода считается правильной тогда и только тогда, когда произведение чисел, записанных на всех картах новой колоды, делится на k нацело. Итак, Вова получил колоду (не обязательно правильную) и число k, и теперь он хочет знать, сколько существует различных способов выбрать x и y так, что колода, полученная после удаления x карт из начала и y карт из конца, является правильной?

    Входные данные

    В первой строке записаны два числа n и k (1 ≤ n ≤ 100 000, 1 ≤ k ≤ 109).

    Во второй строке записаны n чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — числа, записанные на картах.

    Выходные данные

    Выведите кол-во способов выбрать x и y так, чтобы новая колода Вовы была правильной.

    Примечание

    В первом примере возможные значения x и y — следующие:

    1. x = 0, y = 0;
    2. x = 1, y = 0;
    3. x = 2, y = 0;
    4. x = 0, y = 1.

    B. Мистер Б и PR сдвиги

    математика реализация Структуры данных *1900

    Недавно Мистер Б получил странный сигнал из космоса, который он непременно решил исследовать.

    После некоторых преобразований сигнал оказался перестановкой p из n элементов, либо некоторым ее циклическим сдвигом. Для дальнейшего анализа Мистеру Б понадобилась некоторая определенность, а потому он захотел выбрать из всех циклических сдвигов данной перестановки некоторую с наименьшим отклонением.

    Отклонением перестановки p назовем величину .

    Найдите циклический сдвиг перестановки p с наименьшим отклонением. Если таких несколько, выведите номер любого из них.

    Номером k (0 ≤ k < n) циклического сдвига перестановки p определим как число сдвигов вправо, необходимых для получения этого сдвига, то есть:

    • k = 0: сдвиг p1, p2, ... pn,
    • k = 1: сдвиг pn, p1, ... pn - 1,
    • ...,
    • k = n - 1: сдвиг p2, p3, ... pn, p1.
    Входные данные

    В первой строке задано одно натуральное число n (2 ≤ n ≤ 106) — размер перестановки.

    В следующей строке задано n натуральных чисел p1, p2, ..., pn (1 ≤ pi ≤ n) через пробел — элементы перестановки. Гарантируется, что все элементы различны.

    Выходные данные

    Выведите два целых числа через пробел: минимальное возможное отклонение циклического сдвига перестановки p и номер такого сдвига. Если таких сдвигов несколько, выведите номер любого из них.

    Примечание

    В первом примере заданная перестановка p является тождественной, поэтому ее отклонение равно 0, а соответствующий номер сдвига равен 0.

    Во втором примере отклонение перестановки p равно 4, отклонение 1-го циклического сдвига (1, 2, 3) равно 0, отклонение 2-го циклического сдвига (3, 1, 2) равно 4, оптимальным является 1-й циклический сдвиг.

    В третьем примере отклонение перестановки p равно 4, отклонение 1-го циклического сдвига (1, 3, 2) равно 2, отклонение 2-го циклического сдвига (2, 1, 3) также равно 2, оптимальными являются 1-й и 2-й циклические сдвиги.

    C. Всеобщая мобилизация

    поиск в глубину и подобное сортировки Структуры данных *2000

    Королевство Берляндия представляет собой множество из n городов, связанных n - 1 железнодорожными путями. Каждый путь соединяет ровно два различных города. Столица находится в городе номер 1. Из каждого города существует способ доехать по железной дороге до столицы.

    В i-ом городе стоит дивизия солдат номер i, каждая дивизия характеризуется числом ai, означающим приоритет; чем меньше это число, тем выше приоритет у этой дивизии. Все значения ai — различны.

    Однажды Король Берляндии Берл Великий объявил всеобщую мобилизацию, и для этого каждая дивизия должна прибыть в столицу. Каждый день из каждого города, кроме столицы, по каждому железнодорожному пути отходит поезд, который имеет некоторую конечную вместимость cj, выражаемую в максимальном количестве дивизий, которое этот поезд может увезти за один раз. Каждый поезд двигается по направлению сокращения расстояния до столицы. Поезд заканчивает свой путь на противоположном конце железнодорожного пути на следующий день. Таким образом, каждый поезд проезжает из города в соседний (в которой и заканчивает свой путь) по направлению к столице.

    В первую очередь из числа дивизий, находящихся в городе, на поезд садятся дивизии с наименьшим числом ai, потом со следующим по величине и так далее, пока либо поезд не будет заполнен, либо пока все дивизии не будут погружены. Таким образом, некоторые дивизии могут оставаться в городе в ожидании поезда несколько дней.

    Длительность путешествия поезда из одного города в другой всегда равно 1 дню. Все дивизии начинают свое передвижение одновременно и заканчивают в столице, откуда больше никуда не перемещаются. Каждая дивизия передвигается по простому пути из своего города в столицу, независимо от того, сколько времени займет это путешествие.

    Ваша задача — найти для каждой дивизии, через сколько дней она прибудет в столицу Берляндии. Отсчет времени начинается с дня номер 0.

    Входные данные

    Первая строка содержит единственное число целое n (1 ≤ n ≤ 5000) — количество городов в Берляндии. Вторая строка содержит n целых разделенных пробелом чисел a1, a2, ..., an, где ai означает приоритет дивизии, находящейся в городе номер i. Все числа a1, a2, ..., an различны (1 ≤ ai ≤ 109). Далее в n - 1 строках даны описания железнодорожных путей тройками целых чисел vj, uj, cj, где vj, uj — номера городов, соединяемых j-ым железнодорожным путем, а cj означает максимальную вместимость поезда, курсирующего по этому пути (1 ≤ vj, uj ≤ n, vj ≠ uj, 1 ≤ cj ≤ n).

    Выходные данные

    Выведите последовательность t1, t2, ..., tn, где ti означает количество дней, через которое дивизия из города i прибудет в столицу. Числа разделяйте пробелами.

    C. Окабэ и коробки

    Деревья жадные алгоритмы Структуры данных *1500

    Окабэ и хакер Дару складывают коробки в стопку одну поверх другой. Всего есть n коробок, пронумерованных от 1 до n. Изначально коробок в стопке нет.

    Окабэ, любящий командовать, дает Дару 2n команд: n из них — добавить некоторую коробку на верх стопки, а n оставшихся — убрать верхнюю коробку из стопки и выкинуть ее. Окабэ хочет, чтобы Дару выкидывал коробки в порядке от 1 до n. Конечно, это означает, что возможно такое, что Дару не сможет выполнить некоторые из команд убрать, потому что необходимая коробка находится не наверху стопки.

    Поэтому Дару может иногда, когда Окабэ отвернется, переупорядочить коробки в стопке как ему захочется. Он может сделать это в любой момент между командами Окабэ, но он не может добавлять или удалять коробки в процессе переупорядочивания.

    Скажите Дару, сколько минимум раз ему необходимо переупорядочивать коробки, чтобы он мог успешно выполнить все команды Окабэ. Гарантируется, что каждая коробка добавляется в стопку раньше, чем потребуется ее убрать.

    Входные данные

    Первая строка содержит целое число n (1 ≤ n ≤ 3·105) — количество коробок.

    Каждая из следующих 2n строк начинается со строки "add" или "remove". Если она начинается со строки "add", то далее следует целое число x (1 ≤ x ≤ n), и строка означает, что Дару должен добавить коробку с номером x на верх стопки. Иначе строка означает, что Дару должен убрать очередную коробку с верха стопки.

    Гарантируется, что ровно n строк содержат операцию "add", все добавленные коробки различны, и ровно n строк содержат операцию "remove". Также гарантируется, что каждая коробка добавляется перед тем, как будет необходимо ее выкинуть.

    Выходные данные

    Выведите, какое минимальное число раз Дару должен переупорядочивать коробки, чтобы успешно выполнить все команды Окабэ.

    Примечание

    В первом примере Дару должен переупорядочивать коробки после добавления коробки 3 в стопку.

    Во втором примере Дару должен переупорядочивать коробки после добавления коробки 4 и коробки 7 в стопку.

    E. Минимальные метки

    графы жадные алгоритмы поиск в глубину и подобное Структуры данных *2300

    Задан ориентированный ацикличный граф из n вершин и m ребер. В нем нет петель и кратных ребер. Граф может быть несвязным.

    Необходимо так расставить метки на вершинах, чтобы:

    • Метки образовывали корректную перестановку длины n. Это последовательность целых чисел, такая, что каждое число от 1 до n встречается в ней ровно один раз.
    • Если существует ребро от вершины v к вершине u, то labelv должно быть меньше labelu.
    • Перестановка должна быть лексикографически наименьшей среди всех подходящих.

    Найдите последовательность, подходящую под все условия.

    Входные данные

    В первой строке записаны два целых числа n, m (2 ≤ n ≤ 105, 1 ≤ m ≤ 105).

    В следующих m строках записаны по два целых числа v и u (1 ≤ v, u ≤ n, v ≠ u) — ребра в графе. Ребра ориентированы, граф не содержит циклов и кратных ребер.

    Выходные данные

    Выведите n чисел — лексикографически наименьшую корректную перестановку меток вершин.

    A. Восстановление строки

    жадные алгоритмы сортировки Строки Структуры данных *1700

    У Ивана была строка s, состоящая из строчных букв латинского алфавита. Но его подруга Юля решила пошутить над ним и спрятала строку s. Иван решил, что не будет искать строку, а просто сделает новую.

    Иван помнит о строке s следующую информацию. Он помнит, что строка ti встречается в строке s количество раз ki или больше, а также помнит ровно ki позиций, с которых начинается вхождение строки ti в строку s — это позиции xi, 1, xi, 2, ..., xi, ki. При этом количество строк ti, про которые помнит Иван, равно n.

    Перед вами стоит задача восстановить лексикографически минимальную строку s такую, что она удовлетворяет всей информации, которую помнит Иван. Как строки ti, так и строка s могут содержать только строчные буквы латинского алфавита.

    Входные данные

    В первой строке следует целое число n (1 ≤ n ≤ 105) — количество строк, о которых помнит Иван.

    В следующих n строках следует информация о строках, которые помнит Иван. В i-й строке сначала следует непустая строка ti, затем следует положительное число ki, равное количество раз, которые строка ti встречается в строке s как минимум, а затем следует ki различных целых положительных чисел xi, 1, xi, 2, ..., xi, ki в возрастающем порядке — позиции, в которых начинаются вхождения строки ti в строку s. Гарантируется, что сумма длин строк ti не превосходит 106, 1 ≤ xi, j ≤ 106, 1 ≤ ki ≤ 106, а сумма всех ki не превосходит 106. Среди строк ti могут встречаться повторяющиеся.

    Гарантируется, что входные данные непротиворечивы и ответ всегда существует.

    Выходные данные

    Выведите лексикографически минимальную строку, которая удовлетворяет всей информации, которую помнит Иван.

    D. Лучший вес для ребра

    графы Деревья поиск в глубину и подобное Структуры данных *2700

    Дан связный неориентированный взвешенный граф с n вершинами и m ребрами. Граф не содержит петель и мультиребер. Рассмотрим некоторое ребро с номером i. Для него определим наибольший возможный вес, который можно присвоить этому ребру, чтобы оно содержалось во всех минимальный покрывающих деревьях данного графа.

    Требуется для каждого ребра посчитать максимальный вес по описанным правилам. При этом для каждого ребра ответ должен считаться независимо, то есть в графе может существовать максимум одно ребро с измененным весом.

    Входные данные

    В первой строке даны через пробел два целых положительных числа n и m (2 ≤ n ≤ 2·105, n - 1 ≤ m ≤ 2·105), где n и m — количество вершин и ребер графа соответственно.

    В следующих m строках даны по три числа u, v и c (1 ≤ v, u ≤ n, v ≠ u, 1 ≤ c ≤ 109), означающие, что между вершинами u и v есть ребро с весом c.

    Выходные данные

    В единственной строке выведите через пробел искомые веса ребер в том порядке, в котором они заданы во входных данных. Если ребро при любом весе будет содержаться во всех покрывающих деревьях, выведите для него -1.

    B. Сортировка карт

    реализация сортировки Структуры данных *1600

    У Василия есть колода, состоящая из n карт. На каждой карте написано ровно одно целое число от 1 до 100 000. Возможно, что на некоторых картах написаны одинаковые числа.

    Василий решил отсортировать все карты в колоде. Для этого он по очереди берёт одну верхнюю карту из колоды и если число, написанное на ней, равно минимальному среди всех оставшихся чисел в колоде, он откладывает эту карту в сторону. В противном случае, Василий кладёт эту карту вниз колоды и берёт сверху колоды следующую карту. Процесс заканчивается, когда в колоде не останется карт. Можно считать, что Василий в любой момент времени знает минимальное число, записанное на какой-то из оставшихся в колоде картах, но не знает, где эта карта (или карты) находится в колоде.

    Перед вами стоит задача определить суммарное количество раз, которое Василий посмотрит верхнюю карту из колоды.

    Входные данные

    В первой строке следует целое положительное число n (1 ≤ n ≤ 100 000) — количество карт в колоде.

    Во второй строке следует последовательность из n целых положительных чисел a1, a2, ..., an (1 ≤ ai ≤ 100 000), где ai равно числу, написанному на i-й сверху карте из колоды.

    Выходные данные

    Выведите суммарное количество раз, которое Василий посмотрит верхнюю карту из колоды.

    Примечание

    В первом примере Василий посмотрит сначала карту с числом 6, положит ее вниз колоды, затем карту с числом 3, также положит ее вниз колоды, и затем карту с числом 1. Он отложит карту с числом 1, так как на ней написан минимальное число из оставшихся в колоде. После этого карты в колоде будут лежать в порядке [2, 6, 3] сверху вниз. После этого Василий посмотрит верхнюю карту с числом 2 и отложит её. После этого карты в колоде будут лежать в порядке [6, 3] сверху вниз. Затем Василий посмотрит карту с числом 6, положит ее вниз колоды, а затем карту с числом 3, которую отложит. После этого в колоде останется одна карта с числом 6, которую Василий посмотрит и отложит. Таким образом, Василий посмотрит 7 карт.

    B. Кондитерская

    Бинарный поиск дп разделяй и властвуй Структуры данных *2200

    На днях Сластена решила опробовать себя в производстве сладостей и открыть собственную кондитерскую! Для этого она купила нужные ингредиенты и чудо-печку, которая способна выпекать несколько различных видов пирожных; и запустила производство.

    Сразу же возникли проблемы: расходы на содержание кондитерской быстро начали превышать выручку от проданных пирожных. Сластена смекнула, что надо менять ценовую политику, и решила исследовать рынок сладостей. Оказалось, что чем больше в коробке различных видов пирожных (назовем это число ценностью коробки с пирожными), тем больше денег за нее готовы предложить покупатели.

    Нужно срочно менять технологию производства! Но вот незадача: выбор конкретных видов пирожного печка делает сама, и Сластена никак не может повлиять на принцип ее действия. Однако, она знает, в каком порядке выйдут n пирожных из печки сегодня. Сластена сегодня должна упаковать ровно k коробок с пирожными, причем в каждую коробку она должна положить несколько (не меньше одного) пирожных, которые печка испекла подряд, так как коробка должна сразу же отправиться на прилавок.

    Сластена хочет максимизировать суммарную ценность всех коробок с пирожными. Помогите ей определить эту максимальную ценность.

    Входные данные

    В первой строке даны числа n и k (1 ≤ n ≤ 35000, 1 ≤ k ≤ min(n, 50)) — число пирожных и количество коробок соответственно.

    Во второй строке дано n чисел a1, a2, ..., an (1 ≤ ai ≤ n) — виды пирожных в порядке, в котором печка их выпекает.

    Выходные данные

    Выведите единственное число — максимально возможную суммарную ценность коробок с пирожными.

    Примечание

    В первом примере в распоряжении Сластены есть одна коробка. Оптимально расфасовать туда все доступные пирожные и получить два различных вида пирожных с суммарной ценностью 2.

    Во втором примере разумно положить первые два пирожных в первую коробку, а оставшиеся — во вторую. Таким образом мы получим два и три различных вида пирожных, которые обеспечивают суммарную стоимость 5.

    D. Красно-черная паутина

    Деревья разделяй и властвуй реализация Структуры данных *2800

    Сластене очень нравится наблюдать за жизнью обитателей тенистой рощи, находящейся неподалеку от Мармеладного замка. На этот раз ее вниманием завладел странный красно-черный желейный паук, восседающий в центре огромной паутины.

    Паутина странного паука представляет собой набор из n узлов, соединенных прочными нитями, каждая из которых покрашена либо в красный, либо в черный цвет. Используя эти нити, паук перемещается между узлами паутины, причем ни одна нить не соединяет узел с самим собой и для любых двух различных узлов существует единственная последовательность нитей, их соединяющая.

    Как настоящий энтузиаст, Сластена начала исследовать замечательные свойства паутины. После нескольких часов наблюдения Сластена заметила, что каждая нить имеет собственное значение клейкости x, что само по себе удивительный факт.

    Но больше всего Сластену интересует желейность данной паутины. Рассмотрим те из кратчайших путей между всеми парами узлов в паутине, на которых количество нитей каждого цвета отличается не более, чем вдвое. Для каждого такого пути посчитаем произведение клейкостей всех нитей на пути. Желейностью паутины Сластена называет произведение всех полученных величин по всем путям. Из путей, отличающихся только направлением движения, учитывается только один.

    Естественно, данное число очень большое, а Сластена большие числа не любит. Поэтому она просит вас посчитать желейность данной паутины и вывести ответ по модулю 109 + 7.

    Входные данные

    В первой строке задано число узлов паутины n (2 ≤ n ≤ 105).

    В следующих n - 1 строках следуют по четыре числа, описывающие i-ю нить паутины: узлы ui, vi (1 ≤ ui ≤ n, 1 ≤ vi ≤ n), клейкость нити xi (1 ≤ x ≤ 109 + 6), а также цвет нити ci (). Красный цвет задается числом 0, а черный цвет — числом 1.

    Выходные данные

    Выведите единственное число — желейность паутины по модулю 109 + 7. Если не существует путей таких, что число красных и черных нитей отличается не более, чем вдвое, выведите 1.

    Примечание

    В первом примере существует 4 пары узлов, количество нитей двух цветов между которыми отличается не более, чем вдвое. Это пары (1, 3) с произведением клейкостей на пути 45, (1, 5) с произведением клейкостей на пути 45, (3, 4) с произведением клейкостей на пути 25 и (4, 5) с произведением клейкостей на пути 25. Желейность такой паутины равняется 1265625.

    E. Карамельные облака

    дп сортировки Структуры данных *3400

    Как известно, лучшее украшение клумбы в королевстве Sweetland — ванильные кексики. Процесс их выращивания весьма сложен и требует немалых ресурсов. У Сластены есть m саженцев, и для превращения j-го саженца кексика в произведение искусства необходимо держать его под солнцем не менее kj минут.

    Большую часть времени в Sweetland стоит прекрасная погода, которая лишь иногда омрачается появлением карамельных облаков, i-е из которых возникает в момент времени (минуту) li и исчезает в момент времени ri. Разумеется, солнечный свет не способен пробиться сквозь карамельный покров.

    Сластена не отличается терпением, и ей хочется вырастить свое пирожное как можно быстрее. В ее распоряжении ровно C конфет — основной валюты Sweetland.

    Любое облако можно полностью рассеять, заплатив за это ci конфет. Однако в соответствии с указом министерства метеорологии Sweetland, рассеивание более чем двух карамельных облаков искусственным путем строжайше запрещено и карается огромным штрафом.

    В коллекции Сластены находится m саженцев. Она еще не определилась, какие из них достойны занять почетное место в королевском саду, и ей требуется ваша помощь. Для каждого саженца определите самую раннюю минуту, к которому его можно вырастить, не нарушая указ министерства метеорологии и не выходя за рамки бюджета. Обратите внимание, что Сластена находится на этапе формирования набора кексиков, поэтому каждый новый саженец рассматривается независимо от остальных.

    Выращиваться кексики начинают в момент времени 0.

    Входные данные

    В первой строке следуют два числа n и C (0 ≤ n ≤ 3·105, 0 ≤ C ≤ 109) — число карамельных облаков и количество конфет, которыми обладает Сластена.

    В следующих n строках тремя числами li, ri, ci (0 ≤ li < ri ≤ 109, 0 ≤ ci ≤ 109) задается очередное карамельное облако.

    Далее следует m (1 ≤ m ≤ 3·105) — число саженцев. Каждый саженец описывается одним параметром kj (1 ≤ kj ≤ 109) — необходимым числом солнечных минут.

    Выходные данные

    Для каждого саженца выведите одно число — минимально возможную минуту, к которой Сластена сумеет вырастить данный ванильный кексик.

    Примечание

    Рассмотрим первый пример чуть подробнее. Здесь для любого k оптимально развеять облака 1 и 3. Тогда солнце не будет светить в промежутке [1..6]. Соответственно, солнечными будут являться промежутки [0..1] и [6..inf).

    Во втором примере при k = 1 ничего развеивать не требуется, а при k = 5 наилучшей стратегией будет развеять облака 2 и 3. Это добавит дополнительный солнечный промежуток [4..8], который вместе с [0..1] позволяет вырастить кексик по достижении восьмой минуты.

    В третьем примере два саженца кардинально различаются. Для минимизации времени выращивания первого необходимо разогнать облако 1 и получить достаточный промежуток времени [0..10], в то время как аналогичный подход даст для второго ответ 180. Однако если убрать облако 2, солнечными будут отрезки [0..3] и [7..inf), что позволит нам сократить время до 104.

    B. Торжественный вечер

    реализация Структуры данных *1100

    Конец июля — время, когда в Мармеладном замке проводится торжественный вечер! На него собираются гости со всего королевства, чтобы пообсуждать новейшие тенденции в мире сладостей. Однако обсуждаемая в этот вечер информация обладает некоторой долей секретности и, оказавшись в нехороших руках, может посеять раздор в королевстве Sweetland. Поэтому на вечер важно не пропустить незваных гостей.

    Мармеладный замок оборудован 26 входами, пронумероваными от A до Z. Про каждого гостя известно, через какой из входов он должен войти — это сделано из соображений безопасности. Дверь каждого входа открывают прямо перед проходом первого гостя через нее, и закрывают сразу после прохода последнего, который должен пройти через эту дверь. Никакие два гостя не приходят одновременно.

    Для того, чтобы через вход не смогли прошмыгнуть недоброжелатели, на открытый вход должен быть поставлен конфетный охранник. Таких в замке ровно k, поэтому если в какой-то конкретный момент открыты более чем k дверей, то некоторые из них будут без присмотра Обратите внимание, что охранник не может покинуть свой пост, пока соответствующая дверь открыта: он освобождается только после закрытия этой двери.

    У Сластены закралось подозрение, что на вечер все-таки могли проникнуть незваные гости. Помогите ей проверить, были ли в какой-то момент открыты более чем k дверей одновременно, если известен порядок, в котором в замок попали все приглашенные на вечер люди.

    Входные данные

    В первой строке даны два числа n и k — количество гостей на вечере и количество охранников (1 ≤ n ≤ 106, 1 ≤ k ≤ 26).

    В следующей строке находятся n заглавных букв латинского алфавита s1s2... sn, где si — вход, через который в замок попал i-й гость.

    Выходные данные

    Выведите «YES», если хотя бы одна из дверей осталась без присмотра во время вечера, и «NO» в противном случае.

    Вы можете выводить каждую из букв в любом регистре (заглавную или строчную).

    Примечание

    В первом примере дверь входа A открывается перед приходом первого гостя и закрывается после прихода второго гостя, а дверь входа B открывается перед приходом третьего гостя и закрывается после прихода пятого. Охранник спокойно может обслужить обе двери, потому что первая закроется раньше, чем откроется вторая.

    Во втором примере дверь B открывается перед приходом второго гостя, но единственный охранник не может покинуть дверь A, потому что третий гость должен через нее пройти.

    G. Функции на отрезках

    Структуры данных *2500

    Задан массив f из n функций. Функция fi(x), где 1 ≤ i ≤ n, характеризуется следующими параметрами: x1, x2, y1, a, b, y2, и принимает значения следующим образом:

    • y1, если x ≤ x1.
    • a·x + b, если x1 < x ≤ x2.
    • y2, если x > x2.
    Даны m запросов. Каждый запрос определяется тройкой чисел l, r и x. Для запроса с номером i, где 1 ≤ i ≤ m, требуется посчитать сумму всех fj(xi) для l ≤ j ≤ r. Значение xi вычисляется как xi = (x + last) mod 109, где last - ответ за запрос с номером i - 1. При i = 1 значение last равно 0.
    Входные данные

    В первой строке дано целое число n (1 ≤ n ≤ 75000).

    Каждая из следующих n сток содержит шесть целых чисел: x1, x2, y1, a, b, y2 (0 ≤ x1 < x2 ≤ 2·105, 0 ≤ y1, y2 ≤ 109, 0 ≤ a, b ≤ 104).

    В следующей строке дано целое число m (1 ≤ m ≤ 500000).

    Каждая из следующих m строк содержит три целых числа: l, r и x (1 ≤ l ≤ r ≤ n, 0 ≤ x ≤ 109).

    Выходные данные

    Выведите для каждого запроса ответ на него в отдельной строке.

    B. Расходящиеся направления

    Деревья поиск в глубину и подобное Структуры данных *2100

    Вам дан ориентированный взвешенный граф из n вершин и 2n - 2 ребер. Вершины пронумерованы от 1 до n, а ребра пронумерованы от 1 до 2n - 2. Ребра графа могут быть разделены на две группы.

    • Первые n - 1 ребер образуют корневое основное дерево, вершина 1 является корнем. Все ребра направлены от корня.
    • Последние n - 1 ребер идут от i к 1, для всех 2 ≤ i ≤ n.

    Вам дано q запросов. Есть два типа запросов

    • 1 i w: Изменить вес i-го ребра на w;
    • 2 u v: Вывести длину кратчайшего пути между вершинами u и v.

    По данным запросам выведите длины кратчайших путей.

    Входные данные

    Первая строка содержит два целых числа n, q (2 ≤ n, q ≤ 200 000) — количество вершин и количество запросов, соответственно.

    Каждая из следующих 2n - 2 строк содержит три целых числа ai, bi, ci, обозначаищие ребро от вершины ai до вершины bi с весом ci.

    Первые n - 1 из этих строк описывают корневое основное дерево, направленное от вершины 1, а для оставшихся n - 1 строк будет выполняться bi = 1.

    Детальнее,

    • Ребра (a1, b1), (a2, b2), ... (an - 1, bn - 1) описывают корневое основное дерево, каждое из ребер которого направлено в сторону от вершины 1.
    • bj = 1 for n ≤ j ≤ 2n - 2.
    • an, an + 1, ..., a2n - 2 — различные целые числа от 2 до n.

    Следующие q строк содержат по три целых числа каждая, описывающие запрос в формате, описанном в условии.

    Все веса ребер будут в пределах от 1 до 106.

    Выходные данные

    Для каждого запроса второго типа, выведите длину кратчайшего пути на отдельной строке.

    B. Леха и другая игра про графы

    графы дп Конструктив поиск в глубину и подобное Структуры данных *2100

    Лехе надоело играть с полным графом, который ему подарили в прошлый раз. Теперь он проходит компьютерную игру, где на каждом уровне ему сначала выдается связный неориентированный граф из n вершин и m ребер. Граф может содержать кратные ребра, но не содержит петель. Далее для каждой вершины задается число di, которое может равняться 0, 1 или  - 1. Чтобы пройти уровень, нужно найти любое «хорошее» подмножество ребер графа или сообщить, что его не существует. Подмножество называется «хорошим», если оставив в исходном графе только ребра из него, то для каждой вершины i будет верно, что di =  - 1 или ее степень по модулю 2 равна di. Леха хотел бы поскорее пройти игру до конца и похвастаться своим друзьям, поэтому он просит Вашей помощи.

    Входные данные

    Первая строка содержит два целых числа n, m (1 ≤ n ≤ 3·105, n - 1 ≤ m ≤ 3·105) — число вершин и ребер соответственно.

    Вторая строка содержит n целых чисел d1, d2, ..., dn ( - 1 ≤ di ≤ 1) — значения на вершинах.

    Каждая из следующих m строк содержит два целых числа u и v (1 ≤ u, v ≤ n) — описание ребер. Гарантируется, что граф во входных данных является связным.

    Выходные данные

    Выведите  - 1 в единственной строке, если решения не существует. Иначе в первой строке выведите целое число k — количество рёбер в ответе. В следующих k строках номера ребер в подмножестве. Ребра нумеруются в порядке ввода, начиная с 1.

    Примечание

    В первом примере у нас есть одна вершина без рёбер. Её степень 0 и получить 1 не получится.

    D. Судьба

    Структуры данных Теория вероятностей *2500

    Как-то раз Леха обнаружил в левом кармане массив состоящий из n целых чисел, а в правом q запросов вида l r k. Если есть запросы, то на них надо ответить. Ответ на запрос — это минимальное x, такое что x встречается на отрезке l r строго больше чем раз или  - 1 если такого числа нет. Помогите Лёхе с таким сложным заданием.

    Входные данные

    В первой строке содержится два целых числа n и q (1 ≤ n, q ≤ 3·105) — количество элементов в массиве и количество запросов соответственно.

    Следующая строка содержит n чисел a1, a2, ..., an (1 ≤ ai ≤ n) — массив Лёхи.

    Каждая из следующих q строк содержит по три целых числа l, r и k (1 ≤ l ≤ r ≤ n, 2 ≤ k ≤ 5) — описание запросов.

    Выходные данные

    Для каждого запроса выведите ответ на него в новой строке.

    D. Витя и странный урок

    Бинарный поиск Структуры данных *2000

    Сегодня на уроке Витя изучал очень интересную функцию — mex. Mex набора чисел — минимальное неотрицательное число, не присутствующее в наборе чисел. Например, mex([4, 33, 0, 1, 1, 5]) = 2, а mex([1, 2, 3]) = 0.

    Витя очень быстро разобрался со всеми задачами учителя, а сможете ли вы?

    Даны массив, состоящий из n неотрицательных целых чисел, и m запросов. Каждый запрос характеризуется одним числом x и заключается в следующих последовательных шагах:

    • Выполнить операцию побитового сложения по модулю 2 (xor) каждого элемента массива с числом x.
    • Найти mex полученного массива.

    Учтите, что после каждого запроса массив изменяется.

    Входные данные

    Первая строка содержит два целых положительных числа n и m (1 ≤ n, m ≤ 3·105), обозначающие количество элементов в массиве и количество запросов соответственно.

    Следующая строка содержит n неотрицательных целых чисел ai (0 ≤ ai ≤ 3·105), представляющих элементы исходного массива.

    Каждая из следующих m строк содержит запрос — одно неотрицательное целое число x (0 ≤ x ≤ 3·105).

    Выходные данные

    Для каждого запроса выведите ответ на него в отдельной строке.

    C. Два телевизора

    жадные алгоритмы сортировки Структуры данных *1500

    Поликарп — фанат телевидения.

    Он выписал интересующие его передачи на сегодня. В его списке получилось n телешоу, i-е из них начинается в момент времени li и заканчивается в момент времени ri.

    У Поликарпа есть два телевизора. Он может одновременно смотреть два различных телешоу по двум телевизорам, но каждый из телевизоров может показывать только одно шоу в один момент. Считайте, что если одно шоу заканчивается ровно в момент начала следующего, то на одном телевизоре их посмотреть не получится.

    Поликарп хочет посмотреть все n телешоу! Достаточно ли ему двух телевизоров, чтобы осуществить задуманное?

    Входные данные

    В первой строке записано одно целое число n (1 ≤ n ≤ 2·105) — количество телешоу в списке.

    В следующих n строках заданы по два целых числа li и ri (0 ≤ li < ri ≤ 109) — время начала и конца шоу под номером i.

    Выходные данные

    Если Поликарп сможет посмотреть все шоу, используя только два телевизора, то выведите «YES» (без кавычек). В противном случае, выведите «NO» (без кавычек).

    D. Экзамен по вождению

    дп жадные алгоритмы Структуры данных *1800

    Поликарп только что попробовал сдать экзамен по вождению. Он проехал по прямой дороге, на которой были установлены знаки четырех типов:

    • ограничение скорости: этот знак характеризуется целым положительным числом — максимальной скоростью машины после знака (очередной знак этого типа отменяет ограничения предыдущего такого знака);
    • обгон разрешен: этот знак обозначает, что машина может обгонять другую после того как проехала этот знак;
    • отмена ограничения скорости: этот знак отменяет ограничение скорости, если оно было (то есть после этого знака можно ехать с произвольной скоростью);
    • обгон запрещен: после этого знака машина не может обгонять другую.

    Поликарп проезжает знаки последовательно, очередной знак перекрывает действие всех предыдущих знаков для соответствующего ограничения (скорость/обгон). Возможно, что два или больше знаков «обгон запрещён» идут подряд, и ни одного знака «обгон разрешён» не стоит между ними. Это также выполняется для знаков «отмена ограничения скорости» и «обгон разрешён».

    В начале поездки обгон разрешен, ограничения на максимальную скорость нет.

    Вам задана последовательность событий в хронологическом порядке — события, которые происходили с Поликарпом по дороге. События бывают следующих типов:

    1. Поликарп изменил скорость машины на заданную (это событие характеризуется целым положительным числом);
    2. машина Поликарпа обогнала другую машину;
    3. машина Поликарпа проехала знак «ограничение скорости» (это событие характеризуется целым положительным числом);
    4. машина Поликарпа проехала знак «обгон разрешен»;
    5. машина Поликарпа проехала знак «отмена ограничения скорости»;
    6. машина Поликарпа проехала знак «обгон запрещен».

    Гарантируется, что первое событие в хронологическом порядке — это событие типа 1 (Поликарп изменил скорость машины на заданную).

    После экзамена в случае нарушений Поликарп может сказать инструктору, что он просто не заметил некоторые из знаков. Какое наименьшее количество знаков может не заметить Поликарп, чтобы с его точки зрения он проехал без нарушений?

    Входные данные

    В первой строке записано одно целое число n (1 ≤ n ≤ 2·105) — количество событий.

    Каждая из следующих n строк начинается с целого числа t (1 ≤ t ≤ 6) — тип события.

    После запросов первого и третьего типа следует целое число s (1 ≤ s ≤ 300). Если это запрос первого типа, то это число — новая скорость Поликарпа; если это запрос третьего типа, то это число — новое ограничение скорости.

    Гарантируется, что первое событие в хронологическом порядке — это событие типа 1 (Поликарп изменил скорость машины на заданную).

    Выходные данные

    Выведите наименьшее количество знаков, которое может не заметить Поликарп, чтобы с его точки зрения он проехал без нарушений.

    Примечание

    В первом примере Поликарп должен не заметить знак «ограничение скорости» с числом 70 и знак «ограничение скорости» с числом 120.

    Во втором примере Поликарп не совершил ни одного нарушения.

    В третьем примере Поликарп должен не заметить ни одного знака «обгон запрещен», которые идут после знака «обгон разрешен».

    E. Пожар в городе

    Бинарный поиск Структуры данных *2400

    Столица Берляндии представляет собой прямоугольник размера n × m из одинаковых квадратных кварталов.

    Беда! Пожар!

    Известно, что загорелись k + 1 квартал (k + 1 ≤ n·m). Именно они — источники огня. При этом местоположения k загоревшихся кварталов (источников огня) известны, а местоположение одного загоревшегося квартала (источника огня) неизвестно. Все k + 1 местоположений — различны.

    Огонь распространяется следующим образом: в нулевую минуту пожара горят только k + 1 источников огня. Каждую следующую минуту огонь перебрасывается на соседние кварталы от такого, который горит. Считайте, что кварталы горят очень долго (дольше времени, которое рассматривается в этой задаче). Соседними кварталами считаются те, которые касаются данного по стороне или углу.

    Служба МЧС Берляндии хочет оценить минимальное возможное время, через которое пожар может распространиться на весь город. Помните, что местоположение k источников огня известно, а (k + 1)-й может располагаться в любом другом квартале.

    Помогите МЧС найти минимальное время, через которое пожар может охватить весь город.

    Входные данные

    В первой строке записаны три целых числа n, m (1 ≤ n, m ≤ 109) и k (1 ≤ k ≤ 500).

    В каждой из следующих k строк записаны по два целых числа xi и yi (1 ≤ xi ≤ n, 1 ≤ yi ≤ m) — местоположение i-го источника огня. Гарантируется, что все источники огня различны.

    Выходные данные

    Выведите минимальное время, через которое пожар может охватить весь город.

    Примечание

    В первом примере последний источник может находиться по координатам (4, 4).

    Во втором примере последний источник может находиться по координатам (8, 3).

    C. Четыре отрезка

    дп Перебор Структуры данных *1800

    Задан массив из n целых чисел. Пусть sum(l, r) — сумма чисел на индексах с l по r не включительно (l-й элемент учитывается, r-й элемент не учитывается). Индексы l и r таковы, что 0 ≤ l ≤ r ≤ n. Индексы в массиве нумеруются с 0.

    Например, если массив a = [ - 5, 3, 9, 4], то sum(0, 1) =  - 5, sum(0, 2) =  - 2, sum(1, 4) = 16, и sum(i, i) = 0 для всех i от 0 до 4.

    Выберите три индекса delim0, delim1, delim2 (0 ≤ delim0 ≤ delim1 ≤ delim2 ≤ n) и поделите массив таким образом, чтобы величина res = sum(0, delim0) - sum(delim0, delim1) + sum(delim1, delim2) - sum(delim2, n) была максимальна.

    Обратите внимание, что некоторые значения sum(l, r) могут соответствовать пустым отрезкам (если l = r для соответствующего отрезка).

    Входные данные

    В первой строке записано одно целое число n (1 ≤ n ≤ 5000).

    Во второй строке записаны n целых чисел a0, a1, ..., an - 1 ( - 109 ≤ ai ≤ 109).

    Выходные данные

    Выведите три таких индекса, что величина res — максимальна. Если существует несколько ответов, выведите любой из них.

    D. Монитор

    Бинарный поиск Структуры данных *1900

    Недавно девочка Люба купила себе новый монитор. Монитор представляет из себя прямоугольную матрицу размера n × m. Но прошло какое-то время, и она стала замечать, что некоторые пиксели в нём начали ломаться. Люба для себя решила, что монитор сломается в первый момент времени, когда в нём будет окно размера хотя бы k × k, полностью состоящее из сломанных пикселей. Она знает, что всего сломалось q пикселей, а также знает, в какой момент времени какой пиксель сломается. Помогите Любе найти момент времени, когда монитор сломается, либо сообщите, что такой момент не настанет даже после поломки q пикселей.

    Входные данные

    В первой строке входных данных задано четыре целых числа n, m, k, q (1 ≤ n, m ≤ 500, 1 ≤ k ≤ min(n, m), 0 ≤ q ≤ n·m) — размеры монитора, размер окна, при поломке которого Люба будет считать монитор сломанным, и количество сломавшихся пикселей.

    В следующих q строках содержится по 3 целых числа xi, yi, ti (1 ≤ xi ≤ n, 1 ≤ yi ≤ m, 0 ≤ t ≤ 109) — координаты i-го пикселя (его строка и столбец в матрице) и время его поломки. Гарантируется, что никакой пиксель не сломается дважды.

    Также будем считать, что в секунду ti пиксель уже становится сломанным.

    Выходные данные

    Выведите единственное число — момент времени, когда монитор сломается, или "-1", если монитор после поломки q пикселей не окажется сломанным.

    F. Случайный запрос

    математика Структуры данных Теория вероятностей *1800

    Дан массив a размера n, состоящий из натуральных чисел. Случайно, равновероятно и независимо выбираются два целых числа l и r из отрезка с 1 по n. Если l > r, то значения l и r меняются местами. Найдите матожидание количества различных чисел на подотрезке массива с индекса l по индекс r включительно (в 1-индексации).

    Входные данные

    В первой строке задаётся целое число n (1 ≤ n ≤ 106). Во второй строке заданы n чисел a1, a2, ... an (1 ≤ ai ≤ 106) — элементы массива.

    Выходные данные

    Выведите одно число — матожидание количества различных чисел.

    Ваш ответ будет засчитан, если его абсолютная или относительная ошибка не будет превосходить 10 - 4 — т. е., формально, если , где x — ответ жюри, а y — ответ, который выдаёт ваша программа.

    B. Подготовка к сортировке слиянием

    Бинарный поиск Структуры данных *1600

    У Ивана есть массив, состоящий из n различных целых чисел. Он решил упорядочить элементы массива по возрастанию. Так как Иван является фанатом сортировки слиянием, он решил представить массив в виде одной или нескольких возрастающих последовательностей, которые затем он планирует слить в один отсортированный массив.

    Представление массива в виде возрастающих последовательностей Иван формирует с помощью следующего алгоритма.

    До тех пор, пока в массиве есть хотя бы одно невыписанное число, он повторяет следующую процедуру:

    • просматривает массив слева направо;
    • во время очередного просмотра обращает внимание только на не выписанные ранее числа;
    • если рассматриваемое им в данный момент число — первое невыписанное число во время текущего просмотра, или же оно больше предыдущего выписанного во время текущего просмотра числа, то он выписывает рассматриваемое число.

    Например, если массив Ивана имеет вид [1, 3, 2, 5, 4], то всего он выполнит два просмотра. На первом из них он выпишет числа [1, 3, 5], а на втором — [2, 4].

    Напишите программу, которая автоматизирует подготовительную работу Ивана — найдёт представление заданного массива в виде одной или нескольких возрастающих последовательностей в соответствии с описанным выше алгоритмом.

    Входные данные

    В первой строке содержится целое положительное число n (1 ≤ n ≤ 2·105) — количество чисел в массиве Ивана.

    Во второй строке содержится последовательность различных целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — массив Ивана.

    Выходные данные

    Выведите представление заданного массива в виде одной или нескольких возрастающих последовательностей в соответствии с описанным выше алгоритмом. Каждую последовательность выводите на новой строке.

    D. Дог-шоу

    жадные алгоритмы Конструктив Структуры данных *2200

    Очень скоро на ТВ выйдет новое шоу с участием собак и их хозяев — Дог-Шоу. На шоу от собак требуется продемонстрировать бездонный желудок, стратегическое мышление и инстинкт самосохранения. Вы и ваша собака приглашены на шоу, и, конечно же, вы хотите выиграть!

    Чтобы победить на шоу, собака должна съесть как можно больше мисок с едой (в чём поможет бездонный желудок). Собаки соревнуются отдельно друг от друга по следующим правилам:

    В начале шоу на прямой находится собака в точке x = 0, а в точках x = 1, x = 2, ..., x = n находятся n мисок с едой. Миски пронумерованы от 1 до n слева направо. Как только начинается шоу, собака начинает бежать направо к ближайшей миске.

    Еда в мисках в начале шоу слишком горячая и собака не может её съесть, пока она не остынет (инстинкт самосохранения мешает этому). Про i-ю из мисок известно, что еда в ней остынет через ti секунд после начала шоу, и в этот момент собака сможет её съесть.

    Собака съедает миску еды мгновенно. Собака перемещается от точки x до точки x + 1 за одну секунду. При этом собаке запрещено двигаться влево, она перемещается исключительно вправо и всегда со скоростью 1 единица расстояния в секунду. Когда собака достигает миски с едой, возможны следующие варианты:

    • еда уже остыла, тогда собака мгновенно съедает еду и без какой-либо остановки продолжает двигаться вправо;
    • еда ещё не остыла, тогда собака либо останавливается и ожидает, пока еда остынет, затем съедает её и тут же начинает двигаться вправо, либо без какой-либо остановки продолжает двигаться вправо, пропустив миску с едой.

    Шоу останавливается через T секунд после начала. Если собака достигает миски с едой в момент ровно T, то она уже не успевает её съесть. Если до истечения T секунд собака убежала за самую правую из мисок, шоу останавливают досрочно.

    Вы должны помочь вашей собаке составить стратегию, которая позволит ей съесть максимальное количество мисок с едой за T секунд.

    Входные данные

    В первой строке даны два целых числа n и T (1 ≤ n ≤ 200 000, 1 ≤ T ≤ 2·109) — количество мисок с едой и время, по истечении которого собака будет остановлена.

    Во второй строке дана последовательность t1, t2, ..., tn (1 ≤ ti ≤ 109), где ti равно моменту времени, когда еда в i-й миске остынет, и собака сможет её съесть.

    Выходные данные

    Выведите одно целое число — максимальное количество мисок с едой, которые собака сможет съесть за T секунд.

    Примечание

    В первом примере собака должна пропустить вторую миску, чтобы успеть поесть из двух — из первой и из третьей.

    B. Rooter's Song

    геометрия Конструктив реализация сортировки Структуры данных *1900

    Куда бы мы не шли, кого бы не нашли, на нашем месте, исполним эту песню вместе!

    На плоскости расположена прямоугольная сцена размера w × h с вершинами в точках (0, 0), (w, 0), (w, h) и (0, h).

    По краям сцены находятся n танцоров. i-й из них относится к одной из следующих групп:

    • Вертикальные: стоит в (xi, 0), двигается в положительном направлении y (вверх);
    • Горизонтальные: стоит в (0, yi), двигается в положительном направлении x (вправо).

    В соответствии с планом танца, i-й танцор должен стоять на месте первые ti миллисекунд, а затем начать двигаться в заданном направлении со скоростью 1 единица в миллисекунду, пока не достигнет другого края сцены. Никакие два танцора не имеют одновременно совпадающую группу, позицию и время ожидания.

    Когда два танцора сталкиваются (т.е. находятся в одной точке, и оба из них двигаются), они мгновенно обмениваются направлениями движения и продолжают двигаться.

    Танцоры останавливаются, как только они достигнут границы. Найдите точку остановки для каждого танцора.

    Входные данные

    Первая строка содержит три целых числа n, w и h (1 ≤ n ≤ 100 000, 2 ≤ w, h ≤ 100 000) — число танцоров, ширина и высота сцены, соответственно.

    Каждая из следующих n строк описывает танцора: i-я из них содержит три целых числа gi, pi и ti (1 ≤ gi ≤ 2, 1 ≤ pi ≤ 99 999, 0 ≤ ti ≤ 100 000), описывающие группу танцора gi (gi = 1 — вертикальные, gi = 2 — горизонтальные), позицию, и время ожидания. Если gi = 1, то pi = xi; иначе pi = yi. Гарантируется, что 1 ≤ xi ≤ w - 1 и 1 ≤ yi ≤ h - 1. Гарантируется, что никакие два танцора не имеют одинаковую группу, позицию и время одновременно.

    Выходные данные

    Выведите n строк, i-я из которых содержит два целых числа (xi, yi) — позицию остановки i-го танцора.

    Примечание

    Первый пример соответствует начальной расстановке, показанной в условии, траектории танцоров показаны различными цветами на следующем рисунке.

    Во втором примере никакие танцоры не сталкиваются.

    C. Goodbye Souvenir

    разделяй и властвуй Структуры данных *2600

    Не буду ни грустить, ни страдать от одиночества... пока всё не закончится.

    Нитка из n бусинок оставлена, как сообщение об уходе. Бусинки пронумерованы от 1 до n слева направо, каждая имеет форму, выраженную целым числом от 1 до n, включительно. Некоторые бусинки могут иметь одинаковую форму.

    Память формы x в некотором отрезке бусинок определена как разность между последней и первой позициями, где форма x встречается на этом отрезке. Память подотрезка бусинок равняется сумме памяти по всем формам, встречающимся на этом отрезке.

    Иногда формы бусинок меняются, и с ними меняются значения памяти. Иногда вам нужно находить память для некоторых подотрезков.

    Входные данные

    В первой строке заданы два целых числа n и m (1 ≤ n, m ≤ 100 000) — число бусинок и суммарное число изменений формы и запросов памяти.

    Во второй строке задано n целых чисел a1, a2, ..., an (1 ≤ ai ≤ n) — начальные формы бусинок 1, 2, ..., n, соответственно.

    Далее, в m строках заданы запросы памяти и изменения формы бусинок, по одному в строке. Строка имеет вид:

    • 1 p x (1 ≤ p ≤ n, 1 ≤ x ≤ n), что означает, что форма бусинки p меняется на x, или
    • 2 l r (1 ≤ l ≤ r ≤ n), что означает запрос величины памяти на отрезке с бусинки l по бусинку r, включительно.
    Выходные данные

    Для каждого запроса выведите отдельную строку с величиной памяти данного отрезка.

    Примечание

    В начале формы бусинок имеют вид (1, 2, 3, 1, 3, 2, 1).

    Рассмотрим запросы и изменения формы по очереди:

    1. 2 3 7: память на отрезке [3, 7] равна (7 - 4) + (6 - 6) + (5 - 3) = 5;
    2. 2 1 3: память на отрезке [1, 3] равна (1 - 1) + (2 - 2) + (3 - 3) = 0;
    3. 1 7 2: форма бусинки 7 меняется на 2. В результате формы бусинок будут выглядеть следующим образом: (1, 2, 3, 1, 3, 2, 2);
    4. 1 3 2: форма бусинки 3 меняется на 2. В результате формы бусинок будут выглядеть следующим образом: (1, 2, 2, 1, 3, 2, 2);
    5. 2 1 6: память на отрезке [1, 6] равна (4 - 1) + (6 - 2) + (5 - 5) = 7;
    6. 2 5 7: память на отрезке [5, 7] равна (7 - 6) + (5 - 5) = 1.

    B. Очередь в посольстве

    жадные алгоритмы Структуры данных *1800

    В посольстве одного немалоизвестного королевства организована электронная очередь. Каждому человеку, пришедшему в посольство, необходимо выполнить следующие три действия: подать документы, заплатить деньги в кассу и сдать отпечатки пальцев. При этом действия должны выполняться именно в указанном порядке.

    Для каждого действия отведено несколько отдельных окон: k1 различных окон для первого действия, k2 для второго, и k3 для третьего. Время обслуживания одного человека в окне каждом из k1 окон для первого действия равно t1. Аналогично, время обслуживания одного человека в каждом из k2 окон для второго действия равно t2, а время обслуживания одного человека в каждом из k3 окон для третьего действия равно t3. Таким образом, время обслуживания зависит только от типа окна и никак не зависит от человека, подающего документы.

    В некоторые моменты времени в посольство приходят n человек, i-ый человек приходит в момент времени ci. Человек регистрируется под некоторым номером, после чего сидит в зале и ожидает, пока его номер не высветится на специальном табло. На этом табло он видит номер окна, к которому ему нужно подойти и сразу же идет к нему. Будем считать, что время подхода включено во время обслуживания. Табло одновременно может показывать информацию более чем для одного человека. Электронная очередь работает таким образом, что подошедшего к окну человека немедленно начинают обслуживать, так как перед окном нет других людей.

    Сотрудники инспекции по качеству обслуживания клиентов заметили, что некоторые люди проводят в посольстве слишком много времени (что при отсутствии там сигнала сотовой связи и 3G довольно удручает). Было принято решение, что система должна быть организована так, что наибольшее время проведенное человеком в посольстве оказалось минимально. Помогите сотрудникам инспекции организовать очередь. Считайте, что все действия, кроме обслуживания в окне, происходят мгновенно.

    Входные данные

    В первой строке записано три целых числа k1, k2, k3 (1 ≤ ki ≤ 109), разделенные пробелами — количество окон первого, второго и третьего типа соответственно.

    Во второй строке записано три целых числа t1, t2, t3 (1 ≤ ti ≤ 105), разделенные пробелами — время обслуживания одного человека в окне первого, второго и третьего типа соответственно.

    В третьей строке записано целое число n (1 ≤ n ≤ 105) — количество человек.

    В четвертой строке записано n целых чисел ci (1 ≤ ci ≤ 109) в неубывающем порядке, разделенных пробелами; ci — время прихода в посольство человека с номером i.

    Выходные данные

    Выведите единственное число — наибольшее время, которое проведет человек в посольстве, при оптимальной организации очереди.

    Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout (также вы можете использовать спецификатор %I64d).

    Примечание

    В первом тесте 5 человек приходят одновременно в момент времени 1. Каждого типа по одному окну, каждое окно обслуживает 1 единицу времени. Поэтому максимальное время нахождения в посольстве — это время обслуживания в окнах (3 единицы времени) плюс время простоя человека, вызванного к первому окну последним (4 единицы времени).

    Во втором тесте окна работают следующим образом:

    Первое окно первого действия: [1, 6) — первый человек, [6, 11) — третий человек, [11, 16) — пятый человек

    Второе окно первого действия: [2, 7) — второй человек, [7, 12) — четвертый человек

    Окно второго действия: [6, 7) — первый, [7, 8) — второй, [11, 12) — третий, [12, 13) — четвертый, [16, 17) — пятый

    Окно третьего действия: [7, 8) — первый, [8, 9) — второй, [12, 13) — третий, [13, 14) — четвертый, [17, 18) — пятый

    Видно, что дольше всех обслуживается пятый человек.

    D. Сумма медиан

    Бинарный поиск Перебор реализация Структуры данных *2300

    В одном небезызвестном алгоритме нахождения k-порядковой статистики нужно разбить все элементы на пятерки подряд идущих элементов и найти медиану каждой пятерки. Медианой называют средний элемент отсортированного массива (для пятерки — это третий по величине элемент). Для оценки скорости работы этого алгоритма на современной видеокарте требуется уметь находить сумму медиан в каждой пятерке упорядоченного множества.

    Суммой медиан отсортированного k-элементного множества S = {a1, a2, ..., ak}, где a1 < a2 < a3 < ... < ak, будем называть

    Оператор обозначает взятие остатка, то есть обозначает остаток при делении x на y.

    Для проведения нагрузочного тестирования потребовалось быстро вычислять сумму медиан для изменяющегося множества.

    Входные данные

    В первой строке задано число n (1 ≤ n ≤ 105) — количество операций, производимых с множеством.

    Далее в каждой из n строк описана одна из трех операций:

    • add x — добавить в множество элемент x;
    • del x — удалить из множества элемент x;
    • sum — найти сумму медиан множества.

    Для любой операции add x верно, что элемент x непосредственно перед операцией не входит в множество.

    Для любой операции del x верно, что элемент x непосредственно перед операцией входит в множество.

    Все числа во входных данных — положительные целые числа, не превосходящие 109.

    Выходные данные

    Для каждой операции sum выведите на отдельной строке сумму медиан текущего множества. Если множество пусто, то выведите 0.

    Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout (также вы можете использовать спецификатор %I64d).

    C. Скука

    Структуры данных *2100

    Илья сидит в зале ожидания аэропорта города Мегаполиса и скучает, наблюдая за тем, как его рейс вновь и вновь задерживается. Чтобы скрасить время, он решил достать лист бумаги и ручку и порешать какие-нибудь задачи.

    Илья нарисовал на листочке сетку из n × n клеток и отметил на ней n клеток, никакие две из которых не находятся в одной строке или в одном столбце. Он называет прямоугольники со сторонами, проходящими по линиям сетки, среди углов которых есть ровно две отмеченные клетки, интересными. На поле есть ровно n·(n - 1) / 2 интересных прямоугольников.

    Илья выбрал q прямоугольников со сторонами, проходящими по линиям сетки поля (не обязательно являющихся интересными), после чего решил посчитать для каждого из выбранных прямоугольников степень интересности. Степенью интересности выбранного прямоугольника назовём количество интересных прямоугольников, которые имеют в пересечении с заданным хотя бы одну клетку.

    Теперь Илья уже не уверен, что успеет справиться с поставленной задачей до отлёта. Вам дано описание отмеченных клеток и выбранных прямоугольников, помогите Илье определить степень интересности каждого из выбранных прямоугольников.

    Входные данные

    В первой строке находятся два целых числа n и q (2 ≤ n ≤ 200 000, 1 ≤ q ≤ 200 000) размер поля и число выбранных прямоугольников.

    Во второй строке содержатся n чисел p1, p2, ..., pn, разделённых пробелами (1 ≤ pi ≤ n, все pi различны), задающие клетки, отмеченные Ильёй. А именно, pi — это номер строки клетки, отмеченной в столбце i. Строки пронумерованы от 1 до n снизу вверх, столбцы пронумерованы от 1 до n слева направо.

    В следующих q строках содержатся описания выбранных прямоугольников. Каждый прямоугольник задаётся четвёркой чисел l, d, r, u (1 ≤ l ≤ r ≤ n, 1 ≤ d ≤ u ≤ n), где l и r — номера самого левого и самого правого столбца в прямоугольнике, а d и u — номера самой нижней и самой верхней строки.

    Выходные данные

    Для каждого из отмеченных прямоугольников выведите степень его интересности в отдельной строке.

    Примечание

    В первом тестовом примере существует только один интересный прямоугольник, занимающий всё поле. Поэтому ответ на любой запрос равен 1.

    Во втором тестовом примере для первого запроса 3 интересных прямоугольника, пересекающие данный, расположены так:

    А 5 интересных прямоугольников, пересекающие данный, во втором запросе расположены так:

    E. Лада Малина

    геометрия Структуры данных *3400

    После длительного исследования и ряда экспериментов ведущая автомобилестроительная компания Мегаполии «АвтоВоз» выпустила уникальный по своим характеристикам автомобиль «Лада Малина». Одно из самых интересных нововведений «Лады Малины» — экологичные высокоэффективные двигатели.

    Будем считать автомобиль точкой на плоскости Oxy. Автомобиль оснащен k двигателями, пронумерованными от 1 до k. Каждый двигатель имеет свой вектор скорости, который имеет координаты (vxi, vyi), измеряемые в единицах расстояния в день. Любой двигатель можно включить на любую мощность wi, которая является вещественным числом от  - 1 до  + 1 (включительно), что даёт вклад в (wi·vxi, wi·vyi) к итоговому вектору скорости автомобиля. А именно, итоговый вектор скорости автомобиля оказывается равен

    (w1·vx1 + w2·vx2 + ... + wk·vxk,   w1·vy1 + w2·vy2 + ... + wk·vyk)

    Это означает, что если автомобиль перемещается с постоянными wi в течение дня, то x-координата автомобиля изменится на первую компоненту выражения выше, а y-координата автомобиля изменится на вторую компоненту выражения выше. Таким образом, если, например, все wi будут равны нулю, то автомобиль будет стоять на месте, а если все wi будут равны нулю, кроме w1 = 1, то автомобиль поедет со скоростью, задаваемой вектором скорости первого двигателя.

    В Мегаполии имеются n фабрик, i-я расположена в точке (fxi, fyi). На i-й фабрике изготовлено ai автомобилей «Лада Малина», полностью готовых к поездкам.

    Для продвижения новой модели «АвтоВоз» хочет устроить международную выставку-показ автомобилей. Имеется q вариантов местоположения и времени проведения выставки, в i-м из них выставка пройдёт в точке с координатами (pxi, pyi) через ti дней.

    Конечно, на место проведения выставки «АвтоВоз» хотел бы привезти как можно больше автомобилей с фабрик. Перемещение автомобиля происходит путём включения его двигателей с произвольными значениями мощности, в результате чего ровно к моменту начала выставки автомобиль должен оказаться в точке местоположения выставки.

    Однако, при разных вариантах проведения выставки может оказаться невозможным успеть перегнать автомобили с той или иной фабрики к началу выставки. Поэтому вам предлагается определить для каждого из вариантов местоположения и времени выставки, сколько автомобилей со всех фабрик смогут успеть к её началу.

    Входные данные

    В первой строке находятся три целых числа k, n, q (2 ≤ k ≤ 10, 1 ≤ n ≤ 105, 1 ≤ q ≤ 105) — количество двигателей у автомобиля «Лада Малина», количество фабрик по производству «Лады Малины» и количество вариантов местоположения и времени проведения международной выставки-показа автомобилей соответственно.

    В следующих k строках находятся описания двигателей «Лады Малины», в i-й из них находятся два целых числа vxi, vyi ( - 1000 ≤ vxi, vyi ≤ 1000), задающих вектор скорости i-го двигателя. Вектор скорости не может быть нулевым, то есть, vxi и vyi не равны одновременно нулю. Гарантируется, что никакие два из векторов скоростей не коллинеарны (параллельны).

    Следующие n строк содержат описания фабрик. В i-й из них находятся три целых числа fxi, fyi, ai ( - 109 ≤ fxi, fyi ≤ 109, 1 ≤ ai ≤ 109), координаты i-й фабрики и количество автомобилей на ней соответственно.

    Следующие q строках содержат описания местоположений выставок. В i-й из них находятся три целых числа pxi, pyi, ti ( - 109 ≤ pxi, pyi ≤ 109, 1 ≤ ti ≤ 105), координаты i-го местоположения выставки и количество дней до её проведения соответственно.

    Выходные данные

    Для каждого возможного варианта местоположения выведите число автомобилей, которые смогут к времени проведения выставки добраться до неё.

    Примечание

    Изображения, относящиеся к тестам из условия, даны ниже. Варианты местоположения выставки отмечены крестиками, а фабрики точками. Рядом с каждой фабрикой указано количество автомобилей, находящихся на ней.

    Пояснение к первому примеру:

    • Автомобиль с первой фабрики не успеет добраться до места проведения.
    • Автомобиль со второй фабрики можно перегнать, если установить значения w1 = 0, w2 = 1.
    • Автомобиль с третьей фабрики можно перегнать, если установить значения , .
    • Автомобиль с четвёртой фабрики можно перегнать, если установить значения w1 = 1, w2 = 0.

    B. Кольцо Марвала Мракса

    дп Перебор Структуры данных *1500

    Профессор Дамблдор помогает Гарри уничтожать крестражи. Он отправился в Дом Мраксов, так как догадывался, что там может находиться крестраж. Профессор заметил кольцо Марвала Мракса и определил, что это крестраж. Несмотря на то, что профессор Дамблдор уничтожил его, он оказался проклят. Профессор Снегг помогает Дамблдору снять проклятие. Для этого он собирается дать Дамблдору ровно x капель зелья, которое он приготовил.

    Значение x вычисляется как максимум p·ai + q·aj + r·ak для данных p, q, r и массива a1, a2, ... an при условии, что 1 ≤ i ≤ j ≤ k ≤ n. Помогите Снеггу определить x. Учтите, что x может быть отрицательным, в таком случае Снегг не сможет спасти Дамблдора.

    Входные данные

    В первой строке находятся 4 целых числа n, p, q, r ( - 109 ≤ p, q, r ≤ 109, 1 ≤ n ≤ 105).

    Во второй строке заданы n целых чисел a1, a2, ... an ( - 109 ≤ ai ≤ 109), разделённых пробелами.

    Выходные данные

    Выведите максимальное значение выражения p·ai + q·aj + r·ak с учётом 1 ≤ i ≤ j ≤ k ≤ n.

    Примечание

    В первом примере можно выбрать i = j = k = 5, получив ответ 1·5 + 2·5 + 3·5 = 30.

    Во втором примере можно выбрать i = j = 1, k = 5, получив ответ 12.

    F. Нагайна

    Бинарный поиск Структуры данных *3100

    Нагайна, будучи крестражем Сами-Знаете-Кого, создала армию змей и планирует атаку на Хогвартс.

    Вход в школу Хогвартс может быть представлен как прямая линия (ось x) с координатами от 1 до 105. Нагайна запускает змей у входа в Хогвартс. Каждая змея ложится параллельно входу, покрывая некоторый отрезок на расстоянии k от входа от x = l до x = r. Формально, каждая змея может быть представлена как отрезок с концами в точках (l, k) и (r, k). Учтите, что k может быть как положительным, так и отрицательным, но не может быть равно 0.

    Пусть для какой-то x-координаты x = i, существую змеи в точке (i, y1) и в точке (i, y2), таких что y1 > 0 и y2 < 0. Тогда если для любой точки (i, y3), содержащей змею и такой, что y3 > 0, выполняется y1 ≤ y3, и для любой точки (i, y4), содержащей змею и такой, что y4 < 0, выполняется |y2| ≤ |y4|, тогда опасность точки x = i равна y1 + |y2|. Если не существует таких y1 или y2 опасность равна 0.

    Гарри хочет посчитать опасность некоторых отрезков входа в Хогвартс. Опасность полуинтервала [l, r) может быть вычислена как сумма величин опасностей во всех целых координатах x этого полуинтервала.

    Формально, вам необходимо обрабатывать два типа запросов:

    • 1 l r k: змея появляется у входа между точками x = l и x = r и координатой y = k (включая l, не включая r).
    • 2 l r: вам необходимо узнать опасность полуинтервала с l по r (включая l, не включая r).
    Входные данные

    В первой строке содержится целое число q (1 ≤ q ≤ 5·104), показывающее число запросов.

    Следующие q строк описывают запросы. Описание каждого запроса начинается с типа запроса typei (1 ≤ typei ≤ 2). Затем идёт дальшнейшее описание запросов. Для запросов типа 1 задаются три целых числа li, ri и ki (,  - 109 ≤ ki ≤ 109, k ≠ 0). Иначе задана пара целых чисел li и ri (1 ≤ li < ri ≤ 105).

    Выходные данные

    Для каждого запроса типа 2 выведите ответ.

    Примечание

    В первом примере опасность координаты x, равной 1, равна 0, так как не существует y2, удовлетворяющего условию для x = 1.

    Опасность x-координат 2 и 3 равна 10 + | - 7| = 17.

    Опасность x-координат от 4 до 9 снова 0, так как не существует y2, удовлетворяющего условию.

    Таким образом, суммарная опасность равна 17 + 17 = 34.

    D. Телефонная книга Поликарпа

    реализация сортировки Структуры данных *1600

    В телефонной книге Поликарпа записаны n телефонных номеров. Каждый номер — это целое 9-значное число, которое начинается с отличной от 0 цифры. Все номера — различны.

    На телефоне Поликарпа установлена последняя версия операционной системы Berdroid. При частичном наборе номера Berdroid подсказывает все номера из телефонной книги, подстрокой которых является набранная последовательность цифр. Например, если в телефонной книге Поликарпа записаны три номера 123456789, 100000000 и 100123456, то:

    • при наборе последовательности цифр 00 будут подсказаны номера 100000000 и 100123456,
    • при наборе последовательности цифр 123 будут подсказаны номера 123456789 и 100123456,
    • а при наборе последовательности цифр 01 будет подсказан только номер 100123456.

    Для каждого номера в телефонной книге Поликарпа найдите наименьшую по длине последовательность цифр, которую надо набрать, чтобы Berdroid подсказал только один этот номер.

    Входные данные

    Первая строка входных данных содержит единственное целое число n (1 ≤ n ≤ 70000) — количество номеров в телефонной книге Поликарпа.

    Далее следуют сами номера по одному номеру в строке. Каждый номер — это целое положительное 9-значное число, которое начинается с цифры от 1 до 9. Все номера — различны.

    Выходные данные

    Выведите ровно n строк: i-я строка должна содержать наиболее короткую непустую последовательность цифр, при наборе которой будет подсказан только один i-й номер из телефонной книги. Если таких последовательностей несколько, выведите любую из них.

    D. Мощный массив

    математика реализация Структуры данных *2200

    Имеется массив натуральных чисел a1, a2, ..., an. Рассмотрим некоторый его подмассив al, al + 1, ..., ar, где 1 ≤ l ≤ r ≤ n, и для каждого натурального числа s обозначим через Ks число вхождений числа s в этот подмассив. Назовем мощностью подмассива сумму произведений Ks·Ks·s по всем различным натуральным s. Так как количество различных чисел в массиве конечно, сумма содержит лишь конечное число ненулевых слагаемых.

    Необходимо вычислить мощности каждого из t заданных подмассивов.

    Входные данные

    Первая строка содержит два целых числа n и t (1 ≤ n, t ≤ 200000) — длина массива и количество запросов соответственно.

    Вторая строка содержит n натуральных чисел ai (1 ≤ ai ≤ 106) — элементы массива.

    Следующие t строк содержат по два натуральных числа l и r (1 ≤ l ≤ r ≤ n) — индексы левого и правого концов соответствующего подмассива.

    Выходные данные

    Выведите t строк, где i-ая строка содержит единственное натуральное число — мощность подмассива i-го запроса.

    Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cout (также вы можете использовать спецификатор %I64d).

    Примечание

    Рассмотрим следующий массив (см. пример 2) и его подмассив [2, 7] (цветом выделены элементы подмассива):

    Тогда K1 = 3, K2 = 2, K3 = 1, и мощность равна 32·1 + 22·2 + 12·3 = 20.

    E. Аркадий и человек-никто

    Деревья поиск в глубину и подобное Структуры данных *2700

    Аркадий работает в крупной компании. Всего в компании n сотрудников, при этом действует жесткая иерархия. А именно, у каждого сотрудника, кроме директора, есть ровно один непосредственный начальник, а директор является начальником (через цепочку непосредственных подчиненных) всех сотрудников.

    У каждого сотрудника есть ранг, выраженный целым числом. У директора ранг равен 1, а каждый другой сотрудник имеет ранг на 1 больший, чем ранг его непосредственного начальника.

    У Аркадия неплохая позиция в компании, однако он чувствует, что он — никто в структуре компании, и есть много людей, которые могут заменить его. Он ввел понятие заменяемости. Рассмотрим сотрудника a и сотрудника b, который является начальником a (не обязательно непосредственным). Тогда заменяемостью r(a, b) сотрудника a относительно начальника b называется количество подчиненных (не обязательно непосредственных) данного начальника b, ранг которых не превосходит ранга данного подчиненного a. Кроме заменяемости, Аркадий ввел еще и понятие ничтожности. Ничтожность za сотрудника a равна сумме его заменяемостей относительно всех его начальников, то есть , где сумма берется по всем его начальникам b.

    Аркадию интересна не только своя ничтожность, но и ничтожность всех остальных сотрудников компании. Найдите для Аркадия ничтожность каждого из сотрудников.

    Входные данные

    В первой строке находится одно целое число n (1 ≤ n ≤ 5·105) — количество сотрудников в компании.

    Во второй строке находится n целых чисел p1, p2, ..., pn (0 ≤ pi ≤ n), где pi = 0, если i-й сотрудник является директором, а иначе pi равно номеру сотрудника, являющегося непосредственным начальником сотрудника номер i. Сотрудники нумеруются от 1 до n. Гарантируется, что среди этих чисел встречается ровно один 0, а также то, что директор является начальником (не обязательно непосредственным) для всех остальных сотрудников.

    Выходные данные

    Выведите n целых чисел — ничтожности всех сотрудников в порядке их нумерации: z1, z2, ..., zn.

    Примечание

    Рассмотрим первый пример. Тогда:

    • У директора нет начальников, поэтому z1 = 0.
    • r(2, 1) = 2 (сотрудники 2 и 4 подходят, сотрудник 3 имеет слишком большой ранг). Поэтому z2 = r(2, 1) = 2.
    • Аналогично, z4 = r(4, 1) = 2.
    • r(3, 2) = 1 (сотрудник 3 является подчиненным 2 и имеет необходимый ранг). r(3, 1) = 3 (подходят сотрудники 2, 3, 4). Поэтому z3 = r(3, 2) + r(3, 1) = 4.

    E. Махмуд, Ехаб и функция

    Бинарный поиск сортировки Структуры данных *2100

    Доктора Зло интересует математика, поэтому он дал Махмуду и Ехабу массив a длины n и массив b длины m. Он рассматривает функцию f(j), которая определена для целых чисел j, удовлетворяющих 0 ≤ j ≤ m - n. Положим ci = ai - bi + j. Тогда f(j) = |c1 - c2 + c3 - c4... cn|. Более формально, .

    Доктор Зло хочет, чтобы Махмуд и Ехаб нашли минимальное значение функции для всех допустимых j. Он понимает, что это слишком простая задача, поэтому он решил её усложнить. Он просит их обработать q запросов изменения. Во время каждого запроса Махмуд и Ехаб должны прибавить xi ко всем элементам a в диапозоне [li;ri], то есть прибавить xi к ali, ali + 1, ... , ari. После каждого запроса им требуется посчитать минимальное значение f(j) для всех допустимых j.

    Помогите Махмуду и Ехабу.

    Входные данные

    В первой строке содержатся три целых числа n, m и q (1 ≤ n ≤ m ≤ 105, 1 ≤ q ≤ 105) — количество элементов в a, количество элементов в b и количество запросов, соответственно.

    Во второй строке содержатся n целых чисел a1, a2, ..., an. ( - 109 ≤ ai ≤ 109) — элементы a.

    В третьей строке содержатся m целых чисел b1, b2, ..., bm. ( - 109 ≤ bi ≤ 109) — элементы b.

    В следующих q содержатся описания запросов. Каждая из них содержит три целых числа li ri xi (1 ≤ li ≤ ri ≤ n,  - 109 ≤ x ≤ 109) — границы отрезка, на котором происходит обновление и величина, которую необходимо прибавить.

    Выходные данные

    В первой строке выведите минимальное значение функции f до всех запросов.

    Затем выведите q строк, в i-й из которых должно содержаться минимальное значение функции f после запроса с номером i.

    Примечание

    В первом тестовом примере до первого запроса минимум достигается при j = 0 и равен f(0) = |(1 - 1) - (2 - 2) + (3 - 3) - (4 - 4) + (5 - 5)| = |0| = 0.

    После первого запроса a становится равным {11, 2, 3, 4, 5}, а минимум достигается при j = 1 и равен f(1) = |(11 - 2) - (2 - 3) + (3 - 4) - (4 - 5) + (5 - 6) = |9| = 9.

    После второго запроса a становится равным {2, 2, 3, 4, 5}, минимум достигается при j = 1 и равен f(1) = |(2 - 2) - (2 - 3) + (3 - 4) - (4 - 5) + (5 - 6)| = |0| = 0.

    После третьего запроса a становится равным {1, 1, 2, 3, 4}, минимум достигается при j = 0 и равен f(0) = |(1 - 1) - (1 - 2) + (2 - 3) - (3 - 4) + (4 - 5)| = |0| = 0

    F. Махмуд, Ехаб и последнее испытание

    Строки Структуры данных *2900

    Махмуд и Ехаб справились со всеми задачами Доктора Зло, поэтому он дал им пароль от двери, которая выведет их из злой страны. Когда они попытались открыть дверь, на ней отобразилась задача, которую надо решить, чтобы спастись (да, дверь цифровая, Доктор Зло любит современные технологии). Если они не решат её, все старания будут напрасными, и Махмуд и Ехаб никогда не покинут злую страну. Вы поможете им?

    Махмуду и Ехабу дали n строк s1, s2, ... , sn, пронумерованных от 1 до n, и q запросов. Каждый запрос относится к одному из двух типов:

    • 1 a b (1 ≤ a ≤ b ≤ n), Для всех отрезков [l;r], для которых (a ≤ l ≤ r ≤ b) найдите максимальное значение выражения:

      (r - l + 1) * LCP(sl, sl + 1, ... , sr - 1, sr) где LCP(str1, str2, str3, ... )— это длина наибольшего общего префикса строк str1, str2, str3, ... .

    • 2 x y (1 ≤ x ≤ n) где y — строка состоящая из строчных букв английского алфавита. Необходимо заменить строку на позиции x на строку y.
    Входные данные

    В первой строке содержатся 2 целых числа n и q (1 ≤ n ≤ 105, 1 ≤ q ≤ 105) – число строк и число запросов, соответственно.

    Во второй строке содержатся n строк stri состоящих из строчных букв английского алфавита.

    В следующих q строках содержатся описания запросов, каждое из которых может быть одного из двух типов:

    • 1 a b (1 ≤ a ≤ b ≤ n).
    • 2 x y (1 ≤ x ≤ n), где y — строка, состоящая из строчных букв английского алфавита.

    Суммарная длина всех строк во входных данных не превосходит 105

    Выходные данные

    Для каждого запроса первого типа выведите ответ на него в новой строке

    D. Очередная задача про запросы в массиве

    реализация Структуры данных *1800

    Вам дается массив a размера n и q запросов к нему. Есть запросы двух типов:

    • 1 li ri — осуществить циклический сдвиг отрезка [li, ri] вправо. То есть, для каждого такого x, что li ≤ x < ri, ax + 1 становится равным прежнему значению ax, а ali становится равным прежнему значению ari;
    • 2 li ri — перевернуть отрезок [li, ri].

    Также заданы m важных позиций в массиве b1, b2, ..., bm. Для каждого такого i, что 1 ≤ i ≤ m, выведите то число, которое будет стоять на позиции bi в массиве после обработки всех запросов.

    Входные данные

    В первой строке записаны три целых числа n, q и m (1 ≤ n, q ≤ 2·105, 1 ≤ m ≤ 100).

    Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109).

    Дальше идут q строк. В i-й из них записаны три целых числа ti, li, ri, где ti — тип i-го запроса, [li, ri] — отрезок, на котором запрос выполняется (1 ≤ ti ≤ 2, 1 ≤ li ≤ ri ≤ n).

    В последней строке записаны m целых чисел b1, b2, ..., bm (1 ≤ bi ≤ n) — важные позиции в массиве.

    Выходные данные

    Выведите m чисел, i-е из которых равно числу на позиции bi после обработки всех запросов.

    E. Выключение телевизора

    сортировки Структуры данных *2000

    Девочка Люба снова нуждается в вашей помощи! У Любы есть n телевизоров. Она знает, что i-й телевизор включен в моменты времени с li по ri включительно.

    Люба хочет выключить один из телевизоров из розетки, чтобы зарядить телефон. Назовём телевизор лишним, если после его выключения количество целочисленных моментов времени, в которые работает хотя бы один из оставшихся включенным телевизоров, не уменьшится. Люба очень расстроится, если ей придётся выключить не лишний телевизор.

    Помогите ей, сообщив индекс произвольного лишнего телевизора. Если такого телевизора нет, выведите «-1».

    Входные данные

    В первой строке входных данных задано целое число n (1 ≤ n ≤ 2·105) — количество телевизоров.

    В следующих n строках задано по два целых числа li, ri (0 ≤ li ≤ ri ≤ 109) — отрезок времени, когда i-й телевизор включен.

    Выходные данные

    Если в данном наборе нет лишнего телевизора, выведите «-1» (без кавычек). Иначе же выведите индекс этого телевизора (телевизоры нумеруются от 1 до n в порядке следования во входных данных).

    Если ответов несколько, выведите любой.

    Примечание

    Рассмотрим первый тестовый пример. Изначально все моменты времени, в которые включен хотя бы один из телевизоров, составляют отрезок времени [1;7]. Можно легко увидеть, что после выключения первого телевизора данный отрезок не изменится. Также лишним может являться второй телевизор, потому что после его выключения отрезок времени, в который работает хотя бы один из оставшихся включенным телевизор, тоже не изменится.

    Обратите внимание, что в четвёртом тестовом примере можно выключить телевизор с номером 2, так как даже без него целочисленные моменты, когда работает хотя бы один из оставшихся телевизоров, будут составлять отрезок [1;4].

    D. Купи дешево, продай дорого

    жадные алгоритмы Конструктив Структуры данных *2400

    Вы можете идеально предсказать цену определенной акции на следующие N дней. Вы хотите заработать на этом знании, но хотите продавать или покупать не больше одной акции в день. Другими словами, каждый день вы будете либо покупать одну акцию, либо продавать одну акцию, либо ничего не делать. Изначально у вас нет акций, и вы не можете продать акцию, когда у вас их нет. В конце N дней вы хотите опять остаться без акций, но хотите заработать как можно больше.

    Входные данные

    В первой строке находится целое число N (2 ≤ N ≤ 3·105) — число дней.

    Во второй строке находятся N целых чисел, p1, p2, ..., pN (1 ≤ pi ≤ 106). Цена одной акции в i-й день равна pi.

    Выходные данные

    Выведите максимальную сумму, которую вы можете заработать к концу N дней.

    Примечание

    В первом примере купите акцию за 5, еще одну за 4, продайте за 9 и другую за 12. Затем купите за 2 и продайте за 10. В итоге получите  - 5 - 4 + 9 + 12 - 2 + 10 = 20.

    E. Неприглядная античность

    Структуры данных хэши *2400

    Adieu l'ami.

    Коёми помогает Ошино, его знакомому, привести в порядок территорию около здания заброшенной школы, в котором Ошино временно проживает.

    Территорию можно представить как прямоугольную сетку из n × m единичных квадратов, расположенных в n рядах и m столбцах. Квадрат в столбце c и ряде r обозначается как (r, c).

    Ошино строит и убирает барьеры вокруг некоторых прямоугольных обастей из ячеек. Более конкретно, действие, обозначенное как "1 r1 c1 r2 c2" означает, что Ошино строит барьеры на границе минимального по площади прямоугольника, содержащего квадраты (r1, c1) и (r2, c2) и сторонами, параллельными сторонам квадратов. Аналогично, "2 r1 c1 r2 c2" означает, что Ошино убирает барьеры вокруг некоторого прямоугольника. Ошино гарантирует, что ни у каких двух групп барьеров нет общих точек, а также ни у какой группы барьеров нет общих точек с гранцами сетки из n × m квадратов.

    Иногда Коёми пытается осторожно пройти из одного квадрата в другой, не преодолевая никаких барьеров, чтобы не повредить разные предметы на земле. "3 r1 c1 r2 c2" означает, что Коёми пытается пройти из квадрата (r1, c1) в квадрат (r2, c2), не пересекая барьеры.

    Ваша задача — для каждого вопроса Коёми сообщать, может ли он добраться из одной точки до другой, не пересекая барьеры.

    Входные данные

    В первой строке содержатся три целых числа n, m и q (1 ≤ n, m ≤ 2 500, 1 ≤ q ≤ 100 000) — число строк и столбцов в сетке и суммарное количество действий Коёми и Ошино, соответственно.

    Каждая из следующих q строк, описывающих действия, содержит пять целых чисел t, r1, c1, r2, c2 (1 ≤ t ≤ 3, 1 ≤ r1, r2 ≤ n, 1 ≤ c1, c2 ≤ m) — тип действия и координаты двух точек, участвующих в этом действии. Кроме того, для некоторых t действуют дополнительные ограничения:

    • Если t = 1: 2 ≤ r1 ≤ r2 ≤ n - 1, 2 ≤ c1 ≤ c2 ≤ m - 1;
    • Если t = 2: 2 ≤ r1 ≤ r2 ≤ n - 1, 2 ≤ c1 ≤ c2 ≤ m - 1, данная группа барьеров уже построена.
    • Если t = 3: нет дополнительных ограничений.
    Выходные данные

    Для каждого действия Коёми (действия с t = 3), выведите одну строку — «Yes» (без кавычек), если Коёми сможет добраться из одной точки до другой, и «No» (без кавычек) в противном случае.

    Примечание

    В первом тестовом примере действия Коёми изображены ниже.

    F. Пути

    Структуры данных теория чисел *2700

    Дано положительное целое число n. Построим граф на вершинах 1, 2, ..., n так, чтобы ребро между вершинами u и v существовало тогда и только тогда, когда . Пусть d(u, v) — кратчайшее расстояние между u и v или 0, если между ними нет пути. Посчитайте сумму d(u, v) для всех 1 ≤ u < v ≤ n.

    gcd или НОД (наибольший общий делитель) двух натуральных чисел — такое наибольшее натуральное число, которое делит оба этих числа нацело.

    Входные данные

    Целое число n (1 ≤ n ≤ 107).

    Выходные данные

    Выведите сумму d(u, v) для всех 1 ≤ u < v ≤ n.

    Примечание

    Все кратчайшие пути в первом примере:

    Между остальными парами вершин путь не существует.

    Суммарное расстояние 2 + 1 + 1 + 2 + 1 + 1 = 8.

    E. Награждение победителей

    дп Перебор Структуры данных *2300

    На днях Алексей закончил проведение соревнования по программированию для студентов из Берляндии. n студентов приняли участие в соревновании, i-й решил ai задач. Теперь необходимо наградить некоторых участников. Алексей может вручать студентам дипломы трех степеней. Каждый студент или получит один диплом какой-либо степени, или не получит диплома совсем. Пусть cntx — количество студентов, награжденные дипломом степени x (1 ≤ x ≤ 3). Должны соблюдаться следующие условия:

    • Для каждого x (1 ≤ x ≤ 3) cntx > 0;
    • Для любых двух степеней x и y cntx ≤ 2·cnty.

    Конечно, есть множество способов распределить дипломы. Пусть bi — степень диплома, который получит i-й студент (или  - 1, если i-й студент останется без диплома). Также для любого x такого, что 1 ≤ x ≤ 3, пусть cx — максимальное количество задач, решенных студентом, получившим диплом степени x, а dx — минимальное количество задач, решенных студентом, получившим диплом степени x. Алексей хочет раздать дипломы таким образом, чтобы:

    1. Если студент i решил больше задач, чем студент j, то он должен быть награжден не хуже студента j (невозможно, чтобы студент j получил диплом, а i — нет, и невозможно, чтобы оба получили диплом и bj < bi);
    2. d1 - c2 должно быть максимально;
    3. Среди всех способов максимизировать предыдущее выражение d2 - c3 должно быть максимально;
    4. Среди всех способов удовлетворить предыдущие условия d3 - c - 1 должно быть максимально, где c - 1 — максимальное количество задач, решенных студентом, не получившим диплома (или 0, если все студенты получили диплом).

    Помогите Алексею найти способ наградить участников!

    Входные данные

    В первой строке записано одно целое число n (3 ≤ n ≤ 3000).

    Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 5000).

    Выходные данные

    Выведите n чисел. i-е число должно равняться степени диплома, который получит i-й участник (или  - 1, если он не получит никакого диплома).

    Если существует несколько оптимальных решений, выведите любое из них. Гарантируется, что ответ всегда существует.

    D. Ор выше гор

    Бинарный поиск битмаски Комбинаторика разделяй и властвуй Структуры данных *2200

    Рик и Морти очень любят ходить на горный хребет Высокоорный для того, чтобы поорать — эхо там просто невероятное. Не так давно они нашли интересное акустическое свойство этого хребта: если Рик и Морти начнут одновременно орать с разных гор, то их ор будет слышен между этими горами вплоть до высоты, равной побитовому ИЛИ высот гор, на которые они взошли, и всех гор между ними.

    Побитовое ИЛИ — это бинарная операция, которая определяется следующим образом. Рассмотрим записи чисел x и y в двоичной системе счисления (возможно с ведущими нулями) x = xk... x1x0 и y = yk... y1y0. Тогда z = x | y определяется следующим образом: z = zk... z1z0, где zi = 1, если xi = 1 или yi = 1, иначе zi = 0. Иными словами, нули в побитовом ИЛИ чисел находятся только в тех разрядах, в которых у обоих чисел находятся нули. Например, побитовое ИЛИ чисел 10 = 10102 и 9 = 10012 равняется 11 = 10112. В языках программирования C/C++/Java/Python данная операция обозначается как «|», а в Pascal как «or».

    Помогите Рику и Морти посчитать, сколькими способами они могут выбрать две различные горы так, что если они начнут орать с этих гор, ор их будет слышен выше этих гор и всех гор между ними. Формально говоря, требуется вычислить, сколько существует таких пар l и r (1 ≤ l < r ≤ n), что побитовое ИЛИ всех высот гор на отрезке от l до r включительно строго больше высоты любой горы на этом отрезке.

    Входные данные

    В первой строке содержится целое число n (1 ≤ n ≤ 200 000) — количество гор в хребте. В следующей строке содержатся n целых чисел ai (0 ≤ ai ≤ 109) — высоты гор в порядке, в котором они следуют в хребте.

    Выходные данные

    Выведите одно число — искомое количество способов выбрать две различные горы.

    Примечание

    В первом примере все искомые способы — это пары гор со следующими номерами (горы нумеруются с единицы):

    (1, 4), (1, 5), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 5)

    Во втором примере искомых пар не существует, поскольку для любой пары гор высота ора с них равна 3, и эта высота равна высоте любой из гор, следовательно она не выше их.

    E. Курьерский клуб

    Бинарный поиск дп Структуры данных *2600

    Петя и Вася устроились работать курьерами. В течение очередного рабочего дня им нужно доставить пакеты в n различных точек на прямой. Согласно внутренним правилам компании, доставка пакетов должна быть произведена строго в определённом порядке. Исходно Петя находится в точке с координатой s1, Вася находится в точке с координатой s2, а клиенты находятся в точках x1, x2, ..., xn в порядке требуемого посещения.

    Ребята заранее договариваются, кто из них доставит пакет для какого из клиентов, после чего они действуют следующим образом. Когда пакет для i-го клиента доставлен, тот из ребят, кто доставляет пакет для (i + 1)-го клиента, отправляется в путь (это может быть как тот же из них, кто только что приехал в точку xi, так и другой). Тот из друзей, который не занят в доставке текущего пакета, стоит на месте.

    Для связи друг с другом ребятам выдали рации. Рации довольно плохо работают на больших расстояниях, поэтому Петя и Вася хотят распределить заказы так, чтобы максимальное расстояние между ними в течение дня было как можно меньше. Помогите Пете и Васе минимизировать максимальное расстояние между ними, соблюдая все правила доставки.

    Входные данные

    В первой строке даны три целых числа n, s1, s2 (1 ≤ n ≤ 100 000, 0 ≤ s1, s2 ≤ 109) — количество точек доставки и начальные положения Пети и Васи.

    Во второй строке расположены n целых чисел x1, x2, ..., xn — координаты клиентов (0 ≤ xi ≤ 109), указанные в том порядке, в котором следует выполнять доставку.

    Гарантируется, что среди чисел s1, s2, x1, ..., xn нет двух одинаковых.

    Выходные данные

    Выведите единственное целое число — минимальное возможное максимальное расстояние между ребятами в процессе доставки.

    Примечание

    В первом примере изначальное расстояние между курьерами равно 10. Эта величина и будет ответом, например, Петя может выполнить обе доставки, а Вася останется в начальной точке.

    Во втором примере оптимально можно действовать, например, так: Вася доставляет пакет первому клиенту, Петя — второму и, наконец, Вася выполняет доставку пакета третьему клиенту. При таком порядке доставки расстояние между курьерами никогда не превзойдет 1.

    В третьем примере есть только два возможных варианта: если доставку единственного пакета осуществляет Петя, то максимальное расстояние между ними будет 5 - 2 = 3. Если же пакет повезёт Вася, то максимальное расстояние составит 4 - 2 = 2. Последний способ является оптимальным.

    D. Оля и энергетики

    графы кратчайшие пути поиск в глубину и подобное Структуры данных *2100

    Оля очень любит энергетики. Настолько сильно, что её комната завалена банками от энергетиков.

    Более формально, её комнату можно представить в виде прямоугольного клетчатого поля размером n × m, каждая клетка которого либо завалена банками, либо свободна.

    Оля выпила много энергетика и теперь может пробегать k метров за секунду. Каждую секунду она выбирает одно из четырех направлений (вверх, вниз, влево или вправо) и пробегает в нем от 1 до k метров. Конечно, она может бежать только через свободные клетки.

    Сейчас Оле нужно попасть из клетки (x1, y1) в клетку (x2, y2). Сколько секунд ей потребуется, если она будет действовать оптимально?

    Гарантируется, что клетки (x1, y1) и (x2, y2) свободны. Эти клетки могут совпадать.

    Входные данные

    В первой строке находится три целых числа n, m и k (1 ≤ n, m, k ≤ 1000) — размеры комнаты и скорость Оли.

    Далее следует n строк, каждая длиной m символов, i-я из которых содержит на j-й позиции «#», если клетка (i, j) завалена банками и «.» в противном случае.

    Последняя строка содержит четыре целых числа x1, y1, x2, y2 (1 ≤ x1, x2 ≤ n, 1 ≤ y1, y2 ≤ m).

    Выходные данные

    Выведите одно число — минимальное время, которое понадобится Оле, чтобы попасть из (x1, y1) в (x2, y2).

    Если Оля не сможет добраться из (x1, y1) в (x2, y2), выведите -1.

    Примечание

    В первом примере Оля должна пробежать 3 метра вправо в первую секунду, 2 метра вниз во вторую и 3 метра влево в третью.

    Во втором примере Оля должна 3 секунды бежать вправо, 2 секунды вниз и 3 секунды влево.

    Оля не рекомендует пить энергетики и вообще считает, что это плохо.

    E. Данил и подработка

    битмаски Деревья Структуры данных *2000

    Данил решил заработать денег, поэтому нашел подработку. Собеседование прошло хорошо, и его взяли на очень ответственную должность переключателя света.

    Данил будет работать в корневом дереве (связном неориентированном графе без циклов) из n вершин, корнем которого является вершина 1. В каждой вершине находится комната, в которой может гореть свет. В обязанности Данила входит переключение света во всех комнатах поддерева вершины. Это значит, что если в какой-то комнате поддерева горит свет, он должен выключить его, иначе он должен включить его.

    К сожалению (или к счастью), Данил очень ленивый. Он знает, что его начальник не собирается лично проверять выполнение работы. Вместо этого он будет присылать Данилу задания через личные сообщения на Workforces.

    Задания бывают двух типов:

    1. pow v обозначает задание на переключение света в поддереве вершины v
    2. get v обозначает задание на подсчет количества комнат в поддереве v, в которых горит свет. Данил должен отправить начальнику ответ личным сообщением на Workforces.

    Под поддеревом вершины v понимается все вершины, кратчайший путь от которых до корня дерева проходит через вершину v. В частности, сама вершина v лежит в поддереве вершины v.

    Данил не собирается выполнять свою работу. Вместо этого он просит написать вас программу, которая будет отвечать начальнику за него.

    Входные данные

    В первой строке находится целое число n (1 ≤ n ≤ 200 000) — количество вершин в дереве.

    Во второй строке находится n - 1 целых чисел p2, p3, ..., pn (1 ≤ pi < i), где число pi обозначает предка вершины i.

    В третьей строке находится n целых чисел t1, t2, ..., tn (0 ≤ ti ≤ 1), где ti равно 1, если в i-й вершине изначально горит свет, и 0 в противном случае.

    В четвертой строке находится целое число q (1 ≤ q ≤ 200 000) — число заданий.

    Далее следует q строк вида get v или pow v (1 ≤ v ≤ n) — запросы согласно описанному выше формату.

    Выходные данные

    На каждый запрос get v выведите одно целое число — количество комнат в поддереве v, в которых горит свет.

    Примечание
    Дерево до задания pow 1.

    Дерево после задания pow 1.

    F. Аня и книги

    Потоки Структуры данных хэши *2300

    В любимом магазине Ани продается целых n книг по математике и экономике, пронумерованных от 1 до n. В каждой книге содержится неотрицательное число задач.

    Сегодня там проходит акция: любой подотрезок отрезка с l по r можно купить по фиксированной цене.

    Аня решила, что хочет купить непустой подотрезок, на который действует акция, такой, что в нем ровно на k задач по математике больше, чем по экономике. Заметьте, что k может быть положительным, отрицательным или нулем.

    К сожалению, Аня не уверена, на какой отрезок распространяется акция, но у нее есть q предположений. Для каждого из них она хочет заранее знать количество вариантов купить подотрезок, удовлетворяющий условию (ведь от этого зависит время, которое она потратит на выбор).

    Сейчас Аня слишком занята решением других задач, поэтому просит вашей помощи. Определите для каждого предположения, сколько существует подотрезков данного отрезка таких, что задач по математике там ровно на k больше, чем по экономике.

    Входные данные

    В первой строке содержится два целых числа n и k (1 ≤ n ≤ 100 000,  - 109 ≤ k ≤ 109) — количество книг и необходимая разница количества задач по математике и экономике.

    Во второй строке содержится n целых чисел t1, t2, ..., tn (1 ≤ ti ≤ 2), число ti равно 1, если i-я книга по математике и 2, если i-я книга по экономике.

    В третьей строке содержится n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 109), где ai — число задач в i-й книге.

    В четвертой строке содержится целое число q (1 ≤ q ≤ 100 000) — количество предположений Ани.

    В следующих q строках содержится по два целых числа li и ri (1 ≤ li ≤ ri ≤ n) — i-е предположение Ани.

    Выходные данные

    Выведите q строк, в i-й из которых количество подходящих подотрезков для i-го предположения Ани.

    Примечание

    В первом примере Ане подойдут подотрезки [1;1], [2;2], [3;3], [2;4], если они попадают в отрезок, на который действует скидка, так как для них верно, что количество задач по математике на 1 больше, чем количество задач по экономике. Поэтому для каждого предположения мы должны посчитать количество этих подотрезков, являющихся частью данного отрезка.

    Отрезки [1;1] и [2;2] — подотрезки [1;2].

    Отрезки [1;1], [2;2] и [3;3] — подотрезки [1;3].

    Отрезки [1;1], [2;2], [3;3], [2;4] — подотрезки [1;4].

    Отрезок [3;3] — подотрезок [3;4]

    B. Составление команд

    реализация Структуры данных *2300

    В этот раз Берляндская командная олимпиада по информатике проводится в отдалённом городке, куда ходит лишь один небольшой автобус. В нём есть n пассажирских мест, каждое из которых занято за одним из участвующих городов, то есть место i может занять только участник из города ai.

    Сегодня автобус сделал m рейсов, каждый раз привозя n участников. Участников выстроили в очередь в порядке прибытия, люди из одного автобуса встают в очередь в том порядке, в котором они занимали места в автобусе. Так, если мы выпишем города, из которых прибыли участники в очереди, мы получим последовательность a1, a2, ..., an, повторенную m раз.

    После прибытия всех рейсов участники начинают объединяться в команды. Если в очереди стоят k человек подряд из одного города, они собирают команду и выходят из очереди. Команды образовываются в произвольном порядке, пока есть k человек подряд из одного города.

    Помогите организаторам определить, сколько участников будет находиться в очереди после того, как все команды уйдут из очереди. Можно доказать, что ответ не зависит от порядка, в котором образуются команды.

    Входные данные

    В первой строке содержатся числа n, k и m, разделённые пробелом (1 ≤ n ≤ 105, 2 ≤ k ≤ 109, 1 ≤ m ≤ 109).

    Следующая строка содержит n чисел a1, a2, ..., an (1 ≤ ai ≤ 105), где ai — номер города, представитель которого должен занять место i в автобусе.

    Выходные данные

    Выведите одно число — количество оставшихся в очереди участников.

    Примечание

    Во втором примере очередь состоит из десяти участников из одного города. Девять из них образуют команду. В конце в очереди будет стоять лишь участник.

    C. Турнир

    графы Структуры данных *2700

    Недавно в Берляндии начал проводится спортивный турнир по k видам спорта. А Вася хочет подзаработать на ставках.

    Схема турнира весьма загадочна и полностью не раскрывается. Состязания проходят последовательно, в каждом их них участвуют два спортсмена, которые ещё не вылетели из турнира. Каждое состязание может проходить в любом из k видов спорта. Проигравший спортсмен вылетает из турнира. Последний оставшийся спортсмен становится победителем турнира. В остальном схема может быть произвольной, заранее она не разглашается.

    Васе известны способности спортсменов к разным видам спорта. Он считает, что более способный спортсмен всегда победит менее способного.

    Турнир проводится каждый год, и каждый раз к нему присоединяется один новый спортсмен. В первом турнире участвовал лишь один спортсмен, во втором – два, и так далее. Вася следит за турниром в течение n лет. Помогите ему для каждого из n турниров узнать, сколько существует претендентов на победу в турнире.

    Входные данные

    В первой строке содержатся числа n и k (1 ≤ n ≤ 5·104, 1 ≤ k ≤ 10) — количество турниров и видов спорта, соответственно.

    Следующие n строк содержат по k целых чисел si1, si2, ..., sik (1 ≤ sij ≤ 109), где sij — способность спортсмена i к виду спорта j. Спортсмен с большей способностью всегда выигрывает. Гарантируется, что для каждого вида спорта способности всех спортсменов различны.

    Выходные данные

    Для каждого из n турниров выведите количество возможных победителей.

    Примечание

    В первом примере:

    В первом турнире участвует один спортсмен, он и является победителем.

    Во втором турнире два спортсмена, каждый из которых может обыграть другого, в зависимости от вида спорта.

    В третьем турнире третий игрок побеждает любого в любом виде спорта, и он победит при любой схеме.

    B. Настольный теннис

    реализация Структуры данных *1200

    К теннисному столу выстроилась очередь из n человек. Сначала первые двое играют партию в теннис. Потом проигравший встаёт в конец очереди, а победитель играет со следующим человеком из очереди, и так далее. Они играют до тех пор, пока кто-нибудь не выиграет в k партиях подряд. Этот игрок признаётся победителем.

    Про каждого из участников вы знаете его силу игры в теннис, и у всех игроков они различны. В партии всегда побеждает игрок с большей силой. Определите, кто станет победителем.

    Входные данные

    В первой строке находятся два числа, разделённые пробелом: n и k (2 ≤ n ≤ 500, 2 ≤ k ≤ 1012) — количество людей и количество побед подряд, после которого игрок становится победителем, соответственно.

    В следующей строке содержится n целых чисел a1, a2, ..., an (1 ≤ ai ≤ n), выражающих силу игроков. Гарантируется, что эта строка содержит перестановку, то есть все ai различны.

    Выходные данные

    Выведите одно число — силу победителя.

    Примечание

    Партии во втором примере:

    3 играет с 1. 3 побеждает, 1 идет в конец очереди.

    3 играет с 2. 3 побеждает. У него две победы подряд, он становится победителем.

    L. Berland.Taxi

    Структуры данных *2500

    Berland.Taxi is a new taxi company with k cars which started operating in the capital of Berland just recently. The capital has n houses on a straight line numbered from 1 (leftmost) to n (rightmost), and the distance between any two neighboring houses is the same.

    You have to help the company schedule all the taxi rides which come throughout the day according to the following rules:

    • All cars are available for picking up passengers. Initially the j-th car is located next to the house with the number xj at time 0.
    • All cars have the same speed. It takes exactly 1 minute for any car to travel between neighboring houses i and i + 1.
    • The i-th request for taxi ride comes at the time ti, asking for a passenger to be picked up at the house ai and dropped off at the house bi. All requests for taxi rides are given in the increasing order of ti. All ti are distinct.

    When a request for taxi ride is received at time ti, Berland.Taxi operator assigns a car to it as follows:

    • Out of cars which are currently available, operator assigns the car which is the closest to the pick up spot ai. Needless to say, if a car is already on a ride with a passenger, it won't be available for any rides until that passenger is dropped off at the corresponding destination.
    • If there are several such cars, operator will pick one of them which has been waiting the most since it became available.
    • If there are several such cars, operator will pick one of them which has the lowest number.

    After a car gets assigned to the taxi ride request:

    • The driver immediately starts driving from current position to the house ai.
    • Once the car reaches house ai, the passenger is immediately picked up and the driver starts driving to house bi.
    • Once house bi is reached, the passenger gets dropped off and the car becomes available for new rides staying next to the house bi.
    • It is allowed for multiple cars to be located next to the same house at the same point in time, while waiting for ride requests or just passing by.

    If there are no available cars at time ti when a request for taxi ride comes, then:

    • The i-th passenger will have to wait for a car to become available.
    • When a car becomes available, operator will immediately assign it to this taxi ride request.
    • If multiple cars become available at once while the passenger is waiting, operator will pick a car out of them according to the rules described above.

    Operator processes taxi ride requests one by one. So if multiple passengers are waiting for the cars to become available, operator will not move on to processing the (i + 1)-th ride request until the car gets assigned to the i-th ride request.

    Your task is to write a program that will process the given list of m taxi ride requests. For each request you have to find out which car will get assigned to it, and how long the passenger will have to wait for a car to arrive. Note, if there is already car located at the house ai, then the corresponding wait time will be 0.

    Input

    The first line of input contains integers n, k and m (2 ≤ n ≤ 2·105, 1 ≤ k, m ≤ 2·105) — number of houses, number of cars, and number of taxi ride requests. The second line contains integers x1, x2, ..., xk (1 ≤ xi ≤ n) — initial positions of cars. xi is a house number at which the i-th car is located initially. It's allowed for more than one car to be located next to the same house.

    The following m lines contain information about ride requests. Each ride request is represented by integers tj, aj and bj (1 ≤ tj ≤ 1012, 1 ≤ aj, bj ≤ n, aj ≠ bj), where tj is time in minutes when a request is made, aj is a house where passenger needs to be picked up, and bj is a house where passenger needs to be dropped off. All taxi ride requests are given in the increasing order of tj. All tj are distinct.

    Output

    Print m lines: the j-th line should contain two integer numbers, the answer for the j-th ride request — car number assigned by the operator and passenger wait time.

    Note

    In the first sample test, a request comes in at time 5 and the car needs to get from house 3 to house 2 to pick up the passenger. Therefore wait time will be 1 and the ride will be completed at time 5 + 1 + 6 = 12. The second request comes in at time 9, so the passenger will have to wait for the car to become available at time 12, and then the car needs another 2 minutes to get from house 8 to house 10. So the total wait time is 3 + 2 = 5.

    In the second sample test, cars 1 and 2 are located at the same distance from the first passenger and have the same "wait time since it became available". Car 1 wins a tiebreaker according to the rules because it has the lowest number. It will come to house 3 at time 3, so the wait time will be 2.

    D. Коробки и шары

    жадные алгоритмы Структуры данных *2300

    У Ивана есть n различных коробок. В первой из них лежат шары n различных цветов.

    Иван планирует организовать следующую игру. Он хочет распределить шары по коробкам таким образом, чтобы для любого i (1 ≤ i ≤ n) i-я коробка содержала все шары цвета i.

    Иван совершит некоторые ходы, чтобы добиться этого. В каждый ход он делает следующие шаги:

    1. Иван выбирает любую непустую коробку и вытаскивает все шары из нее;
    2. Потом Иван выбирает любые k пустых коробок (коробка из первого шага стала пустой, Иван может выбрать и ее), разделяет шары с предыдущего шага на k непустых групп и помещает каждую из групп в одну их этих коробок. Он обязан положить каждую группу шаров в отдельную коробку. Он может выбрать только k = 2 или k = 3.

    За ход Ивану добавляется штраф, равный количеству шаров, которые он вытащил на первом шаге. Штраф за игру считается, как сумма штрафов за ходы, которые Иван совершил до распределения всех шаров по соответствующим коробкам.

    Входные данные

    В первой строке записано одно целое число n (1 ≤ n ≤ 200000) — количество коробок и цветов.

    Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109), где ai — количество шаров цвета i.

    Выходные данные

    Выведите одно число — минимальный возможный штраф за игру.

    Примечание

    В первом примере стоит вытащить все шары из первой коробки, выбрать k = 3 и распределить все цвета по соответствующим коробкам. Штраф — 6.

    Во втором примере надо сделать два хода:

    1. Взять все шары из первой коробки, выбрать k = 3, положить шары цвета 3 в третью коробку, цвета 4 — в четвертую коробку, а остальные вернуть в первую коробку. Штраф — 14;
    2. Взять все шары из первой коробки, выбрать k = 2, положить шары цвета 1 в первую коробку, а шары цвета 2 — во вторую коробку. Штраф — 5.

    Суммарный штраф — 19.

    D. Рейтинги и ток-шоу

    Структуры данных *2400

    Жизнь топ-модели крутится вокруг событий двух типов – показы мод и фотосессии. Участие в любом из событий влияет на рейтинг участвующей модели. После каждой фотосессии рейтинг модели увеличивается на a, а после каждого показа мод уменьшается на b (дизайнеры в последнее время слишком много экспериментируют). Также в жизни модели иногда бывают ток-шоу. После участия в ток-шоу модель становится обсуждаемой, и увеличение рейтинга от фотосессии становится равным c, а уменьшение рейтинга от показа мод становится равным d.

    Будем считать, что карьера модели начинается в момент времени 0. В этот момент рейтинг Изабеллы был start. Если участие в ток-шоу произошло в момент времени t, то под его влияние попадают события, чьи времена попадают в интервал [t..t + len) (включая t, не включая t + len), где len — продолжительность влияния.

    Изабелла хочет поучаствовать в ток-шоу, но при этом так, чтобы от момента начала её карьеры до конца влияния ток-шоу её рейтинг никогда не стал отрицательным. Помогите ей найти подходящий момент времени для участия в ток-шоу.

    Входные данные

    В первой строке даны 7 целых положительных чисел n, a, b, c, d, start, len (1 ≤ n ≤ 3·105, 0 ≤ start ≤ 109, 1 ≤ a, b, c, d, len ≤ 109), где n – число показов мод и фотосессий, a, b, c и d — изменения рейтинга, описанные выше, start — начальный рейтинг модели, len — длительность влияния ток-шоу.

    В следующих n строках содержатся описания событий. Каждая из этих строк содержит по два целых числа ti и qi (1 ≤ ti ≤ 109, 0 ≤ q ≤ 1) — момент времени события и его тип. Тип 0 означает показ мод, а тип 1 – фотосессию.

    События во входных данных упорядочены по возрастанию ti, все ti различны.

    Выходные данные

    Выведите одно неотрицательное целое число t — момент времени, в который Изабелла может поучаствовать в ток-шоу так, чтобы её рейтинг не был отрицательным до начала ток шоу и во время его действия. Если таких моментов несколько, выведите минимальный из них. Если таких моментов не существует, выведите  - 1.

    G. Xor-MST

    битмаски Конструктив Структуры данных *2300

    Дан полный неориентированный граф из n вершин. Каждой вершине присвоено некоторое число ai. Вес ребра, соединяющего вершины i и j, равен aixoraj.

    Найдите вес минимального остовного дерева в этом графе.

    Входные данные

    В первой строке задано число n (1 ≤ n ≤ 200000) — количество вершин в графе.

    Во второй строке заданы n чисел a1, a2, ..., an (0 ≤ ai < 230) — числа, присвоенные вершинам графа.

    Выходные данные

    Выведите одно число — вес минимального остовного дерева в заданном графе.

    C. Игра с фишками

    Перебор реализация Структуры данных *2300

    Рассмотрим следующую игру. Имеется прямоугольное поле размера n × m, в некоторых клетках которого находятся фишки.

    На каждой фишке нарисована стрелка. Таким образом, каждая фишка на поле показывает в одном из направлений: вверх, вниз, налево или направо.

    Игрок может выбрать одну из фишек и сделать ей ход.

    Ход подразумевает следующую последовательность действий. Выбранная фишка назначается текущей. После этого игрок проверяет есть ли фишки в той же строке (или в том же столбце), что и текущая фишка, на которые указывает стрелка текущей фишки. Если там есть хотя бы одна фишка, то ближайшая из них назначается новой текущей фишкой, а бывшая текущая фишка удаляется с поля. После этого проверка повторяется. Этот процесс может повторяться несколько. Если новая фишка не найдена, текущая фишка удаляется с поля и ход игрока заканчивается.

    В результате хода игрок получает некоторое количество очков, равное количеству удаленных фишек.

    По заданной начальной расстановке фишек определите максимальное количество очков, которое может получить игрок за один ход, а также количество таких ходов.

    Входные данные

    В первой строке даны два целых числа n и m (1 ≤ n, m, n × m ≤ 5000). Далее идут n строк по m символов в каждой — описание игрового поля. «.» означает, что данная клетка пуста. «L», «R», «U», «D» означают, что в данной клетке есть фишка и стрелка на ней указывает налево, направо, вверх или вниз соответственно.

    Гарантируется, что на поле имеется хотя бы одна фишка.

    Выходные данные

    Выведите два числа — максимальное количество очков, которое может получить игрок за один ход и количество ходов, позволяющих получить это максимальное количество очков.

    Примечание

    В первом примере наибольшее количество очков приносит фишка в позиции (3, 3). Ее ход можно проследить на следующей картинке:

    Все остальные фишки приносят меньше очков.

    C. Зависть

    графы снм Структуры данных *2300

    Для заданного связного неориентированного взвешенного графа G минимальным остовным деревом называется подграф G, содержащий все вершины G, являющийся деревом, а также имеющий минимально возможную сумму весов ребер.

    Вам дан граф G. Если вы запустите алгоритм по поиску минимального остовного дерева, вы найдете лишь одно минимальное остовное дерево, а другие ребра будут завидовать. Вам дано несколько запросов, каждый запрос содержит подмножество ребер графа G, определите, существует ли минимальное остовное дерево этого графа, содержащее все эти ребра, или нет.

    Входные данные

    Первая строка содержит два целых числа n, m (2  ≤ n, m  ≤ 5·105, n - 1 ≤ m) — количество вершин и ребер в графе, соответственно.

    i-я из следующих m строк содержит три целых числа ui, vi, wi (ui ≠ vi, 1 ≤ wi ≤ 5·105) — концы и вес i-го ребра. Возможно, что существует более одного ребра между некоторыми парами вершин. Гарантируется, что данный граф связен.

    Следующая строка содержит одно целое число q (1 ≤ q ≤ 5·105) — количество запросов.

    Далее следуют q строк, i-я из них содержит описание i-го запроса. Она начинается с целого числа ki (1 ≤ ki ≤ n - 1) — размера подмножества ребер, а затем следуют ki различных целых чисел от 1 до m — индексы ребер в подмножестве. Гарантируется, что сумма значений ki для всех 1 ≤ i ≤ q не превосходит 5·105.

    Выходные данные

    Для каждого запроса выведите «YES» (без кавычек), если существует минимальное остовное дерево со всеми данными ребрами, и «NO» (конечно же, без кавычек) иначе.

    Примечание

    На рисунке граф из первого примера:

    Вес минимального остовного дерева равен 6.

    Минимальное остовное дерево из ребер (1, 3, 4, 6) содержит все ребра из первого запроса, поэтому ответ на первый запрос «YES».

    Ребра из второго запроса образуют цикл длины 3, поэтому не существует остовного дерева, включающего в себя эти три ребра. Поэтому ответ «NO».

    D. Кредитная карта

    дп жадные алгоритмы реализация Структуры данных *1900

    Недавно Люба приобрела себе кредитную карту и начала активно ей пользоваться. Рассмотрим отрезок из n подряд идущих дней.

    Изначально на кредитной карте Любы находится 0 единиц денежных средств.

    В i-й день вечером происходит денежная операция на сумму ai. Если ai > 0, то на счёт Любы зачисляется ai денежных средств. Если ai < 0, то со счёта списывается ai денежных средств. Если же ai = 0, то в этот день проверяется состояние счёта на предмет задолженности.

    Люба может прийти в банк в любой из n дней утром и положить дополнительно на счёт какое-либо положительное количество денег. Но из-за лимита она не может допустить, чтобы в какой-либо момент количество денежных средств на карте превышало d.

    Может случиться, что количество денег на карте Любы превысит d после какой-либо вечерней транзакции. В этом случае ответ равен «-1».

    Люба не хочет превысить этот лимит. Также она не хочет, чтобы в какой-либо из дней проверки (в те дни, когда ai = 0) на её кредитной карте был отрицательный баланс. Также для Любы дорога до банка занимает очень много времени, поэтому ей нужно узнать минимальное количество дней, когда ей необходимо будет прийти в банк и положить дополнительные деньги на карту, либо узнать, что заданным ограничениям удовлетворить невозможно. Помогите ей с этим!

    Входные данные

    В первой строке задано два целых числа n, d (1 ≤ n ≤ 105, 1 ≤ d ≤ 109) — количество дней в рассматриваемом отрезке времени и ограничение на количество денег.

    Во второй строке задано n целых чисел a1, a2, ... an ( - 104 ≤ ai ≤ 104), где ai описывает операцию в i-й день.

    Выходные данные

    В единственной строке выведите «-1» (без кавычек), если Люба не сможет класть деньги на карту так, чтобы удовлетворить всем вышеописанным ограничениям, либо же минимальное количество дней, необходимое для этого.

    F. Минимум в поддереве

    Деревья Структуры данных *2300

    Дано корневое дерево, состоящее из n вершин. В каждой вершине записано некоторое число: в i-й вершине — ai.

    Определим расстояние между вершинами i и j в дереве — d(i, j) (количество ребер на кратчайшем пути из i в j). Также определим поддерево глубины k вершины x — набор вершин y такой, что выполняются следующие условия:

    • x является предком y (каждая вершина считается своим предком);
    • d(x, y) ≤ k.

    Заданы m запросов к дереву. i-й запрос представляется двумя числами xi и ki. Ответ на запрос — минимальное значение aj среди таких вершин j, что j принадлежат поддереву глубины ki вершины xi.

    Напишите программу, которая быстро обработает такие запросы.

    Обратите внимание, что запросы подаются в особом виде.

    Входные данные

    В первой строке записаны два числа n и r (1 ≤ r ≤ n ≤ 100000) — количество вершин в дереве и номер корневой вершины, соответственно.

    Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — числа, записанные в вершинах.

    Затем идет n - 1 строка, в каждой записаны по два числа x и y (1 ≤ x, y ≤ n), представляющие ребро между вершинами x и y. Гарантируется, что данные ребра составляют дерево.

    В следующей строке записано одно целое число m (1 ≤ m ≤ 106) — количество запросов, которые требуется обработать.

    Затем идут m строк, в i-й записаны два целых числа pi и qi, которые используются для получения i-го запроса (1 ≤ pi, qi ≤ n).

    i-й запрос получается следующим образом:

    Пусть last — ответ на предыдущий запрос (или 0, если i = 1). Тогда xi = ((pi + last) modn) + 1, и ki = (qi + last) modn.

    Выходные данные

    Выведите m чисел. i-е из них должно быть ответом на i-й запрос.

    D. Ральф и его поездки по Бинарной стране

    Деревья Перебор Структуры данных *2200

    Ральф находится в Бинарной стране. Бинарная страна состоит из n городов и (n - 1) двунаправленной дороги, соединяющей города. Дороги пронумерованы от 1 до (n - 1), где i-я дорога соединяет город номер (здесь x обозначает x, округленный вниз к ближайшему целому) и город номер (i + 1), а длина i-й дороги равна Li.

    Ральф дал вам m запросов. В каждом запросе он указал некоторый город Ai и целое число Hi. Он хочет сделать несколько поездок, начинающихся в указанном городе. Он может выбрать любой город (включая Ai) в Бинарной стране в качестве конца поездки. От такой поездки он получит (Hi - L) единиц счастья, где L — расстояние между городом Ai и конечным городом маршрута.

    Ральфу интересны все поездки из Ai, в которых он может получить положительное количество единиц счастья. Для каждого запроса посчитайте суммарное количество получаемых единиц счастья по всем таким поездкам.

    Ральф никогда не проедет по одному и тому же маршруту дважды или больше (в одном запросе), также, он никогда не посетит один город дважды или больше за одну поездку.

    Входные данные

    Первая строка содержит два целых числа n и m (1 ≤ n ≤ 106, 1 ≤ m ≤ 105).

    Далее следуют (n - 1) строк, каждая содержит одно целое число Li (1 ≤ Li ≤ 105) — длину i-й дороги.

    Далее следуют m строк, каждая содержит два целых числа Ai и Hi (1 ≤ Ai ≤ n, 0 ≤ Hi ≤ 107).

    Выходные данные

    Выведите m строк, на i-й из них выведите одно целое число — ответ на i-й запрос.

    Примечание

    Далее следует пояснение ко второму примеру.

    Первый запрос Ральфа — начинать поездки в городе 2, а Hi равно 4. Вот варианты поездок, которые у него есть:

    • Закончить поездку в городе 5. Так как расстояние между городами 5 и 2 равно 3, он получит 4 - 3 = 1 единицу счастья.
    • Закончить поездку в городе 4, тогда он получит 3 единицы счастья.
    • Закончить поездку в городе 1, тогда он получит 2 единицы счастья.
    • Закончить поездку в городе 3, тогда он получит 1 единицу счастья.
    • Обратите внимание, он может закончить поездку в городе 2, тогда он получит 4 единицы счастья.
    • Ральф не может закончить поездку в городе 6, так как расстояние между городом 6 и городом 2 равно 5, что приводит к отрицательному количеству единиц счастья.

    Поэтому ответ на первый запрос равен 1 + 3 + 2 + 1 + 4 = 11.

    E. С закрытыми глазами

    Структуры данных Теория вероятностей *2300

    Петя и Вася устали от учебы и решили сыграть в игру. Перед началом игры Вася смотрит на массив a из n элементов и запоминает его. Далее он закрывает глаза, а Петя q раз делает одно из двух действий:

    1) Называет 4 целых числа l1, r1, l2, r2 — границы двух непересекающихся отрезков. После этого Петя берет случайный элемент массива a из отрезка [l1, r1] и меняет местами его со случайным элементом из отрезка [l2, r2].

    2) Спрашивает у Васи сумму элементов массива a на отрезке [l, r].

    Вася — математик, поэтому на вопросы о сумме он отвечает математическим ожиданием суммы элементов на отрезке.

    Ваша задача — написать программу, которая отвечает на запросы так, как это делал бы Вася. То есть для каждого запроса второго типа выводит математическое ожидание суммы элементов массива a из отрезка [l, r].

    Входные данные

    Первая строка содержит два целых числа n, q (2 ≤ n ≤ 105, 1 ≤ q ≤ 105) — размер массива и количество действий Пети соответственно.

    Вторая строка содержит n целых чисел ai (1 ≤ ai ≤ 109) — элементы массива.

    Далее следуют q строк, содержащие действия Пети.

    Если это действие 1-го типа, то строка содержит 5 целых чисел 1, l1, r1, l2, r2 (1 ≤ l1 ≤ r1 ≤ n, 1 ≤ l2 ≤ r2 ≤ n).

    Если же это действие 2-го типа, то строка содержит 3 целых числа 2, l, r (1 ≤ l ≤ r ≤ n).

    Гарантируется, что не существует элемента одновременно принадлежащего обоим отрезкам [l1, r1], [l2, r2] из действия первого типа, а также среди действий есть хотя бы одно 2-го типа.

    Выходные данные

    Для каждого действия 2-го типа выведите одно вещественное число — математическое ожидание суммы элементов массива на отрезке.

    Относительная или абсолютная ошибка не должна превышать 10 - 4. То есть ваш ответ будет засчитан, если , где x и y это ответ жюри и ваш соответственно.

    C. Уильям, Ктолли и Сениориус

    Структуры данных Теория вероятностей *2600

    — Уильям...

    — Что случилось?

    — Кажется, что-то не так с Сениориусом...

    — Я разберусь...

    Сениориус изготовлен при помощи соединения специальных талисманов в определённом порядке.

    Спустя 500 лет Сениориус находится в плохом состоянии, поэтому Уильям решил полностью его обследовать.

    Сениориус сделан из n талисманов, которые Уильям выложил в ряд. На талисмане i написано число ai.

    Для того, чтобы починить Сениориус, Уильяму необходимо выполнить m операций, одного из четырёх типов:

    • 1 l r x : Для каждого i такого, что l ≤ i ≤ r, ai становится равным ai + x.
    • 2 l r x : Для каждого i такого, что l ≤ i ≤ r, ai становится равным x.
    • 3 l r x: Вывести x-е по возрастанию число на отрезке [l, r], то есть такое число, которое стояло бы на позиции x в упорядоченном по неубыванию массиве из чисел ai таких, что l ≤ i ≤ r. Гарантируется, что 1 ≤ x ≤ r - l + 1.
    • 4 l r x y : Выведите сумму возведённых в степень x чисел ai таких, что l ≤ i ≤ r по модулю y, то есть .
    Входные данные

    В первой строке содержатся четыре целых числа n, m, seed, vmax (1 ≤ n, m ≤ 105, 0 ≤ seed < 109 + 7, 1 ≤ vmax ≤ 109).

    Тогда тест генерируется следующим псевдокодом:


    def rnd():

    ret = seed
    seed = (seed * 7 + 13) mod 1000000007
    return ret

    for i = 1 to n:

    a[i] = (rnd() mod vmax) + 1

    for i = 1 to m:

    op = (rnd() mod 4) + 1
    l = (rnd() mod n) + 1
    r = (rnd() mod n) + 1

    if (l > r):
    swap(l, r)

    if (op == 3):
    x = (rnd() mod (r - l + 1)) + 1
    else:
    x = (rnd() mod vmax) + 1

    if (op == 4):
    y = (rnd() mod vmax) + 1

    Здесь op обозначает тип операции.

    Выходные данные

    Для каждой операции типа 3 или 4 выведите ответ.

    Примечание

    В первом тестовом примере исходный массив равен {8, 9, 7, 2, 3, 1, 5, 6, 4, 8}.

    Дальнейшие операции таковы:

    • 2 6 7 9
    • 1 3 10 8
    • 4 4 6 2 4
    • 1 4 5 8
    • 2 1 7 1
    • 4 7 9 4 4
    • 1 2 7 9
    • 4 5 8 1 1
    • 2 5 7 5
    • 4 3 10 8 5

    E. Добро пожаловать домой, Ктолли

    снм Структуры данных *3100

    — Я... Я выжила.

    — С возвращением домой, Ктолли.

    — Я сдержал своё обещание.

    — Я сделала это... Я сделала это!

    После нескольких дней битвы Ктолли Нота Сениориус чудом вернулась с поля боя живой.

    Уильям, как и обещал, готовит торт для неё.

    Хоть Уильям и отлично готовит десерты, он плохо умеет готовить торты.

    На этот рад Уильям допустил серьёзную ошибку: он сломал духовой шкаф!

    К счастью, Ктолли решила помочь ему.

    Уильям выложил в ряд n тортов на стол, торты пронумерованы от 1 до n, торт с номером i должен выпекаться ai секунд.

    Уильяму нужна помощь Ктолли, чтобы выполнить m операций для выпекания тортов. Каждая операция бывает одного из двух типов.

    Тип 1: 1 l r x

    Уильям просит Ктолли проверить все торты на отрезке [l, r]. Если некоторый торт должен готовиться дольше чем x секунд, он поместит его на x секунд в духовой шкаф, а затем вернёт на прежнее место.

    Более формально, для каждого i на отрезке [l, r] если ai строго больше x, ai становится равным ai - x.

    Тип 2: 2 l r x

    Уильям спрашивает Ктолли количество тортов на отрезке [l, r] таких, что они должны выпекаться ещё ровно x секунд. Более формально, вы должны найти количество таких i на отрезке [l, r], что ai = x.

    Входные данные

    В первой строке содержатся два целых числа n и m (1 ≤ n, m ≤ 105).

    Во второй строке содержатся n целых чисел, i-е из которых обозначает ai (1 ≤ ai ≤ 105).

    В следующих m строках даны описания m операций, формат которых описан выше. Гарантируется, что 1 ≤ l ≤ r ≤ n, а также 1 ≤ x ≤ 105.

    Выходные данные

    Для каждой операции второго типа выведите ответ.

    E. Удаление отрезков

    Потоки реализация снм Структуры данных *2000

    У Васи есть массив целых чисел, состоящий из n элементов.

    Вася производит с массивом следующие операции: каждый раз он находит самый длинный отрезок подряд идущих одинаковых чисел (если таких несколько, то Вася выберет самый левый из них) и удаляет его из массива. Например, если массив Васи имеет вид [13, 13, 7, 7, 7, 2, 2, 2], то после одной операции массив примет вид: [13, 13, 2, 2, 2].

    Определите количество описанных операций, которое произведёт Вася до того момента, как его массив станет пустым (то есть Вася удалит из него все элементы).

    Входные данные

    В первой строке следует целое число n (1 ≤ n ≤ 200 000) — количество элементов в массиве.

    Во второй строке следует последовательность a1, a2, ..., an (1 ≤ ai ≤ 109) — описание массива Васи.

    Выходные данные

    Выведите количество операций, которые произведет Вася, чтобы удалить из массива все элементы.

    Примечание

    В первом примере Вася сначала удалит две пятёрки, стоящие во второй и третьей позициях. После этого массив будет выглядеть как [2, 2]. Во время второй операции Вася удалит две двойки, стоящие в первой и второй позициях. После этого массив станет пустым, и Вася закончит выполнение операций.

    Во втором примере Васе нужно пять операций, чтобы удалить все элементы из массива. Во время каждой операции он будет удалять самый левый элемент из массива.

    В третьем примере Васе нужно три операции, чтобы удалить все элементы из массива. Во время первой операции он удалит все числа 4, во время второй — все числа 100, а во время третьей — все числа 2.

    В четвёртом примере во время первой операции Вася удалит два первых числа 10. После этого массив примет вид [50, 10, 50, 50]. Затем во время второй операции Вася удалит два крайних правых числа 50, массив примет вид [50, 10]. Во время третьей операции — число 50, массив примет вид [10]. Во время последней четвертой операции он удалит единственное число 10. После этого массив Васи станет пустым.

    F. Удаление букв

    Строки Структуры данных *2100

    У Пети есть строка длины n, состоящая из прописных и строчных букв латинского алфавита, а также из цифр.

    Он выполняет со своей строкой по очереди m операций. Каждая операция описывается двумя целыми числами l и r и одним символом c — Петя удаляет из своей строки все символы c, находящиеся между позициями l и r, включительно. Очевидно, что после каждой операции длина строки либо не изменяется, либо уменьшается.

    Определите как будет выглядеть строка Пети после выполнения m операций.

    Входные данные

    В первой строке следуют два целых числа n и m (1 ≤ n, m ≤ 2·105) — длина строки Пети и количество операций.

    Во второй строке следует строка Пети длины n, состоящая из прописных или строчных букв латинского алфавита и цифр. Позиции в строке нумеруются с 1.

    В следующих m строках следуют по два целых числа l, r (1 ≤ l ≤ r), после которых следует символ c (строчная или прописная буква латинского алфавита, либо цифра) — описание очередной операции со строкой. Гарантируется, что r не превосходит длины строки s перед началом текущей операции.

    Выходные данные

    Выведите строку Пети после выполнения всех m операций. Если после выполнения всех операций строка Пети станет пустой, выведите пустую строку.

    Примечание

    В первом примере после выполнения первой операции из строки удалятся обе буквы «a», и строка примет вид «bc». После выполнения второй операции из строки удалится буква «c» (стоящая на второй позиции), и строка примет вид «b».

    Во втором примере после выполнения первой операции из строки удаляется «0», находящийся во второй позиции. После этого строка примет вид «Az». После выполнения второй операции строка не изменится.

    C. Уберите лишнего

    математика Перебор Структуры данных *1700

    Дана перестановка p длины n. Удалите один элемент из перестановки так, чтобы количество рекордов стало максимально возможным.

    Напоминаю, что в последовательности чисел a1, a2, ..., ak число ai называется рекордом, если для всех целых j (1 ≤ j < i) выполняется aj < ai.

    Входные данные

    Первая строка входных данных содержит единственное целое число n (1 ≤ n ≤ 105) — длина перестановки.

    Следующая строка входных данных содержит n целых чисел p1, p2, ..., pn (1 ≤ pi ≤ n) — перестановка. Все числа различные.

    Выходные данные

    Выведите единственное целое число — элемент перестановки, который требуется удалить, чтобы количество рекордов стало максимально возможным. Если таких элементов несколько, выведите минимальный из них.

    Примечание

    В первом примере можно удалить только один элемент.

    E. Максимальные вопросы

    дп Строки Структуры данных *2100

    У мальчика Васи в блокноте были записаны две строки s длины n и t длины m, состоящие из букв «a» и «b» латинского алфавита. Причем Вася знает, что строка t имеет вид «abab...», то есть на нечетных позициях строки стоит буква «a», а на четных — «b».

    Вдруг утром Вася обнаружил, что кто-то испортил его строку s. Некоторые буквы s были заменены на символ «?».

    Назовем последовательность позиций i, i + 1, ..., i + m - 1 вхождением строки t в s, если 1 ≤ i ≤ n - m + 1 и t1 = si, t2 = si + 1, ..., tm = si + m - 1.

    Мальчик оценивает красоту строки s, как максимальное количество непересекающихся вхождений строки t в нее. Вася может заменить некоторые из символов «?» на «a» или «b» (символы на разных позициях можно заменять на разные буквы). Вася хочет произвести замены так, чтобы красота строки s была максимально возможной. Из всех таких вариантов он хочет заменить как можно меньше символов «?». Найдите, сколько замен он должен сделать.

    Входные данные

    Первая строка содержит одно целое число n (1 ≤ n ≤ 105) — длину строки s.

    Вторая строка входных данных содержит строку s длины n, состоящую только из букв «a» и «b» латинского алфавита, а также символов «?».

    Третья строка содержит целое число m (1 ≤ m ≤ 105) — длину строки t. Сама строка t содержит «a» на нечетных позициях, и «b» на четных.

    Выходные данные

    Выведите единственное целое число — минимальное количество замен, которое должен сделать Вася, чтобы сделать красоту строки s максимально возможной.

    Примечание

    В первом примере строка t имеет вид «a». Единственный оптимальный вариант — заменить все символы «?» на «a».

    Во втором примере используя две замены можно получить строку «aba?aba??». Больше двух вхождений получить нельзя.

    C. Двудольные отрезки

    Бинарный поиск графы поиск в глубину и подобное снм Структуры данных *2300

    Дан неориентированный граф на n вершинах, в котором нет реберно-простых циклов четной длины (циклов четной длины, которые не проходят по одному ребру два раза). Будем считать, что вершины графа пронумерованы целыми числами от 1 до n.

    Требуется ответить на q запросов. Каждый запрос задается отрезком вершин [l; r], требуется посчитать количество его подотрезков [x; y] (l ≤ x ≤ y ≤ r) таких, что граф, в котором оставили только вершины из отрезка [x; y] (включая и x, и y) и ребра между этими вершинами, является двудольным.

    Входные данные

    В первой строке находятся два целых числа n и m (1 ≤ n ≤ 3·105, 1 ≤ m ≤ 3·105) — количество вершин и ребер графа.

    Следующие m строк содержат информацию о ребрах графа. В i-й из этих строк содержится два целых числа ai, bi, (1 ≤ ai, bi ≤ n; ai ≠ bi), обозначающие ребро между вершинами ai и bi. Гарантируется, что в данном графе нет реберно-простых циклов четной длины.

    Следующая строка содержит одно целое число q (1 ≤ q ≤ 3·105) — количество запросов.

    Следующие q строк содержат запросы. В i-й из этих строк содержится два целых числа li, ri (1 ≤ li ≤ ri ≤ n) — параметры запроса.

    Выходные данные

    Выведите q чисел, каждое в новой строке: i-е из них равно количеству таких подотрезков [x; y] (li ≤ x ≤ y ≤ ri), что граф, в котором оставили только вершины из отрезка [x; y] и ребра между этими вершинами, является двудольным.

    Примечание

    Первый пример расположен на следующей картинке:

    На первый запрос подходят все подотрезки отрезка [1; 3], кроме него самого.

    На второй запрос подходят все подотрезки отрезка [4; 6], кроме него самого.

    На третий запрос подходят все подотрезки отрезка [1; 6], кроме [1; 3], [1; 4], [1; 5], [1; 6], [2; 6], [3; 6], [4; 6].

    Второй пример расположен на следующей картинке:

    D. Почти разница

    математика Структуры данных *2200

    Определим функцию

    Задан массив a, состоящий из n целых чисел. Посчитайте сумму d(ai, aj) по всем парам (i, j) таким, что 1 ≤ i ≤ j ≤ n.

    Входные данные

    В первой строке записано одно целое число n (1 ≤ n ≤ 200000) — количество элементов в a.

    Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — элементы массива.

    Выходные данные

    Выведите одно целое число — сумму d(ai, aj) по всем парам (i, j) таким, что 1 ≤ i ≤ j ≤ n.

    Примечание

    В первом примере:

    1. d(a1, a2) = 0;
    2. d(a1, a3) = 2;
    3. d(a1, a4) = 0;
    4. d(a1, a5) = 2;
    5. d(a2, a3) = 0;
    6. d(a2, a4) = 0;
    7. d(a2, a5) = 0;
    8. d(a3, a4) =  - 2;
    9. d(a3, a5) = 0;
    10. d(a4, a5) = 2.

    G. Очередная задача про максимальный поток

    графы Потоки Структуры данных *2700

    В этой задаче вам придётся иметь дело с очень специфичной ориентированной сетью (взвешенным ориентированным графом).

    Сеть состоит из двух частей: части A и части B. Каждая часть состоит из n вершин; i-ю вершину части A будем обозначать как Ai, а i-ю вершину части B — как Bi.

    Для каждого i (1 ≤ i < n) существует ориентированное ребро из Ai в Ai + 1, а также из Bi в Bi + 1. Пропускные способности этих рёбер заданы во входных данных. Также может быть несколько рёбер, ведущих из A в B (но нет таких рёбер, которые ведут из B в A).

    Вам необходимо посчитать величину максимального потока из A1 в Bn в данной сети. Пропускные способности рёбер, ведущих из Ai в Ai + 1, также могут иногда меняться, и вам нужно пересчитывать величину потока после этих изменений. Вся остальная часть сети фиксирована (не происходит никаких изменений в части B, никаких изменений рёбер, ведущих из A в B, никакие рёбра не добавляются и не удаляются).

    Посмотрите на пример и пояснение к нему, чтобы лучше понять структуру сети.

    Входные данные

    В первой строке записаны три числа n, m и q (2 ≤ n, m ≤ 2·105, 0 ≤ q ≤ 2·105) — количество вершин в каждой части, количество рёбер, ведущих из A в B, и количество изменений соответственно.

    Далее следуют n - 1 строк. В i-й строке записаны два числа xi и yi, обозначающих, что ребро из Ai в Ai + 1 имеет пропускную способность xi, а ребро из Bi в Bi + 1 имеет пропускную способность yi (1 ≤ xi, yi ≤ 109).

    В следующих m строках указываются рёбра из A в B. Каждая строка содержит три целых числа x, y и z, обозначающих ребро из Ax в By с пропускной способностью z (1 ≤ x, y ≤ n, 1 ≤ z ≤ 109). Может быть несколько рёбер, ведущих из Ax в By.

    В последних q строках обозначаются изменения, вносимые в сеть. В i-й из этих строк записаны два числа vi и wi, обозначающих, что пропускная способность ребра из Avi в Avi + 1 становится равной wi (1 ≤ vi < n, 1 ≤ wi ≤ 109).

    Выходные данные

    Сначала выведите величину максимального потока в исходной сети. Затем выведите q чисел, i-е из которых должно быть равно величине максимального потока после i-го изменения.

    Примечание

    В примере до всех изменений сеть выглядит так:

    D. Разноцветные точки

    жадные алгоритмы реализация Структуры данных *2100

    Вам дан набор разноцветных точек на прямой. Две точки считаются соседними, если между ними нет других точек. У каждой точки может быть не более двух соседних — одна слева и одна справа.

    Вы выполняете последовательность действий над этим набором. За одно действие вы удаляете все точки a, у которых есть соседняя точка цвета, отличного от цвета точки a. Все точки удаляются одновременно, т.е. сначала вы определяете, какие точки следует удалить, и затем удаляете их. После этого вы выполняете следующее действие и т.д. Если действие не удалит ни одной точки, его невозможно выполнить.

    Сколько действий можно будет выполнить на заданном наборе точек так, чтобы каждое из них удалило хотя бы одну точку?

    Входные данные

    Входные данные состоят из единственной строки строчных латинских букв. Буквы задают цвета точек в том порядке, в котором они расположены на прямой: первая буква задает цвет самой левой точки, вторая — цвет второй слева точки и т.д.

    Строка содержит от 1 до 106 букв.

    Выходные данные

    Выведите одно число — количество действий, которые можно выполнить на заданном наборе точек так, чтобы каждое действие удалило хотя бы одну точку.

    Примечание

    В первом примере первое действие удалит две средние точки и оставит точки "ab", которые затем удалит второе действие. После этого не останется точек, над которыми можно было бы выполнить третье действие.

    Во втором примере первое действие удалит четыре средние точки и оставит точки "aa". Ни у одной из них нет соседних точек другого цвета, поэтому второе действие невозможно выполнить.

    B. Очередь

    Бинарный поиск Структуры данных *1500

    В очереди в аэропорту стоят n моржей. Они пронумерованы начиная с конца очереди: морж с номером 1 стоит в конце очереди, а морж с номером n — в начале. Морж с номером i имеет возраст ai.

    Морж с номером i становится недовольным, если впереди него стоит более молодой морж, то есть существует такое j (i < j), что ai > aj. Недовольство i-го моржа равно количеству моржей между ним и самым удаленным моржом впереди, который моложе i-го. То есть чем дальше от него стоит этот молодой морж, тем сильнее недовольство.

    Менеджер аэропорта попросил вас посчитать для каждого из n моржей в очереди его недовольство.

    Входные данные

    В первой строке записано целое число n (2 ≤ n ≤ 105) — количество моржей в очереди. Во второй строке записаны целые числа ai (1 ≤ ai ≤ 109).

    Обратите внимание, что некоторые моржи могут иметь одинаковый возраст, но для возникновения недовольства необходимо, чтобы тот морж, что ближе к началу, был строго моложе другого.

    Выходные данные

    Выведите n чисел: если i-ый морж всем доволен, выведите «-1» (без кавычек). Иначе выведите недовольство i-го моржа: количество моржей, которые стоят между ним и самым удаленным моржом впереди него, который более молод.

    E. Иглу-небоскреб

    геометрия Структуры данных *2500

    Сегодня на северном полюсе олимпиада по спортивному... строительству игрушечных иглу-небоскребов!

    В соревновании принимают участие n моржей. Каждому моржу выдан уникальный номер от 1 до n. После старта каждый морж начинает строить свой собственный иглу-небоскреб. Изначально, в момент времени 0, высота небоскреба i-ого моржа равна ai. Каждую минуту i-ый морж достраивает bi этажей.

    Журналисты, ведущие репортаж с места проведения олимпиады, делают q запросов организаторам. Каждый запрос характеризуется тройкой чисел li, ri, ti. На каждый запрос организаторы отвечают одним числом x, таким, что:

    1. Число x лежит в диапазоне от li до ri включительно (li ≤ x ≤ ri).

    2. Небоскреб моржа с номером x имеет наибольшую высоту среди небоскребов всех моржей из этого диапазона [li, ri] в момент времени ti.

    На каждый запрос журналистов выведите номер моржа x, удовлетворяющего критериям выше. Если возможных ответов несколько, то выведите любой.

    Входные данные

    В первой строке содержатся числа n и q (1 ≤ n, q ≤ 105). В следующих n строках идут пары чисел ai, bi (1 ≤ ai, bi ≤ 109). Далее идут q запросов вида li, ri, ti по одному в каждой строке (1 ≤ li ≤ ri ≤ n, 0 ≤ ti ≤ 106). Все числа на входе целые.

    Выходные данные

    На каждый запрос журналистов выведите номер моржа x, удовлетворяющего критериям из условия, по одному в строке.

    E. Сортировка стеком

    жадные алгоритмы Конструктив реализация Структуры данных *2000

    Предположим, дан массив a, стек s (изначально пустой) и массив b (также пустой).

    Можно производить следующие операции, пока a или s непусты:

    • Взять первый элемент a, положить его на верхушку s и удалить из a (если a не пустой);
    • Взять элемент с верхушки s, добавить его в конец массива b и удалить из s (если s не пустой).

    Операции можно осуществлять в произвольном порядке.

    Если существует способ проделать операции в таком порядке, что массив b отсортирован в неубывающем порядке в конце процесса, то назовем массив a стек-сортируемым.

    Например, [3, 1, 2]стек-сортируемый, потому что b будет отсортированным после следующих операций:

    1. Удалить 3 из a и положить на верхушку s;
    2. Удалить 1 из a и положить на верхушку s;
    3. Удалить 1 из s и добавить в конец b;
    4. Удалить 2 из a и положить на верхушку s;
    5. Удалить 2 из s и добавить в конец b;
    6. Удалить 3 из s и добавить в конец b.

    После всех операций b = [1, 2, 3], поэтому [3, 1, 2]стек-сортируемый. [2, 3, 1] — не стек-сортируемый.

    Заданы первые k элементов некоторой перестановки p размера n (напоминаем, что перестановка размера n — это такой массив размера n, где каждое число от 1 до n встречается ровно один раз). Необходимо восстановить оставшиеся n - k элементов этой перестановки, так чтобы она стала стек-сортируемой. Если существует несколько ответов, то выберите такой, что p лексикографически максимальна (массив q лексикографически больше массива p тогда и только тогда, когда существует такое целое число k, что для всех i < k qi = pi, and qk > pk). Запрещено как-то переставлять или менять первые k элементов.

    Выведите лексикографически максимальную перестановку p, которую можно получить.

    Если ответа не существует, то выведите -1.

    Входные данные

    В первой строке записаны два целых числа n и k (2 ≤ n ≤ 200000, 1 ≤ k < n) — размер желаемой перестановки и количество элементов, которые уже заданы.

    Во второй строке записаны k чисел p1, p2, ..., pk (1 ≤ pi ≤ n) — первые k элементов перестановки p. Эти числа попарно различны.

    Выходные данные

    Если возможно восстановить стек-сортируемую перестановку p размера n такую, что первые k элементов перестановки p совпадают с заданными, выведите максимальную лексикографически из таковых.

    В противном случае выведите -1.

    G. Запросы на массовое обновление

    Структуры данных *2500

    Задан массив a, состоящий из n целых чисел. Вам необходимо обработать q запросов к этому массиву; каждый запрос задается четверкой чисел l, r, x и y, означающих, что для каждого i такого, что l ≤ i ≤ r и ai = x необходимо установить ai равным y.

    Выведите массив после обработки всех запросов.

    Входные данные

    В первой строке записано одно целое число n (1 ≤ n ≤ 200000) — размер массива a.

    Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 100) — элементы массива a.

    В третьей строке записано одно целое число q (1 ≤ q ≤ 200000) — количество запросов, которые требуется обработать.

    Затем следуют q строк. В i-й из них записаны четыре целых числа l, r, x и y, определяющие i-й запрос (1 ≤ l ≤ r ≤ n, 1 ≤ x, y ≤ 100).

    Выходные данные

    Выведите n целых чисел — элементы массива a после применения всех операций.

    D. Рыбки

    графы жадные алгоритмы кратчайшие пути Структуры данных Теория вероятностей *2100

    Пока Гриша встречает Новый Год в компании Деда Мороза, Миша дарит Саше небольшой прямоугольный прудик размера n × m, поделенный на клеточки размера 1 × 1, в которых обитают маленькие злобные рыбки (не более одной рыбки на клеточку, иначе они подерутся!).

    Вместе с прудиком в комплекте идет квадратный сачок размера r × r, предназначенный для рыбной ловли. Так, если поместить левый нижний угол сачка клеточку с координатами (x, y), будут пойманы все рыбки в квадрате (x, y)...(x + r - 1, y + r - 1). Отметим, что в процессе сачок должен полностью находиться внутри прудика.

    К сожалению, Саша совсем не искушена в благородном искусстве рыбной ловли, поэтому закидывает сачок случайным образом. Чтобы та не расстраивалась из-за плохих результатов, Миша решил выпустить в различные клеточки изначально пустого прудика k рыбок так, чтобы математическое ожидание количества пойманных сачком рыбок было бы максимально. Помогите ему этого достигнуть и обрадовать Сашу! А именно, расположите k рыбок в различных клетках так, чтобы при забрасывании сачка в случайное из (n - r + 1)·(m - r + 1) положений среднее количество рыбок в сачке было максимально возможным.

    Входные данные

    В единственной строчке заданы четыре целых числа — n, m, r, k (1 ≤ n, m ≤ 105, 1 ≤ r ≤ min(n, m), 1 ≤ k ≤ min(n·m, 105)).

    Выходные данные

    Выведите одно число — максимально возможное математическое ожидание числа пойманных рыбок.

    Ваш ответ будет зачтен, если его относительная или абсолютная ошибка не превосходит 10 - 9. А именно, пусть ваш ответ равен a, а ответ жюри — b. Ваш ответ будет зачтен, если .

    Примечание

    В первом примере можно выпустить рыбок в клетки (2, 1), (2, 2), (2, 3). В таком случае для любой из четырех возможных конфигураций сачка (выделены салатовым) количество рыбок внутри будет равняться двум, как и математическое ожидание.

    D. Слишком простые задачи

    Бинарный поиск жадные алгоритмы Перебор сортировки Структуры данных *1800

    Вы готовитесь к экзамену по теории расписаний. Экзамен продлится ровно T миллисекунд. На экзамене вас ждут n задач. Каждую задачу номер i вы сможете либо полностью решить, затратив на это ti миллисекунд, либо не решить вовсе, не потратив на нее ни миллисекунды. Времени на отдых после решения задачи вам не потребуется.

    К несчастью, ваш преподаватель считает, что некоторые задачи слишком просты для вас, поэтому каждой задаче i сопоставил целое число ai, обозначающее, что задача i может принести балл за ее решение только в том случае, если вы решите не более ai задач всего (включая задачу i).

    Формально, пусть за экзамен вы решите некоторое множество задач p1, p2, ..., pk. Ваш итоговый балл за экзамен s будет равен количеству таких j от 1 до k, что k ≤ apj.

    Догадавшись, что настоящая первая задача экзамена уже перед вами, вы хотите заранее выбрать подмножество задач для решения на экзамене, которое принесет вам наибольший возможный итоговый балл. Не забудьте, что экзамен ограничен по времени, и вам должно хватить времени на решение всех выбранных задач. Если существуют разные множества задач, ведущие к наибольшему итоговому баллу, вас устроит любое из них.

    Входные данные

    Первая строка содержит два целых числа n и T (1 ≤ n ≤ 2·105; 1 ≤ T ≤ 109) — количество задач на экзамене и длительность экзамена в миллисекундах, соответственно.

    Каждая из следующих n строк содержит пару целых чисел ai и ti (1 ≤ ai ≤ n; 1 ≤ ti ≤ 104). Задачи пронумерованы от 1 до n.

    Выходные данные

    В первой строке выведите целое число s — наибольший возможный итоговый балл.

    Во второй строке выведите целое число k (0 ≤ k ≤ n) — количество задач, которые вам следует решить.

    В третьей строке выведите k различных целых чисел p1, p2, ..., pk (1 ≤ pi ≤ n) — номера задач, которые вам следует решить, в любом порядке.

    Если наилучших множеств задач несколько, выведите любое из них.

    Примечание

    В первом примере следует решить задачи с номерами 3, 1 и 4. В таком случае вы потратите 80 + 100 + 90 = 270 миллисекунд, уложившись в длительность экзамена, 300 миллисекунд (и даже оставив себе 30 миллисекунд на отдых). Задачи 3 и 1 принесут вам по одному баллу, а задача 4 — не принесет. В итоге вы наберете два балла.

    Во втором примере катастрофически не хватает времени на решение даже одной задачи.

    В третьем примере вы идеально успеваете решить обе задачи за 42 + 58 = 100 миллисекунд и с улыбкой сдать работу преподавателю.

    D. Баш и сложная математическая головоломка

    Структуры данных теория чисел *1900

    Баш любит играть с массивами. У него есть массив a1, a2, ... an, состоящий из n целых чисел. Он любит делать предположения о значении наибольшего общего делителя (gcd) на некоторых подотрезках массива. Конечно же, его предположения не всегда верны, но Баш будет доволен, если его предположение почти верно.

    Допустим он предположил, что gcd элементов на подотрезке [l, r] массива a равен x. Тогда он считает предположение почти верным если если он может изменить не более одного элемента на подотрезке так, что gcd на этом отрезке станет равным x. Учтите, что после предположения о значении gcd Баш не меняет сам массив, ему только интересно, можно ли сделать так, чтобы gcd на подотрезке стал равен x. Помимо этого, Баш иногда изменяет сам массив.

    Помогите Башу определить, какие его догадки являются почти верными. Формально, Вам надо обработать q запросов, каждый из которых имеет один из двух типов:

    • 1 lrx — Баш предполагает, что gcd на подотрезке [l, r] равен x. Сообщите, правда ли, что это предположение почти верно.
    • 2 iy — Баш изменяет значение ai на y.

    Массив индексируется, начиная с 1.

    Входные данные

    В первой строке содержится целое число n (1 ≤ n ≤ 5·105) — размер массива.

    Во второй строке содержатся n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — элементы массива.

    В третьей строке содержится целое число q (1 ≤ q ≤ 4·105) — количество запросов.

    В следующих q строках содержатся описания запросов. Каждый запрос представляется в одном из следующих форматов:

    • 1 lrx (1 ≤ l ≤ r ≤ n, 1 ≤ x ≤ 109).
    • 2 iy (1 ≤ i ≤ n, 1 ≤ y ≤ 109).

    Гарантируется, что в тесте есть хотя бы один запрос первого типа.

    Выходные данные

    Для каждого запроса первого типа выведите "YES" (без кавычек), если предположение Баша верно и "NO" (без кавчек) иначе.

    Примечание

    В первом тестовом примере изначальное состояние массива таково: {2, 6, 3}

    Для запроса 1 gcd первых двух элементов массива уже равен 2.

    Для запроса 2 можно добиться gcd равного 3 изменив значение первого элемента на 3. Учтите, что после запросов типа 1 массив не изменяется.

    После запроса 3 массив выглядит так: {9, 6, 3}.

    В запросе 4 нельзя изменить один элемент так, чтобы получить gcd, равный 2.

    E. Палиндромы в дереве

    битмаски Деревья разделяй и властвуй Структуры данных *2400

    Дано дерево (связный ациклический граф) на n вершинах. Вершины пронумерованы от 1 до n и на каждой вершине записана буква английского алфавита от a до t.

    Путь в дереве называется палиндромным, если из букв, записанных на нём, можно составить палиндром (буквы можно произвольным образом переставлять).

    Для каждой вершины выведите количество палиндромных путей, проходящих через неё.

    Учтите, что путь из вершины u в вершину v и путь из вершины v в вершину u считаются одинаковыми, такие пути должны учитываться ровно один раз.

    Входные данные

    В первой строке содержится целое число n (2 ≤ n ≤ 2·105) — количество вершин в дереве.

    В следующий n - 1 строках содержатся пары чисел u и v (1  ≤  u, v  ≤  n, u ≠ v), обозначающие ребро между вершинами u и v. Гарантируется, что заданный граф является деревом.

    В следующей строке содержится строка, состоящая из n символов английского алфавита от a до t, где i-й (1 ≤ i ≤ n) символ обозначает букву, записанную в i-й вершине дерева.

    Выходные данные

    Выведите n чисел, где i-е число обозначает количество палиндромных путей, проходящих через вершину i.

    Примечание

    В первом тестовом примере следующие пути являются палиндромными:

    2 - 3 - 4

    2 - 3 - 5

    4 - 3 - 5

    Кроме того, все пути, состоящие из одной вершины, являются палиндромными. А следующие пути палиндромными не являются:

    1 - 2 - 3

    1 - 2 - 3 - 4

    1 - 2 - 3 - 5

    F. Подстроки в строке

    битмаски Перебор Строки строковые суфф. структуры Структуры данных *3000

    Дана строка s, обработайте q запросов, каждый из которых имеет один из следующий типов:

    • 1 ic — Изменить i-й символ в строке на c.
    • 2 lry — Рассмотрим подстроку строки s, начинающуюся с символа с номером l и заканчивающуюся на символ с номером r. Выведите количество раз, которые y входит в неё как подстрока.
    Входные данные

    В первой строке задана строка s (1 ≤ |s| ≤ 105), состоящая из строчных букв английского алфавита.

    Во второй строке задано число q (1 ≤ q ≤ 105) — количество запросов.

    Следующие q строк описывают запросы и могт в зависимости от типа запроса имеють следующие форматы:

    • 1 ic (1 ≤ i ≤ |s|)
    • 2 lry (1 ≤ l ≤ r ≤ |s|)

    c — это строчная буква английского алфавита, y — непустая строка, состоящая из строчных букв английского алфавита.

    Сумма |y| по всем запросам второго типа не превосходит 105.

    Гарантируется, что в тесте есть хотя бы один запрос второго типа.

    Строки индексируются, начиная с 1.

    |s| обозначает длину строки s.

    Выходные данные

    Для каждого запроса типа 2 выведите ответ в отдельной строке.

    Примечание

    В первом тестовом примере изначально строка aba встречается 3 раза как подстрока на подотрезке [1, 7].

    После запроса первого типа строка становится равной ababcbaba и строка aba встречается только один раз как подстрока на отрезке [1, 7].

    E. Занятия физкультуры

    реализация сортировки Структуры данных *2300

    В этом году Алексей окончил школу, и теперь он первокурсник Берляндского Государственного Университета. Для него стало неожиданностью, что, несмотря на специализацию программиста, ему все равно надо было посещать физкультуру! Конец семестра уже не за горами, а Алексей не посетил еще ни одной пары!

    Разумеется Алексей не хочет вылететь, поэтому ему интересно узнать, сколько рабочих дней осталось до конца семестра, ведь только тогда он может посещать физкультуру. Но в БГУ подсчет количества рабочих дней — задача не из легких:

    До конца семестра осталось n дней (пронумерованных от 1 до n), и все они изначально рабочие. Затем публикуются q приказов один за другим. Каждый приказ определяется тремя числами l, r и k:

    • Если k = 1, то все дни с l по r (включительно) становятся выходными. Если некоторые дни до этого были объявлены рабочими, то они все равно становятся выходными;
    • Если k = 2, то все дни с l по r (включительно) становятся рабочими. Если некоторые дни до этого были объявлены выходными, то они все равно становятся рабочими.

    Помогите Алексею посчитать количество рабочих дней до конца семестра после каждого приказа!

    Входные данные

    В первой строке записано целое число n, а во второй — целое число q (1 ≤ n ≤ 109, 1 ≤ q ≤ 3·105) — количество дней до окончания семестра и количество приказов, соответственно.

    Затем идут q строк, в i записаны три целых числа li, ri и ki, описывающие i-й запрос (1 ≤ li ≤ ri ≤ n, 1 ≤ ki ≤ 2).

    Выходные данные

    Выведите q целых чисел. i-е должно равняться количеству рабочих дней, оставшихся до конца семестра, после того, как опубликованы первые i приказов.

    F. Несбалансированность дерева

    графы Деревья снм Структуры данных *2400

    Задано дерево T, состоящее из n вершин. На каждой вершине записано число; на i-й — ai. Определим функцию I(x, y) — разница между максимальным и минимальным значением ai на простом пути между вершинами x и y.

    Ваша задача — вычислить .

    Входные данные

    В первой строке записано одно целое число n (1 ≤ n ≤ 106) — количество вершин в дереве.

    Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 106) — числа, записанные на вершинах.

    Затем задана n - 1 строка. В каждой записано по два целых числа x и y, задающие ребро между вершинами x и y (1 ≤ x, y ≤ n, x ≠ y). Гарантируется, что данные ребра формируют дерево.

    Выходные данные

    Выведите одно число — .

    D. Джейми и список дел

    Деревья интерактив Структуры данных *2200

    Почему мне надо делать так много домашних заданий???

    У Джейми очень много дел в школе. Он начинает забывать, какие домашние задания ему надо сделать, поэтому он решил записывать их в список дел. Каждому заданию он присваивает некоторый приоритет так, что чем приоритет меньше, тем важнее задание. Таким образом он сможет решить, на какие задания тратить больше времени.

    Через несколько дней Джейми обнаружил, что его список дел настолько большой, что он не может им пользоваться самостоятельно. Так как вы дружите с Джейми, помогите ему и напишите программу, которая выполняет следующий операции со списком дел:

    • set ai xi — Добавить задание ai в список дел, если оно ещё не в списке, и назначить ему приоритет равный xi. Если задание ai уже в списке дел, его приоритет станет равен xi.
    • remove ai — Удалить задание ai из списка дел, если оно в нём есть.
    • query ai — Выведите количество заданий, которые важнее (имеют меньший приоритет), чем задание ai, чтобы Джейми смог лучше распределить своё время. Выведите  - 1 если задания ai в списке дел нет.
    • undo di — Отменить все изменения, сделанные за последние di дней (не включая день текущей операции)

    В день с номером 0 список дел пуст. В каждый из следующих q дней Джейми будет делать ровно одну операцию одного из четырёх типов. Если операция — это query, то необходимо вывести ответ на запрос до начала обработки запроса, соответствующего следующему дню, чтобы Джейми смог заранее спланировать свой день.

    Входные данные

    В первой строке содержится целое число q (1 ≤ q ≤ 105) — количество операций.

    Следующие q строк содержат описания запросов. В строке с номером i содержится описание запроса, который надо обработать в день i. Запрос имеет следующий формат:

    Первое слово в строке обозначает тип операции. Он может быть равен set, remove, query или undo.

    • Если запрос имеет тип set, то далее задана строка ai и целое число xi (1 ≤ xi ≤ 109). ai — это название задания, которому необходимо установить приоритет priority xi.
    • Если запрос имеет тип remove, то далее задана строка ai. ai — это название задания, которое надо удалить из списка.
    • Если запрос имеет тип query, то далее задана строка ai. ai — это название задания, для которого надо найти требуемую величину.
    • Если запрос имеет тип undo, то далее задано целое число di (0 ≤ di < i). Этот запрос обозначает, что надо отменить действия за последние di дней.

    Названия всех заданий ai состоят из строчный букв английского алфавита и имеют длину 1 ≤ |ai| ≤ 15.

    Гарантируется, что последний запрос имеет тип query.

    Выходные данные

    Для каждого запроса типа query, выведите одно целое число — количество заданий, которые имеют приоритет меньше, чем ai, или  - 1, если задания ai нет в списке дел.

    Протокол взаимодействия

    Если операцимя имеет тип query, вам необходимо вывести ответ на запрос и сбросить буфер вывода до начала обработки следующей операции. В противном случае Вы можете получить вердикт Idleness Limit Exceed.

    Для того, чтобы узнать, как сбросить буфер вывода, обратитесь к документации по Вашему языку программирования. Ниже приведён код для некоторых популярных языков программирования:

    • C: fflush(stdout);
    • C++: cout « flush;
    • Java: System.out.flush();

    E. Джейми и дерево

    Деревья Структуры данных *2400

    Трудно поверить, но Джейми — финальный босс!

    У Джейми есть дерево на n вершинах, пронумерованных от 1 до n. Изначально корнем дерева является вершина с номеров 1. Кроме того, на каждой вершине дерева записано число.

    Вам необходимо обрабатывать запросы трёх типов:

    1 v — Сделать вершину с номером v корнем дерева.

    2 u v x — Прибавить x к значению каждой вершины наименьшего по размеру поддерева, содержащего вершины u и v.

    3 v — Найти сумму значений вершин в поддереве вершины v.

    Поддерево вершины v — это множество вершин, для которых v лежит на кратчайшем пути от этой вершины до корня. Обратите внимание, что поддерево вершины может измениться в результате изменения корня дерева.

    Покажите Джейми вашу мощь и выполните все запросы!

    Входные данные

    В первой строке через пробел заданы два целых числа n и q (1 ≤ n ≤ 105, 1 ≤ q ≤ 105) — количество вершин и количество запросов, которые требуется обработать, соответственно.

    Во второй строке через пробел заданы n целых чисел a1, a2, ..., an ( - 108 ≤ ai ≤ 108) — начальные значения вершин.

    В следующих n - 1 строках содержатся пары целых чисел ui, vi (1 ≤ ui, vi ≤ n) обозначающие ребро между вершинами ui и vi в дереве.

    Следующие q строк содержат описания запросов.

    Каждый запрос задан в одном из следующих форматов в зависимости от типа запроса.

    1 v (1 ≤ v ≤ n) для запросов первого типа.

    2 u v x (1 ≤ u, v ≤ n,  - 108 ≤ x ≤ 108) для запросов второго типа.

    3 v (1 ≤ v ≤ n) для запросов третьего типа.

    Все числа в описании запросов целые.

    Запросы необходимо обрабатывать в заданном порядке. Гарантируется, что заданный граф является деревом.

    Выходные данные

    Для каждого запроса третьего типа выведите ответ на него. Гарантируется, что в тесте есть хотя бы один запрос третьего типа.

    Примечание

    Картинка ниже иллюстрирует изменения дерева в первом тестовом примере.

    E. Обратная сторона

    Деревья Строки строковые суфф. структуры Структуры данных *3400

    Все знают, что Одиннадцать обладает некоторыми сверхспособностями. Поэтому Хоппер уговорила ее закрыть врата на Обратную сторону силой мысли. Монстры с Обратной стороны любят перемещаться между мирами, поэтому они собираются атаковать Хоппер и Одиннадцать, чтобы остановить их. Монстры живут на дереве из n вершин, пронумерованных от 1 до n. На каждом ребре написана строчная латинская буква.

    Обратная сторона — магический мир. В нем живут m видов монстров, пронумерованных от 1 до m. У каждого вида монстров есть специальное слово, которое дает ему силу. Специальное слово вида i равно si. Всего на Обратной стороне q монстров. Каждый сейчас находится в одной вершине и собирается дойти до некоторой другой вершины. Если монстр типа k идет от вершины i до вершины j, его сила увеличивается на количество раз, когда он видел свое специальное слово (sk) как подстроку на своем пути. Более формально:

    Пусть f(i, j) — строка, которую мы получим, если выпишем все буквы на ребрах на кратчайшем пути из i в j. Тогда сила монстра увеличивается на количество вхождений sk в f(i, j).

    Хоппер и Одиннадцать хотят подготовиться, поэтому для каждого монстра они хотят определить силу, которую приобретет монстр после передвижения.

    Входные данные

    Первая строка содержит три целых числа n, m и q (2 ≤ n ≤ 105, 1 ≤ m, q ≤ 105).

    Следующие n - 1 строки содержат описания ребер. В каждой строке находятся два целых числа v и u (1 ≤ v, u ≤ n, v ≠ u) и строчная латинская буква c, что означает, что вершины v и u соединены ребром, и на нем написана буква c. Гарантируется, что заданный граф является деревом.

    Следующие m строк содержат специальные слова. i-я из этих строк содержит одну строку si (1 ≤ |si| ≤ 105), состоящую только из строчных латинских букв. Гарантируется, что |s1| + |s2| + ... + |sm| ≤ 105.

    Следующие q строк описывают монстров. Каждая строка содержит три целых числа i, j и k (1 ≤ i, j ≤ n, i ≠ j, 1 ≤ k ≤ m), означающие, что монстр типа k движется от вершины i к вершине j.

    Выходные данные

    Выведите q строк. В i-й из этих строк выведите силу i-го монстра после передвижения.

    E. Связные компоненты?

    графы поиск в глубину и подобное снм Структуры данных *2100

    Дан неориентированный граф, состоящий из n вершин и ребер. Вместо того, чтобы задавать ребра, которые присутствуют в графе, мы даем m неупорядоченных пар (x, y) таких, что между вершинами x и y не существует ребра, и если пара вершин не встречается во входных данных, то в графе есть ребро между ними.

    Необходимо найти количество связных компонент в графе и размер каждой компоненты. Связная компонента — это такой набор вершин X, что для любой пары вершин в компоненте существует хотя бы один путь, соединяющий их, и добавление любой новой вершины в X нарушает это правило.

    Входные данные

    В первой строке записаны два целых числа n и m (1 ≤ n ≤ 200000, ).

    Затем идут m строк, каждая содержит пару целых чисел x и y (1 ≤ x, y ≤ n, x ≠ y), означающую, что не существует ребра между x и y. Каждая пара присутствует во входных данных не более одного раза; (x, y) и (y, x) считаются одинаковыми (они так же никогда не встретятся одновременно в одном тесте). Если какая-то пара вершин не упомянута, то между этими вершинами есть ребро.

    Выходные данные

    Сначала выведите k — количество связных компонент в графе.

    Затем выведите k чисел — размеры компонент. Эти числа должны идти в неубывающем порядке.

    F. SUM и REPLACE

    Перебор снм Структуры данных теория чисел *2000

    Обозначим за D(x) количество положительных делителей натурального числа x. К примеру, D(2) = 2 (2 делится на 1 и 2), D(6) = 4 (6 делится на 1, 2, 3 и 6).

    Вам дан массив a из n целых чисел. Нужно обрабатывать два вида запросов:

    1. REPLACE l r — для каждого заменить ai на D(ai);
    2. SUM l r — посчитать .

    Выведите ответ на каждый запрос SUM.

    Входные данные

    В первой строке заданы два целых числа n и m (1 ≤ n, m ≤ 3·105) — количество элементов в массиве и количество запросов, соответственно.

    Во второй строке заданы n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 106) — элементы массива.

    Затем следуют m строк, в каждой из которых записаны 3 целых числа ti, li, ri, обозначающих i-й запрос. Если ti = 1, то i-й запрос — REPLACE li ri, иначе это запрос SUM li ri (1 ≤ ti ≤ 2, 1 ≤ li ≤ ri ≤ n).

    Хотя бы один запрос имеет тип SUM.

    Выходные данные

    Для каждого запроса SUM выведите ответ на него.

    B. Производство снега

    Бинарный поиск Структуры данных *1600

    Алиса обожает снег! К сожалению, этой зиме уже пришел конец (мы надеемся), и Алисе придется ждать до следующей зимы. Чтобы порадовать Алису, Боб купил ей подарок — большой генератор снега. Он планирует производить некоторое количество снега каждый день. Утром дня номер i он сделает отдельный сугроб объема Vi в саду Алисы.

    Каждый день каждый существующий сугроб немного уменьшается в размерах из-за таяния. А именно, если температура в некоторый день равна Ti, то каждый существующий сугроб уменьшит свой объем на Ti. Если в результате этого объем уменьшится до нуля, то сугроб полностью исчезнет. Все сугробы тают независимо друг от друга.

    Обратите внимание, что сугроб, произведенный в день i, тоже теряет часть своего объема в этот день. В том числе возможно такое, что в конце некоторых дней нет ни одного сугроба снега.

    Вам даны изначальные размеры сугробов и температура в каждый из дней. Определите общий объем растаявшего снега в каждый из дней.

    Входные данные

    Первая строка содержит одно целое число N (1 ≤ N ≤ 105) — количество дней.

    Вторая строка содержит N целых чисел V1, V2, ..., VN (0 ≤ Vi ≤ 109), где Vi — начальный объем сугроба, который будет произведен утром дня номер i.

    Третья строка содержит N целых чисел T1, T2, ..., TN (0 ≤ Ti ≤ 109), где Ti — температура в день номер i.

    Выходные данные

    Выведите одну строку с N целыми числами, где i-е число будет обозначать общий объем снега, растаявшего в день номер i.

    Примечание

    В первом примере Боб сначала сделает сугроб объема 10, который растает до размера 5 в тот же день. Во второй день он сделает еще один сугроб объема 10. Так как в этот день немного теплее, первый сугроб растает до конца, а второй сугроб уменьшится до размера 3. В конце второго дня останется только один сугроб размера 3. В третий день Боб сделает сугроб меньше, чем обычно, но, поскольку температура тоже уменьшилась, до конца дня доживут оба сугроба.

    C. Идеальная защита

    Деревья жадные алгоритмы Строки Структуры данных *1800

    У Алисы есть важное сообщение M, состоящее из нескольких неотрицательных целых чисел, которое она хочет сохранить в тайне от Евы. Алиса знает, что единственный теоретически защищенный способ шифрования — использование одноразового ключа. Алиса сгенерировала случайный ключ K с длиной, равной длине сообщения. Алиса затем вычислила побитовое исключающее ИЛИ каждого соответствующего элемента массива и ключа (, где обозначает операцию побитового исключающего ИЛИ) и сохранила зашифрованное сообщение A. Алиса умная. Будь как Алиса.

    Например, пусть Алиса хочет сохранить сообщение M = (0, 15, 9, 18), и она сгенерировала ключ K = (16, 7, 6, 3). Тогда зашифрованное сообщение равно A = (16, 8, 15, 17).

    Алиса понимает, что она не может хранить ключ вместе с зашифрованным сообщением. Поэтому Алиса послала ключ K Бобу и удалила свою копию. Алиса умная. Действительно, будь как Алиса.

    Боб понимает, что зашифрованное сообщение защищено только до тех пор, пока ключ является секретным. Поэтому Боб случайным образом поменял местами элементы ключа перед тем, как сохранить его. Боб думает, что в таком случае, даже если Ева получит и зашифрованное сообщение, и ключ, она не сможет прочитать исходное сообщение. Боб не умный. Не будь как Боб.

    В примере выше Боб мог, например, выбрать перестановку (3, 4, 1, 2), перемешать элементы в соответствии с ней и сохранить ключ P = (6, 3, 16, 7).

    Прошел год, и Алиса теперь хочет расшифровать свое сообщение. Только сейчас Боб понял, что это невозможно. Так как он поменял местами элементы ключа случайным образом, сообщение утеряно навсегда. Мы уже сказали, что Боб не очень умный?

    Боб хочет получить хотя бы какую-то информацию из сообщения. Так как он не очень умный, он попросил у вас помощи. Вам известны зашифрованное сообщение A и произвольно перемешанный ключ P. Каково лексикографически минимальное сообщение, которое могло быть зашифровано подобным образом?

    Формально, по данным A и P найдите лексикографически минимальное сообщение O такое, что существует перестановка π такая, что для всех i.

    Напомним, что последовательность S лексикографически меньше последовательности T, если существует такая позиция i, что Si < Ti, а для всех j < i выполняется Sj = Tj.

    Входные данные

    Первая строка содержит одно целое число N (1 ≤ N ≤ 300000) — длину сообщения.

    Вторая строка содержит N целых чисел A1, A2, ..., AN (0 ≤ Ai < 230) — зашифрованное сообщение.

    Третья строка содержит N целых чисел P1, P2, ..., PN (0 ≤ Pi < 230) — ключ шифрования, элементы которого переставлены произвольным образом.

    Выходные данные

    Выведите одну строку с N целыми числами — лексикографически минимально возможное сообщение O. Напомним, что все числа в нем должны быть неотрицательны.

    Примечание

    В первом примере решением является (10, 3, 28), потому что , и . Другие возможные перестановки ключа дают сообщения (25, 6, 10), (25, 3, 15), (10, 21, 10), (15, 21, 15) и (15, 6, 28), все из которых лексикографически больше, чем оптимальное решение.

    C. Речная загадка

    дп жадные алгоритмы Структуры данных *1700

    Аркадий решил пронаблюдать за рекой в течение n последовательных дней. Уровень воды в реке в каждый из этих дней равен некоторому вещественному значению.

    Аркадий каждый день ходит к реке и делает отметку текущего уровня воды на берегу. Если отметка существует до этого, новая отметка не создается. Вода не смывает отметки. Аркадий выписал, сколько отметок было строго над уровнем воды в каждый из дней, в i-й день это количество равнялось mi.

    Определим di как количество отметок строго под уровнем воды в i-й день. Определите минимально возможную сумму величин di по всем дням. Изначально (перед первым днем) на берегу нет отметок.

    Входные данные

    На первой строке находится одно целое число n (1 ≤ n ≤ 105) — количество дней.

    Вторая строка содержит n целых чисел m1, m2, ..., mn (0 ≤ mi < i) — количество отметок строго над уровнем воды в каждый из дней.

    Выходные данные

    Выведите одно целое число — минимально возможную сумму количества отметок строго под уровнем воды по всем дням.

    Примечание

    Рисунок ниже показывает оптимальный случай в первом примере.

    Обратите внимание: в день 3 должна быть создана новая отметка, иначе в день 4 не будет 3 отметки над уровнем воды. Суммарное количество отметок под водой в этом случае равно 0 + 0 + 2 + 0 + 3 + 1 = 6.

    Рисунок ниже показывает оптимальный случай во втором примере.

    E. Майские праздники

    Деревья Структуры данных *2900

    Во Флатландии наступил месяц май, который длится \(m\) дней. Несмотря на то, что майские праздники давным-давно отменили для повышения производительности трудящихся, работники одной софтверной компании по старой памяти продолжают брать короткие и длинные отпуска в мае, чтобы съездить в путешествие или отметить начало дачно-огородного сезона за городом.

    Разумеется, это не может не тревожить руководителей компании. В компании \(n\) сотрудников, объединённых в древовидную структуру подчинения — каждому сотруднику назначен номер \(i\) от \(1\) до \(n\), а также у каждого сотрудника \(i\) (за исключением самого главного начальника, имеющего номер 1) есть ровно один непосредственный руководитель, номер которого есть \(p_i\). В структуре подчинения нет циклов, то есть, если мы начнём переходить от любого сотрудника к его начальнику, затем к его начальнику и так далее, то мы рано или поздно дойдём до самого главного начальника. Будем считать, что сотрудник \(u\) является подчинённым сотрудника \(v\), если \(v\) — непосредственный руководитель \(u\), либо если непосредственный руководитель \(u\) является подчинённым сотрудника \(v\). Обозначим за \(s_i\) количество подчинённых сотрудника \(i\) (например, \(s_1 = n - 1\) в соответствии с данным определением).

    У каждого сотрудника \(i\) есть предел терпения \(t_i\), выражающийся целым числом от \(0\) до \(s_i\), обозначающий максимальное количество одновременно пребывающих в отпуске подчинённых сотрудника \(i\), которое тот готов терпеть. Если в какой-то момент времени у сотрудника \(i\) в отпуске находится более, чем \(t_i\) подчинённых, и при этом сотрудник \(i\) не находится в отпуске сам, то он становится недовольным.

    В каждый из последующих \(m\) дней случается ровно одно событие одного из двух видов — либо некоторый сотрудник уходит в отпуск с текущего дня, либо возвращается из отпуска с текущего дня. Вам известна последовательность событий, происходящих в каждый из \(m\) майских дней. Ваша задача — определить, сколько сотрудников компании являются недовольными в каждый из \(m\) дней.

    Входные данные

    В первой строке входных данных находятся два целых числа \(n\) и \(m\) (\(2 \leq n, m \leq 10^5\)) — количество сотрудников в компании и количество дней в мае.

    Во второй строке находятся \(n - 1\) целых чисел \(p_2, p_3, \ldots, p_n\) (\(1 \leq p_i \leq n\)), задающих номер непосредственного руководителя для каждого из сотрудников.

    В третьей строке находятся \(n\) целых чисел \(t_1, t_2, \ldots, t_n\) (\(0 \leq t_i \leq s_i\)), задающих пределы терпения каждого из сотрудников.

    В четвёртой строке находятся \(m\) целых чисел \(q_1, q_2, \ldots, q_m\) (\(1 \leq |q_i| \leq n\), \(q_i \ne 0\)), задающих события. Если число \(q_i\) положительно, то это значит, что сотрудник \(q_i\) уходит в отпуск, а если \(q_i\) отрицательно, то это значит, что сотрудник \(-q_i\) вернулся из отпуска. К началу мая никакой из сотрудников не находится в отпуске. Гарантируется, что если сотрудник уходит в отпуск, то до этого он не находится в отпуске и наоборот.

    Выходные данные

    Выведите последовательность из \(m\) целых чисел \(a_1, a_2, \ldots, a_m\), где \(a_i\) — количество недовольных сотрудников компании в \(i\)-й день.

    Примечание

    В первом тесте из условия после ухода сотрудника 2 в отпуск в первый день недовольным становится самый главный начальник, который не готов терпеть отпуск ни одного из сотрудников компании кроме себя. В четвёртый день недовольным становится сотрудник 5, у которого в отпуск уходит последний его подчинённый, имеющий номер 7. В пятый день из отпуска возвращается сотрудник 2, но это не меняет число недовольных сотрудников, так как сотрудники 5 и 1 по-прежнему недовольны. В шестой день из отпуска возвращается сотрудник 3, в результате чего сотрудник 5 перестаёт быть недовольным, а в последний день самый главный начальник номер 1 сам уходит в отпуск, в результате чего недовольных людей не остаётся.

    E. Слияние равных элементов

    Конструктив Структуры данных *1900

    Задана последовательность целых положительных чисел a1, a2, ..., an.

    Пока возможно, с ней производят следующую операцию: ищут пару соседних одинаковых элементов. Если таких несколько, то выбирают самую левую такую пару (с наименьшими индексами элементов). Если эти числа были равны x, то оба этих числа удаляют и на их место вставляют одно число x + 1. Таким образом, количество элементов в последовательности после каждой операции уменьшается на 1.

    Процесс применения операций следует прервать, когда в последовательности нет соседних одинаковых элементов.

    Например, если последовательность изначально имела вид [5, 2, 1, 1, 2, 2], то после первой операции она будет иметь вид [5, 2, 2, 2, 2], после второй — [5, 3, 2, 2], после третьей — [5, 3, 3], а после четвертой — [5, 4]. После этого в последовательности не останется соседних одинаковых элементов, поэтому процесс применения операций остановится.

    Определите, как будет выглядеть последовательность после окончания процесса применения операций.

    Входные данные

    В первой строке следует целое число n (2 ≤ n ≤ 2·105) — количество элементов в последовательности.

    Во второй строке следует начальная последовательность целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109).

    Выходные данные

    В первой строке выведите целое число k — количество элементов в последовательности после окончания процесса применения операций.

    Во второй строке выведите k целых чисел — последовательность после окончания применения операций.

    Примечание

    Первый пример разобран в условии.

    Во втором примере последовательность имеет вид [1000000000, 1000000000, 1000000000, 1000000000]. После выполнения первой операции она станет равна [1000000001, 1000000000, 1000000000]. После выполнения второй операции последовательность примет вид [1000000001, 1000000001]. Затем произойдет третья операция, которая будет последней, а последовательность будет выглядеть как [1000000002].

    В третьем примере нет соседних одинаковых элементов, поэтому последовательность не изменится.

    J. Отрезки

    Структуры данных *2100

    Имеется прямая, покрашенная в белый цвет. На нее добавляют n черных отрезков один за другим.

    Определите количество компонент связности из черных отрезков (то есть количество черных отрезков в объединении) после каждого добавления отрезка.

    В частности, считайте, что если один отрезок заканчивается в точке x, а другой отрезок начинается в точке x, то эти два отрезка лежат в одной компоненте связности.

    Входные данные

    В первой строке следует целое число n (1 ≤ n ≤ 200 000) — количество отрезков.

    i-я из следующих n строк содержит два целых числа li и ri (1 ≤ li < ri ≤ 109) — координаты левого и правого концов отрезка номер i. Отрезки перечислены в порядке их добавления на белую прямую.

    Выходные данные

    Выведите n целых чисел — количество компонент связности из черных отрезков после каждого добавления отрезка.

    Примечание

    В первом примере после добавления двух первых отрезков будет две компоненты, так как добавленные отрезки не пересекаются. После этого добавится третий отрезок, который пересекается с первым и касается второго в точке 4 (по условию такие отрезки принадлежат одной компоненте). Поэтому после добавления третьего отрезка количество компонент связности из черных отрезков станет равно 1.

    C. Федя не врёт!

    дп Структуры данных *1900

    Мальчик Федя очень любит рисовать. Больше всего он любит рисовать отрезки с целочисленными координатами внутри своего любимого отрезка [1;m]. Однажды Федя нарисовал несколько отрезков внутри своего любимого отрезка и заметил одну интересную особенность: не существует точки, принадлежащей сразу всем отрезкам. Заметив это, Федя очень обрадовался и захотел похвастаться об этом своему другу Саше.

    Саша знает, что Федя любит прихвастнуть, поэтому с осторожностью относится к его заявлениям, никогда не доверяя на слово. Федя хочет доказать, что иногда ему всё же можно верить, поэтому он решил убедить Сашу в том, что на его рисунке действительно не существует точки, принадлежащей всем отрезкам. Но Федя – весьма ленивый человек, поэтому он не хочет сообщать Саше координаты концов каждого отрезка. Более того, ему лень говорить Саше, сколько отрезков он нарисовал.Вместо этого он предложил Саше задать несколько вопросов вида: «Скольким отрезкам принадлежит точка с целочисленной координатой xi?», пообещав дать на них честные ответы.

    Ребята очень ценят своё время, поэтому они просят вас посчитать, какое максимальное количество вопросов Саша может задать Феде, что располагая только этими Федиными ответами, Саша всё ещё не может быть полностью уверен в том, что Федя его не обманул. Учтите, что Саша не знает, сколько отрезков нарисовал Федя. Разумеется, Саша смышлёный малый и не будет спрашивать дважды про одну и ту же точку.

    Входные данные

    В первой строке входных данных находятся два целых числа n и m (1 ≤ n, m ≤ 100 000) — количество отрезков, которые есть на Федином рисунке и максимальная координата точки, которую можно выбрать в наборе.

    В i-й из следующих n строк записаны два целых числа li и ri (1 ≤ li ≤ ri ≤ m) — левая и правая границы i-го отрезка на рисунке. Обратите внимание, что левая и правая границы отрезка могут совпадать.

    Гарантируется, что не существует точки, принадлежащей сразу всем нарисованным отрезкам.

    Выходные данные

    В единственной строке выходного файла выведите число k — размер максимального множества пар (xi, cnt(xi)), где все xi – различны, 1 ≤ xi ≤ m, а cnt(xi) — количество отрезков, которым принадлежит точка с координатой xi, такого что, зная только это множество пар (и не зная число n), нельзя гарантированно утверждать, что в исходном рисунке не существует точки, принадлежащей всем отрезкам.

    Примечание

    В первом тесте из условия Саша никогда не сможет поверить Феде на слово, потому что зная, что даже зная cnt(xi) для каждой точки из отрезка [1;4], он не может быть уверенным, что Федя на самом не нарисовал один отрезок [1;4].

    Во втором тесте из условия Саша может назвать максимум 5 точек, например: 1, 2, 3, 5, 6. Но уже зная информацию о том, сколько отрезков накрывают каждую из целочисленных точек на отрезке [1;6], Саша может быть уверен в том, что в изначальном рисунке не было точки, принадлежащей всем отрезкам.

    D. Игра с фишками

    игры реализация Структуры данных *2500

    Рассмотрим следующую игру для двух игроков. Есть одна белая фишка и ненулевое количество черных фишек. Каждая фишка расположена на координатной плоскости в точке с целыми координатами x и y.

    Игроки по очереди, начиная с белых, передвигают все фишки своего цвета на 1 вверх, вниз, влево или вправо. Черные могут выбирать направление для каждой фишки независимо.

    После хода белых белая фишка не может находиться в одной точке с черной фишкой. Других ограничений на расположение фишек нет: нескольким черным фишкам разрешено располагаться в одной точке, после хода черных и изначально белая фишка может находится в одной точке с черной. Если в какой-то момент у белых нет хода, то выиграли черные. Если белые сделали хотя бы 10100500 ходов, то они выиграли.

    Вам нужно решить следующую задачу. Даны начальные положения всех черных фишек. Гарантируется, что в начале игры все эти положения различны. В скольких местах может находиться белая фишка, чтобы при оптимальной игре выигрывали черные?

    Входные данные

    Первая строка содержит одно целое число n (1 ≤ n ≤ 105) — количество черных фишек.

    В (i + 1)-й строке находятся два целых числа xi, yi ( - 105 ≤ xi, yi,  ≤ 105) — координаты точки, в которой стоит i-я черная фишка изначально.

    Гарантируется, что все начальные позиции черных фишек различны.

    Выходные данные

    Выведите количество точек, в которых может стоять белая фишка в начале игры, чтобы при оптимальной игре обоих игроков выигрывали черные.

    Примечание

    В первом и втором тесте черными кругами обозначены положения черных фишек, белыми кругами — возможные положения белых фишек, при которых выигрывают черные.

    Первый тест:

    Второй тест:

    В третьем тесте белые фишки должны располагаться во внутреннем квадрате 2 × 2, чтобы выиграли черные.

    E. Выставка монет

    дп математика Структуры данных *2900

    Аркадий и Кирилл пришли на выставку редких монет. Все монеты расположены в один ряд и пронумерованы слева направо от 1 до k, причем некоторые монеты лежат вверх аверсом (главной стороной), а некоторые — вверх реверсом (другой стороной).

    Аркадий и Кирилл сделали несколько фотографий монет каждый, причем на каждой фотографии изображены верхние стороны нескольких подряд идущих монет. Аркадий интересуется аверсами, поэтому на каждом снимке, который сделал он, есть хотя бы одна монета, лежащая аверсом вверх. Кирилл, наоборот, интересуется реверсами, поэтому на каждом его снимке есть хотя бы одна монета, лежащая вверх реверсом.

    Теперь снимки утеряны, и ребята лишь помнят границы отрезков монет, попавших на каждый из снимков. По данной информации о снимках вычислите остаток от деления на 109 + 7 количества способов выбрать для каждой монеты сторону, которой она будет лежать вверх, так, чтобы на каждом снимке Аркадия была бы хотя бы одна монета вверх аверсом, а на каждом снимке Кирилла была хотя бы одна монета вверх реверсом.

    Входные данные

    Первая строка содержит три целых числа k, n и m (1 ≤ k ≤ 109, 0 ≤ n, m ≤ 105) — общее число монет, количество снимков Аркадия и Кирилла, соответственно.

    Следующие n строк содержат описания снимков Аркадия, по одному в строке. Каждая из этих строк содержит два целых числа l и r (1 ≤ l ≤ r ≤ k), означающие, что среди монет с l-й по r-ю должна быть хотя бы одна вверх аверсом.

    Следующие m строк содержат описания снимков Кирилла, по одному в строке. Каждая из этих строк содержит два целых числа l и r (1 ≤ l ≤ r ≤ k), означающие, что среди монет с l-й по r-ю должна быть хотя бы одна вверх реверсом.

    Выходные данные

    Выведите одно целое число — количество способов выбрать для каждой монеты, какой стороной она будет лежать вверх, по модулю 109 + 7 = 1000000007.

    Примечание

    В первом примере возможны следующие расположения монет («А» — аверс, «Р» — реверс):

    • АРААР,
    • АРАРА,
    • АРАРР,
    • РРААР,
    • РРАРА,
    • РРАРР,
    • АРРАР,
    • АРРРА.

    Во втором примере данная информация противоречива: согласно снимкам, вторая монета должна лежать одновременно аверсом и реверсом вверх, что невозможно. Значит, ответ равен 0.

    B. Рекурсивные запросы

    Бинарный поиск поиск в глубину и подобное Структуры данных *1300

    Определим две функции f и g от натурального числа.

    Вам необходимо обработать Q запросов. В каждом запросе вам будет дано три целых числа l, r и k. Вам необходимо вывести количество чисел x, лежащих между l и r включительно таких, что g(x) = k.

    Входные данные

    В первой строке содержится целое число Q (1 ≤ Q ≤ 2 × 105) — количество запросов.

    В следующих Q строках содержатся описания запросов. В каждой из этих строк содержатся 3 целых числа l, r и k (1 ≤ l ≤ r ≤ 106, 1 ≤ k ≤ 9).

    Выходные данные

    Для каждого запроса выведите ответ на него в отдельной строке.

    Примечание

    В первом тестовом примере:

    • g(33) = 9 так как g(33) = g(3 × 3) = g(9) = 9
    • g(47) = g(48) = g(60) = g(61) = 6
    • Между 47 и 55 подходящих чисел нет.
    • g(4) = g(14) = g(22) = g(27) = g(39) = g(40) = g(41) = g(58) = 4

    F. Сбежать через лист

    геометрия дп Структуры данных *2700

    Дано дерево на n вершинах (пронумерованных от 1 до n) с корнем в вершине 1. В вершине i записаны два числа: ai и bi.

    Вы можете прыгнуть из вершины в любую вершину в её поддереве. Стоимость такого прыжка из вершины x в вершину y равна произведению ax и by. Суммарная стоимость пути между вершинами, состоящего из нескольких прыжков равна сумме стоимостей прыжков в нём. Для каждой вершины посчитайте минимальную стоимость пути от неё до какого-либо листа. Обратите внимание, что корень дерева не является листом, даже если имеет степень 1.

    Учтите, что нельзя совершать прыжок из вершины в ту же вершину.

    Входные данные

    В первой строке содержится целое число n (2 ≤ n ≤ 105) — количество вершин в дереве.

    Во второй строке через пробел заданы n целых чисел a1,  a2,  ...,  an( - 105  ≤  ai  ≤  105).

    Во третьей строке через пробел заданы n целых чисел b1,  b2,  ...,  bn( - 105  ≤  bi  ≤  105).

    В следующих n  -  1 строках содержатся пары целых чисел ui и vi (1 ≤ ui,  vi ≤  n), разделённых пробелом, обозначающие ребро между вершинами ui и vi в дереве.

    Выходные данные

    Выведите n целых чисел через пробел, i-е из которых обозначает минимальную стоимость, чтобы добраться от вершины с номером i до какого-либо листа.

    Примечание

    В первом тестовом примере вершина 3 сама является листом, поэтому ответ равен 0. Для вершины 2 прыжок в вершину 3 стоит a2 × b3 = 50. Для вершины 1 прыжок в вершину 3 стоит a1 × b3 = 10.

    Во втором тестовом примере вершины 3 и 4 являются листьями, поэтому ответ для них равен 0. Для вершины 2 прыжок в вершину 4 стоит a2 × b4 = 100. Для вершины 1 необходимо сначала прыгнуть в вершину 2 прыжком стоимостью a1 × b2 =  - 400, а затем прыгнуть из 2 в 4 за a2 × b4 = 100.

    F. Фафа и массив

    жадные алгоритмы Структуры данных *2600

    У Фафы есть массив A из n положительных чисел, определим функцию f(A) как . Он хочет обработать q запросов двух типов:

    • 1 lrx — найти максимальное возможное значение f(A), если к одному из элементов отрезка [l,  r] предварительно добавить x. Вы можете выбирать, к какому элементу добавить x.
    • 2 lrx — прибавить ко всем элементам на отрезке [l,  r] число x.

    Обратите внимание, что запросы типа 1 не изменяют массив.

    Входные данные

    Первая строка содержит целое число n (3 ≤ n ≤ 105) — длину массива.

    Вторая строка содержит n положительных целых чисел a1, a2, ..., an (0 < ai ≤ 109) — элементы массива.

    Третья содержит целое число q (1 ≤ q ≤ 105) — количество запросов.

    В следующих q строках описываются запросы, i-я из этих строк описывает i-й запрос и содержит четыре целых числа tilirixi .

    Гарантируется, что есть хотя бы один запрос типа 1.

    Выходные данные

    Для каждого запроса типа 1 выведите ответ на него.

    D. Покупка билетов

    графы кратчайшие пути Структуры данных *2000

    Участники популярной музыкальной группы «Flayer» объявили о своем прощальном мировом турне. Разумеется, посетят они и Берляндию.

    В Берляндии n городов. Между городами можно перемещаться, используя двусторонние железнодорожные маршруты; есть ровно m маршрутов, i-й используется для поездки из города vi в город ui (и из ui в vi) и стоит wi монет.

    «Flayer» посетят все города, в i-м городе цена билета на концерт составит ai монет.

    У вас есть друзья в каждом городе Берляндии, и все знают о ваших программистских способностях! Они просят вас посчитать, за какое минимальное количество монет им удастся посетить концерт. Для каждого города i необходимо посчитать минимальное количество монет, которое придется потратить жителю города i, чтобы доехать до какого-либо города j (или остаться в городе i), посетить там концерт, и вернуться в город i (если j ≠ i).

    Формально, для каждого требуется посчитать , где d(i, j) — минимальное количество монет, нужных для поездки из города i в город j. Если невозможно приехать в город j из города i, то d(i, j) считается бесконечно большим.

    Входные данные

    В первой строке записано два целых числа n и m (2 ≤ n ≤ 2·105, 1 ≤ m ≤ 2·105).

    Затем идет m строк, в i-й записаны три целых числа vi, ui и wi (1 ≤ vi, ui ≤ n, vi ≠ ui, 1 ≤ wi ≤ 1012), определяющие i-й железнодорожный маршрут. Между каждой парой городов существует не больше одного железнодорожного маршрута, то есть, для каждой пары (v, u) во входных данных нет ни (u, v), ни дополнительных вхождений (v, u).

    В следующей строке записаны n целых чисел a1, a2, ... ak (1 ≤ ai ≤ 1012) — цена билета на концерт в городе i.

    Выходные данные

    Выведите n целых чисел. i-е из них должно быть равно минимальному количеству монет, которое придется потратить жителю города i для того, чтобы доехать до какого-либо города j (или остаться в городе i), посетить там концерт, и вернуться в город i (если j ≠ i).

    G. Кратчайшие пути

    битмаски графы снм Структуры данных *2900

    Задан неориентированный граф со взвешенными ребрами. Длина пути между двумя вершинами — побитовое исключающее ИЛИ весов его ребер (если некоторое ребро посещается несколько раз, то в результат включается то же количество раз).

    Есть три вида запросов, которые необходимо обрабатывать:

    • 1 x y d — добавить ребро, соединяющее вершины x и y с весом d. Гарантируется, что до запроса не было ребра, соединяющего x и y;
    • 2 x y — удалить ребро, соединяющее вершины x и y. Гарантируется, что в графе есть такое ребро и что граф останется связным после запроса;
    • 3 x y — найти длину кратчайшего пути (не обязательно простого) от вершины x в вершину y.

    Выведите ответы на все запросы типа 3.

    Входные данные

    В первой строке записаны два целых числа n и m (1 ≤ n, m ≤ 200000) — количество вершин и количество ребер в графе соответственно.

    Затем следуют m строк, описывающие ребра графа. В каждой строке записаны три целых числа x, y и d (1 ≤ x < y ≤ n, 0 ≤ d ≤ 230 - 1). Каждая пара (x, y) встречается не более одного раза. Изначально граф связный.

    В следующей строке записано одно целое число q (1 ≤ q ≤ 200000) — количество запросов.

    Затем следуют q строк, описывающие запросы следующим образом:

    • 1 x y d (1 ≤ x < y ≤ n, 0 ≤ d ≤ 230 - 1) — добавить ребро, соединяющее вершины x и y с весом d. Гарантируется, что до запроса не было ребра, соединяющего x и y;
    • 2 x y (1 ≤ x < y ≤ n) — удалить ребро, соединяющее вершины x и y. Гарантируется, что в графе есть такое ребро и что граф останется связным после запроса;
    • 3 x y (1 ≤ x < y ≤ n) — найти длину кратчайшего пути (не обязательно простого) от вершины x в вершину y.

    Гарантируется, что существует хотя бы один запрос типа 3.

    Выходные данные

    Выведите ответы на все запросы типа 3 в том порядке, в котором они были заданы.

    F. Котлета

    дп Структуры данных *2400

    Аркадий хочет обедать. Он только что вернулся из магазина, где приобрел полуфабрикат — котлету, которую осталось только поджарить. Надпись на упаковке гласит, что котлету нужно жарить на сковороде на умеренном огне ровно 2n секунд, причем сначала нужно ровно n секунд жарить котлету на одной стороне, а затем ровно n секунд — на другой. Аркадий уже нашел сковороду и зажег умеренный огонь, но тут осознал, что, возможно, у него не получится перевернуть котлету ровно через n секунд после начала готовки.

    Аркадий слишком занят расстановкой по порядку наборов стикеров в своем любимом мессенджере, и может отвлечься на переворот котлеты только в определенные моменты времени. А именно, есть k промежутков времени, в которые он может это сделать, i-й из них — это отрезок времени с li секунд от начала готовки до ri секунд до начала готовки, включительно. Аркадий решил, что не обязательно переворачивать котлету ровно в середине готовки, вместо этого, он перевернет ее несколько раз таким образом, чтобы суммарно котлета провела n секунд на одной стороне и n секунд на другой.

    Помогите Аркадию, узнайте, может ли он выполнить свой план, если он может переворачивать котлету только в указанные отрезки времени, и если да, то какое минимальное число раз ему придется перевернуть котлету.

    Входные данные

    Первая строка содержит два целых числа n и k (1 ≤ n ≤ 100 000, 1 ≤ k ≤ 100) — число секунд, которое котлета должна жариться с каждой из сторон, и число промежутков времени, когда Аркадий может ее переворачивать.

    Следующие k строк содержат описания этих промежутков. Каждая строка содержит два целых числа li и ri (0 ≤ li ≤ ri ≤ 2·n), что означает, что Аркадий может перевернуть котлету в любой момент времени, начиная с li секунд от начала готовки и заканчивая ri секундами от начала готовки, включительно. В частности, если li = ri, то Аркадий может перевернуть котлету в момент времени li = ri. Гарантируется, что li > ri - 1 для всех 2 ≤ i ≤ k.

    Выходные данные

    Выведите в единственную строку «Hungry», если Аркадий не может пожарить котлету ровно n секунд на одной стороне и ровно n секунд на другой.

    В противном случае, выведите в первую строку «Full», а во вторую — минимальное количество раз, которое ему необходимо перевернуть котлету.

    Примечание

    В первом примере котлету нужно перевернуть в моменты времени 3 секунды после начала и 13 секунд после начала.

    Во втором примере котлету можно перевернуть, как и написано на упаковке, через 10 секунд после начала.

    E. Кэшбэк

    дп жадные алгоритмы математика Структуры данных *2000

    Вам, как лучшему Врейс-Кингу, в нижнем магазине «Мир» в центре Винницы предлагаются скидки.

    Дан массив a длины n и целое число c.

    Стоимость массива b длины k это сумма его элементов, за исключением минимальных. Например, стоимость массива [3, 1, 6, 5, 2] при c = 2 это 3 + 6 + 5 = 14.

    Среди всех разбиений a на последовательные подмассивы, найдите минимально возможную сумму стоимостей этих подмассивов.

    Входные данные

    В первой строке находится два числа n и c (1 ≤ n, c ≤ 100 000).

    Следующая строка содержит n чисел ai (1 ≤ ai ≤ 109) — элементы массива a.

    Выходные данные

    Выведите единственное число — минимально возможную сумму стоимостей подмассивов некого разбиения a.

    Примечание

    В первом примере любое разбиение на подмассивы даст сумму 6.

    Во втором тестовом примере одним из оптимальных разбиений является [1, 1], [10, 10, 10, 10, 10, 10, 9, 10, 10, 10] со стоимостями 2 и 90 соответственно.

    В третьем тестовом примере одним из оптимальных разбиений является [2, 3], [6, 4, 5, 7], [1] со стоимостями 3, 13 и 1 соответственно.

    В четвертом тестовом примере одним из оптимальных разбиений является [1], [3, 4, 5, 5, 3, 4], [1] со стоимостями 1, 21 и 1 соответственно.

    F. Машинное обучение

    Перебор Структуры данных *2600

    Вы чувствуете неприятный запах. Откуда же он?

    Дан массив a. Вам нужно уметь отвечать на следующие запросы:

    1. Даны целые числа l и r. Пусть ci  — количество вхождений числа i в al: r, где al: r — это подмассив a с l-го элемента по r-й включительно. Найдите Mex множества {c0, c1, ..., c109}.
    2. Даны целые числа p и x. Присвойте ap значение x.

    Mex мультимножества чисел это минимальное неотрицательное целое число, не входящее в множество.

    Обратите внимание, что в данной задаче элементы a положительные, соответственно c0 = 0, поэтому 0 никогда не является ответом на запрос второго типа.

    Входные данные

    Первая строка содержит n и q (1 ≤ n, q ≤ 100 000) — размер массива и число запросов соответственно.

    Во второй строке записано ровно n чисел — a1, a2, ..., an (1 ≤ ai ≤ 109).

    Каждая из оставшихся q строк задаёт очередной запрос.

    Запрос первого типа задаётся тремя числами ti = 1, li, ri, где 1 ≤ li ≤ ri ≤ n — границы соответствующего подмассива.

    Запрос второго типа задаётся тремя числами ti = 2, pi, xi, где 1 ≤ pi ≤ n — позиция в которой нужно заменить число, а 1 ≤ xi ≤ 109 — его новое значение.

    Выходные данные

    Для каждого запроса первого типа выведите одно число — Mex множества {c0, c1, ..., c109}.

    Примечание

    Отрезок первого запрос состоит из ровно одного элемента — 1.

    Отрезок второго запроса состоит из четырёх 2, одной 3 и двух 1.

    Отрезок четвёртого запроса состоит из трёх 1, трёх 2 и одной 3.

    G. Почти возрастающий массив

    дп Структуры данных *2500

    Назовем массив почти возрастающим, если можно удалить не более одного элемента таким образом, что массив станет строго возрастающим (то есть, каждый следующий элемент будет строго больше предыдущего).

    Задан массив a, состоящий из n элементов. Разрешается заменить элемент на любой позиции на произвольное целое число (эту операцию можно производить произвольное число раз). Какое минимальное количество раз надо проделать данную операцию, чтобы сделать массив почти возрастающим?

    Входные данные

    В первой строке записано одно целое число n (2 ≤ n ≤ 200000) — количество элементов в a.

    Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — массив a.

    Выходные данные

    Выведите минимальное количество операций по замене элемента, которое необходимо произвести, чтобы сделать a почти возрастающим.

    G. Оборона крепости

    Бинарный поиск жадные алгоритмы Структуры данных *2000

    Сегодня вам предстоит руководить эльфами-лучниками при обороне крепости от нападения толпы злых орков. С трёх сторон крепость защищена непроходимыми горами, а с оставшейся стороны расположена стена, состоящая из n секций. На текущий момент на i-й секции находится ai лучников. Известно, что каждый лучник, находящийся на секции i может поражать орков, атакующих секции на расстоянии не более r от данной, то есть секции с номерами j, такие что |i - j| ≤ r. В частности, если r = 0, то лучник может стрелять только в орков, атакующих секцию i.

    Защищённостью секции i назовём суммарное количество лучников, которые могут стрелять в орков, атакующих данную секцию. Надёжностью плана обороны называется минимальная величина защищённости какой-либо из секций стены.

    До атаки осталось совсем мало времени, и вы не успеваете перерасставить стрелков, уже расположенных на стене. Тем не менее, у вас имеется резерв из k лучников, которых можно распределить по секциям прозвольным образом. Вас интересует, какое максимальное значение надёжности плана обороны можно получить.

    Входные данные

    В первой строке входных данных записаны три целых числа n, r и k (1 ≤ n ≤ 500 000, 0 ≤ r ≤ n, 0 ≤ k ≤ 1018) — количество секций, из которых состоит стена, максимальное расстояние до других секций, на которое может стрелять каждый лучник и количество лучников в резерве соответственно. Во второй строке записаны n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 109) — текущее количество лучников на каждой из секций.

    Выходные данные

    Выведите одно целое число — максимально возможное значение надёжности плана обороны, то есть максимально возможное минимальное значение защищённости секции стены при оптимальной расстановке имеющихся в резерве k лучников.

    B2. Maximum Control (medium)

    графы Деревья жадные алгоритмы поиск в глубину и подобное Структуры данных *2200

    The Resistance is trying to take control over as many planets of a particular solar system as possible. Princess Heidi is in charge of the fleet, and she must send ships to some planets in order to maximize the number of controlled planets.

    The Galaxy contains N planets, connected by bidirectional hyperspace tunnels in such a way that there is a unique path between every pair of the planets.

    A planet is controlled by the Resistance if there is a Resistance ship in its orbit, or if the planet lies on the shortest path between some two planets that have Resistance ships in their orbits.

    Heidi has not yet made up her mind as to how many ships to use. Therefore, she is asking you to compute, for every K = 1, 2, 3, ..., N, the maximum number of planets that can be controlled with a fleet consisting of K ships.

    Input

    The first line of the input contains an integer N (1 ≤ N ≤ 105) – the number of planets in the galaxy.

    The next N - 1 lines describe the hyperspace tunnels between the planets. Each of the N - 1 lines contains two space-separated integers u and v (1 ≤ u, v ≤ N) indicating that there is a bidirectional hyperspace tunnel between the planets u and v. It is guaranteed that every two planets are connected by a path of tunnels, and that each tunnel connects a different pair of planets.

    Output

    On a single line, print N space-separated integers. The K-th number should correspond to the maximum number of planets that can be controlled by the Resistance using a fleet of K ships.

    Note

    Consider the first example. If K = 1, then Heidi can only send one ship to some planet and control it. However, for K ≥ 2, sending ships to planets 1 and 3 will allow the Resistance to control all planets.

    C3. Encryption (hard)

    дп Структуры данных *2500

    Heidi is now just one code away from breaking the encryption of the Death Star plans. The screen that should be presenting her with the description of the next code looks almost like the previous one, though who would have thought that the evil Empire engineers would fill this small screen with several million digits! It is just ridiculous to think that anyone would read them all...

    Heidi is once again given a sequence A and two integers k and p. She needs to find out what the encryption key S is.

    Let X be a sequence of integers, and p a positive integer. We define the score of X to be the sum of the elements of X modulo p.

    Heidi is given a sequence A that consists of N integers, and also given integers k and p. Her goal is to split A into k parts such that:

    • Each part contains at least 1 element of A, and each part consists of contiguous elements of A.
    • No two parts overlap.
    • The total sum S of the scores of those parts is minimized (not maximized!).

    Output the sum S, which is the encryption code.

    Input

    The first line of the input contains three space-separated integers N, k and p (k ≤ N ≤ 500 000, 2 ≤ k ≤ 100, 2 ≤ p ≤ 100) – the number of elements in A, the number of parts A should be split into, and the modulo for computing scores, respectively.

    The second line contains N space-separated integers that are the elements of A. Each integer is from the interval [1, 1 000 000].

    Output

    Output the number S as described in the problem statement.

    Note

    In the first example, if the input sequence is split as (3), (4, 7), (2), the total score would be . It is easy to see that this score is the smallest possible.

    In the second example, one possible way to obtain score 13 is to make the following split: (16, 3), (24), (13), (9, 8), (7, 5, 12, 12).

    B. Минимизация ошибки

    жадные алгоритмы сортировки Структуры данных *1500

    Вам заданы два массива A и B, размер каждого из которых равен n. Величина ошибки E между этими массивами определятся как . Вы должны выполнить ровно k1 операций с массивом A и ровно k2 операций с массивом B. За одну операцию вы можете выбрать один элемент массива и увеличить или уменьшить его значение на 1.

    Выведите минимально возможную величину ошибки после выполнения k1 операций с массивом A и k2 операций с массивом B.

    Входные данные

    В первой строке находятся три целых числа n (1 ≤ n ≤ 103), k1 и k2 (0 ≤ k1 + k2 ≤ 103, k1 и k2 неотрицательны) — размер массивов и количество операций, которые нужно произвести с массивом A и с массивом B, соотвественно.

    Во второй строке заданы n целых чисел a1, a2, ..., an ( - 106 ≤ ai ≤ 106) — массив A.

    В третьей строке заданы n целых чисел b1, b2, ..., bn ( - 106 ≤ bi ≤ 106) — массив B.

    Выходные данные

    Выведите единственное число — минимально возможное значение после выполнения ровно k1 операций с массивом A и ровно k2 операций с массивом B.

    Примечание

    В первом тестовом примере, мы не можем применить никаких операций к A или к B. Следовательно, E = (1 - 2)2 + (2 - 3)2 = 2.

    Во втором тестовом примере, нам необходимо применить ровно одну операцию к A. Чтобы минимизировать величину ошибки, мы увеличим первый элемент A на 1. Таким образом, A = [2, 2]. Получившаяся величина ошибки E = (2 - 2)2 + (2 - 2)2 = 0. Это минимальная величина ошибки, которую можно получить.

    В третьeм тестовом примере, мы можем увеличить первый элемент A до 8, используя все 5 доступных операций. Также первый элемент B можно превратить в 8, используя 6 из 7 доступных операций. Таким образом получаем, A = [8, 4] и B = [8, 4]. Получившаяся величина ошибки равна E = (8 - 8)2 + (4 - 4)2 = 0. Однако, мы должны сделать еще 1 действие над массивом B. Увеличим второй элемент B до 5, получим B = [8, 5] и E = (8 - 8)2 + (4 - 5)2 = 1.

    F. Прогулка

    графы дп Структуры данных *2100

    Вам дан ориентированный граф с n вершинами и m рёбер, каждое из которых имеет определённый вес.

    В нём могут быть кратные рёбра и петли, кроме того, граф может быть несвязным.

    Вам нужно выбрать путь (возможно, проходящий по одному и тому же ребру или вершине несколько раз) такой, что веса рёбер в пути находятся в строго возрастающем порядке, а кроме того, все ребра пути идут в том же порядке, в котором они находились во входных данных. Найдите максимально возможное количество ребер в таком пути.

    Обратите внимание, ребра пути не обязательно должны идти последовательно во входных данных.

    Входные данные

    В первой строке содержатся два целых числа n и m (1 ≤ n ≤ 100000,1 ≤ m ≤ 100000) — число вершин и рёбер в графе соответственно.

    После этого следует m строк, в i-й из которых содержится три целых числа, разделённых пробелами — ai, bi и wi (1 ≤ ai, bi ≤ n, 0 ≤ wi ≤ 100000), обозначающих, что есть ребро от вершины ai до вершины bi с весом wi.

    Выходные данные

    Выведите одно целое число в одной строке — максимальное количество рёбер в пути.

    Примечание

    Ответ на первый пример — 2: .

    Заметим, что нельзя выбрать путь , потому что ребро появляется в вводе раньше, чем два других ребра, и поэтому его нельзя выбрать после того, как было выбрано какое-то из двух других рёбер.

    Во втором примере оптимально выбрать 1-е, 3-е и 5-е ребра, чтобы получить оптимальный ответ: .

    H. Подарок Санты

    Деревья Структуры данных *3100

    У Санты есть бесконечное число конфет каждого из \(m\) вкусов. Вам дано корневое дерево с \(n\) вершинами. Корень дерева — вершина с номером \(1\). Каждая вершина содержит ровно одну конфету, \(i\)-я вершина содержит конфету вкуса \(f_i\).

    Иногда Санта боится, что конфеты вкуса \(k\) испортились. Он выбирает любую вершину \(x\) случайным образом и посылает поддерево вершины \(x\) кондитерам на замену. Во время замены все конфеты вкуса \(k\) в поддереве заменяются на новые конфеты того же вкуса, а конфеты не вкуса \(k\) остаются неизменными. После замены дерево возвращается в состояние, в котором оно было до замены.

    Настоящая цена замены одной конфеты вкуса \(k\) равна \(c_k\) (дана для каждого \(k\)). Однако, для простоты вычислений кондитеры берут за каждое посланное им поддерево одинаковую сумму \(C\) вне зависимости от того, какое поддерево выбрано, сколько конфет в поддереве и какого вкуса они.

    Предположим, что для заданного вкуса \(k\) вероятность выбора каждой вершины Сантой для посылки на замену одинакова для всех вершин. Вам нужно найти математическое ожидание ошибки в подсчёте стоимости замены конфет вкуса \(k\). Ошибка в подсчёте стоимости вычисляется так:

    \(\) Ошибка\ E(k) =\ (настоящая\ стоимость\ замены\ –\ цена,\ взятая\ кондитерами) ^ 2.\(\)

    Обратите внимание, что настоящая стоимость замены равна стоимости замены одной конфеты вкуса \(k\), умноженной на количество конфет этого вкуса в поддереве.

    Иногда Санта заменяет конфету в вершине \(x\) на конфету некоторого вкуса из его кармана.

    Ваша программа должна уметь обрабатывать два типа запросов:

    • Изменить вкус конфеты в вершине \(x\) на вкус \(w\).
    • Подсчитайте математическое ожидание ошибки подсчёта стоимости замены конфет для заданного вкуса \(k\).
    Входные данные

    Первая строка входных данных содержит четыре целых числа \(n\) (\(2 \leqslant n \leqslant 5 \cdot 10^4\)), \(m\), \(q\), \(C\) (\(1 \leqslant m, q \leqslant 5 \cdot 10^4\), \(0 \leqslant C \leqslant 10^6\)) — число вершин в графе, количество различных вкусов конфет, число запросов и цена, которую кондитеры берут за замену поддерева? соответственно.

    Вторая строка содержит \(n\) целых чисел \(f_1, f_2, \dots, f_n\) (\(1 \leqslant f_i \leqslant m\)), где \(f_i\) — изначальный вкус конфеты в \(i\)-й вершине.

    В третьей строке содержится \(n - 1\) целое число \(p_2, p_3, \dots, p_n\) (\(1 \leqslant p_i \leqslant n\)), где \(p_i\) — родитель \(i\)-й вершины.

    Следующая строка содержит \(m\) целых чисел \(c_1, c_2, \dots c_m\) (\(1 \leqslant c_i \leqslant 10^2\)), где \(c_i\) — стоимость замены одной конфеты со вкусом \(i\).

    Следующие \(q\) строк описывают запросы. Каждая строка начинается с целого числа \(t\) (\(1 \leqslant t \leqslant 2\)) — типа запроса.

    Если \(t = 1\), тогда эта строка описывает запрос первого типа. За ним следует два целых числа \(x\) и \(w\) (\(1 \leqslant  x \leqslant  n\), \(1 \leqslant  w \leqslant m\)) — Санта заменяет конфету в вершине \(x\) на конфету вкуса \(w\).

    Иначе, если \(t = 2\), строка описывает запрос второго типа и после него следует целое число \(k\) (\(1 \leqslant k \leqslant m\)) — выведите математическое ожидание ошибки в подсчёте стоимости замены конфет для данного вкуса \(k\).

    Вершины пронумерован с \(1\) до \(n\). Вершина \(1\) является корнем.

    Выходные данные

    Выведите ответ на каждый запрос второго типа в отдельной строке.

    Ваш ответ будет принят, если его относительная или абсолютная погрешность не превышает \(10^{-6}\).

    Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет засчитан, если и только если \(\frac{|a-b|}{max(1,b)}\leqslant 10^{-6}\).

    Примечание

    Для \(1\)-го запроса ошибка в подсчёте стоимости замены для вкуса \(1\) равна \(66^2\), \(66^2\) и \((-7)^2\), если выбран \(1\), \(2\) и \(3\) соответственно. Так как вероятность выбора каждой из вершин одинакова, математическое ожидание ошибки равно \(\frac{66^2+66^2+(-7)^2}{3}\).

    Аналогично, для \(2\)-го запроса ожидаемое значение ошибки равно \(\frac{41^2+(-7)^2+(-7)^2}{3}\).

    После \(3\)-го запроса, вкус конфеты на вершине \(2\) изменится с \(1\) на \(3\).

    Для \(4\)-го запроса ожидаемое значение ошибки равно \(\frac{(-7)^2+(-7)^2+(-7)^2}{3}\).

    Аналогично для \(5\)-го запроса ожидаемое значение ошибки равно \(\frac{89^2+41^2+(-7)^2}{3}\).

    B. Сон на лекции

    дп реализация Структуры данных *1200

    Вы со своим другом Мишкой сидите на лекции по математическому анализу. Лекция длится n минут. Лектор рассказывает ai теорем в течение i-й минуты.

    Хотя Мишке очень нравится математический анализ, иногда очень трудно не засыпать во время лекции. Вам задан массив t поведения Мишки. Если он спит в течение i-й минуты лекции, то ti равняется 0, иначе оно равняется 1. Когда Мишка не спит, он записывает все теоремы, которые слышит — ai теорем в течение i-й минуты. Иначе он не записывает ничего.

    Вы знаете некоторую секретную технику, при помощи которой можно заставить не спать Мишку в течение k минут подряд. Но вы можете использовать её только один раз. Вы можете начать использовать её в любую минуту с 1 по n - k + 1. Если вы используете её в минуту i, Мишка не будет спать во все такие минуты j, что , и будет записывать все лекции, которые расскажет лектор.

    Ваша задача состоит в том, чтобы посчитать, какое максимальное количество теорем Мишка сможет записать, если вы используете секретную технику, чтобы заставить его не спать, только один раз.

    Входные данные

    Первая строка входных данных содержит два целых числа n и k (1 ≤ k ≤ n ≤ 105) — длительность лекции в минутах и количество минут, на которое вы можете заставить Мишку не спать.

    Вторая строка входных данных содержит n целых чисел a1, a2, ... an (1 ≤ ai ≤ 104) — количество теорем, которые лектор рассказывает в течение i-й минуты.

    Третья строка входных данных содержит n целых чисел t1, t2, ... tn (0 ≤ ti ≤ 1) — тип поведения Мишки во время i-й минуты лекции.

    Выходные данные

    Выведите единственное целое число — максимальное количество теорем, которое Мишка сможет записать, если вы используете секретную технику, чтобы заставить его не спать, только один раз.

    Примечание

    В примере лучше всего использовать секретную технику в начале третьей минуты. Тогда количество теорем, которое Мишка сможет записать, будет равно 16.

    E. Туфурама

    Структуры данных *1900

    Однажды Поликарп решил пересмотреть свою любимую серию известного сериала «Туфурама». Но к своему удивлению, в ответ на запрос «Туфурама 3 сезон 7 серия смотреть онлайн в хорошем качестве без регистрации и смс» он получил лишь предложения посмотреть 3 серию 7 сезона. Это очень сильно смутило Поликарпа — ведь если ему захочется пересмотреть весь сериал, поисковик будет очень часто выдавать не те серии и сезоны, которые он хочет посмотреть! Поликарп решил заранее посчитать, сколько же раз ему придётся искать требуемую серию каким-то другим способом.

    Всего в сериале n сезонов (пронумерованных от 1 до n), в i-м сезоне ai серий (пронумерованных от 1 до ai). Поликарп считает, что если для некоторой пары чисел x и y (x < y) существует и серия x сезона y, и серия y сезона x, то для одного из этих запросов поисковик будет выдавать совсем не то, что он искал. Поэтому Поликарп хочет подсчитать количество таких пар. Помогите ему!

    Входные данные

    Первая строка содержит одно целое число n (1  ≤ n  ≤  2·105) — количество сезонов.

    Вторая строка содержит n целых чисел через пробел a1, a2, ..., an (1 ≤ ai ≤ 109) — количества серий в сезонах.

    Выходные данные

    Выведите одно целое число — количество таких пар чисел x и y (x < y), что существует и серия x сезона y, и серия y сезона x.

    Примечание

    Возможные пары во втором примере:

    1. x = 1, y = 2 (серия 1 сезона 2 серия 2 сезона 1);
    2. x = 2, y = 3 (серия 2 сезона 3 серия 3 сезона 2);
    3. x = 1, y = 3 (серия 1 сезона 3 серия 3 сезона 1).

    В третьем примере:

    1. x = 1, y = 2 (серия 1 сезона 2 серия 2 сезона 1);
    2. x = 1, y = 3 (серия 1 сезона 3 серия 3 сезона 1).

    D. Сляние равных

    реализация Структуры данных *1600

    Задан массив положительных целых чисел. Пока в нем есть хотя бы два одинаковых элемента, будем выполнять следующую операцию. Выберем \(x\) — наименьшее значение, которое встречается в нем \(2\) или более раз. Возьмём два первых вхождения \(x\) в этот массив (два самых левых). Удалим левое из этих двух вхождений, а правое заменим на сумму двух значений (то есть на \(2 \cdot x\)).

    Определите, как будет выглядеть массив после выполнения описанных операций.

    Например, массив изначально был равен \([3, 4, 1, 2, 2, 1, 1]\). Он будет изменяться следующим образом: \([3, 4, 1, 2, 2, 1, 1]~\rightarrow~[3, 4, 2, 2, 2, 1]~\rightarrow~[3, 4, 4, 2, 1]~\rightarrow~[3, 8, 2, 1]\).

    Если же массив изначально был равен \([1, 1, 3, 1, 1]\), то он будет изменяться следующим образом: \([1, 1, 3, 1, 1]~\rightarrow~[2, 3, 1, 1]~\rightarrow~[2, 3, 2]~\rightarrow~[3, 4]\).

    Входные данные

    В первой строке следует целое число \(n\) (\(2 \le n \le 150\,000\)) — количество элементов в массиве.

    Во второй строке следует последовательность из \(n\) элементов \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^{9}\)) — описание массива.

    Выходные данные

    В первую строку выведите целое число \(k\) — количество элементов в массиве после выполнения операций. Во вторую строку выведите \(k\) целых чисел — описание массива после выполнения операций.

    Примечание

    Первые два примера разобраны в условии.

    В третьем примере все числа в массиве различные, поэтому он не изменится.

    G. Видимые черные области

    геометрия Деревья снм Структуры данных *2800

    У Пети есть многоугольник, состоящий из \(n\) вершин.

    Все стороны многоугольника Пети параллельны осям координат, а каждые две смежные стороны многоугольника Пети — перпендикулярны. Гарантируется, что многоугольник простой, то есть не имеет самопересечений и самокасаний. Вся внутренняя часть (границы не учитываются) многоугольника была покрашена Петей в черный цвет.

    Также у Пети есть прямоугольное окно, заданное своими координатами, через которое он смотрит на свой многоугольник. Прямоугольное окно задается своими координатами и не может быть перемещено. Стороны прямоугольного окна параллельны осям координат.

    Синим цветом изображена граница многоугольника, красным — окно. Ответ в этом случае равен 2.

    Определите количество черных связных областей многоугольника Пети, которые можно увидеть через прямоугольное окно.

    Входные данные

    В первой строке следуют четыре целых числа \(x_1, y_1, x_2, y_2\) (\(x_1 < x_2\), \(y_2 < y_1\)) — координаты левого верхнего и правого нижнего углов прямоугольного окна.

    Во второй строке следует целое число \(n\) (\(4 \le n \le 15\,000\)) — количество вершин в многоугольнике Пети.

    В каждой из следующих \(n\) строк следуют по два целых числа — координаты вершин многоугольника Пети в порядке обхода против часовой стрелки. Гарантируется, что заданный многоугольник удовлетворяет условию.

    Значения всех координат прямоугольного окна и всех координат многоугольника неотрицательны и не превосходят \(15\,000\).

    Выходные данные

    Выведите количество черных связных областей многоугольника Пети, которые можно увидеть через прямоугольное окно.

    Примечание

    Пример из условия соответствует картинке выше.

    E. Короткий код

    Деревья дп жадные алгоритмы Строки Структуры данных *2200

    Код Аркадия содержит \(n\) переменных. Каждая переменная имеет уникальное имя, состоящее только из английских строчных (маленьких) букв. Однажды Аркадий решил укоротить свой код.

    Он хочет заменить имя каждой переменной его непустым префиксом таким образом, что новые имена останутся попарно различными (но новое имя какой-либо переменной может совпадать со старым именем этой или другой переменной). Среди всех таких возможных замен он хочет найти такую, для которой суммарная длина названий переменных будет минимальной.

    Строка \(a\) является префиксом строки \(b\), если вы можете удалить несколько (возможно, ни одного) символа с конца строки \(b\) и получить \(a\).

    Найдите минимальную возможную суммарную длину новых имён.

    Входные данные

    В первой строке содержится одно целое число \(n\) (\(1 \le n \le 10^5\)) — число переменных в коде Аркадия.

    Следующие \(n\) строк содержат названия переменных по одному на строку. Каждое название не является пустой строкой и содержит только лишь строчные (маленькие) английские буквы. Суммарная длина всех этих строк не больше \(10^5\). Все названия переменных различны.

    Выходные данные

    Выведите одно целое число — минимально возможную суммарную длину новых названий переменных.

    Примечание

    В первом примере одним из наилучших вариантов будет сокращение имён в порядке их ввода до "cod", "co", "c".

    Во втором примере можно укоротить последнее имя до "aac" и первое имя до "a" без изменения других имён переменных.

    D. Куро, НОД, побитовое исключающее ИЛИ, сумма и все-все-все

    Бинарный поиск битмаски Деревья дп жадные алгоритмы математика Перебор снм Строки Структуры данных теория чисел *2200

    Куро играет в обучающую игру про числа. Основные математические операции в этой игре — наибольший общий делитель, побитовое исключающее ИЛИ и сумма двух чисел. Куро так любит эту игру, что проходит уровень за уровнем изо дня в день.

    К сожалению, Куро уезжает в отпуск и будет неспособна продолжить череду решений. Поскольку Кэти — надёжный человек, Куро попросил её прийти к нему домой в этот день и поиграть за него.

    Изначально дан пустой массив \(a\). Игр состоит из \(q\) запросов двух разных типов. Запросы первого типа просят Кэти добавить число \(u_i\) в массив \(a\). Запросы второго типа просят Кэти найти такое число \(v\), принадлежащее массиву \(a\), что \(k_i \mid GCD(x_i, v)\), \(x_i + v \leq s_i\), и \(x_i \oplus v\) максимально, где \(\oplus\) обозначает операцию побитового исключающего ИЛИ, \(GCD(c, d)\) обозначает наибольший общий делитель целых чисел \(c\) и \(d\), а \(y \mid x\) означает, что \(x\) делится на \(y\), или же вывести -1, если таких чисел в массиве нет.

    Поскольку вы программист, Кэти просит вас написать программу, которая будет автоматически и точно выполнять внутриигровые запросы, чтобы выполнить поручения Куро. Давайте поможем ей!

    Входные данные

    В первой строке содержится одно целое число \(q\) (\(2 \leq q \leq 10^{5}\)) — число внутриигровых запросов.

    Далее следует \(q\) строк, каждая из которых начинается с целого числа \(t_i\) — типа запроса:

    • Если \(t_i = 1\), далее следует целое число \(u_i\) (\(1 \leq u_i \leq 10^{5}\)) — вам необходимо лобавить \(u_i\) в массив \(a\).
    • Если \(t_i = 2\), далее следует три целых числа \(x_i\), \(k_i\) и \(s_i\) (\(1 \leq x_i, k_i, s_i \leq 10^{5}\)). Это означает, что вам необходимо найти такое число \(v\), принадлежащее массиву \(a\), что \(k_i \mid GCD(x_i, v)\), \(x_i + v \leq s_i\), а \(x_i \oplus v\) максимально, где \(\oplus\) обозначает побитовое исключающее ИЛИ, или вывести -1, если таких чисел в массиве нет.

    Гарантируется, что первый запрос имеет тип \(1\) и что существует хотя бы один запрос типа \(2\).

    Выходные данные

    Для каждого запроса типа \(2\) выведите запрашиваемое число \(v\) или -1, если таких чисел не найдено, в отдельной строке.

    Примечание

    В первом примере необходимо выполнить пять запросов:

    • Первый запрос просит вас добавить \(1\) в \(a\). Теперь \(a\) — \(\left\{1\right\}\).
    • Второй запрос просит вас добавить \(2\) в \(a\). Теперь \(a\) — \(\left\{1, 2\right\}\).
    • Третий запрос просит вас найти ответ с \(x = 1\), \(k = 1\) и \(s = 3\). И \(1\), и \(2\) удовлетворяют условиям на \(v\), так как \(1 \mid GCD(1, v)\) и \(1 + v \leq 3\). Поскольку \(2 \oplus 1 = 3 > 1 \oplus 1 = 0\), ответом на этот запрос будет \(2\).
    • Четвёртый запрос просит вас найти ответ с \(x = 1\), \(k = 1\) и \(s = 2\). Только \(v = 1\) удовлетворяет условия \(1 \mid GCD(1, v)\) и \(1 + v \leq 2\), поэтому ответом на этот запрос будет \(1\).
    • Пятый запрос просит вас найти ответ с \(x = 1\), \(k = 1\) и \(s = 1\). В \(a\) нет удовлетворяющих условиям элементов, поэтому мы выводим -1 как ответ на этот запрос.

    E. Народные игры

    Деревья жадные алгоритмы Структуры данных *2200

    Государство Панел проводит ежегодное шоу «Народные игры», в котором каждый дистрикт будет представлять один участник. В государстве \(n\) дистриктов, пронумерованных от \(1\) до \(n\), причём от каждого дистрикта до любого другого есть ровно один путь. Число фанатов участника игр из дистрикта \(i\) равно \(2^i\).

    В этом году президент решил снизить затраты на проведение Народных игр. По этой причине он хочет убрать \(k\) участников из соревнования, но есть проблема — дистрикты, участники из которых будут убраны из соревнования, будут в бешенстве и не дадут никому пересекать их границы.

    Президент хочет, чтобы все оставшиеся в играх участники были из дистриктов, которые можно достичь друг из друга. Он также хочет, чтобы суммарное количество фанатов оставшихся участников было максимальным. Каких участников должен убрать президент?

    Входные данные

    Первая строка ввода содержит два целых числа \(n\) и \(k\) (\(1 \leq k < n \leq 10^6\)) — число дистриктов в Панеле и число участников, которое хочет убрать президент соответственное.

    В каждой из следующих \(n-1\) строк содержится два целых числа \(a\) и \(b\) (\(1 \leq a, b \leq n\), \(a \ne b\)), описывающих дорогу, соединяющую два разных дистрикта \(a\) и \(b\). Гарантируется, что существует ровно один путь между любыми двумя дистриктами.

    Выходные данные

    Выведите \(k\) целых чисел, разделённых пробелами — номера дистриктов, участники из которых должны быть убраны, в порядке возрастания номера дистрикта.

    Примечание

    В первом примере максимально достижимое число фанатов равно \(2^2 + 2^5 + 2^6 = 100\). Этого можно достичь, убрав участников из кварталов 1, 3 и 4.

    E. Прибавления на отрезках

    битмаски дп разделяй и властвуй Структуры данных *2200

    Гриша пришел на контест и увидел там следующую задачу.

    Дан массив длины \(n\), изначально состоящий из нулей. Элементы массива пронумерованы от \(1\) до \(n\). К массиву было применено \(q\) операций. \(i\)-я операция задается тремя целыми числами \(l_i\), \(r_i\) и \(x_i\) (\(1 \leq l_i \leq r_i \leq n\)), (\(1 \leq x_i \leq n\)) и означает, что к элементам с номерами \(l_i, l_i + 1, \ldots, r_i\) прибавили число \(x_i\). Требуется найти максимум в массиве после применения всех этих операций.

    Но Гриша не из глупых! Он решил эту задачу очень быстро.

    Однако что-то в нем переклинило, и он задумался: «интересно, а какие значения может принять максимум в массиве после применения некоторого подмножества данных операций?».

    Помогите Грише, найдите все такие целые числа \(y\) от \(1\) до \(n\), что после применения некоторого (возможно, пустого) подмножества данных операций максимум в массиве равен \(y\).

    Входные данные

    В первой строке находятся два целых числа \(n\) и \(q\) (\(1 \leq n, q \leq 10^{4}\)) — длина массива и количество запросов в исходной задаче.

    В следующих \(q\) строках описаны запросы, по одному в строке. \(i\)-я из этих строк содержит три целых числа \(l_i\), \(r_i\) и \(x_i\) (\(1 \leq l_i \leq r_i \leq n\), \(1 \leq x_i \leq n\)), что обозначает запрос на добавление числа \(x_i\) на отрезке с \(l_i\)-го по \(r_i\)-й элемент включительно.

    Выходные данные

    В первую строку выведите единственное число \(k\), обозначающее количество возможных целых чисел от \(1\) до \(n\), которым может быть равен максимум в массиве после применения некоторого (возможно, пустого) подмножества данных операций.

    В следующей строке выведите через пробел все \(k\) чисел от \(1\) до \(n\) — возможные значения максимума. Выводите эти числа в возрастающем порядке.

    Примечание

    Если в первом тестовом примере оставить только первый запрос, то максимум будет равен \(1\). Если оставить только второй запрос, то максимум будет равен \(2\). Если оставить первые два запроса, то максимум будет равен \(3\). Если оставить только третий запрос, то максимум будет равен \(4\). Но если оставить третий запрос и еще какой-то, максимум будет больше \(n\), поэтому его выводить не требуется.

    Во втором тестовом примере, оставив только первый запрос, можно получить \(1\). Оставив только второй, можно получить \(2\). А если оставить все запросы, максимум будет равен \(3\).

    В третьем тестовом примере можно получить максимумы так:

    • Можно получить максимум \(2\) оставив запросы: \((1)\).
    • Можно получить максимум \(3\) оставив запросы: \((2)\).
    • Можно получить максимум \(5\) оставив запросы: \((1, 2)\).
    • Можно получить максимум \(6\) оставив запросы: \((3)\).
    • Можно получить максимум \(8\) оставив запросы: \((1, 3)\).
    • Можно получить максимум \(9\) оставив запросы: \((2, 3)\).

    G. Магические мультимножества

    Структуры данных *2500

    В школе магии инновационного города Глинополис на уроках теоретической информатики проходят множество интересных объектов.

    Рассмотрим, например, магическое мультимножество. Если попробовать добавить в него число, которое уже присутствует во множестве, мультимножество раздваивается. Например, при добавлении в мультимножество \(\{1, 2, 3, 3\}\) элемента \(2\), мультимножество превратится в \(\{1, 1, 2, 2, 3, 3, 3, 3\}\).

    Если же добавляемый элемент отсутствует во множестве, то он просто добавляется в мультимножество. Например, при добавлении в мультимножество \(\{1, 2, 3, 3\}\) элемента \(4\), мультимножество превратится в \(\{1, 2, 3, 3, 4\}\).

    Рассмотрим также массив из \(n\) изначально пустых мультимножеств, пронумерованных от \(1\) до \(n\).

    Вам требуется ответить на \(q\) запросов вида «добавить ко всем мультимножествам с номерами \(l, l + 1, \ldots, r\) число \(x\)» или «вычислить сумму размеров мультимножеств с номерами \(l, l + 1, \ldots, r\)». Так как ответы на запрос второго типа могут быть большими, выведите каждый из них по модулю \(998244353\).

    Входные данные

    В первой строке расположены два целых числа \(n\) и \(q\) (\(1 \leq n, q \leq 2 \cdot 10^{5}\)) — число магических мультимножеств в массиве и количество запросов, соответственно.

    Следующие \(q\) строк описывают запросы по одному в строке. В каждой строке сначала записано целое число \(t\) (\(1 \leq t \leq 2\)) — тип запроса. В случае, если \(t\) равно \(1\), далее даны три целых числа \(l\), \(r\), \(x\) (\(1 \leq l \leq r \leq n\), \(1 \leq x \leq n\)), что обозначает, что вы должны добавить во всем мультимножества с номерами от \(l\) до \(r\) включительно число \(x\). Если же \(t\) равно \(2\), то далее даны два целых числа \(l\), \(r\) (\(1 \leq l \leq r \leq n\)), что означает, что вы должны вычислить сумму размеров мультимножеств с номерами от \(l\) до \(r\) включительно.

    Выходные данные

    Для каждого запроса второго типа выведите сумму размеров мультимножеств на отрезке.

    Так как ответы могут быть слишком большими, выводите их по модулю \(998244353\).

    Примечание

    В первом примере после первых двух запросов мультимножества равны \([\{1, 2\},\{1, 2\},\{\},\{\}]\), а после третьего \([\{1, 1, 2, 2\},\{1, 1, 2, 2\},\{1\},\{1\}]\).

    Во втором примере первое мультимножество проходит такой путь:

    \(\{\} \to \{3\} \to \{3, 3\} \to \{2, 3, 3\} \to \{1, 2, 3, 3\} \to \{1, 1, 2, 2, 3, 3, 3, 3\}\).

    H. K путей

    бпф дп Комбинаторика математика Структуры данных *3100

    Дано дерево из \(n\) вершин. Требуется выбрать \(k\) (не обязательно различных) простых путей так, чтобы все ребра дерева можно было разбить на три множества: ребра, которые не принадлежит ни одному из путей, ребра, которые принадлежат ровно одному из этих пути, и ребра, которые принадлежат всем путям, причем последнее множество должно содержать хотя бы одно ребро.

    Посчитайте количество способов так выбрать \(k\) путей по модулю \(998244353\).

    Пути пронумерованы, иными словами, два способа считаются различными, если существует такое \(i\) (\(1 \leq i \leq k\)) и ребро, которое присутствует в \(i\)-м пути в одном способе и отсутствует в другом.

    Входные данные

    В первой строке даны два целых числа \(n\) и \(k\) (\(1 \leq n, k \leq 10^{5}\)) — число вершин в дереве и необходимое число путей.

    В следующих \(n - 1\) строках содержится описание ребер дерева. В каждой строке находятся два целых числа \(a\) и \(b\) (\(1 \le a, b \le n\), \(a \ne b\)) — концы очередного ребра. Гарантируется, что заданные ребра образуют дерево.

    Выходные данные

    Выведите количество способов выбрать \(k\) пронумерованных не обязательно различных простых путей так, чтобы по каждому ребру дерева проходило либо ни одного пути, либо проходил один путь, либо \(k\), и пересечение всех путей было непустым.

    Так как ответ может быть большим, выведите его по модулю \(998244353\).

    Примечание

    В первом примере подходят следующие последовательности путей:

    • \(((1,2), (1,2))\),
    • \(((1,2), (1,3))\),
    • \(((1,3), (1,2))\),
    • \(((1,3), (1,3))\),
    • \(((1,3), (2,3))\),
    • \(((2,3), (1,3))\),
    • \(((2,3), (2,3))\).

    Во втором примере \(k=1\), поэтому подходят все \(n \cdot (n - 1) / 2 = 5 \cdot 4 / 2 = 10\) путей.

    В третьем примере ответ \(\geq 998244353\), поэтому он был взят по модулю \(998244353\), не забудьте про это!

    B. Автобус характеров

    жадные алгоритмы реализация Структуры данных *1300

    В автобусе характеров есть \(n\) рядов сидений, в каждом по \(2\) места. В \(i\)-м ряду ширина обоих сидений равна \(w_i\) сантиметров. Все числа \(w_i\) различны.

    Изначально автобус пустой. На каждой из \(2n\) остановок в автобус садится ровно один человек одного из двух характеров:

    • интроверт всегда выбирает ряд, где оба места свободны, при этом из таких рядов он выбирает ряд с самыми узкими сидениями, и занимает одно место;
    • экстраверт всегда выбирает ряд, где уже сидит один человек (интроверт), при этом из таких рядов он выбирает ряд с самыми широкими сидениями, и занимает оставшееся в выбранном ряду место.

    Вам дана ширина сидений в каждом ряду, а также порядок, в котором входили пассажиры. Определите, на какой ряд сядет каждый из пассажиров.

    Входные данные

    В первой строке следует целое число \(n\) (\(1 \le n \le 200\,000\)) — количество рядов сидений в автобусе.

    Во второй строке следует последовательность целых чисел \(w_1, w_2, \dots, w_n\) (\(1 \le w_i \le 10^{9}\)), где \(w_i\) равно ширине каждого из двух сидений в \(i\)-м ряду. Гарантируется, что все \(w_i\) различны.

    В третьей строке следует строка длины \(2n\), состоящая из символов «0» и «1» — описание порядка, в котором пассажиры заходят в автобус. Если \(j\)-й символ строки равен «0», то на \(j\)-й остановке в автобус зашел интроверт. Если \(j\)-й символ строки равен «1», то на \(j\)-й остановке в автобус зашел экстраверт. Гарантируется, что интровертов и экстравертов, которые зашли в автобус, поровну (то есть по \(n\)), и для каждого экстраверта всегда найдется подходящий ряд.

    Выходные данные

    Выведите \(2n\) целых чисел — номера рядов, в которые сели пассажиры. Номера рядов для пассажиров должны быть выведены в том же порядке, в котором пассажиры заданы во входных данных.

    Примечание

    В первом примере первый пассажир (интроверт) выберет ряд номер \(2\), так как в нем самые узкие сиденья. Второй пассажир (интроверт) выберет ряд номер \(1\), так как это единственный оставшийся пустой ряд. Третий пассажир (экстраверт) выберет ряд номер \(1\), так как в нем уже сидит один пассажир и этот ряд самый широкий. Четвертый пассажир (экстраверт) выберет ряд номер \(2\), так как это единственный ряд, в котором осталось свободное место.

    D. Акула

    Деревья Перебор снм Структуры данных *1900

    Уже давно ученые наблюдают занятное поведение акул. Акулы, как и многие другие живые существа, в поисках пищи чередуют перемещения на маленькие отрезки внутри одной локации с переходами на более длительные расстояния между локациями.

    Максу, начинающему биологу, досталась распечатка, содержащая перемещения акулы за каждый из \(n\) последовательных дней в течение года. Длины всех передвижений оказались различными. По этим данным Макс решил посчитать, какое же количество локаций посетила морская хищница. Он предположил, что существует такое число \(k\), что, если за один день акула переместилась на расстояние, строго меньшее \(k\), то она не поменяла локацию; если же акула переместилась на расстояние, большее или равное \(k\), то в этот день она перемещалась на новую локацию. При этом перемещение на новую локацию могло занять несколько дней, в каждый из которых акула переместилась на расстояние, не меньшее \(k\).

    Акула никогда не возвращается на старую локацию после того, как она ушла из нее. Таким образом, в последовательности из \(n\) дней можно выделить отрезки, в течение которых акула перемещалась на расстояния, меньшие \(k\): это соответствует одной локации. Аркадий хочет выбрать такое \(k\), чтобы длины всех таких отрезков были одинаковы.

    Найдите такое целое число \(k\), что количество локаций в перемещениях акулы максимально возможно. Если существует несколько таких \(k\), выведите минимальное.

    Входные данные

    В первой строке входных данных дано целое положительное число \(n\) (\(1 \leq n \leq 10^5\)) — количество дней.

    Во второй строке даны \(n\) различных положительных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — длины передвижений в каждый из дней.

    Выходные данные

    Выведите целое число \(k\) такое, что:

    1. на каждой локации акула провела равное количество дней;
    2. среди вариантов, удовлетворяющих первому условию, число локаций максимально возможное;
    3. среди вариантов, удовлетворяющих первому и второму условию, \(k\) минимально возможное.
    Примечание

    В первом тестовом примере перемещения по локации являются перемещения в \(1\)-й и \(2\)-й дни (первая локация), в \(4\)-й и \(5\)-й (вторая локация), в \(7\)-й и \(8\)-й (третья локация). Таким образом, всего локаций три.

    Во втором примере перемещений по локации является только перемещение во \(2\)-й день. Всего одна локация.

    D. Аркадий и прямоугольники

    Структуры данных *3300

    У Аркадия есть бесконечная плоскость, изначально покрашенная в цвет номер \(0\). Затем он по очереди рисует на плоскости \(n\) закрашенных прямоугольников со сторонами, параллельными декартовым осям координат. Цвет \(i\)-го прямоугольника равен \(i\) (прямоугольники пронумерованы от \(1\) до \(n\) в порядке покраски). Возможно, что новые прямоугольники закрашивают некоторые предыдущие целиком или частично.

    Посчитайте, сколько различных цветов будет на рисунке после того, как Аркадий нарисует все прямоугольники.

    Входные данные

    Первая строка содержит одно целое число \(n\) (\(1 \le n \le 100\,000\)) — количество прямоугольников.

    В \(i\)-й из следующих \(n\) строк содержится \(4\) целых числа \(x_1\) \(y_1\) \(x_2\) \(y_2\) (\(-10^9 \le x_1 < x_2 \le 10^9\), \(-10^9 \le y_1 < y_2 \le 10^9\)) — координаты углов \(i\)-го прямоугольника.

    Выходные данные

    В единственной строке выведите единственное число — количество видимых цветов, включая цвет \(0\).

    Примечание
    Так выглядит плоскость в первом примере.

    Так выглядит плоскость во втором примере.

    \(0\) = белый, \(1\) = циановый, \(2\) = синий, \(3\) = фиолетовый, \(4\) = жёлтый, \(5\) = красный.

    E. Страна NN

    Бинарный поиск Деревья Структуры данных *2800

    В стране NN \(n\) городов, пронумерованных от \(1\) до \(n\), и \(n - 1\) дорога. Существует путь по дорогам между любыми двумя городами.

    Между городами проложено \(m\) двухсторонних автобусных маршрутов. Автобусы ездят между двумя городами по кратчайшему пути, останавливаясь во всех промежуточных городах. На автобусе можно проехать от любой остановки маршрута до любой другой. Вы можете перемещаться между городами только на автобусах.

    Вас интересует \(q\) вопросов: возможно ли добраться из одного города в другой и какое минимальное число автобусов необходимо для этого использовать.

    Входные данные

    В первой строке ввода содержится целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество городов.

    Во второй содержится \(n - 1\) целое число — \(p_2, p_3, \ldots, p_n\) (\(1 \le p_i < i\)); \(p_i\) обозначает, что города \(p_i\) и \(i\) соединены дорогой.

    В третьей строке содержится целое число \(m\) (\(1 \le m \le 2 \cdot 10^5\)) — число автобусных маршрутов.

    В каждой из следующих \(m\) строк содержится \(2\) целых числа — \(a\) и \(b\), (\(1 \le a, b \le n\), \(a \neq b\)), обозначающие, что существует маршрут между городами \(a\) и \(b\). Между двумя городами может существовать более одного маршрута.

    В следующей строке содержится целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество вопросов, которые вас интересуют.

    В каждой из следующих \(q\) строк содержится \(2\) целых числа — \(v\) и \(u\), (\(1 \le v, u \le n\), \(v \neq u\)), обозначающие, что вас интересует, возможно ли добраться из города \(v\) в город \(u\) и какое минимальное число автобусов для этого нужно использовать.

    Выходные данные

    Выведите ответ на каждый вопрос в отдельной строке. Если не существует способа добраться из одного в другой, выведите \(-1\). Иначе выведите минимальное число автобусов.

    Примечание
    На рисунке показаны маршруты автобусов из первого примера.

    E. Коробки с карандашами

    Бинарный поиск дп жадные алгоритмы Структуры данных *2100

    На день рождения Мишка получил в подарок разноцветные карандаши! К сожалению, он живет в монохромном мире, где все одного и того же цвета, и имеет смысл исключительно насыщенность цвета. Эту упаковку можно представить в виде последовательности a1, a2, ..., an из n целых чисел — насышенность цвета каждого карандаша. Теперь Мишка хочет навести порядок в этой упаковке. Для этого он подготовил бесконечное количество пустых коробок. Он хочет их заполнить таким образом, чтобы:

    • Каждый карандаш лежал ровно в одной коробке;
    • В каждой непустой коробке лежало не меньше k карандашей;
    • Если карандаши i и j лежат в одной и той же коробке, то |ai - aj| ≤ d, где |x| означает модуль числа x. Обратите внимание, что обратное условие может не выполняться, могут быть такие карандаши i и j, что |ai - aj| ≤ d и они лежат в различных коробках.

    Помогите Мишке определить, можно ли распределить все карандаши по коробкам. Выведите "YES", если существует такое распределение. Иначе выведите "NO".

    Входные данные

    В первой строке записаны три целых числа n, k и d (1 ≤ k ≤ n ≤ 5·105, 0 ≤ d ≤ 109) — количество карандашей, минимальный размер любой непустой коробки и максимальная разница в насыщенности какой-либо пары карандашей, лежащих в одной коробке, соответственно.

    Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — насыщенности цветов каждого карандаша.

    Выходные данные

    Выведите "YES", если можно распределить все карандаши по коробкам так, чтобы все условия выполнялись. Иначе выведите "NO".

    Примечание

    В первом примере можно разделить все карандаши на 2 коробки по 3 карандаша любым образом. Также можно положить все карандаши в одну коробку, разница в насыщенности между любой парой карандашей в ней не будет превосходить 10.

    Во втором примере можно разделить карандаши насыщенностей [4, 5, 3, 4] на 2 коробки размера 2 и положить оставшиеся в еще одну коробку.

    E. Задача Принца

    Деревья математика Перебор Структуры данных теория чисел *2800

    Действующими лицами этой задачи будут герои какого-нибудь недавно вышедшего в прокат фильма. Кажется, в последнее время много мемов по «Мстители: Война бесконечности». Я не смотрел ни одной части, поэтому лишь смутно знаю героев. Впрочем, это не помешает мне использовать их в задаче. Пусть героями нашей задачи будут Танос и Доктор Стрендж. Итак, Танос и Доктор Стрендж занимаются своими супергеройскими и суперзлодейскими делами, как вдруг они наталкиваются на обычную задачу по спортивному программированию.

    Есть дерево размера \(n\).

    В каждой вершине \(v\) записано целое положительное число \(a_{v}\).

    Нужно ответить на \(q\) запросов.

    Запрос задаётся в виде \(u\) \(v\) \(x\).

    Нужно посчитать \(\prod_{w \in P} gcd(x, a_{w}) \mod (10^{9} + 7)\), где \(P\) — множество вершин, лежащих на пути из \(u\) в \(v\). Иными словами, вычислите произведение \(gcd(x, a_{w})\) для всех вершин \(w\) на пути от \(u\) до \(v\). Так как произведение может быть большим, выведите его по модулю \(10^9+7\). Здесь \(gcd(s, t)\) обозначает наибольший общий делитель \(s\) и \(t\).

    Обратите внимание, что сами числа в вершинах не изменяются.

    Думаю, вам интереснее было бы смотреть на супергеройские похождения Доктора Стренджа и Таноса, чем на то, как они решают задачку. Поэтому вам предлагается решить задачу вместо них.

    Входные данные

    В первой строке записано одно целое число \(n\) — размер дерева (\(1 \le n \le 10^{5}\)).

    В следующих \(n-1\) строках описываются рёбра дерева по одному в строке. \(i\)-е ребро описывается двумя целыми числами \(u_{i}\) и \(v_{i}\) (\(1 \le u_{i}, v_{i} \le n\)), которые означают, что ребро соединяет вершины \(u_{i}\) и \(v_{i}\). Гарантируется, что данные ребра задают дерево.

    В следующей строке записаны \(n\) целых положительных чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_{v} \le 10^{7}\)).

    В следующей строке записано одно целое положительное число \(q\) (\(1 \le q \le 10^{5}\)) — количество запросов.

    Наконец, в \(q\) строках описываются запросы, каждое описывается тремя целыми числами \(u_{i}\), \(v_{i}\) и \(x_{i}\) (\(1 \le u_{i}, v_{i} \le n\), \(1 \le x_{i} \le 10^{7}\)).

    Выходные данные

    Выведите \(q\) чисел в отдельных строках — ответы на запросы в том порядке, в котором они заданы во входных данных. Выведите каждый ответ по модулю \(10^9+7 = 1000000007\).

    E. Настя и шаманы-короли

    Бинарный поиск Структуры данных *2500

    Настя любит читать, и иногда целые дни проводит в библиотеке. Сегодня она нашла там летопись Байтландии, в которой написано, что когда-то в Байтландлии жили шаманы. Известно, что в каждый момент времени в Байтландии всегда был ровно один шаман, а всего за всю историю шаманов было n, и они были пронумерованы различными целыми числами от 1 до n так, что каждый следующий по номеру шаман был после предыдущего. Также у каждого шамана есть магическая сила, выражающаяся целым числом.

    В летописи приведен список сил n главных шаманов Байтландии. Также существуют шаманы-короли. Шаман называется шаманом-королем, если к нему передалась сила всех предков, то есть если его магическая сила в точности равна сумме магических сил предыдущих шаманов. Теперь Насте стало интересно, жил ли когда-нибудь в Байтландии шаман-король.

    К сожалению, многие записи стерлись, и однозначно их восстановить невозможно. Поэтому Настя делает следующее:

    • Изначально она восстанавливает силы всех шаманов каким-то образом.
    • Затем она q раз меняет восстановленную силу какого-то одного шамана (но не обязательно каждый раз одного и того же) и после каждого изменения хочет узнать, есть ли среди шаманов король. Если шаман-король есть, то Настя хочет знать номер любого из них.

    К сожалению, летопись очень большая, поэтому Настя попросила вас помочь.

    Входные данные

    В первой строке входного файла содержится два числа n и q (1 ≤ n, q ≤ 2·105).

    Вторая строка содержит n целых чисел a1, ..., an (0 ≤ ai ≤ 109), где ai — магическая сила i-го шамана.

    Далее следуют q строк, i-я из которых содержит два числа pi и xi (1 ≤ pi ≤ n, 0 ≤ xi ≤ 109), которые означают, что новая сила pi-го шамана по мнению Насти равна xi.

    Выходные данные

    Выведите q строк, i-я из которых содержит  - 1, если после i-го изменения шамана-короля не существует, а иначе содержит одно число j, где j — индекс шамана-короля после i-го изменения.

    Если после некоторого изменения есть несколько королей-шаманов, выведите индекс любого из них.

    Примечание

    В первом примере после изменения силы шаманов равны (2, 3). Тогда ответ  - 1, так как сумма сил шаманов перед первым шаманом равна 0, а перед вторым равна 2.

    Во втором примере после первого изменения силы шаманов равны (1, 2, 3). Тогда ответ равен 3, так как сила третьего шамана равна 3, и сумма сил первого и второго также 1 + 2 = 3. После второго изменения силы становятся равны (2, 2, 3), где ответ равен 2. После третьего изменения силы становятся (2, 4, 3), и шамана-короля нет, то есть ответ  - 1. После четвертого изменения силы становятся (2, 4, 6), и третий шаман становится королём, то есть ответ 3.

    C. Из бара домой

    геометрия жадные алгоритмы математика Перебор сортировки Структуры данных *2300

    Для вектора \(\vec{v} = (x, y)\), определим длину \(|v| = \sqrt{x^2 + y^2}\).

    Аллен немного перебрал в баре, который находится в начале координат. Существуют \(n\) векторов \(\vec{v_1}, \vec{v_2}, \cdots, \vec{v_n}\). Аллен сделает \(n\) шагов. Так как Аллен дезориентирован, на \(i\)-м шаге он либо сделает шаг на вектор \(\vec{v_i}\), либо на вектор \(-\vec{v_i}\). Другими словами, если его позиция сейчас равна \(p = (x, y)\), то он окажется либо в \(p + \vec{v_i}\), либо в \(p - \vec{v_i}\).

    Аллен не хочет уйти далеко от дома (он также находится в баре). Помогите ему найти последовательность шагов (последовательность знаков векторов) такую, чтобы его финальная позиция \(p\) удовлетворяла ограничению \(|p| \le 1.5 \cdot 10^6\).

    Входные данные

    Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество шагов.

    В каждой из следующих строк содержится два целых числа \(x_i\) и \(y_i\), описывающих вектор \(\vec{v_i} = (x_i, y_i)\). Гарантируется, что \(|v_i| \le 10^6\) выполняется для всех \(i\).

    Выходные данные

    Выведите единственною строку, содержащую \(n\) целых чисел \(c_1, c_2, \cdots, c_n\), каждое из которых равно либо \(1\), либо \(-1\). Ваше решение будет зачтено, если финальная позиция \(p = \sum_{i = 1}^n c_i \vec{v_i}\) удовлетворяет \(|p| \le 1.5 \cdot 10^6\).

    Можно показать, что решение всегда существует при данных ограничениях.

    E. Хорошие подотрезки

    Структуры данных *3000

    Перестановкой \(p\) длины \(n\) назовем последовательность \(p_1, p_2, \ldots, p_n\), состоящую из \(n\) различных целых чисел, каждое из которых от \(1\) до \(n\) (\(1 \leq p_i \leq n\)).

    Назовем подотрезок \([l,r]\) перестановки хорошим, если среди чисел \(p_l, p_{l+1}, \dots, p_r\) встречаются все числа от минимума на нем до максимума на этом подотрезке.

    Например, у перестановки \([1, 3, 2, 5, 4]\) хорошими подотрезками являются:

    • \([1, 1]\),
    • \([1, 3]\),
    • \([1, 5]\),
    • \([2, 2]\),
    • \([2, 3]\),
    • \([2, 5]\),
    • \([3, 3]\),
    • \([4, 4]\),
    • \([4, 5]\),
    • \([5, 5]\).

    Дана перестановка \(p_1, p_2, \ldots, p_n\).

    Требуется ответить на \(q\) запросов вида: найдите количество хороших подотрезков данного отрезка перестановки.

    Иными словами, для ответа на один запрос вам требуется для некоторого заданного отрезка \([l \dots r]\) посчитать количество таких хороших подотрезков \([x \dots y]\), что \(l \leq x \leq y \leq r\).

    Входные данные

    В первой строке записано единственное целое число \(n\) (\(1 \leq n \leq 120000\)) — количество элементов в перестановке.

    Во второй строке записаны \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\), разделенных пробелами (\(1 \leq p_i \leq n\)).

    В третьей строке записано целое число \(q\) (\(1 \leq q \leq 120000\)) — количество запросов.

    Следующие \(q\) строк описывают запросы, каждая из них содержит пару целых чисел \(l\), \(r\), разделенных пробелом (\(1 \leq l \leq r \leq n\)).

    Выходные данные

    Выведите \(q\) строк, \(i\)-я из них должна содержать количество хороших подотрезков отрезка, данного в \(i\)-м запросе.

    D. Уравняй остатки

    жадные алгоритмы реализация Структуры данных *1900

    Задан массив, состоящий из \(n\) целых чисел \(a_1, a_2, \dots, a_n\), и натуральное число \(m\). Гарантируется, что \(m\) делит \(n\) без остатка.

    За один ход можно выбрать произвольный индекс \(i\) от \(1\) до \(n\) и увеличить элемент \(a_i\) на \(1\).

    Пусть \(c_r\) (\(0 \le r \le m-1)\) — количество элементов, которые имеют остаток \(r\) при делении на \(m\). Иными словами, подсчитаем количество элементов массива \(a\) для каждого остатка.

    Ваша задача — изменить массив так, чтобы \(c_0 = c_1 = \dots = c_{m-1} = \frac{n}{m}\).

    Выведите минимальное количество ходов, которое необходимо чтобы удовлетворить требование выше.

    Входные данные

    В первой строке задано два целых числа \(n\) и \(m\) (\(1 \le n \le 2 \cdot 10^5, 1 \le m \le n\)). Гарантируется, что \(m\) делит \(n\) без остатка.

    Во второй строке задано \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^9\)) — элементы массива.

    Выходные данные

    В первую строку выведите одно целое число — минимальное количество ходов, необходимое, чтобы для каждого остатка от \(0\) до \(m - 1\) количество элементов с таким остатком было равно \(\frac{n}{m}\).

    Во вторую строку выведите любой удовлетворяющий условию массив, получаемый из заданного минимальным количеством ходов. Значения элементов полученного массива не должны превышать \(10^{18}\).