Дерево отрезков, RSQ, RMQ

38 задач
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
Фермер Джон продолжает исследование переходов коров через дорогу, описанную в двух предыдущих задачах. Теперь он считает дружественными породы коров \(a\) и \(b\), если if \(|a - b| \leq K\), и недружественными в противном случае.

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

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

Первая строка ввода содержит \(N\) (\(1 \leq N \leq 100,000\)) и \(K\) (\(0 \leq K < N\)). Следующие \(N\) строк описывают порядок по номерам пород, полей на первой стороне дороги. Каждый номер породы - это число в интервале \(1 \ldots N\). Последние \(N\) строк описывают порядок по номерам пород, полей на второй стороне дороги. Каждый номер породы появится ровно один раз с каждом порядке.

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

Выведите максимальное количество недружественных пересекающихся пар пород.

Коровы, последовательно пронумерованные \(1 \ldots N\) (\(1 \leq N \leq 100,000\)), организовали компанию в виде дерева, где корова 1 - президент (корень дерева). Каждая корова, кроме президента, имеет ровно одного менеджера (её родитель в дереве). Каждая корова \(i\) имеет различный професиональный рейтинг \(p(i)\), который описывает насколько хорошо она делает свою работу. Если корова \(i\) есть менеджер коровы \(j\), то мы говорим, что корова \(j\) подчиняется корове \(i\).

К несчастью коровы обнаружили что часто бывает так, что менеджер имеет меньший уровень профессиональности, чем некоторые из его подчинённых. В этом случае менеджер должен рассмотреть продвижение этих подчинённых. Ваша задача - помочь коровам узнать, когда это случается. Для каждой коровы \(i\) в компании вычислите количество подчинённых \(j\) таких, что \(p(j) > p(i)\).

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

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

Следующие \(N\) строк ввода содержат рейтинги профессиональности коров \(p(1) \ldots p(N)\). Все числа - различные целые в интервале \(1 \ldots 1,000,000,000\).

Следующие \(N-1\) строк описывают менеджера (родителя) для коров \(2 \ldots N\). Напомним что у коровы 1 нет менеджера, поскольку она президент.

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

Выведите \(N\) строк. \(i\)-ая строка вывода должна говорить количество подчинённых коровы \(i\) с рейтингом профессиональности большим чем у коровы \(i\).

Фермер Джон выстроил свои \(N\) коров в ряд, чтобы сделать фото. (\(1 \leq N \leq 100,000\)). Высота \(i\)-ой коровы в этой последовательности равна \(h_i\), и все эти высоты различны.

ФД хочет, чтобы фотография получилась красивее. Он считает, что корова \(i\) выглядит несбалансированно, если \(L_i\) и \(R_i\) отличаются более чем в 2 раза. Здесь \(L_i\) и \(R_i\) - количества коров, которые выше чем корова \(i\), слева и справа соответственно. То есть, корова \(i\) является несбалансированной, если большее из чисел \(L_i\) и \(R_i\) строго более чем в 2 раза больше, чем меньшее из этих двух чисел.

Вычислите сколько всего есть несбалансированных коров.

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

Первая строка ввода содержит число \(N\). Следующие \(N\) строк содержат \(h_1 \ldots h_N\), каждое неотрицательное целое не более чем 1,000,000,000.

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

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

Ферма Джона состоит из \(N\) полей в ряд последовательно пронумерованных \(1 \ldots N\). На каждом поле может быть произвольное количество стогов сена. Инструкции ФД бывают трёх видов:

1) Добавить один стог к каждому полю в указанном интервале

2) Определить минимальное количество стогов сена внутри указанного непрерывного интервала полей.

3) Посчитать суммарное количество стогов сена внутри указанного непрерывного интервала.

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

Первая строка содержит два положительных целых числа \(N\) (\(1 \leq N \leq 200,000\)) и \(Q\) (\(1 \leq Q \leq 100,000\)).

Следующая строка содержит \(N\) неотрицательных целых чисел, каждое не более, чем 100,000, указывающих, сколько стогов сена было изначально на каждом поле.

Каждая из следующих \(Q\) строк содержит одну большую латинскую букву M, P или S, за которой следуют два положительных целых числа \(A\) and \(B\) (\(1 \leq A \leq B \leq N\)), или три положительных целых числа \(A\), \(B\), and \(C\) (\(1 \leq A \leq B \leq N\); \(1 \leq C \leq 100,000\)). 3 числа будет только в том случае, если первая буква P.

