реализация

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

В пекарне «У Матроны» работает один пекарь, и за утро он должен испечь n заказов пирожков. Для каждого заказа известно время ti — сколько минут займёт его приготовление.

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

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

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

 

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

В первой строке — целое число n (1 ≤ n ≤ 105) — количество заказов.

Во второй строке — n целых чисел ti (1 ≤ ti ≤ 109), разделённых пробелами, — время приготовления каждого заказа.

 

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

Одно целое число — максимальное количество довольных клиентов.

На льдине в ряд стоят n пингвинов. У каждого пингвина свой вес — уникальное целое число от 1 до n.
На каждом ходе каждый пингвин, чей вес больше, чем у соседа справа, сталкивает соседа справа в воду. Обратите внимание, что пингвин может столкнуть соседа и сам быть столкнут на одном и том же ходе.
Вам дано исходное расположение пингвинов на льдине. Подсчитайте, сколько ходов пройдёт до момента, после которого на льдине наступит покой и больше никто никого не столкнёт.

Формат входных данных
В первой строке записано целое число n — количество пингвинов (1 ≤ n ≤ 105). Во второй строке записан список из n различных целых чисел от 1 до n, включительно — веса пингвинов на льдине слева направо. Числа разделяются пробелами.

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

 
Примечание

В первом примере ряд пингвинов меняется так: [10 9 7 8 6 5 3 4 2 1]  →  [10 8 4]  →  [10]. Итого, есть два хода.

На борту «Нулевого указателя» обнаружили старинный сундук с n рычагами. Чтобы открыть его, рычаги нужно нажимать в правильном порядке — но Шкипер Баг этого порядка не знает.

Когда Шкипер Баг нажимает рычаг: если этот рычаг действительно следующий в правильной последовательности — он остаётся нажатым. Если рычаг неправильный — он сбрасывается вместе со всеми уже нажатыми рычагами, и придётся начинать заново с нужного места.

Когда все n рычагов окажутся нажаты одновременно — сундук откроется. Шкипер Баг действует оптимально. Найдите количество нажатий в худшем случае.

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

Единственная строка: целое число n (1 ≤ n ≤ 2000) — количество рычагов.


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

Одно число — количество нажатий в худшем случае.

 

Примечание (n = 3). Пусть правильная последовательность — {2, 3, 1}.

Шкипер Баг ищет первый рычаг. Нажимает рычаг 1 — сброс (1 нажатие). Нажимает рычаг 3 — сброс (2 нажатия). Нажимает рычаг 2 — остаётся нажатым (3 нажатия).

Теперь ищет второй рычаг. Нажимает рычаг 1 — сброс, рычаг 2 тоже сбросился (4 нажатия). Повторно нажимает рычаг 2 (5 нажатий), затем рычаг 3 — остаётся нажатым (6 нажатий).

Ищет третий рычаг. Единственный оставшийся — рычаг 1, нажимает (7 нажатий). Сундук открыт!

Итого в худшем случае: 7 нажатий.

В трюме «Нулевого указателя» хранится стопка из n секретных свитков с морскими картами, пронумерованных от 1 до n. Сверху лежит свиток a1, под ним a2, и так далее. Все номера различны.

Капитан Архипов, не отрываясь от чая, выкрикивает номера нужных свитков. На i-м шаге он требует свиток bi. Если свиток ещё в стопке — Шкипер Баг снимает его вместе со всеми свитками выше (вытащить из середины нельзя — свитки слиплись от сырости). Если нужного свитка в стопке уже нет — Шкипер Баг делает умное лицо и ждёт следующей команды.

Посчитайте, сколько свитков Шкипер Баг достанет на каждом шаге.

Формат входных данных
Первая строка: n (1 ≤ n ≤ 200 000).

Вторая строка: n чисел ai — начальный порядок стопки (все различны).

Третья строка: n чисел bi — порядок требований капитана (все различны).

Формат выходных данных
n чисел — количество свитков, снятых на каждом шаге.


Примечание: 
В тестовом примере капитан потребовал свиток №2 — Шкипер Баг снял №1 и №2 сверху (2 штуки). Затем потребовал №1 — но его уже нет, ничего не происходит. Затем №3 — снял один.

