2017-2018 Всероссийская олимпиада школьников по информатике (ROI 2018), день 1
A. Добыча радия
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

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

Представим плато как прямоугольник, состоящий из $$$n \times m$$$ единичных квадратов, обозначим $$$j$$$-й квадрат в $$$i$$$-м ряду как $$$(i, j)$$$.

В результате сканирования плато для каждого единичного квадрата был определён уровень радиоактивности. Уровень радиоактивности квадрата $$$(i, j)$$$ задаётся целым положительным числом $$$a_{ij}$$$. Точность измерений настолько велика, что все числа $$$a_{ij}$$$ различны. Единичный квадрат $$$(i, j)$$$ считается подходящим для добычи радия, если значение $$$a_{ij}$$$ является максимальным в $$$i$$$-й строке, а также максимальным в $$$j$$$-м столбце.

В процессе наблюдений было проведено $$$q$$$ последовательных уточнений уровня радиоактивности. А именно, $$$k$$$-е уточнение изменяло значение $$$a_{r_kc_k}$$$ на некоторое строго большее значение. При этом после каждого уточнения все значения $$$a_{ij}$$$ оставались различными.

Требуется написать программу, которая по заданным исходным значениям $$$a_{ij}$$$ и списку уточнений после каждого уточнения информации определяет количество подходящих для добычи радия единичных квадратов.

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

Первая строка входных данных содержит три положительных целых числа: $$$n$$$, $$$m$$$ и $$$q$$$ ($$$1 \le n\times m \le 200\,000$$$, $$$1 \le q \le 200\,000$$$). Обратите внимание, что ограничение сверху дано на площадь плато, а не на количество столбцов и строк по отдельности.

Следующие $$$n$$$ строк содержат по $$$m$$$ положительных целых чисел, $$$j$$$-е число в $$$i$$$-й из этих строк задаёт начальное значение $$$a_{ij}$$$ ($$$1 \le a_{ij} \le 10^7$$$, все $$$a_{ij}$$$ различны).

Следующие $$$q$$$ строк описывают уточнения данных, $$$k$$$-я из них содержит три целых числа $$$r_k$$$, $$$c_k$$$ и $$$x_k$$$ и задаёт изменение информации об уровне радиоактивности единичного квадрата $$$(r_k, c_k)$$$, новое значение равно $$$x_k$$$ ($$$1 \le r_k \le n$$$, $$$1 \le c_k \le m$$$, $$$1 \le x_k \le 10^7$$$). Гарантируется, что $$$x_k$$$ строго больше предыдущего уровня радиоактивности в этом квадрате, и что все уровни радиоактивности различны после каждого изменения.

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

Выходные данные должны содержать $$$q$$$ строк, в $$$k$$$-й из этих строк требуется вывести одно число — количество подходящих для добычи радия единичных квадратов после $$$k$$$-го обновления информации.

Система оценки

$$$$$$ \begin{array}{|c|c|c|c|} \hline \text{Подзадача} & \text{Баллы} & \text{Ограничения} & \text{Необх. подзадачи} \\ \hline 1 & 25 & 1 \le n \cdot m \le 100, 1 \le q \le 100 & 0 \\ \hline 2 & 25 & 1 \le n \cdot m \le 5000, 1 \le q \le 5000 & 0, 1 \\ \hline 3 & 25 & 1 \le n, m \le 400, 1 \le q \le 200\,000 & 0, 1 \\ \hline 4 & 25 & 1 \le n \cdot m \le 200\,000, 1 \le q \le 200\,000 & 0, 1, 2, 3 \\ \hline \end{array}$$$$$$

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

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

B. Иннофон
ограничение по времени на тест
3 секунды
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Одна телекоммуникационная компания планирует в скором будущем выпустить на рынок сразу два инновационных смартфона. Эти смартфоны будут называться «иннофон» и «иннофон плюс». Устройства уже полностью готовы к производству, и последняя задача, которую необходимо решить руководству компании, — выбрать оптимальную цену для каждого из смартфонов.

Аналитики компании провели исследование, в результате которого построили следующую модель. Всего есть $$$n$$$ потенциальных покупателей инновационных смартфонов. Для принятия решения $$$i$$$-й покупатель использует следующий алгоритм, характеризующийся двумя числами $$$a_i$$$ и $$$b_i$$$ ($$$a_i \geq b_i$$$):

  • если цена на «иннофон плюс» не больше $$$a_i$$$, то он покупает «иннофон плюс»,
  • иначе, если цена на «иннофон» не больше $$$b_i$$$, то он покупает «иннофон»,
  • иначе он не покупает ничего.

