QOJ.ac

QOJ

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

#18517. 11월의 비

통계

당신은 웅장하고 진화하는 교향곡을 지휘하고 있습니다. 앙상블은 각 연주자가 특정 고조파 주파수(음이 아닌 정수로 표현됨)를 연주하는 연주자들로 구성됩니다. 초기에는 무대가 완전히 비어 있습니다. $n$개의 순차적인 단계를 거쳐 배열을 변경하는 정확히 하나의 동작이 수행됩니다. 각 단계 $i = 1, 2, \dots, n$에 대해 다음 연산이 수행됩니다:

  • 동작이 +(입장)인 경우: 새로운 연주자가 앙상블에 합류합니다. 당신은 그들이 연주할 정확한 주파수 $b_i$를 결정해야 합니다.
  • 동작이 -(퇴장)인 경우: 무대에서 연주자가 떠납니다. 현재 연주 중인 연주자의 주파수 $b_i$를 선택하고 그 중 정확히 한 명이 연주를 중단하도록 해야 합니다.

매 단계마다 공연은 "팬텀 노트(Phantom Note)"에 의해 고정됩니다. 교향곡의 독특한 음향 특성 때문에 팬텀 노트는 실제로 무대 위의 누구도 연주하지 않습니다. 대신, 그 음높이는 항상 현재 공연에서 빠져 있는 가장 낮은 주파수에 의해 결정됩니다. 팬텀 노트의 음높이는 수학적으로 mex(최소 배제값)로 정의됩니다. $S$를 현재 앙상블이 연주하고 있는 주파수들의 다중집합(음이 아닌 정수)이라고 할 때, $\operatorname{mex}(S)$로 표기되는 최소 배제값은 $x \notin S$를 만족하는 가장 작은 음이 아닌 정수 $x$입니다.

$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$)이 주어집니다.
  • 두 번째 줄에는 길이 $n$의 문자열 $op$가 주어지며, 문자는 +-로만 구성됩니다. $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에는 네 개의 테스트 케이스가 있습니다.

  • 첫 번째 테스트 케이스에서 $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.