Вы находитесь на странице: 1из 8

Летняя ШОП 2019, параллель A, день 1, Спарс + LCA

Университет Иннополис, 7 июля 2019

Задача A. Разреженные таблицы


Имя входного файла: стандартный ввод
Имя выходного файла: стандартный вывод
Ограничение по времени: 2 секунды
Ограничение по памяти: 256 мегабайт
Дан массив из n чисел. Требуется написать программу, которая будет отвечать на запросы сле-
дующего вида: найти минимум на отрезке между u и v включительно.
Формат входных данных
В первой строке входного файла даны три натуральных числа n, m (1 6 n 6 105 , 1 6 m 6 107 ) и
a1 (0 6 a1 < 16 714 589) — количество элементов в массиве, количество запросов и первый элемент
массива соответственно. Вторая строка содержит два натуральных числа u1 и v1 (1 6 u1 , v1 6 n) —
первый запрос.
Элементы a2 , a3 , . . . , an задаются следующей формулой:

ai+1 = (23 · ai + 21563) mod 16714589.

Например, при n = 10, a1 = 12345 получается следующий массив: a = (12345, 305498, 7048017,
11694653, 1565158, 2591019, 9471233, 570265, 13137658, 1325095).
Запросы генерируются следующим образом:

ui+1 = (17 · ui + 751 + ansi + 2i) mod n + 1,
vi+1 = (13 · vi + 593 + ansi + 5i) mod n + 1,

где ansi — ответ на запрос номер i.


Обратите внимание, что ui может быть больше, чем vi .
Формат выходных данных
В выходной файл выведите um , vm и ansm (последний запрос и ответ на него).
Примеры
стандартный ввод стандартный вывод
10 8 12345 5 3 1565158
3 9

Страница 1 из 8
Летняя ШОП 2019, параллель A, день 1, Спарс + LCA
Университет Иннополис, 7 июля 2019

Задача B. LCA
Имя входного файла: стандартный ввод
Имя выходного файла: стандартный вывод
Ограничение по времени: 5 секунд
Ограничение по памяти: 256 мегабайт
Дано подвешенное дерево с корнем в первой вершине. Вам нужно ответить на m запросов вида
“найти LCA двух вершин“.

LCA вершин u и v в подвешенном дереве — это наиболее удалённая от корня дерева верши-
на, лежащая на обоих путях от u и v до корня.
Формат входных данных
В первой строке задано целое число n — число вершин в дереве (1 6 n 6 2 · 105 ).
В следующих n − 1 строках записано одно целое число x. Число x на строке i означает, что x —
предок вершины i(x < i).
Затем дано число m.
Далее заданы m (0 6 m 6 5 · 105 ) запросов вида (u, v) — найти LCA двух вершин u и v
(1 6 u, v 6 n; u 6= v).
Формат выходных данных
Для каждого запроса выведите LCA двух вершин на отдельной строке.
Примеры
стандартный ввод стандартный вывод
5 1
1 1
1
2
3
2
2 3
4 5
5 2
1 2
1 1
2
2
3
4 5
4 2
3 5

Страница 2 из 8
Летняя ШОП 2019, параллель A, день 1, Спарс + LCA
Университет Иннополис, 7 июля 2019

Задача C. Самое дешевое ребро


Имя входного файла: стандартный ввод
Имя выходного файла: стандартный вывод
Ограничение по времени: 1 секунда
Ограничение по памяти: 256 мегабайт
Дано подвешенное дерево с корнем в первой вершине. Все ребра имеют веса (стоимости). Вам
нужно ответить на M запросов вида найти у двух вершин минимум среди стоимостей ребер пути
между ними.
Формат входных данных
В первой строке файла записано одно число — n. (количество вершин).
В следующих n − 1 строках записаны два числа — x и y. Число x на строке i означает, что x —
предок вершины i + 1, y означает стоимость ребра.
x 6 i, |y| 6 106 .
В следующей строке файла записано число m — количество запросов.
Далее m запросов вида (x, y) — найти минимум на пути из x в y (x 6= y).
Ограничения: 2 6 n 6 5 · 104 , 0 6 m 6 5 · 104 .
Формат выходных данных
m строк — ответы на запросы.
Пример
стандартный ввод стандартный вывод
5 2
1 2 2
1 3
2 5
3 2
2
2 3
4 5