Руководство компании хочет установить цены на «иннофон» и «иннофон плюс» таким образом, чтобы обе цены были целым числом, цена «иннофона» была не больше цены «иннофона плюс», и при этом суммарная стоимость проданных смартфонов была максимальна.

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

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

В первой строке содержится целое число $$$n$$$ ($$$1 \leq n \leq 150\,000$$$) — число потенциальных покупателей.

В следующих $$$n$$$ строках содержатся по два целых числа $$$a_i$$$, $$$b_i$$$ ($$$0 \leq b_i \leq a_i \leq 10^9$$$) — характеристики алгоритма выбора телефона покупателем с номером $$$i$$$.

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

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

Система оценки

$$$$$$ \begin{array}{|c|c|c|c|} \hline \text{Подзадача} & \text{Баллы} & \text{Ограничения} & \text{Необх. подзадачи} \\ \hline 1 & 9 & n \le 100; b_i \le a_i \le 100 & 0 \\ \hline 2 & 10 & n \le 300 & 0, 1 \\ \hline 3 & 16 & n \le 3000 & 0, 1, 2 \\ \hline 4 & 11 & n \le 10^5; b_i = 0 & \\ \hline 5 & 16 & n \le 10^5; a_i = b_i & \\ \hline 6 & 7 & n \le 50\,000 & 0 - 3 \\ \hline 7 & 7 & n \le 75\,000 & 0 - 3, 6 \\ \hline 8 & 8 & n \le 100\,000 & 0 - 7 \\ \hline 9 & 8 & n \le 125\,000 & 0 - 8 \\ \hline 10 & 8 & n \le 150\,000 & 0 - 9 \\ \hline \end{array}$$$$$$

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

Примеры
Входные данные
5
80 20
60 50
40 40
15 10
70 30
Выходные данные
220
Входные данные
1
50 0
Выходные данные
50
Примечание

В первом примере для достижения максимальной суммы следует назначить цены на «иннофон» и «иннофон плюс» равными 40 и 70 соответственно. Тогда первый и пятый покупатель купят «иннофон плюс», второй и третий покупатель купят «иннофон», четвертый покупатель не купит ничего. Суммарная стоимость проданных смартфонов будет $$$70+40+40+0+70=220$$$.

Во втором примере нужно сделать цену «иннофона плюс» равной 50. Цена на «иннофон» при этом не важна.

C. Квантовая телепортация
ограничение по времени на тест
4 секунды
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Ученые в IT-компании разработали квантовый суперкомпьютер. Опытный образец, разработанный учеными, содержит $$$n \times m$$$ квантовых процессоров, организованных в виде сетки из $$$n$$$ строк и $$$m$$$ столбцов. Обозначим процессор в $$$j$$$-й ячейке $$$i$$$-й строки как $$$(i, j)$$$.

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

Результат вычислений находится в памяти процессора $$$(1, 1)$$$, а устройство вывода подключено к процессору $$$(n, m)$$$. Для передачи информации от одного процессора к другому используется квантовая телепортация. Особенность квантовой телепортации заключается в том, что с увеличением расстояния возникает нестабильность, требующая дополнительной энергии. Поэтому чтобы обеспечить перенос информации от процессора $$$(x_i, y_i)$$$ к процессору $$$(x_j, y_j)$$$ требуется $$$2^{\max(|x_i - x_j|, |y_i - y_j|)}$$$ единиц энергии. Ученые хотят перенести информацию с процессора $$$(1, 1)$$$ на процессор $$$(n, m)$$$, затратив минимальное количество энергии. При этом можно использовать в качестве промежуточных другие уцелевшие процессоры. Использовать поврежденные процессоры нельзя.

Требуется написать программу, которая по описанию уцелевших процессоров определяет, каким образом необходимо передавать данные между процессорами, чтобы перенести информацию из процессора $$$(1, 1)$$$ в процессор $$$(n, m)$$$, потратив минимальное суммарное количество энергии.

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

В первой строке входных данных находятся три целых числа $$$n$$$, $$$m$$$ и $$$k$$$ — количество строк и столбцов в сетке и количество оставшихся невредимыми после отключения электричества процессоров ($$$2 \le n, m, k \le 10\,000$$$).

Далее следуют $$$k$$$ строк, в $$$i$$$-й из которых содержатся два целых числа $$$x_i$$$ и $$$y_i$$$ —номер строки и столбца $$$i$$$-го уцелевшего процессора ($$$1 \le x_i \le n$$$, $$$1 \le y_i \le m$$$).

Гарантируется, что $$$(x_1, y_1) = (1, 1)$$$, $$$(x_k, y_k) = (n, m)$$$. Все процессоры находятся в разных ячейках сетки.

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