Шкипер Баг ужасно страдает от морской болезни. Единственное спасение — зелье «Штиль», которое продаётся в лавках на островах архипелага. На n островах цены разные: в i-м порту бутылка стоит xi дублонов.

Каждый раз, когда «Нулевой указатель» заходит в порт, у Шкипера Бага с собой разная сумма — зависит от того, не украл ли корабельный кот монеты из кармана. Всего таких заходов будет q. Для каждого захода Шкипер Баг хочет заранее знать: в скольких портах архипелага он смог бы купить зелье, имея столько дублонов?

Формат входных данных
Первая строка: n (1≤n≤100 000) — количество портов.
Вторая строка: n чисел  xi​ (1≤xi≤100 000) — цены на зелье.
Третья строка: q (1≤q≤100 000) — количество заходов в порт.
Следующие q строк: число mi​ (1≤mi≤109) — дублоны Шкипера Бага при i-м заходе.

Формат выходных данных
q чисел — для каждого захода количество портов, где хватит денег.


Примечание: 
При 1 дублоне ни одна лавка недоступна. При 8 — можно купить в 4 лавках (цены 2, 3, 4, 7). При 3 — только одна лавка (цена 2). При 100 дублонах — все пять.

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

ФД взял текст из журнала и создал строку S длиной не более чем 10^6 символов. Из неё он хочет удалить все вхождения подстроки T длиной <= 100 символов неподходящего содержания. Чтобы сделать это, ФД ищет первое вхождение T в S и удаляет его. Затем он повторяет процесс опять, снова удаляя первое вхождение T, продолжая так до тех пор, пока больше не станет вхождений T в S. Заметим, что удаление одного вхождения может создать другое вхождение, которое не существовало раньше.

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

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

Первая строка содержит S. Вторая строка будет содержать T. Длина T не более чем длина S, и все символы S и T - маленькие латинские буквы (a..z).

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

Строка S после завершения всех удалений. Гарантируется, что S не станет пустой после завершения процесса всех удалений.

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

Амбар описан простым (несамопересекающимся прямоугольником) с вершинами в целочисленных координатах \((x_1, y_1) \ldots (x_n, y_n)\) перечисленных по часовой стрелке. Его рёбра чередуются между горизонтальными (параллельными оси Х и вертикальными - параллельными оси Y). Первое ребро может быть как вертикальным, так и горизонтальным. Выход расположен в точке \((x_1, y_1)\). Беси начинает внутри амбара, в одной из некоторых вершин \((x_i, y_i)\) для \(i > 1\). Она может двигаться только по периметру амбара, по часовой стрелке либо против часовой стрелки. Её цель - пройти минимальное расстояние до выхода. Это относительно легко, когда свет включён. Поскольку она просто должна выбрать какой путь короче от текущего положения до выхода - по часовой стрелке или против часовой стрелки.

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

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

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

Первая строка ввода содержит \(N\) (\(4 \leq N \leq 200\)). Каждая из последующих \(N\) строк содержит два целых числа, описывающих точки \((x_i, y_i)\) в порядке обхода амбара по часовой стрелке. Эти целые числа в диапазоне \(-100,000 \ldots 100,000\).

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

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

Устав от холодной зимы Беси хочет на каникулах слетать туда, где потеплее.
Билеты коровам продаёт только Air Bovinia.

Air Bovinia имеет N самолётов (1 <= N <= 500), каждый из которых летит
по специфическому маршруту, состоящему из двух или более городов.
Например, самолёт может стартовать в городе 1, затем лететь в город 5,
затем лететь в город 2, затем лететь в город 8 (конечную точку маршрута).
Никакой город не появляется в маршруте два или более раз. Если Беси
выбрала маршрут, она может сесть на него в любом городе этого маршрута
и выйти из него в любом из последующих городов этого маршрута. Она не
обязана садиться в первом городе, а выходить в последнем городе этого
маршрута. Каждый маршрут имеет определённую цену, которую Беси должна
заплатить, если она использует любую часть маршрута, не зависящую от
количества городов, которые она посетит вдоль маршрута. Также Беси
имеет право использовать один маршрут только один раз, это означает,
что она не может использовать маршрут, а затем позже использовать другую
часть этого же маршрута.

