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

332 задачивместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
п»ї

У Фермера Джона есть двоичная строка длиной \(N\) \((1 \leq N \leq 10^9)\), изначально из одних нулей.

Сначала он выполнит \(M\) (\(1 \leq M \leq 2 \cdot 10^5\)) изменений строки по порядку. Каждое изменение переворачивает каждый символ от \(l\) до \(r\). То есть \(0\) изменяется на \(1\) и наоборот.

Затем он задаёт Вам \(Q\) (\(1 \leq Q \leq 2 \cdot 10^5\)) вопросов. Для каждого вопроса Вы должны ввести лексикографически наибольшую подпоследовательность длины \(k\) состоящую из символов подстроки от \(l\) до \(r\). Если Ваш ответ - двоичная строка \(s_1s_2 \dots s_k\), выведите \(\sum_{i=0}^{k-1} 2^i \cdot s_{k-i}\) (то есть строка интерпретируется как двоичное число) по модулю \(10^9+7\).

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

Напомним, что строка \(A\) лексикографически больше чем строка \(B\) такой же длины если и только если в первой позиции \(i\), если она существует, \(A_i \neq B_i\), выполняется \(A_i > B_i\).

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(N\), \(M\), \(Q\).

Следующие \(M\) строк содержат по два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq N\)) конечные точки обновления.

Следующие \(Q\) строк содержат по три целых числа, \(l\), \(r\), \(k\) (\(1 \leq l \leq r \leq N, 1 \leq k \leq r - l + 1\)) —

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите \(Q\) строк. \(i\)-ая строка должна содержать ответ на \(i\)-ый запрос.

ПР�МЕР ВВОДА:

5 3 9
1 5
2 4
3 3
1 5 5
1 5 4
1 5 3
1 5 2
1 5 1
2 5 4
2 5 3
2 5 2
2 5 1

ПР�МЕР ВЫВОДА:

21
13
7
3
1
5
5
3
1

После выполнения \(M\) операций, строка такова: \(10101\).

Для первого запроса - длины \(5\) ответ вся строка \(10101\), которая интерпретируется как \(1 \cdot 2^4 + 0 \cdot 2^3 + 1 \cdot 2^2 + 0 \cdot 2^1 + 1 \cdot 2^0 = 21\).

Для второго запроса, существует \(5\) уникальных подпоследовательностей длины \(4\): \(0101\), \(1101\), \(1001\), \(1011\), \(1010\). Лексикографически наибольшая из них \(1101\), которая интерпретируется как \(1 \cdot 2^3 + 1 \cdot 2^2 + 0 \cdot 2^1 + 1\cdot 2^0 = 13\).

Для третьей строки лексикографически наибольшая последовательность \(111\), которая интерпретируется как \(7\).

ПР�МЕР ВВОДА:

9 1 1
7 9
1 8 8

ПР�МЕР ВЫВОДА:

3

ПР�МЕР ВВОДА:

30 1 1
1 30
1 30 30

ПР�МЕР ВЫВОДА:

73741816

Не забудьте выводить ответ по модулю \(10^9+7\).

ОЦЕН�ВАН�Е:

  • Тест 4: \(N \leq 10, Q \leq 1000\)
  • Тест 5: \(M \leq 10\)
  • Тесты 6-7: \(N, Q \leq 1000\)
  • Тесты 8-12: \(N \leq 2 \cdot 10^5\)
  • Тесты 13-20: Нет дополнительных ограничений.

Автор: Chongtian Ma

Фермер Джон хочет справедливо разделить пакеты сена между его двумя любимыми коровами Беси и Эльза. У него есть \(N\) ( \(1\le N\le 2\cdot 10^5\)) пакетов сена, упорядоченных в невозрастающем порядке. Где \(i\)-ый пакет сена имеет \(a_i\) единиц сена ($2\cdot 10^5\ge a1\ge a2 \ge \dots \ge aN \ge 1$).

ФД хочет разделить непрерывный отрезок пакетов \(a_l, \dots, a_r\) между Беси и Эльзой, рассматривая пакеты в порядке от \(l\) до \(r\), и когда рассматривает \(i\)-ый пакет он даёт его корове, у которой сейчас меньше сена. Если равно - даёт Беси.