Если первая буква M выведите минимальное количество стогов сена в интервале полей \(A \ldots B\).

Если первая буква P, добавьте по \(C\) стогов сена в каждое поле в интервале \(A \ldots B\).

Если первая буква S, выведите суммарное количество стогов сена в интервале полей \(A \ldots B\).

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

Строка в выводе должна появится в ответ на каждый запрос вида M или S.

п»ї

У Фермера Джона есть двоичная строка длиной \(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

**Примечание. Ограничение по времени для этой задачи составляет 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\) перед любыми обновлениями и после каждого обновления.

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++).

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.

Seating#89884

Чтобы заработать немного денег, коровы открыли ресторан. В ресторане N мест (1 <= N <= 500,000) в одном ряду. Изначально, все они пусты.
В течение дня в ресторане происходят M (1 <= M <= 300,000) различных событий одного из двух типов:
1. Прибывает вечеринка размером p (1 <= p <= N). Беси хочет усаживать вечеринку на непрерывный блок из p мест. Если таких блоков несколько, то она садит вечеринку на блок с самым маленьким номером начальной позиции. Если такого блока нет, вечеринка убывает.
2. Задается диапазон [a,b] (1 <= a <= b <= N), и каждый в этом диапазоне мест, подымается и покидает ресторан.
Помогите Беси вычислит общее количество вечеринок, которые "уйдут несолоно хлебавши" в течение дня.

PROBLEM NAME: seating
Формат входных данных
* Строка 1: Два разделенных пробелом целых числа, N и M.
* Строки 2..M+1: Каждая строка описывает одно событие в форме "A p" (что означает прибытие вечеринки размером p) или в форме "L a b" (что означает, что все коровы в диапазоне [a,b] уходят).

Формат выходных данных
* Строка 1: Количество вечеринок, которые не начнутся.
Примечание
Вечерника #3 не сможет быть размещена. Все другие вечеринки состоятся.


Фермер Джон купил новый амбар, содержащий N (1 <= N <= 40,000) доильных машин, последовательно пронумерованных от 1 до N и расположенных в ряд.
Доильная машина i способна извлекать по M(i) (1 <=M(i) <= 100,000) единиц молока в день. Однако, они установлены так близко, что, если машина I используется в какой-то день, то в этот день не могут быть использованы две соседние машины (начальная и конечная машина имеют по одному соседу). ФД может выбирать различные подмножества работающих машин в различные дни.
ФД хочет вычислить максимальное количество молока, которое он может извлечь за серию из D(1 <= D <= 50,000) дней. В начале каждого дня у него есть достаточное количество времени, чтобы выполнить модификацию одной выбранной машины I, и изменить дневной выпуск молока этой машины от прошлого дня к сегодняшнему. Вам дан список этих ежедневных модификаций, определите, сколько молока может извлечь ФД в течение D дней (заметим, что это число может не вместиться в 32-битное целое).
PROBLEM NAME: optmilk
Формат входных данных
* Строка 1: Значения N и D.
* Строки 2..1+N: Строка i+1 содержит начальное значение M(i).
* Строки 2+N..1+N+D: Строка 1+N+d содержит два целых числа i и m, означающие, что ФД изменил значение M(i) на m в начале дня d.
Формат выходных данных
* Строка 1: Максимальное суммарное количество молока, которое ФД сможет произвести за D дней.
Примечание
В день 1 оптимальное количество молока 2+4 = 6 (также достижимое как 1+3+2). В день 2 оптимальное количество молока 7+4=11. В день 3 оптимальное количество молока 10+3+2=15.