Беси хочет найти самый дешёвый способ добраться от своей фермы (город A)
до своего "тёплого местечка" (город B). Она хочет использовать не более
чем два маршрута. Помогите ей определить минимальную цену путешествия.

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

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

Первая строка ввода содержит A, B, N разделённые одиночными пробелами.
Следующие 2N строк описывают доступные маршруты, по две строки на маршрут.
Первая строка содержит стоимость маршрута (целое число в интервале от 1 до 1000)
и количество городов в этом маршруте (целое число от 1 до 500). Вторая
строка содержит список городов в порядке следования в этом маршруте.
Каждый город идентифицируется целым числом в диапазоне от 1 до 10,000.

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

Выведите минимальную цену путешествия из A в B, использующего не более
чем два маршрута. Если такого решения нет, выведите -1.

Примечание

Используя маршрут 2 добираемся от города 1 до города 3, а затем с помошью
маршрута 1 путешествуем из города 3 в город 2.

Устав от холодной зимы Беси планирует слетать куда потеплее на каникулах.
К несчастью, только одна кампания Air Bovinia продаёт билеты коровам.

Air Bovinia имеет N самолётов (1 <= N <= 500), каждый из которых
летает по собственному маршруту, состоящему из
двух или более городов. Например, такому: маршрут
начинается в городе 1, затем самолёт летит в город 5,
затем в город 2, затем в город 8. Никакой город не появляется
в этом маршруте дважды и более раз. Если Беси
выбрала маршрут, то она может сесть на него в любом городе
этого маршрута и сойти также в любом городе этого маршрута.
Она не обязана садиться в самолёт в первом городе маршрута
и выходить в последнем. Каждый маршрут имеет определённую цену,
которую Беси должна заплатить, если она использует
любую часть маршрута, не зависящую от количества городов,
которые она посетит во время маршрута.

Беси хочет найти самый дешёвый способ пропутешествовать от её фермы
(город A) до её "тёплого местечка" (город B).
При этом она хочет использовать только один маршрут,
чтобы не мучиться с пересадками.
Помогите ей определить минимальную цену, которую ей придётся заплатить.

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

Первая строка содержит числа A,B,N разделённые одиночными пробелами.

Следующие 2N строк описывают доступные маршруты - по две строки на маршрут.

Первая строка содержит цену этого маршрута (целое число от 1 до 1000)
и количество городов, вдоль этого маршрута (целое число от 1 до 500).

Вторая строка содержит список городов в порядке посещения вдоль этого
маршрута. Каждый город идентифицируется целым числом от 1 до 10,000.

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

Выведите минимальную стоимость одного маршрута, который Беси
может использовать для перемещения из города A в город B.
Если такого маршрута нет, выведите -1.

Примечание

Хотя имеется более дешёвый решение из двух маршрутов (маршрут 2
из города 1 в город 3, затем маршрут 1 из города 3 в город 2),
Беси выбирает только прямой маршрут
- маршрут 3, цена которого равна 8.

Фермер Джон повесил большую карту США на стене своей фермы. Разглядывая её подолгу, коровы начали замечать курьезы. Например города Flint, MI и Miami, FL: первые две буквы первого города (Flint) дают код штата FL для второго города и наоборот, первые две буквы второго города (Miami) дают код штата первого города - MI.

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

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

Первая строка ввода содержит \(N\) (\(1 \leq N \leq 200,000\)), количество городов на карте.

Каждая из следующих \(N\) строк содержит две строки: имя города (от 2 до 10 маленьких латинских букв) и двухсимвольный код штата (из больших латинских букв). Заметим, что код штата может быть например ZQ, хотя в действительности в США нет такого штата. Могут существовать города с одинаковыми названиями, но они будут в различных штатах.

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

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

Вам даны целые числа \(M\) и \(K\) \((1 \leq M \leq 10 ^ 9, 1 \leq K \leq 31)\). Выберите положительное целое \(N\) и сконструируйте последовательность \(a\) из \(N\) неотрицательных целых чисел так, чтобы выполнялись следующие условия:

  • \(1 \le N \le 100\)
  • \(a_1 + a_2 + \dots + a_N = M\)
  • \(\text{popcount}(a_1) \oplus \text{ popcount}(a_2) \oplus \dots \oplus \text{ popcount}(a_N) = K\)

