Олимпиадный тренинг

Задача . F. Минимальные отрезки


Задача

Темы: Конструктив *3400

У вас была последовательность \(a_1, a_2, \ldots, a_n\), состоящая из целых чисел от \(1\) до \(n\), не обязательно различных. По неизвестной причине вы решили посчитать следующую характеристику последовательности:

  • Пусть \(r_i\) (\(1 \le i \le n\)) равно наименьшему \(j \ge i\), такому, что на подотрезке \(a_i, a_{i+1}, \ldots, a_j\) встречаются все различные числа из последовательности \(a\). Более формально, для любого \(k \in [1, n]\) существует \(l \in [i, j]\), такое, что \(a_k = a_l\). Если такого \(j\) не существует, \(r_i\) полагается равным \(n+1\).
  • Характеристикой последовательности \(a\) назовем последовательность \(r_1, r_2, \ldots, r_n\).
К сожалению, последовательность \(a\) потерялась, но у вас осталась её характеристика \(r\). Вы хотите восстановить любую последовательность \(a\), подходящую под характеристику, или определить, что в характеристику закралась ошибка, и такой последовательности не существует.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина потерянной последовательности \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(r_1, r_2, \ldots, r_n\) (\(i \le r_i \le n+1\)) — характеристика потерянной последовательности \(a\).

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

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

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

  • Если не существует последовательности \(a\) с характеристикой \(r\), то выведите «No».
  • Иначе, в первой строке выведите «Yes», а во второй строке выведите любую последовательность целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)), подходящую под характеристику \(r\).
Вы можете выводить «Yes» и «No» в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).
Примечание

В первом наборе входных данных подходит последовательность \(a = [1, 2, 1]\). На подотрезках \([1, 2]\) и \([2, 3]\) встречаются числа \(1\) и \(2\).

Во втором наборе входных данных можно показать, что подходящей последовательности \(a\) не существует.


Примеры
Входные данныеВыходные данные
1 5
3
2 3 4
5
2 3 5 4 6
1
1
3
1 3 4
8
3 6 6 6 8 9 9 9
Yes
1 2 1
No
Yes
1 
No
Yes
1 3 5 3 5 1 1 3

time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w643
Комментарий учителя