Страница 3 из 8
Летняя ШОП 2019, параллель A, день 1, Спарс + LCA
Университет Иннополис, 7 июля 2019

Задача D. Другие разреженные таблицы


Имя входного файла: стандартный ввод
Имя выходного файла: стандартный вывод
Ограничение по времени: 1 секунда
Ограничение по памяти: 256 мегабайт
Дан массив из n чисел и модуль m (необязательно простой). Требуется написать программу,
которая будет отвечать на запросы следующего вида: найти произведение чисел на отрезке между
u и v включительно по модулю m.
Формат входных данных
В первой строке входного файла даны три натуральных числа n, m, q (1 6 n 6 105 , 1 6 m 6 109 ,
1 6 q 6 107 ) и a1 (0 6 a1 < 16 714 589) — количество элементов в массиве, модуль, количество
запросов и первый элемент массива соответственно. Вторая строка содержит два натуральных числа
u1 и v1 (1 6 u1 , v1 6 n) — первый запрос.
Элементы a2 , a3 , . . . , an задаются следующей формулой:

ai+1 = (23 · ai + 21563) mod 16714589.

Например, при n = 10, a1 = 12345 получается следующий массив: a = (12345, 305498, 7048017,
11694653, 1565158, 2591019, 9471233, 570265, 13137658, 1325095).
Запросы генерируются следующим образом:

ui+1 = (17 · ui + 751 + ansi + 2i) mod n + 1,
vi+1 = (13 · vi + 593 + ansi + 5i) mod n + 1,

где ansi — ответ на запрос номер i.


Обратите внимание, что ui может быть больше, чем vi .
Формат выходных данных
В выходной файл выведите uq , vq и ansq (последний запрос и ответ на него).
Пример
стандартный ввод стандартный вывод
10 5677 8 12345 5 3 1631
3 9

Страница 4 из 8
Летняя ШОП 2019, параллель A, день 1, Спарс + LCA
Университет Иннополис, 7 июля 2019

Задача E. Прямоугольники
Имя входного файла: стандартный ввод
Имя выходного файла: стандартный вывод
Ограничение по времени: 2.5 секунд
Ограничение по памяти: 256 мегабайт

Когда-то тут была легенда про вёдра, но её съели.


Жюри олимпиады

Есть таблица T размера N × M . Элементами таблицы являются прямоугольники Tij , где


0 6 i < N и 0 6 j < M . Прямоугольник Tij задаётся четвёркой чисел (xij ij ij ij
1 , y1 , x2 , y2 ), где
(xij ij ij ij
1 , y1 ) и (x2 , y2 ) — координаты противоположных углов прямоугльника. Стороны прямоугольни-
ка параллельны осям координат.
Далее вам поступают запросы. Каждый запрос состоит из четырёх чисел: (r1 , c1 , r2 , c2 ). Ответом
на такой запрос является площадь фигуры, являющейся пересечением всех прямоугольников Tij
таких, что min(r1 , r2 ) 6 i 6 max(r1 , r2 ) и min(c1 , c2 ) 6 j 6 max(c1 , c2 ). Запросов очень много,
поэтому мы просим вас вывести сумму ответов на все запросы по модулю 109 + 7.
Формат входных данных
В первой строке записаны два целых числа N и M — размеры таблицы T (1 6 N, M 6 127).
Далее в N строках описывается таблица T : в (i + 1)-й строке (j + 1)-я четвёрка чисел xij ij ij ij
1 y1 x2 y2
описывает прямоугольник Tij . Гаранируется, что |xij ij 6
k |, |yk | 6 10 .
Дальше в отдельной строке записано четыре числа. Первое из них, число Q — количество запро-
сов (1 6 Q 6 5 · 106 ). Следующие три числа — это A, B, v0 (0 6 A, B, v0 < 109 + 7). При помощи этих
чисел генерируется бесконечная последовательность {vi } по правилу vi = (A·vi−1 +B) mod (109 +7).
После этого k-й запрос (запросы нумеруются с единицы) задаётся следующей четвёркой чисел:
(v4k−3 mod N, v4k−2 mod M, v4k−1 mod N, v4k mod M ).
Формат выходных данных
Выведите сумму ответов на все запросы по модулю 109 + 7.
Примеры
стандартный ввод стандартный вывод
2 2 1
0 0 2 2 1 1 3 3
0 3 2 1 1 2 3 0
1 500000003 4 2
3 2 85
8 -1 -7 6 6 8 9 10
-4 -10 4 9 -3 -8 6 9
-2 -9 3 8 -5 7 7 3
5 303164476 273973578 65779139