Вам даётся \(Q\) (\(1\le Q\le 2\cdot 10^5\)) запросов, каждый описывается тремя целыми числами \(l,r,x\) (\(1\le l\le r\le N\), \(|x|\le 10^9\)). Для каждого запроса, введите на сколько больше единиц сена будет у Беси, после обработки пакетов от \(l\) до \(r\), если Беси начнёт с количеством сена на \(x\) единиц больше чем у Эльзы. Заметим эта величина отрицательна, если вначале у Эльзы будет на \(x\) единиц больше чем у Беси.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(N\).

Вторая строка содержит \(a_1\dots a_N\).

Третья строка содержит \(Q\).

Следующие \(Q\) строк содержат \(l, r, x\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите \(Q\) строк, содержащих ответ на каждый запрос.

**Замечание: Время на тест и ограничение по памяти для этой задачи 3сек и 512MB, что, соответственно, в 1.5 и 2 раза больше чем по умолчанию.**

Каждая из \(N\) (\(1 \leq N \leq 10^5\)) коров Фермера Джона имеет свой ID-номер в виде битовой строки (строки соcтоящей из символов '0' и '1'). Беси, старейшая корова, помнит ID-номера всех коров и любит спрашивать у коров их ID-номера.

Когда у коровы спрашивают ID-номер, они начинают отвечать правильную битовую строку, но могут забыть и остановиться, не закончив её. Когда Беси слышит битовую строку, если та не является ID-номером ни одной коровы на ферме, она пожимает плечами и уходит. Однако если это ID-номер другой коровы на ферме, она предполагает, что произошла кража личных данных и закрывает ферму на карантин. Заметим, что это может случиться даже если корова говорит свой полный правильный ID-номер.

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

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(N\), количество коров на ферме у ФД.

Далее следуют \(N\) строк. \(k\)-я строка содержит битовую строку, равную ID-номеру \(k\)-ой коровы.

Никакой и ID-номеров не пустой, и общая длина всех ID-номеров не более \(10^6\).

ФОРМАТ ВЫВОДА (на экран / stdout):

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

Беси посадила траву на положительной вещественной прямой. У неё есть \(N\) (\(2\le N\le 2\cdot 10^5\)) различных сортов травы. И она посадит траву \(i\)-го сорта на интервале \([\ell_i, r_i]\) (\(0 < \ell_i < r_i \leq 10^9\)).

Известно, что сорт \(i\) растёт лучше, если есть некоторый сорт \(j\) (\(j\neq i\)) такой, что сорт \(j\) и сорт \(i\) перекрываются на длину не менее \(k_i\) (\(0 < k_i \leq r_i - \ell_i\)). Беси хочет для каждого сорта \(i\) вычислить количество таких of \(j\neq i\), что сорты \(j\) и \(i\) перекрываются на длину не менее \(k_i\).

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит число \(N\).

Каждая из последующих \(N\) строк содержит три разделённых одиночными пробелами целых числа \(\ell_i\), \(r_i\), \(k_i\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Ответы для всех сортов на отдельных строках.

SCORING:

  • Тесты 4-5: \(N \leq 5000\)
  • Тесты 6-11: \(k\) одинаковое для всех интервалов
  • Тесты 12-20: Нет дополнительных ограничений..

В дополнение, в тестах 5, 7, ..., 19, \(r_i \leq 2N\) for all \(i\).

Автор: Benjamin Qi

Milk Sum#90233

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

\(N\) коров фермера Джона (\(1\le N\le 1,5\cdot 10^5\)) имеют целую продуктивность \(a_1,\dots,a_N\). То есть \(i\)я корова производит \(a_i\) единиц молока за минуту ( \(0 \leq a_i \leq 10^8\)).

Каждое утро фермер Джон начинает с того, что все \(N\) коров подключены к его дойке. От него требуется отцеплять их по одной, отправляя прочь для их ежедневных упражнений. Первая корова, которую он отправляет, снимается с крючка после всего 1 минуты дойки, вторая корова, которую он отправляет, отцепляется после двух минут дойки и так далее. Поскольку первая корова (скажем, корова \(x\)) тратит только одну минуту на доильном аппарате она вносит только \(a_x\) единиц общего количества молока. Вторая корова (скажем, корова \(y\)) тратит на доение всего две минуты и, таким образом, дает \(2a_y\) единиц общего количества молока. Третья корова (скажем, корова \(z\)) приносит всего \(3a_z\) единиц и так далее. Пусть \(T\) представляет собой максимально возможное количество молока, которое может собрать фермер Джон, если он отцепляет своих коров в оптимальном порядке.

Фермеру Джону интересно, как повлияет на \(T\), если часть производительностей молока в его стаде были другими. Для каждого из запросов \(Q\) (\(1\le Q\le 1.5\cdot 10^5\)) каждое из которых задано двумя целыми числами \(i\) и \(j\), пожалуйста, рассчитайте, какой будет новое значение \(T\), если \(a_i\) было установлено в \(j\) (\(0 \leq j \leq 10^8\)). Обратите внимание, что каждый запрос рассматривает временное потенциальное изменение независимо от всех других запросов; то есть \(a_i\) возвращается к исходному значению перед следующим запросом.

ФОРМАТ ВВОДА (ввод поступает с терминала/стандартного ввода):

Первая строка содержит \(N\).

Вторая строка содержит \(a_1\dots a_N\).

Третья строка содержит \(Q\).

Следующие \(Q\) строк содержат по два целых числа \(i\) и \(j\), разделенных пробелом.

ФОРМАТ ВЫВОДА (вывод на терминал / стандартный вывод):

Пожалуйста, выведите значение \(T\) для каждого из запросов \(Q\) в отдельных строках.

**Примечание. Ограничение по времени для этой задачи составляет 4 секунды, что в два раза больше, чем по умолчанию. Ограничение по памяти для этой задачи составляет 512 МБ, вдвое больше, чем по умолчанию.**

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

Дана строка \(s\), пусть \(B(s)\) представляет собой максимальное количество повторяющихся копий. из «bessie» можно получить, удалив ноль или более символов из \(s\). В приведенном выше примере \(B(\)"bqessiyexbesszieb"\() = 2\). Кроме того, учитывая строка \(t\), пусть \(A(t)\) представляет собой сумму \(B(s)\) по всем непрерывным подстроки \(s\) строки \(t\).

У фермера Джона есть строка \(t\) длины не более \(2\cdot 10^5\), состоящая только из символов a-z. Пожалуйста, рассчитайте \(A(t)\) и как \(A(t)\) изменится после \(U\) (\(1\le U\le 2\cdot 10^5\)) обновлений, каждое из которых изменяет символ \(t\). Обновления являются кумулятивными.

ФОРМАТ ВВОДА (ввод поступает с терминала/стандартного ввода):

Первая строка ввода содержит \(t\).

Следующая строка содержит \(U\), за которыми следуют строки по \(U\), каждая из которых содержит позицию \(p\) (\(1\le p\le N\)) и символ \(c\) в диапазоне от a до z, что означает, что \(p\)-й символ \(t\) заменяется на \(c\).

ФОРМАТ ВЫВОДА (вывод на терминал / стандартный вывод):

Выведите \(U+1\) строк — общее количество «bessie», которое можно сделать во всех подстроках \(t\) перед любыми обновлениями и после каждого обновления.

Фермер Джон развозит сено по ферме.

Ферма имеет \(N\) \((1\le N\le 2\cdot 10^5)\) амбаров, расположенных в целых точках \(x_1,\dots, x_N\) \((0 \le x_i \le 10^6)\) на числовой прямой. ФД запланировал \(N\) перевозок сена в некоторую целую точку \(y\) \((0 \le y \le 10^6)\) и затем одну перевозку к каждому амбару.

К несчастью служба доставки очень расточительна. В частности, для некоторых \(a_i\) и \(b_i\) \((1\le a_i, b_i\le 10^6)\), \(a_i\) пакетов сена теряются на единицу расстояния каждой доставки влево и \(b_i\) пакетов сена теряются на единицу расстояния каждой доставки вправо. Формально при транспортировке из точки \(y\) в амбар в точке \(x\), количество теряемых пакетов сена определяется как

\[\begin{cases} a_i\cdot (y-x) & \text{if } y \ge x \\ b_i\cdot (x-y) & \text{if } x > y \end{cases}.\]

Вам даны \(Q\) \((1\le Q\le 2\cdot 10^5)\) независимых запросов, каждый состоит из возможных значений \((a_i,b_i)\), помогите ФД определить наименьшее количество потерянных пакетов сена, если он выберет \(y\) оптимально.

ФОРМАТ ВВОДА (с клавиатуры):

Первая строка содержит \(N\).

Следующая строка содержит \(x_1\dots x_N\).

Следующая строка содержит \(Q\).

Каждая из последующих \(Q\) строк содержит два целых числа \(a_i\) и \(b_i\).

ФОРМАТ ВЫВОДА (на экран):

Выведите \(Q\) строк, \(i\)-ая строка содержит ответ на \(i\)-ый запрос.

Коровы передают две строки \(s\) и \(t\), каждая с длиной не более \(10^5\), состоящие только из маленьких латинских букв от 'a' до 'r'. Вы должны ответить на \(Q\) запросов (\(1 \leq Q \leq 10^5\)). Для каждого запроса нужно ответить, совпадут ли строки, если в каждой из них оставить только указанные в запросе маленькие латинские буквы (удалив все остальные символы).

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(s\).

Вторая строка содержит \(t\).

Третья строка содержит \(Q\).

Каждая из последующих \(Q\) строк содержит строку запроса. В строке запроса символы не повторяются и задаются в алфавитном порядке. Никакой запрос не появляется более одного раза.

ФОРМАТ ВЫВОДА (на экран / stdout):

Для каждого запроса выведите 'Y', если \(s\) и \(t\), с символами только из запроса будут равны и 'N' в противном случае.

Корова Беси прячется где-то на числовой прямой. Каждая из \(N\) (\(1\le N\le 1000\)) других коров Фермера Джона имеет информацию, которой она делится с ФД: \(i\)-ая корова говорит, что Беси прячется в некоторой точке меньше либо равной to \(p_i\), или больше либо равной \(p_i\), (\(0\le p_i\le 10^9\)).

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

ФОРМАТ ВВОДА (С КЛАВИАТУРЫ / stdin):

Первая строка содержит \(N\).

Каждая из следующих \(N\) строк содержит символ L или G, за которым следует целое число \(p_i\). L означает, что \(i\)-ая корова говорит, что Беси скрывается в позиции меньше либо равной \(p_i\), а G означает, что \(i\)-ая корова говорит, что Беси скрывается в позиции больше либо равной \(p_i\)

ФОРМАТ ВЫВОДА (на экран / stdout):

Минимальное количество коров, которые солгали.

Беси радовалась введённому индивидуальному обучению. К несчастью её тьютор Фермер Джон очень скучный лектор, и поэтому она часто засыпала во время занятий.

ФД попросил Эльзу записывать количество раз, когда Беси засыпала на каждом занятии. Всего было \(N\) занятий (\(2\le N\le 10^5\)), и Эльза зафиксировала \(a_i\) (\(1\le a_i\le 10^{18}\)) засыпаний на \(i\)-ом занятии. Общее количество засыпаний на всех занятиях не превышает \(10^{18}\).

Эльза хочет представить дело так, что Беси засыпала одинаковое количество раз на каждом занятии.

Единственный способ Эльзы модифицировать свои записи - объединить два соседних занятия или разъединить одно занятие на два. Например, если \(a=[1,2,3,4,5],\) тогда если Эльза объединит второе и третье занятие, то лог станет \([1,5,4,5]\) Если Эльза выберет разделить третье занятие на два, то лог может стать одним из \([1,5,0,4,5]\), \([1,5,1,3,5]\), \([1,5,2,2,5]\), \([1,5,3,1,5]\), or \([1,5,4,0,5]\).

По заданным \(Q\) (\(1\le Q\le 10^5\)) кандидатам \(q_1,\ldots,q_Q\) для наименее любимых Беси чисел (\(1\le q_i\le 10^{18}\)), для каждого из них помогите Эльзе вычислить минимальное количество модификаций лога, чтобы все числа в нём стали одинаковыми.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка каждого теста содержит \(N\), а вторая содержит \(a_1,a_2,\ldots,a_N\). Третья строка содержит \(Q\) - количество запросов, за которым следует \(Q\) строк с целым числом \(q_i\) - кандидат в наименее любимое число Беси.

ФОРМАТ ВЫВОДА (на экран / stdout):

Для каждого \(q_i\) вычислите минимальное количество модификаций, которое требуется для Эльзы, чтобы конвертировать лог в \(q_i\) или выведите \(-1\), если это невозможно.

Коровы играют в игру со множеством из \(N\) интервалов (\(1\le N\le 2\cdot 10^5\)), где \(i\)-ый интервал начинается в позиции \(a_i\) на числовой прямой, а заканчивается в позиции \(b_i \geq a_i\). Оба числа \(a_i\) and \(b_i\) - целые, в интервале \(0 \ldots M\), где \(1 \leq M \leq 5000\).

Чтобы играть в эту игру, Беси выбирает некоторый интервал, например \(i\)-ый. И Эльза выбирает некоторый интервал, например, \(j\)-ый, возможно тот же самый. Для заданной величины \(k\) они выигрывают, если \(a_i + a_j \leq k \leq b_i + b_j\).

Для всех \(k\) в интервале \(0 \ldots 2M\), посчитайте количество упорядоченных пар \((i,j)\) для которых Беси и Эльза выиграют в эту игру.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка ввода содержит \(N\) и \(M\). Каждая из последующих \(N\) строк описывает интервал в терминах целых чисел \(a_i\) и \(b_i\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите \(2M+1\) строку, по одной для каждого \(k\) в интервале \(0 \ldots 2M\).

Haircut#90116
Фермер Джон решил постричься. У него есть \(N\) прядей волос (\(1\le N\le 10^5\)), расположенных последовательно. Прядь \(i\) имеет изначально длину \(A_i\) микрометров (\(0\le A_i\le N\)). В идеале ФД хочет, чтобы его пряди монотонно возрастали по длине. Поэтому он определил "негодность" волос как количество инверсий то есть пар \((i,j)\) таких, что \(i < j\) и \(A_i > A_j\).

Для каждого \(j=0,1,\ldots,N-1\), ФД хочет узнать "негодность" его волос если все пряди с длиной больше чем \(j\) будут уменьшены до длины ровно \(j\).

ФОРМАТ ВВОДА (файл haircut.in):

Первая строка содержит \(N\).

Вторая строка содержит \(A_1,A_2,\ldots,A_N.\)

ФОРМАТ ВЫВОДА (файл haircut.out):

Для каждого \(j=0,1,\ldots,N-1\), выведите "негодность" волос ФД в новой строке.

Заметим, ответы могут потребовать 64-битного типа данных (например, "long long" в C/C++).

Каждый день, в рамках своей прогулки вокруг фермы, корова Беси посещает своё любимое пастбище, на котором растут рядком \(N\) цветков, помеченных числами \(1\ldots N\) \((1\le N \le 100)\). Цветок \(i\) имеет \(p_i\) лепестков \((1 \le p_i \le 1000)\).

Как подающий надежды фотограф, Беси решила сделать несколько фото этих цветков. В частности, для каждой пары цветков \((i,j)\) где \(1\le i\le j\le N\), Беси делает фото всех цветков от \(i\) до \(j\) (включая \(i\) и \(j\)).

Затем Беси посмотрела на эти фотки и заметила, что некоторые фото имеют "средний цветок" - цветок, который имеет \(P\) лепестков, где \(P\) - точное среднее число лепестков среди всех цветков на этом фото.

Сколько из фотографий Беси имеют "средний цветок"?

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка ввода содержит \(N\). Вторая строка ввода содержит \(N\) разделённых одиночными пробелами целых чисел \(p_1 \dots p_N\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите количество фотографий, имеющих средний цветок.

Беси и Эльза играют на битовом массиве \(A\) длиной \(2N\) (\(1 \leq N \leq 10^5\)). Счёт Беси - это количество инверсий в первой половине массива \(A\), а счёт Эльзы - количество инверсий во второй половине массива \(A\). Инверсия - это такая пара \(A[i]=1\) и \(A[j]=0\), что \(i<j\). Например, если массив состоит из блока 0, за которым следует блок 1, то инверсий нет. А массив в котором за блоком из \(X\) единиц следует блок из \(Y\) нулей, то имеется \(XY\) инверсий.

Фермер Джон остановился около игры и хочет узнать минимальное количество обменов между соседними элементами, которые нужно совершить, чтобы игра получила ничейный счёт. ФОРМАТ ВВОДА (файл balance.in): Первая строка ввода содержит \(N\), следующая строка содержит \(2N\) целых чисел каждое из которых равно 0 или 1. ФОРМАТ ВЫВОДА (файл balance.out): Выведите количество соседних обменов, которые нужно сделать, чтобы игра получила ничейный счёт.

Cow Land#90051
CowLand это специальный парк развлечений для коров, где они бродят, едят вкусную траву и посещают различные аттракционы для коров.

Всего имеется \(N\) различных аттракционов (\(2 \leq N \leq 10^5\)). Определённые пары аттракционов связаны дорожками, которых всего \(N-1\) штук, таким образом, что существует единственный путь, состоящий из различных дорожек между любыми двумя аттракционами. Каждый аттракцион \(i\) имеет целую величину удовольствия \(e_i\), которая может измениться в течение дня, поскольку некоторые аттракционы более привлекательны утром, а некоторые - вечером.

Корова, которая проходит от аттракциона \(i\) до аттракциона \(j\) получает удовольствие всех аттракционов маршрута от \(i\) до \(j\). Забавно, что общее удовольствие от всего маршрута вычисляется как побитовое XOR всех удовольствий в течение маршрута, включая удовольствия в аттракционах \(i\) и \(j\).

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

ФОРМАТ ВВОДА (файл cowland.in):

Первая строка ввода содержит \(N\) и количество запросов \(Q\) (\(1 \leq Q \leq 10^5\)). Следующая строка содержит \(e_1 \ldots e_N\) (\(0 \leq e_i \leq 10^9\)). Каждая из следующих \(N-1\) строк описывает дорожку в терминах двух номеров целочисленных аттракционов \(a\) и \(b (оба в интервале \)1 \ldots N$). Наконец, каждая последних \(Q\) строк описывает или изменение одной из величин \(e_i\) или запрос на удовольствие от маршрута. Строка вида "1 \(i\) \(v\)" означает, что величину \(e_i\) нужно изменить на значение \(v\) (\(e_i\) should be updated to value \(v\)). Строка вида "2 \(i\) \(j\)" это запрос на удовольствие от маршрута, соединяющего аттракционы \(i\) и \(j\).

В тестах не более 50% не будет изменений удовольствий на аттракционах.

ФОРМАТ ВЫВОДА (файл cowland.out):

Для каждого запроса вида "2 \(i\) \(j\)", выведите одну строку - удовольствие от маршрута от \(i\) к \(j\).

Снег выпал на ферме, и Беси лепит из него снежную корову. Причём Беси хочет, чтобы та выглядела как можно более натурально. Но в этом году она лепит фигуру в виде дерева, состоящего из \(N\) снежков \((1\le N\le 10^5)\) соединённых \(N-1\) ветками, каждая из которых соединяет пару снежков так, что имеется уникальный путь между каждой парой снежков.

Беси добавила нос к одному из снежков, поэтому он представляет собой голову этой абстрактной снежной коровы. Она обозначила это снежок числом 1. Чтобы усилить визуальный эффект, она планирует покрасить некоторые из снежков различными цветами. Цвета обозначаются числами в интервале \(1 \ldots 10^5\), и у Беси неограниченное количество красок всех цветов.

Когда Беси красит снежок в определённый цвет, все снежки в его поддереве также красятся в этот же цвет. (Снежок \(y\) находится в поддереве снежка \(x\), если \(x\) находится на пути от \(y\) к головному снежку). Занимаясь покраской, Беси обеспечивает, чтобы все цвета, которыми она красила снежки, оставались видимыми. Например, если у снежка есть цвета \([1,2,3]\) и Беси красит цветом \(4\), на снежке останутся следы цветов \([1,2,3,4]\).

После некоторого количества раскрашиваний, Беси хочет узнать, как раскрашена часть её коровы. Полнота цветов("colorfulness") снежка \(x\) равно количеству различных цветов \(c\), которыми раскрашен этот снежок \(x\). Если Беси спросит Вас о снежке \(x\), Вы должны ответить сумму полноты цветов всех снежков в поддереве \(x\).

Помогите Беси определить полноту цветов в определённые моменты времени.

ОЦЕНИВАНИЕ:

\(Q\) определено ниже.

  • Тесты 2-3 удовлетворяют \(N\le 10^2, Q\le 2\cdot 10^2.\)
  • тесты 4-6 удовлетворяют \(N\le 10^3, Q\le 2\cdot 10^3.\)

ФОРМАТ ВВОДА (файл snowcow.in):

Первая строка содержит \(N\), и количество запросов \(Q\) (\(1\le Q\le 10^5\)).

Каждая из последующих \(N-1\) строк содержит два разделённых одиночным пробелом целых числа \(a\) и \(b\), описывающих ветки, соединяющие снежки \(a\) и \(b\) (\(1 \le a, b \le N\)).

Каждая из последних \(Q\) строк содержит запрос. Запрос имеет вид

1 x c

и означает. что Беси закрасила цветом \(c\) снежок \(x\) и всё его поддерево. Строка вида

2 x

Это запрос на сумму "полноцветностей" всех снежков в поддереве \(x\). \(1\le x\le N\) и \(1\le c\le 10^5.\)

ФОРМАТ ВЫВОДА (файл snowcow.out):

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

Фермер Джон планирует построить \(N\) (\(1 \leq N \leq 10^5\)) ферм, которые будут соединены \(N-1\) дорогой, формируя дерево (то есть каждая ферма достижима от каждой, и нет циклов). Каждая ферма содержит корову целого типа \(T_i\) между \(1\) и \(N\) включительно.

\(M\) друзей ФД (\(1 \leq M \leq 10^5\)) часто его посещают. Во время визита друга \(i\), ФД вместе с ним путешествует по уникальному пути от фермы \(A_i\) до фермы \(B_i\) (возможно \(A_i = B_i\)). Дополнительно, они пробуют молоко каждой коровы на своём пути. Поскольку друзья ФД также фермеры, они имеют сильное предпочтение по молоку. Каждый из них пьёт молоко только определённого типа коров. Любой из друзей ФД будет счастливым, только если сможет попить свой предпочитаемый тип молока во время пути.

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

ОЦЕНИВАНИЕ:

  • Тест 2 второй пример, приведенный ниже.
  • Тест 3 удовлетворяет \(N\le 10^3, M\le 2\cdot 10^3\).
  • Тесты 4-7 удовлетворяют \(C_i\le 10\) (\(C_i\) определено ниже).

ФОРМАТ ВВОДА (файл milkvisits.in):

Первая строка ввода содержит числа \(N\) и \(M\).

Вторая строка ввода содержит \(N\) разделённых целых чисел \(T_1,T_2,\ldots, T_N\). Тип коровы на \(i\)-ой ферме обозначен \(T_i\).

Каждая из последующих \(N-1\) строк содержит два различных целых числа \(X\) и \(Y\) (\(1 \leq X, Y \leq N\)), указывающих, что имеется дорожка между фермами \(X\) и \(Y\).

Последующие \(M\) строк содержат целые числа \(A_i\), \(B_i\), \(C_i\). \(A_i\) и \(B_i\) представляют конечные точки пути во время визита \(i\)-ого друга, \(C_i\) (\(1\le C_i\le N\)) указывает тип молока, предпочитаемый этим другом.

ФОРМАТ ВЫВОДА (файл milkvisits.out):

Выведите двоичную строку длины \(M\). \(i\)-ый символ этой строки должен быть '1', если \(i\)-ый друг будет счастлив, иначе - '0'.

Каждое утро экспресс-поезд следует от фермы в город, а каждый вечер он возвращается.

Беси знает, что у поезда есть \(N\) вагонов(\(1 \leq N \leq 10^6\)), последовательно пронумерованных \(0 \dots N-1\). Вагон \(i\) имеет ID номер \(c_i\), написанный на нём (\(0 \le c_i \le 10^9\)). Все номера видны и утром, и вечером, поэтому номер каждого вагона можно увидеть два раза. Когда поезд едет утром, Беси видит вагоны в таком порядке \(c_0\), \(c_1\), ... \(c_{N-1}\). Когда поезд едет вечером, Беси видит их в том же порядке: \(c_0\), \(c_1\), ... \(c_{N-1}\).

Беси выбрала целое число \(K\) (\(1 \leq K \leq N\)), и она хочет определить минимальный ID-номер для каждого непрерывного множества из \(K\) вагонов. У Беси есть ноутбук, на котором она может производить вычисления. Но он довольно маленький, а её копыта - большие. Например, она не может написать все \(N+1-K\) минимумов. Беси мычит ответы, после того, как вычислит их.

Поезд скоро прибудет, Помогите Беси определить \(N + 1 - K\) минимумов когда поезд проезжает дважды, будьте уверены , что она использует свой ноутбук эффективно. Её ноутбук поделен на \(5500\) секций, последовательно пронумерованных \(0 \dots 5499\), и каждая секция имеет место, чтобы хранить ровно одно целое число из интервала \(-2^{31}\) ... \(2^{31}-1\) включительно. Изначально в каждой секции хранится число \(0\).

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

void helpBessie(int ID);

Ваша функция будет вызываться с номером проходящего вагона в качестве параметра.

Ваша реализация функции \(\texttt{helpBessie}\) должна вызывать следующие функции:

  • int get(int index): получает значение целого числа, которое хранится в ноубуке беси в данной ячейке index.
  • void set(int index, int value): устанавливает значение целым числом value в ячейке index
  • void shoutMinimum(int output): говорит Беси промычать данное число
  • int getTrainLength(): возвращает \(N\), количество вагонов поезда.
  • int getWindowLength(): возвращает \(K\), длину окна.
  • int getCurrentCarIndex(): возвращает индекс вагона, который сейчас проходит.
  • int getCurrentPassIndex(): возвращает \(0\) если Беси наблюдает утренний поезд и \(1\), если Беси наблюдает вечерний поезд.

Чтобы помочь Вам начать писать свой код, мы даём начальные шаблоны для C/C++ и Java. Python и Pascal не поддерживаются в этой задаче.

Минимумы окон должны выводится в таком порядке, что минимум из вагонов \(0, 1, \dots, K-1\) нужно вывести раньше чем минимум вагонов \(1, 2, \dots, K\) и т.д. Но помимо этого ограничения упорядочения,Ваша функция может выводить минимумы во время любого из её вызовов, в любое время. Например, Ваша функция может не выводить ответов во время некоторых вызовов или выводить множество ответов во время других вызовов.

Беси имеет фантастическую кратковременную память, по этой причине нет ограничения на использование памяти в функции \(\texttt{helpBessie}\) кроме обычного на 256 Мбт. Однако между вагонами Беси не способна помнить ничего не содержащегося в её ноутбуке. Поэтому между вызовами функции, Ваша программа не может хранить состояния - а только использовать вызовы \(\texttt{get}\) и \(\texttt{set}\) calls.

Это означает:

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

Общее количество вызовов \(\texttt{set}\) плюс общее количество вызовов \(\texttt{get}\), сделанные Вашей программой должны быть ограничены \(25 \cdot 10^6\) для каждого теста.

Ферма Джона состоит из \(N\) пастбищ (\(2 \leq N \leq 50,000\)), попарно соединённых \(N-1\) двунаправленными дорожками единичной длины. Известно также, что имеется путь из любого пастбища к любому.

Однако если одну из дорожек заблокировать, то ферма разделится на две части, внутри каждой из которых связность сохранится, а между ними - нет. Поэтому ФД строит \(M\) дополнительных дорожек (\(1 \leq M \leq 50,000\)), каждая из которых имеет положительную целую длину не более \(10^9\). Коровы пользуются исходными дорожками, пока это возможно.

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

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

ФОРМАТ ВВОДА (файл disrupt.in):

Первая строка ввода содержит \(N\) и \(M\). Каждая из последующих \(N-1\) строк описывает оригинальную дорожку целыми числами \(p\) \(q\), где \(p\) \neq q$ - пастбища, соединённые этой дорожкой (в интервале \(1 \ldots N\)). Каждая из оставшихся \(M\) строк описывает дополнительную дорожку тремя целыми числами \(p\), \(q\), \(r\), где \(r\) длина этой дорожки. Не более одной дорожки пролегает между любыми двумя пастбищами.

ФОРМАТ ВЫВОДА (файл disrupt.out):

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

Slingshot#90008
Фермер Джон не любит возить навоз. Он придумал перемещать лотки с навозом пор воздуху с помощью гигантской рогатки.

Ферма Джона построена вдоль прямой дороги, поэтому любое место фермы может быть описано позицией на этой дороге (точка на числовой прямой). ФД построил \(N\) рогаток (\(1 \leq N \leq 10^5\)), \(i\)-ая из которых описывается тремя целыми числами \(x_i\), \(y_i\), \(t_i\), указывающими, что рогатка может переместить навоз из позиции \(x_i\) в позицию \(y_i\) за \(t_i\) единиц времени.

У ФД есть \(M\) лотков с навозом для транспортировки (\(1 \leq M \leq 10^5\)). \(j\)-ый лоток нужно переместить из позиции \(a_j\) в позицию \(b_j\). Перемещение лотка с навозом на тракторе на расстояние \(d\) занимает \(d\) единиц времени. ФД надеется сократить время использованием рогаток. Время перемещения трактора без навоза не учитывается.

Для каждого из \(M\) лотков определите минимально возможное время транспортировки. при условии использования не более одной рогатки.

ФОРМАТ ВВОДА (файл slingshot.in):

Первая строка ввода содержит \(N\) и \(M\). Каждая из следующих \(N\) строк описывает одну рогатку тремя числами \(x_i\), \(y_i\), \(t_i\) (\(0 \leq x_i, y_i, t_i \leq 10^9\)). Последние \(M\) строк описывают лотки навоза, которые необходимо перемещать, двумя целыми числами \(a_j\) и \(b_j\).

ФОРМАТ ВЫВОДА (файл slingshot.out):

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

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