Время дойки на ферме Джона, но коровы сбежали. Ферма Джона - это множество из N (1 <= N <= 200,000) пастбищ, пронумерованных от 1 до N, и связанных N - 1 двунаправленными дорожками. Амбар расположен в пастбище 1 и любое пастбище достижимо от амбара.
Коровы бегут в сторону "от амбара" и они пробегают расстояние не больше чем L. Для каждого пастбища ФД хочет знать, в скольки различных пастбищах могут оказаться коровы, сбежавшие с этого пастбища.
Замечание: используйте 64-битные целые (int64 в Pascal, long long в C/C++ и long в Java) для хранения расстояний.
PROBLEM NAME: runaway
Формат входных данных
* Строка 1: 2 целых числа, N и L (1 <= N <= 200,000, 1 <= L <= 10^18)
* Строки 2..N: i-ая строка содержит два целых числа pi и li. pi (1 <= pi < i) - первое пастбище на кратчайшем пути между пастбищем i и амбаром li (1 <= li <= 10^12) - длина этого пути
Формат выходных данных
* Строки 1..N: По одному числу в строке. Число в строке i - количество пастбищ, которые могут быть достигнуты из пастбища i, выбирая дороги, строго удаляясь от амбара (пастбище 1) с суммарной длиной не превышающей L.
Примечание
Корова из пастбища 1 может добежать до пастбищ 1, 2, 4. Корова из пастбища 2 может добежать до пастбищ 2, 3. Пастбища 3 и 4 - конечные, оттуда некуда бежать, можно только остаться в них.

На шахматном турнире участники получают баллы. Судья хочет в любой момент знать: какой максимальный и какой минимальный балл среди всех участников?

Участники могут присоединяться к турниру или выбывать:

+ X — игрок с баллом X пришёл на турнир

- X — игрок с баллом X ушёл с турнира

? — запрос минимального и максимального балла

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

В первой строке — число Q (1 ≤ Q ≤ 100000) — количество событий.

В следующих Q строках — события в указанном формате.

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

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

Для каждого запроса "?" выведите два числа через пробел: минимальный и максимальный балл.

Сайтама выполняет последовательные удары по силомеру. Силомер представляет из себя массив целых чисел длины \(n\). Изначально \(i\)-е число массива равно \(a_i\) для всех \(i\).

Вам необходимо обработать \(q\) событий, происходящих с силомером. Событие номер \(i\) может быть одного из трех типов:

  1. подходит наблюдатель и просит посчитать сумму чисел массива на отрезке \([l_i; r_i]\), то есть величину \(a_{l_i} + a_{{l_i}+1} + \ldots + a_{r_i}\);

  2. Сайтама наносит обычный удар силы \(x_i\) по отрезку \([l_i; r_i]\): всем элементам массива на позициях от \(l_i\) до \(r_i\) включительно присваивается значение \(x_i\)

  3. Сайтама наносит сильный удар по отрезку \([l_i; r_i]\): для всех \(j\) от \(l_i\) до \(r_i\) включительно происходит присваивание \(a_j \gets \mathtt{popcount}(a_j)\).

Здесь \(\mathtt{popcount}(x)\) — это количество единичных бит в двоичной записи числа \(x\). Иными словами, при событии третьего типа каждое число на отрезке события заменяется на количество своих единичных бит.

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

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

Во второй строке через пробел записаны \(n\) целых чисел \(a_1\), …, \(a_n\) — изначальные элементы массива силомера (\(0 \leqslant a_i \leqslant 10^9\)).

Следующие \(q\) строк описывают события. Первое число \(t_i\) в описании события — тип события (\(1 \leqslant t \leqslant 3\)). Следующие два заданные через пробел числа — это границы отрезка \(l_i\) и \(r_i\) (\(1 \leqslant l_i \leqslant r_i \leqslant n\)). Если это событие второго типа, то есть \(t_i = 2\), далее следует число \(x_i\), обозначающее, что надо выполнить присваивания \(a_j \gets x_i\) для всех \(l_i \leqslant j \leqslant r_i\) (\(0 \leqslant x_i \leqslant 10^9\)).

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

 

Улицу Подводный канал освещают \(n\) фонарей, пронумерованных вдоль улицы от 1 до \(n\). Один или несколько подряд стоящих фонарей назовём сегментом. Таким образом, общее количество сегментов \(\frac{n(n+1)}{2}\). Сегмент считается исправным, если лампочки во всех фонарях этого сегмента исправны.

С фонарями регулярно происходят события одного из двух типов:

в каком-то сегменте из-за скачков напряжения все лампочки одновременно перегорают;

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

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

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

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

В каждой из последующих \(q\) строк содержатся описания событий в виде трёх чисел \(l_i, r_i\) и \(c_i\), которые означают, что после этого события все лампочки в фонарях с номерами \(l_i, l_i+1, \ldots, r_i\):

  • перегорают при \(c_i = 0\)
  • становятся исправными при \(c_i = 1\).