Если такой последовательности не существует, выведите \(-1\).

\(\dagger \text{ popcount}(x)\) это количество \(1\) в двоичном представлении числа \(x\). Например, popcount от \(11\) это \(3\), а popcount от \(16\) это \(1\).

\(\dagger \oplus\) это оператор побитового XOR.

Ввод содержит \(T\) (\(1 \le T \le 5 \cdot 10^3\)) независимых подтестов.

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

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

Первая и единственная строка каждого подтеста содержит \(M\) и \(K\).

Гарантируется, что все тесты уникальны.

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

Выведите решения для всех \(T\) подтестов таким образом:

Если ответ не существует выведите \(-1\).

Иначе, первая строка для подтеста должна содержать \(N\), длина последовательности -- (\(1 \le N \le 100\)).

Вторая строка для этого подтеста должна содержать \(N\) разделённых пробелом целых чисел, которые удовлетворяют условиям -- (\(0 \le a_i \le M\)).

DFS Order#90307

У Беси есть простой неориентированный граф с вершинами, помеченными \(1\dots N\) (\(2\le N\le 750\)). Она генерирует поиск в глубину графа вызывая функцию \(\texttt{dfs}(1)\), описанную следующим C++ кодом. Каждый список соседних вершин (\(\texttt{adj}[i]\) для всех \(1\le i\le N\)) может быть переставлен произвольно перед началом поиска в глубину, поэтому граф может иметь множество возможных DFS-порядков.

vector<bool> vis(N + 1);
vector<vector<int>> adj(N + 1);  // adjacency list
vector<int> dfs_order;

void dfs(int x) {
    if (vis[x]) return;
    vis[x] = true;
    dfs_order.push_back(x);
    for (int y : adj[x]) dfs(y);
}

Вам дано начальное состояние графа, а также стоимость изменения состояния каждого ребра. А именно, для каждой пары вершин \((i,j)\) удовлетворяющей \(1\le i<j\le N\), Вам дано целое число \(a_{i,j}\) (\(0<|a_{i,j}|\le 1000\)) такое, что

  • Если \(a_{i,j}>0\), ребро \((i,j)\) сейчас отсутствует в графе, оно может быть добавлено за стоимость \(a_{i,j}\).
  • Если \(a_{i,j}<0\), ребро \((i,j)\) сейчас в графе, оно может быть удалено за стоимость \(-a_{i,j}\).

Определите минимальную суммарную стоимость изменить граф так, чтобы \([1,2\dots,N]\) стало возможным DFS-обходом.

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

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

Далее следует \(N-1\) строка. \(j-1\)-ая строка содержит \(a_{1,j}, a_{2,j}, \dots, a_{j-1,j}\) разделённые одиночными пробелами.

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

Минимальная стоимость изменить граф так, чтобы \([1,2,\dots, N]\) стал возможным DFS-обходом.

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

\(N\) (\(1 \leq N \leq 7500\)) коров Фермера Джона стоят в ряд. Корова \(1\) стоит в начале этого ряда, а корова \(N\) - в конце. \(i\)-ая корова имеет разновидность \(a_i\) (\(1 \leq a_i \leq N\)).

ФД везет своих коров на осмотр в местную больницу для крупного рогатого скота. Однако ветеринар, специализирующийся на коровах, очень придирчив и хочет провести осмотр \(i\)-ой коровы в очереди, только если она относится к виду \(b_i\) (\(1 \leq b_i \leq N\)).

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

  • Выбирает два числа \(l\) и \(r\) такие, что \(1 \leq l \le r \leq N\). Реверсирует порядок коров между \(l\)-ой и \(r\)-ой коровами включительно.

ФД хочет измерить насколько эффективен его подход. Для каждого \(c=0 \ldots N\), помогите ФД помогите ФД определить количество различных операций (\(l,r\)) таких, что ровно \(c\) коров будут проверены ветеринаром. Две операции (\(l_1,r_1\)) и (\(l_2,r_2\)) считаются различными, если \(l_1 \neq l_2\) или \(r_1 \neq r_2\).

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

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

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

Третья строка содержит \(b_1, b_2, \ldots, b_N\).

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

