/
Time Limit: 2 sec / Memory Limit: 1024 MiB
配点 : 1100 点
問題文
整数列 A=(A_1, A_2, \ldots, A_{N + K-1}) (1 \leq A_i \leq N+K-1) に対して、B_i を A_i,A_{i+1},\ldots,A_{i+K-1} の中の相異なる要素の個数として、列 B=(B_1, B_2, \ldots, B_N) を作ります。
B_1, B_2, \ldots, B_N が与えられます。この列 B を生成し得た列 A が存在するか判定し、存在する場合はそのような列 A を一つ構成してください。
各入力ファイルについて、T 個のテストケースを解いてください。
制約
- 1 \le T \le 5 \cdot 10^4
- 2 \le N \le 2 \cdot 10^5
- 2 \le K \le 2 \cdot 10^5
- 1 \le B_i \le K
- 各入力ファイル内の N の総和は 2\cdot 10^5 を超えない。
- 各入力ファイル内の K の総和は 2\cdot 10^5 を超えない。
- 入力中のすべての値は整数である。
入力
入力は標準入力から以下の形式で与えられる。
T case_1 case_2 \vdots case_T
各ケースは以下の形式である。
N K B_1 B_2 \ldots B_N
出力
各テストケースについて、題意を満たす列 A が存在しなければ、NO と出力せよ。
そうでなければ、答えを次の形式で出力せよ。
YES
A_1 A_2 \ldots A_{N+K-1}
ここで、1 \leq A_i \leq N+K-1 でなければならず、A は B を生成するものでなければならない。 複数の解が存在する場合は、そのいずれも認められる。
YES または NO の出力において、各文字は英大文字・小文字のいずれでもよい。
入力例 1
3 3 3 1 2 1 4 3 1 2 2 1 6 4 3 3 3 3 3 3
出力例 1
NO YES 1 1 1 2 2 2 YES 1 2 3 1 2 3 1 2 3
Score : 1100 points
Problem Statement
For an integer array A=(A_1, A_2, \ldots, A_{N + K-1}) (1 \leq A_i \leq N+K-1), let's construct an array B=(B_1, B_2, \ldots, B_N), where B_i is the number of distinct elements in A_i,A_{i+1},\ldots,A_{i+K-1}.
You are given B_1, B_2, \ldots, B_N. Determine if there exists an array A which could have produced such an array B, and if yes, construct one.
Solve T test cases for each input file.
Constraints
- 1 \le T \le 5 \cdot 10^4
- 2 \le N \le 2 \cdot 10^5
- 2 \le K \le 2 \cdot 10^5
- 1 \le B_i \le K
- The sum of N in one input file doesn't exceed 2\cdot 10^5.
- The sum of K in one input file doesn't exceed 2\cdot 10^5.
- All values in the input are integers.
Input
Input is given from Standard Input in the following format:
T case_1 case_2 \vdots case_T
Each case is in the following format:
N K B_1 B_2 \ldots B_N
Output
For each test case, if such an array A doesn't exist, output NO.
Otherwise, output the answer in the following format:
YES
A_1 A_2 \ldots A_{N+K-1}
Here, 1 \leq A_i \leq N+K-1 must hold, and A should produce B. If multiple solutions exist, any of them will be accepted.
In printing YES or NO, you can output each letter in any case (upper or lower).
Sample Input 1
3 3 3 1 2 1 4 3 1 2 2 1 6 4 3 3 3 3 3 3
Sample Output 1
NO YES 1 1 1 2 2 2 YES 1 2 3 1 2 3 1 2 3