В описаниях всех событий \(1 \le l_i \le r_i \le n\), а \(c_i\) принимает значение \(0\) или \(1\).

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

В холле 179 школы, есть информационный стенд размером H×W (H – высота, W – ширина). На этом стенде размещается информация о кружках, изменениях в расписании, победах в олимпиадах, а также другая важная информация.

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

Каждое объявление представляет собой полоску бумаги единичной высоты. I-ое объявление представляет собой прямоугольник размером 1×Wi.

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

Входные данные
Первая строка содержит три целых числа H, W и N (1≤H,W≤109; 1≤N≤200000) — размеры стенда и количество объявлений. Каждая из следующих N строк содержит по одному целому числу Wi (1≤Wi≤109) — ширину i-го объявления.

Выходные данные
Для каждого из объявлений (в порядке следования во входном файле) выведите номер ряда, в котором оно будет размещено. Ряды занумерованы от 1 до H сверху вниз. Если объявление разместить нельзя — выведите «–1».
Вася разрабатывает новый веб-сервер. В настоящее время он работает над функцией, осебспечивающей поддержку списков контроля доступа. Список контроля доступа позволяет ограничить доступ к некоторым ресурсам веб-сайта, основываяь на основании IP-адреса запрашивающей стороны.

Каждый IP-адрес − это 4-байтный номер, который записан байт за байтом в десятичной записи. Байты разделены точками следующим образом: <<byte0.byte1.byte2.byte3>> (кавычки добавлены для ясности). Каждый байт записывается как десятичное число от 0 до 255 (включительно) без ведущих нулей. IP-адреса организованы в IP-сети. IP сети описывается двумя 4-байтовыми числами - сетевым адресом и маской сети. И сетевой адрес и маска сети записаны в той же форме, что и IP-адреса. Для того чтобы понять смысл сетевого адреса и маски сети рассмотрим их двоичное представление. Двоичное представление IP адреса, сетевого адреса и маски сети состоит из 32 бит: 8 бит для byte0 (от старших к младшим), затем по 8 бит для byte1, 8 бит для byte2 и 8 бит для byte3.

IP сеть содержит 2N IP-адресов, где 0≤N≤32. В маске сети первые 32–N бита установлены в единицы, и последние N бит установлены в ноль. Сетевой адрес имеет произвольные 32–N первых бит, а последние N бит установлен в ноль. IP сеть содержит все IP-адреса, первые 32−N бит которых равны 32–N
 первых бит сетевого адреса с произвольными N последними битами. Например, IP сеть с сетевым адресом 194.85.160.176 и сетевая маска 255.255.255.248 содержит 8 IP-адресов, с 194.85.160.176 по 194.85.160.183 (включительно).

IP сети, как правило, обозначается как <<byte0.byte1.byte2.byte3/S>>, где <<byte0.byte1.byte2.byte3>> − сетевой адрес, S − это число бит, установленных в единицу в маске сети. Например, IP сети из предыдущего абзаца обозначается как 194.85.160.176/29. Список контроля доступа содержит упорядоченный список правил. Каждое правило имеет одну из следующих форм:

deny from <IP network> − запрещает доступ к ресурсу для любого IP из заданной сети.

deny from <IP address> − запрещает доступ к ресурсу для указанного IP-адреса.

allow from <IP network> − разрешает доступ к ресурсу для любого IP из заданной сети.

allow from <IP address> − разрешает доступ к ресурсу для указанного IP-адреса.

Когда кто-нибудь обращается к какому-либо ресурсу, первым делом проверяется IP-адрес обращающегося по списку контроля доступа. Правила проверяются в том порядке, в котором они перечислены, и применяется первое выполняющееся правило. Если ни одно из правил не соответствует IP-адресу запрашивающей стороны, то доступ предоставляется.

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

Входные данные
Первая строка ввода содержит число N − количество правил в списке контроля доступа (0≤N≤100000). Следующие N строк содержат правила по одному в строке. IP сеть всегда записывается как <<byte0.byte1.byte2.byte3/S>>. Следующая строка содержит число M − количество IP адресов, которые следует проверить (0≤M≤100000). Следующие M строк содержат по одному IP адресу в строке.

Выходные данные
Для каждого из M IP-адресов выведите <<A>>, если доступ будет предоставлен, и <<D>> иначе. Все символы следует выводить слитно, не разделяя пробелами.
Поделиться
Класснуть