Выведите \(N+1\) строку, где \(i\)-ая строка содержит количество различных операций (\(l,r\)), которые обеспечат, что ровно \(i-1\) корова будет проверена.

Беси помогает Эльзе играть со словами. Слова берутся из банка, содержащего \(M\) различных слов, ни одно слово не является префиксом другого.

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

Беси уже решила читать слова из словаря в порядке \(w_1,w_2,\dots,w_M\). Если Эльза ответит так быстро, как это возможно, сколько символов из каждого слова прочитает Беси?

Слова заданы в сжатом формате. Сначала мы определяем \(N+1\) (\(1\le N\le 10^6\)) различных слов и затем банк слов состоит из всех этих слов, ни одно из которых не является префиксом другого. Слова определяются следующим образом:

  • Изначально, 0-ое слово - пустая строка.
  • Затем для каждого each \(1\le i\le N\), \(i\)-ое слово будет равно \(p_i\)-ому слову плюс дополнительный символ в конце (\(0\le p_i<i\)). Символы выбираются так, что все \(N+1\) слов различны.

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

Первая строка содержит \(N\), где \(N+1\) количество слов, представленных в сжатом формате.

Следующая строка содержит числа \(p_1,p_2,\dots,p_N\) где \(p_i\) представляет, что \(i\)-ое слово формируется взятием \(p_i\)-го слова и добавлением одного символа в конец.

\(M\) - количество слов, которые не являются префиксом некоторого другого слова. Следующие \(M\) строк содержат \(w_1,w_2,\dots,w_M\), означающие что \(w_i\)-ое слово будет \(i\)-ым прочитанным. Гарантируется, что слова к чтению формируют перестановку слов из банка.

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

Выведите \(M\) строк, где \(i\)-ая строка содержит количество символов \(i\)-го слова, которое прочиает Беси.

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

Беси проходит тест вида да/нет из \(N\) вопросов (\(1\le N\le 2\cdot 10^5\)). За \(i\)-ый вопрос она может добавить \(a_i\) баллов если ответит правильно, и отнять \(b_i\) баллов, если ответит неправильно или не изменить сумму, если не ответит вообще на вопрос (\(0<a_i,b_i\le 10^9\)).

Беси знает ответы на все вопросы, но боится, что администратор теста Эльза подменит до \(k\) вопросов так, чтоб получилось, что Беси ответила неправильно.

Заданы \(Q\) (\(1\le Q\le N+1\)) кандидатов величин \(k\) (\(0\le k\le N\)), определите количество баллов, которые Беси гарантированы для каждого \(k\), зная, что она должна ответить не менее чем на \(k\) вопросов.

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

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

Каждая из следующих \(N\) строк содержит \(a_i\) и \(b_i\).

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

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

Выведите ответ для каждого \(k\) на отдельной строке.

У Фермера Джона есть булевское выражение длиной в \(N\) слов (\(1 \leq N < 2 \cdot 10^5\), \(N\) нечётное). Только \(\texttt{true}\) or \(\texttt{false}\) появляются на нечётных позициях, и только \(\texttt{and}\) и \(\texttt{or}\) появляются на чётных позициях.

Фраза вида \(x\text{ OPERATOR }y\), где \(x\) и \(y\) или \(\texttt{true}\) или \(\texttt{false}\), а \(\text{OPERATOR}\) есть \(\texttt{and}\) или \(\texttt{or}\), вычисляется следующим образом:

  • \(x\texttt{ and }y\): Это вычисляется в true если оба \(x\) и \(y\) true, иначе в false.
  • \(x\texttt{ or }y\): Это вычисляется в true если или \(x\) или \(y\) true, иначе в false.

При вычислении выражения ФД действует так: Аналогично C++, \(\texttt{and}\) имеет более высокий приоритет чем \(\texttt{or}\). Более подробно: для вычисления выражения повторяется следующий шаг пока в выражении не останется ровно одно слово.

  1. Если выражение содержит \(\texttt{and}\), выбирается любой из них и фраза, окружающая его, заменяется её вычислением.
  2. Иначе, выражение содержит \(\texttt{or}\). Выбирается любой из них и фраза, окружающая его, заменяется её вычислением.

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

