#P9719. [EC Final 2022] Minimum Suffix

[EC Final 2022] Minimum Suffix

题目描述

For a string ss of length nn, we define pj=xp_j = x if s[xj]s[x\ldots j] is the minimum suffix of s[1j]s[1\ldots j], for all j=1,,nj=1,\ldots, n. (A suffix is the minimum suffix of a string if it is lexicographically smaller than any other suffix of that string.)

You are to recover ss from p1,,pnp_1,\ldots, p_n. If there are multiple answers, find the lexicographically smallest one.

输入格式

The first line contains a single integer TT (1T1051\le T\le 10^5) representing the number of test cases.

For each test case, the first line contains a single integer nn (1n3×1061\le n\le 3\times 10^6) representing the length of ss. The next line contains nn integers p1,,pnp_1,\ldots, p_n (1pii1\le p_i\le i for all 1in1\le i\le n).

It is guaranteed that the sum of nn over all test cases does not exceed 3×1063\times 10^6.

输出格式

For each test case, output one line. If there is no solution, output 1-1. Otherwise, output the lexicographically smallest ss. Characters of ss are represented by positive integers. Smaller integers represent smaller characters in the lexicographical order.

题目大意

【题目描述】

对于长度为 nn 的字符串 ss,如果 s[xj]s[x\ldots j]s[1j]s[1\ldots j] 的最小后缀,则我们定义 pj=xp_j = x,其中 j=1,,nj=1,\ldots, n。(后缀是字符串的最小后缀,如果它在字典序上小于该字符串的任何其他后缀。)

你需要从 p1,,pnp_1,\ldots, p_n 中恢复出 ss。如果存在多个答案,则找出字典序最小的那个。

【输入格式】

第一行包含一个整数 TT1T1051\le T\le 10^5),表示测试用例的数量。

对于每个测试用例,第一行包含一个整数 nn1n3×1061\le n\le 3\times 10^6),表示 ss 的长度。接下来的一行包含 nn 个整数 p1,,pnp_1,\ldots, p_n1pii1\le p_i\le i1in1\le i\le n)。

保证所有测试用例中 nn 的总和不超过 3×1063\times 10^6

【输出格式】

对于每个测试用例,输出一行。如果没有解决方案,则输出 1-1。否则,输出字典序最小的 ssss 中的字符由正整数表示。较小的整数表示字典序较小的字符。

【提示说明】

本题输入输出规模较大,建议使用快速的输入输出方式。

翻译来自于:ChatGPT

6
3
1 1 1
3
1 1 2
3
1 1 3
3
1 2 1
3
1 2 2
3
1 2 3
1 2 2
-1
1 2 1
1 1 2
2 1 2
1 1 1

提示

As the input/output can be huge, it is recommended to use fast input/output methods.