Первая строка выходных данных должна содержать число $$$L$$$ — количество процессоров, которые будут использованы при передаче информации.

Вторая строка должна содержать $$$L$$$ чисел — номера уцелевших процессоров в том порядке, в котором они будут получать информацию. Первым должен быть выведен процессор номер $$$1$$$, а последним — процессор номер $$$k$$$.

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

Система оценки

$$$$$$ \begin{array}{|c|c|c|c|} \hline \text{Подзадача} & \text{Баллы} & \text{Ограничения} & \text{Необх. подзадачи} \\ \hline 1 & 21 & 2 \le n, m, k \le 20 & 0 \\ \hline 2 & 13 & 2 \le n, m, k \le 500 & 0, 1 \\ \hline 3 & 33 & 2 \le n, m, k \le 10\,000; x_i \neq x_j; y_i \neq y_j & \\ \hline 4 & 33 & 2 \le n, m, k \le 10\,000 & 0 - 4 \\ \hline \end{array}$$$$$$

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

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

D. Вирусы
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Одной из важнейших задач современной информатики является моделирование биологических процессов. Недавно биологи обнаружили $$$n$$$ вирусов, каждому из которых был присвоен уникальный кодовый номер от $$$1$$$ до $$$n$$$. Вирус обладает возможностью встраиваться в клетки других организмов. Изначально в распоряжении ученых находятся $$$n$$$ клеток, пронумерованных от $$$1$$$ до $$$n$$$, при этом клетка с номером $$$i$$$ заражена вирусом $$$i$$$. Каждая клетка может быть заражена только одним вирусом.

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

Зараженные вирусами клетки атакуют друг друга. Пусть клетка с номером $$$i$$$ сейчас заражена вирусом с номером $$$a$$$ и атакует клетку с номером $$$j$$$, которая заражена вирусом с номером $$$b$$$. Тогда, если клетка с номером $$$j$$$ является более восприимчивой к вирусу $$$a$$$, чем к вирусу $$$b$$$, то клетка с номером $$$j$$$ становится заражена вирусом $$$a$$$.

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

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

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

Например, пусть есть два вируса, при этом клетка номер 1 наиболее восприимчива к вирусу номер 1, а клетка с номером 2 — наиболее восприимчива к вирусу номер 2. Тогда эксперимент завершается сразу: любая атака не приводит к изменению того, каким вирусом заражена клетка. Таким образом оба вируса являются стабильными и жизнеспособными.

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

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

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

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

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

В первой строке входных данных содержится целое число $$$n$$$ — количество вирусов и, соответственно, клеток ($$$1 \le n \le 500$$$).

Далее в $$$n$$$ строках содержатся описания клеток. Для каждой клетки указано $$$n$$$ различных чисел от $$$1$$$ до $$$n$$$: номера вирусов в порядке убывания восприимчивости к ним этой клетки.

Последняя строка содержит число $$$p$$$, которая задаёт свойство вирусов, которое интересует ученых. Значение $$$p = 1$$$ означает, что ученые хотят определить все стабильные вирусы, а значение $$$p = 2$$$ означает, что ученые хотят определить все жизнеспособные вирусы.

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

Первая строка выходных данных должна содержать целое $$$k$$$ — количество вирусов, которые обладают интересующим ученых свойством ($$$0 \le k \le n$$$).

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

Система оценки

$$$$$$ \begin{array}{|c|c|c|c|} \hline \text{Подзадача} & \text{Баллы} & \text{Ограничения} & \text{Необх. подзадачи} \\ \hline 1 & 11 & 1 \le n \le 5; p = 1 & \\ \hline 2 & 21 & 1 \le n \le 500; p = 1 & 1 \\ \hline 3 & 22 & 1 \le n \le 5 & 0, 1 \\ \hline 4 & 31 & 1 \le n \le 50 & 0 - 3 \\ \hline 5 & 15 & 1 \le n \le 500 & 0 - 4 \\ \hline \end{array}$$$$$$

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

Примеры
Входные данные
2
1 2
2 1
1
Выходные данные
2
1 2 
Входные данные
2
1 2
2 1
2
Выходные данные
2
1 2 
Входные данные
2
2 1
1 2
1
Выходные данные
0

Входные данные
2
2 1
1 2
2
Выходные данные
2
1 2 
Входные данные
2
1 2
1 2
1
Выходные данные
1
1 
Входные данные
2
1 2
1 2
2
Выходные данные
1
1 
Входные данные
4
3 2 4 1
1 4 2 3
3 1 2 4
1 4 2 3
1
Выходные данные
1
3 
Входные данные
4
3 2 4 1
1 4 2 3
3 1 2 4
1 4 2 3
2
Выходные данные
3
1 3 4