У ФД есть \(Q\) \((1 \leq Q \leq 2 \cdot 10^5)\) запросов. В каждом запросе она даёт Вам два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq N\), \(l\) и \(r\) оба нечётные), и удаляет сегмент от ключевого слова \(l\) до ключевого слова \(r\) включительно. Он хочет заменить удалённый сегмент одним \(\texttt{true}\) или \(\texttt{false}\) так, чтобы оставшееся выражение вычислялось к определённому булевскому значению. Помогите ФД определить, возможно ли это.

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

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

Следующая строка содержит \(N\) слов, корректное булевское выражение.

Последующие \(Q\) строк содержат два целых числа \(l\) и \(r\), и строку \(\texttt{true}\) или \(\texttt{false}\), обозначающую, что он хочет, чтобы оставшееся после удаления выражение вычислилось к этому значению.

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

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

У Фермера Джона есть перестановка \(p\) длины \(N\) (\(2 \leq N \leq 10^5)\), содержащая каждое положительное целое от \(1\) до \(N\) ровно один раз. Однако Фермер Нхой прокрался в амбар ФД и испортил \(p\). Чтобы не быть совсем плохим, ФН написал несколько советов, которые помогут ФД восстановить \(p\). Пока в \(p\) было более одного элемента, ФН делал следующее:

Пусть оставшиеся элементы \(p\) есть \(p'_1, p'_2, \dots , p'_n\),

  • Если \(p'_1 > p'_n\), он записывал \(p'_2\) и удалял \(p'_1\) из перестановки.
  • Иначе, он выписывал \(p'_{n-1}\) и удалял \(p'_n\) из перестановки.

В конце у ФН получились выписанные \(N - 1\) целых чисел \(h_1, h_2, \dots, h_{N-1}\), в указанном порядке. По заданным числам \(h\) ФД просит у Вас помощи реконструировать лексикографически минимальную перестановку \(p\), соответствующую алгоритму ФН или определить, что ФН сделал ошибку. Напомним, что если Вам даны две перестановки \(p\) и \(p'\), то \(p\) лексикографически меньше чем \(p'\), если \(p_i < p'_i\) в первой позиции, \(i\), где они различаются.

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

Каждый ввод состоит из \(T\) независимых подтестов (\(1\le T\le 10\)). Каждый подтест описывается следующим образом:

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

Вторая строка содержит \(N - 1\) целых чисел \(h_1, h_2, \dots, h_{N-1}\) (\(1\le h_i\le N\)).

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

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

Если существует такая перестановка \(p\) из чисел \(1\dots N\), соответствующая \(h\), выведите лексикографически минимальную такую перестановку \(p\). Если такой перестановки \(p\) не существует, выведите \(-1\).

У Фермера Джона важная задача - решить какой тип сена купить для своих коров.

У Фермера Джона есть \(N\) коров (\(2 \le N \le 10^5\)) пронумерованных от \(1\) до \(N\). Каждая корова любит ровно один тип сена \(h_i\) (\(1 \le h_i \le N\)). ФД хочет, чтобы все его коровы любили один тип сена.

Чтобы это случилось, ФД может сформировать фокус-группы. Фокус-группа состоит из всех коров в непрерывном интервале от \(i\) до \(j\), включительно. Если в фокус-группе более половины коров любит один и тот же некоторый тип сена, то все коровы начинают любить этот тип сена, иначе ни у одной коровы не изменяется любимый тип сена. Например, если фокус группа состоит из 16 коров, 9 или более из которых любят один и тот же тип сена, то и остальные 7 коров теперь будут любить этот же тип сена.

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

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

Сначала идёт одно целое число \(T\), которое обозначает количество независимых тестов \((1 \leq T \leq 10)\).

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

Вторая строка каждого теста состоит из \(N\) целых чисел, любимых типов сена \(h_i\), в порядке номеров коров.

Гарантируется, что сумма \(N\) во всех тестах не превысит \(2\cdot 10^5\).

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

Выведите \(T\) строк, по одной для каждого теста.

Если возможно сделать, чтобы все коровы полюбили один и тот же тип сена, выведите все такие возможные типы сена в порядке возрастания. Иначе, выведите \(-1\). Когда выводите список чисел, выводите соседние числа через один пробел, и в конце этой строки не должно быть пробелов.

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\) перед любыми обновлениями и после каждого обновления.

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