QOJ.ac

QOJ

시간 제한: 2 s 메모리 제한: 1024 MB 총점: 100 해킹 가능 ✓

#18517. Listopadowy deszcz

통계

Prowadzisz wielką, rozwijającą się symfonię. Zespół składa się z muzyków, gdzie każdy muzyk gra określoną częstotliwość harmoniczną (reprezentowaną przez nieujemną liczbę całkowitą). Początkowo scena jest całkowicie pusta. W ciągu $n$ kolejnych kroków wykonuje się dokładnie jedną akcję zmieniającą układ. Dla każdego kroku $i = 1, 2, \dots, n$ wykonywana jest operacja:

  • Jeśli operacją jest + (Wejście): Nowy muzyk dołącza do zespołu. Musisz zdecydować, jaką dokładnie częstotliwość $b_i$ będzie grał.
  • Jeśli operacją jest - (Wyjście): Muzyk opuszcza scenę. Musisz wybrać częstotliwość $b_i$ muzyka aktualnie grającego i sprawić, by dokładnie jeden z nich przestał grać.

W każdym kroku występ jest zakotwiczony przez „Nutę Widmo”. Ze względu na wyjątkową akustykę symfonii, Nuta Widmo nigdy nie jest faktycznie grana przez nikogo na scenie. Zamiast tego jej wysokość jest zawsze określana przez najniższą częstotliwość, która aktualnie brakuje w wykonaniu. Wysokość Nuty Widmo jest matematycznie zdefiniowana jako mex (ang. minimum excluded value). Niech $S$ będzie multizbiorem nieujemnych liczb całkowitych reprezentującym zbiór częstotliwości aktualnie granych przez zespół. Minimalna wykluczona wartość, oznaczana jako $\operatorname{mex}(S)$, to najmniejsza nieujemna liczba całkowita $x$ taka, że $x \notin S$.

Po $i$-tej akcji wymagane jest, aby Nuta Widmo rezonowała dokładnie na wysokości $a_i$.

Twoim zadaniem jest określenie, czy istnieje poprawny ciąg wybranych częstotliwości $b_1, b_2, \dots, b_n$, który doskonale realizuje wymagany przebieg Nuty Widmo w każdym kroku, oraz skonstruowanie takiego ciągu, jeśli istnieje.

Wejście

To zadanie zawiera wiele zestawów danych. Pierwszy wiersz wejścia zawiera pojedynczą liczbę całkowitą $t$ ($1 \le t \le 3 \cdot 10^5$), oznaczającą liczbę zestawów danych.

Dla każdego zestawu danych każdy przebieg opisany jest w trzech wierszach:

  • Pierwszy wiersz zawiera pojedynczą liczbę całkowitą $n$ ($1 \le n \le 5000$), oznaczającą całkowitą liczbę kolejnych kroków w przebiegu.
  • Drugi wiersz zawiera napis $op$ o długości $n$, składający się wyłącznie ze znaków + i -. Znak $op_i$ określa charakter $i$-tej akcji: + oznacza wejście muzyka, a - oznacza wyjście muzyka.
  • Trzeci wiersz zawiera $n$ liczb całkowitych $a_1, a_2, \dots, a_n$ ($0 \le a_i \le n$), reprezentujących wymaganą wysokość Nuty Widmo po $i$-tej akcji.

Gwarantuje się, że suma $n^2$ po wszystkich przebiegach nie przekracza $5000^2$.

Wyjście

Dla każdego przebiegu wypisz wynik w następujący sposób:

Jeśli nie jest możliwe zrealizowanie wymaganego przebiegu Nuty Widmo, wypisz pojedynczy wiersz zawierający słowo NO.

W przeciwnym razie wypisz dwa wiersze:

  • Pierwszy wiersz musi zawierać słowo YES;
  • Drugi wiersz musi zawierać $n$ nieujemnych liczb całkowitych $b_1, b_2, \dots, b_n$, reprezentujących konkretną częstotliwość graną przez wchodzącego lub wychodzącego muzyka w odpowiednim kroku.

Każda częstotliwość $b_i$ musi dokładnie spełniać ograniczenia akustyczne i reguły operacyjne opisane w treści zadania. Dozwolone jest wypisanie dowolnej nieujemnej liczby całkowitej, pod warunkiem że jest reprezentowalna przez standardową 64-bitową liczbę całkowitą ze znakiem.

Jeśli istnieje wiele poprawnych ciągów częstotliwości spełniających przebieg, możesz wypisać dowolny z nich.

Przykład

Wejście 1

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

Wyjście 1

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

Uwagi

W przykładzie 1 są cztery zestawy danych.

  • W pierwszym zestawie danych wstawienie $1$ utrzymuje mex (Nutę Widmo) równy $0$, a następnie wstawienie $0$ sprawia, że mex staje się $2$.
  • W drugim zestawie danych wstawienie $2,0,1$ daje ciąg mex $0,1,3$.
  • W trzecim zestawie danych mex $1$ po pierwszej operacji wymusza wstawienie $0$; po jego usunięciu kolejne wstawienie nie może dać mex $2$, więc odpowiedzią jest NO.
  • W czwartym zestawie danych wypisane wartości powodują, że multizbiór ewoluuje z ciągiem 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.