QOJ.ac

QOJ

実行時間制限: 2 s メモリ制限: 1024 MB 満点: 100 ハック可能 ✓

#18517. Ноябрьский дождь

統計

Вы ведёте грандиозную, развивающуюся симфонию. Ансамбль состоит из музыкантов, каждый из которых играет определённую гармоническую частоту (представленную неотрицательным целым числом). Изначально сцена совершенно пуста. За $n$ последовательных шагов выполняется ровно одно действие, изменяющее состав. На каждом шаге $i = 1, 2, \dots, n$ выполняется операция:

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

На каждом шаге исполнение привязано к «Фантомной ноте». Из-за уникальной акустики симфонии Фантомная нота никогда не звучит на сцене. Вместо этого её высота всегда определяется наименьшей частотой, которая в данный момент отсутствует в исполнении. Высота Фантомной ноты математически определяется как mex (минимальное пропущенное значение). Пусть $S$ — мультимножество неотрицательных целых чисел, представляющее набор частот, которые в данный момент играет ансамбль. Минимальное пропущенное значение, обозначаемое $\operatorname{mex}(S)$, — это наименьшее неотрицательное целое число $x$ такое, что $x \notin S$.

После $i$-го действия требуется, чтобы Фантомная нота звучала ровно на $a_i$.

Ваша задача — определить, существует ли последовательность выбранных частот $b_1, b_2, \dots, b_n$, которая идеально воспроизводит требуемый ряд Фантомной ноты на каждом шаге, и построить одну такую последовательность, если она существует.

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

Эта задача содержит несколько наборов входных данных. Первая строка ввода содержит одно целое число $t$ ($1 \le t \le 3 \cdot 10^5$) — количество наборов входных данных.

Для каждого набора входных данных каждое исполнение описывается тремя строками:

  • Первая строка содержит одно целое число $n$ ($1 \le n \le 5000$) — общее количество последовательных шагов в исполнении.
  • Вторая строка содержит строку $op$ длины $n$, состоящую исключительно из символов + и -. Символ $op_i$ определяет характер $i$-го действия: + означает вход музыканта, а - — выход музыканта.
  • Третья строка содержит $n$ целых чисел $a_1, a_2, \dots, a_n$ ($0 \le a_i \le n$) — требуемую высоту Фантомной ноты после $i$-го действия.

Гарантируется, что сумма $n^2$ по всем исполнениям не превосходит $5000^2$.

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

Для каждого исполнения выведите результат следующим образом:

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

В противном случае выведите две строки:

  • Первая строка должна содержать слово YES;
  • Вторая строка должна содержать $n$ неотрицательных целых чисел $b_1, b_2, \dots, b_n$, представляющих конкретную частоту, которую играет входящий или уходящий музыкант на соответствующем шаге.

Каждая частота $b_i$ должна в точности удовлетворять акустическим ограничениям и правилам операций, описанным в условии. Разрешается выводить любое допустимое неотрицательное целое число, представимое стандартным знаковым 64-битным целым.

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

Примеры

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

4
2
++
0 2
3
+++
0 1 3
3
+-+
1 0 2
6
++-+-+
0 2 0 0 0 1

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

YES
1 0
YES
2 0 1
NO
YES
1 0 0 7 1 0

Примечание

В первом примере четыре набора входных данных.

  • В первом наборе вставка $1$ оставляет mex (Фантомную ноту) равным $0$, затем вставка $0$ делает mex равным $2$.
  • Во втором наборе вставка $2,0,1$ даёт последовательность mex $0,1,3$.
  • В третьем наборе mex $1$ после первой операции вынуждает вставить $0$; после его удаления ещё одна вставка не может сделать mex равным $2$, поэтому ответ NO.
  • В четвёртом наборе выведенные значения приводят к эволюции мультимножества с последовательностью mex $0,2,0,0,0,1$.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.