Замечание
В первом примере запрос имеет вид (1,0,0,1), то есть это запрос ко всей таблице. Пересечением
всех прямоугольников является квадрат c углами в точках (1, 1) и (2, 2). Его площадь равна 1.
Во втором примере запросы имеют вид (0,1,1,1), (1,0,2,0), (0,0,2,1), (0,1,1,1), (0,1,0,0).
На второй запрос ответ — 85, на остальные — 0.

Страница 5 из 8
Летняя ШОП 2019, параллель A, день 1, Спарс + LCA
Университет Иннополис, 7 июля 2019

Задача F. Чип и Дейл в лабиринте


Имя входного файла: стандартный ввод
Имя выходного файла: стандартный вывод
Ограничение по времени: 1 секунда
Ограничение по памяти: 256 мегабайт
Чип и Дейл спешат на помощь! Но внимательные зрители знают, что помощь как правило нуж-
на самим Чипу и Дейлу, поэтому сегодня вам надо будет сыграть роль сообразительной Гаечки.
Итак, Чип и Дейл снова попали в лапы к Толстопузу. Кот очень не любит грызунов и поэтому
приготовил им изощренное испытание. Он собирается поместить их в лабиринт и посмотреть смо-
гут ли они из него выбраться. Лабиринт представляет собой дерево, в котором каждое ребро имеет
одно направление. Гаечка подслушала разговор Толстопуза со своими сообщниками и теперь знает
несколько возможных вариантов: в какую точку лабиринта поместят её друзей, и где будет выход.
Для каждого такого варианта она хочет понять, смогут ли Чип и Дейл найти выход, или нет.
Формат входных данных
В первой строке записано число n (n 6 105 ) — количество вершин дерева. В следующих n − 1
строках описаны ребра дерева. В (i + 1)-й строке записано номера вершин ai , bi , означающие, что в
дереве есть ребро из вершины ai в вершину bi .
Далее на отдельной строке записано число m (m 6 105 ) — количество запросов. После этого
идут m строк с описанием запросов, в (n + 1 + i)-й строке записаны через пробел числа xi и yi .
Формат выходных данных
Для каждого запроса на отдельной строке требуется вывести «Yes», если в графе есть путь
между вершинами xi и yi , и «No» иначе.
Пример
стандартный ввод стандартный вывод
4 Yes
1 2 Yes
3 1 No
4 1 Yes
6 No
1 2 No
3 2
2 3
4 2
4 3
2 1

Страница 6 из 8
Летняя ШОП 2019, параллель A, день 1, Спарс + LCA
Университет Иннополис, 7 июля 2019

Задача G. Usmjeri
Имя входного файла: стандартный ввод
Имя выходного файла: стандартный вывод
Ограничение по времени: 2 секунды
Ограничение по памяти: 256 мегабайт
Нам дано дерево с N узлами, обозначенными различными положительными целыми числами от
1 до N. Кроме того, вам дано M пар узлов из дерева в форме (a1, b1), (a2, b2),. . . , (aM, bM). Нам
нужно направить каждое ребро дерева таким образом, чтобы для каждой данной пары узлов (ai,
bi) был путь от ai до bi или от bi до ai. Сколько существует способов достичь этого? Поскольку
решение может быть довольно большим, определите его по модулю 109 + 7.
Формат входных данных
В первой строке входных данных содержатся натуральные числа N и M (1 6 N, M 6 3 ∗ 105 ),
количество узлов в дереве и количество заданных пар узлов соответственно. Каждый из следующих
N — 1 Строки содержат два положительных целых числа, метки узлов, связанных с ребром. i-я из
следующих M строк содержит два разных положительных целых числа ai и bi, метки узлов из i-й
пары узлов. Все пары узлов будут взаимно разными.
Формат выходных данных
Вы должны вывести одну строку, содержащую общее количество различных способов направле-
ния ребер дерева, которые отвечают требованию задачи, по модулю 109 + 7.
Примеры
стандартный ввод стандартный вывод
4 1 4
1 2
2 3
3 4
2 4
7 2 8
1 2
1 3
4 2
2 5
6 5
5 7
1 7
2 6
4 3 0
1 2
1 3
1 4
2 3
2 4
3 4

Замечание
Дерево — это граф, который состоит из N узлов и N - 1 ребер, так что существует путь от
каждого узла к каждому другому узлу.

Страница 7 из 8
Летняя ШОП 2019, параллель A, день 1, Спарс + LCA
Университет Иннополис, 7 июля 2019

Задача H. Антивещество
Имя входного файла: стандартный ввод
Имя выходного файла: стандартный вывод
Ограничение по времени: 2 секунды
Ограничение по памяти: 128 мегабайт
Компания тестирует технологию получения антивещества, используемого в качестве топлива
в межпланетном звездолёте. Антивещество получается в результате специальных экспериментов в
реакторе.
Известно n типов экспериментов, приводящих к получению антивещества. В результате про-
ведения эксперимента i-го типа в выходной контейнер реактора добавляется от li до ri граммов
антивещества. Из соображений безопасности запрещается накапливать в контейнере более a грам-
мов антивещества.
Затраты на проведение эксперимента i-го типа составляют ci , а стоимость одного грамма полу-
ченного антивещества составляет 109 .
Если после проведения экспериментов в контейнере образовалось t граммов антивещества, а
суммарные затраты на проведение экспериментов в реакторе составили s, то прибыль определяется
по формуле (t · 109 − s). Компании необходимо разработать стратегию проведения экспериментов,
позволяющую максимизировать прибыль, которую можно гарантированно получить.
В зависимости от результатов предыдущих экспериментов стратегия определяет, эксперимент
какого типа следует провести, или решает прекратить дальнейшее выполнение экспериментов. Стра-
тегия позволяет гарантированно получить прибыль x, если при любых результатах проведения
экспериментов: во-первых, в контейнере реактора оказывается не более a граммов антивещества,
во-вторых, прибыль составит не менее x.
Например, пусть возможен только один тип эксперимента, порождающий от 4 до 6 граммов
антивещества, затраты на его проведение равны 10, а вместимость контейнера составляет 17 грам-
мов. Тогда после двукратного проведения эксперимента в контейнере может оказаться от 8 до 12
граммов антивещества. Если получилось 12 граммов, то больше проводить эксперимент нельзя, так
как в случае получения 6 граммов антивещества контейнер может переполниться. В остальных слу-
чаях можно провести эксперимент в третий раз и получить от 12 до 17 граммов антивещества. В
худшем случае придётся провести эксперимент трижды, затратив в сумме 30, прибыль составит
(12 · 109 − 30) = 11 999 999 970.
Требуется написать программу, которая определяет максимальную прибыль x, которую гаран-
тированно можно получить.
Формат входных данных
Первая строка входных данных содержит два целых числа: n — количество типов экспери-
ментов и a — максимально допустимое количество антивещества в контейнере (1 6 n 6 100,
1 6 a 6 2 000 000).
Следующие n строк содержат по три целых числа li , ri и ci — минимальное и максимальное
количество антивещества, получаемое в результате эксперимента типа i, и затраты на эксперимент
этого типа, соответственно (1 6 li 6 ri 6 a, 1 6 ci 6 100).
Формат выходных данных
Выходные данные должны содержать одно целое число — максимальную прибыль x, которую
гарантированно можно получить.
Примеры
стандартный ввод стандартный вывод
1 17 11999999970
4 6 10
2 11 9999999890
2 2 100
3 5 5

Страница 8 из 8

Вам также может понравиться