CF1738D.Permutation Addicts
普及+/提高
通过率:0%
时间限制:2.00s
内存限制:512MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
Given a permutation a1,a2,…,an of integers from 1 to n, and a threshold k with 0≤k≤n, you compute a sequence b1,b2,…,bn as follows.
For every 1≤i≤n in increasing order, let x=ai.
- If x≤k, set bx to the last element aj (1≤j<i) that aj>k. If no such element aj exists, set bx=n+1.
- If x>k, set bx to the last element aj (1≤j<i) that aj≤k. If no such element aj exists, set bx=0.
Unfortunately, after the sequence b1,b2,…,bn has been completely computed, the permutation a1,a2,…,an and the threshold k are discarded.
Now you only have the sequence b1,b2,…,bn. Your task is to find any possible permutation a1,a2,…,an and threshold k that produce the sequence b1,b2,…,bn. It is guaranteed that there exists at least one pair of permutation a1,a2,…,an and threshold k that produce the sequence b1,b2,…,bn.
A permutation of integers from 1 to n is a sequence of length n which contains all integers from 1 to n exactly once.
给定一个由 1 到 n 的整数组成的排列 a1,a2,…,an,以及一个阈值 k(满足 0≤k≤n),我们按如下方式计算一个序列 b1,b2,…,bn。
对每个 1≤i≤n(按递增顺序),令 x=ai:
- 若 x≤k,则将 bx 设为最后一个满足 aj>k 的元素 aj(其中 1≤j<i);若不存在这样的 aj,则令 bx=n+1。
- 若 x>k,则将 bx 设为最后一个满足 aj≤k 的元素 aj(其中 1≤j<i);若不存在这样的 aj,则令 bx=0。
不幸的是,在序列 b1,b2,…,bn 完全计算完毕后,原始排列 a1,a2,…,an 和阈值 k 均被丢弃。
现在你仅拥有序列 b1,b2,…,bn。你的任务是找出任意一组可能的排列 a1,a2,…,an 和阈值 k,使得它们能生成该序列 b1,b2,…,bn。题目保证至少存在一对排列 a1,a2,…,an 和阈值 k 能生成给定的序列 b1,b2,…,bn。
由 1 到 n 的整数构成的一个排列,是指一个长度为 n 的序列,其中恰好包含 1 到 n 的每一个整数各一次。
输入格式
Each test contains multiple test cases. The first line contains an integer t (1≤t≤105) — the number of test cases. The following lines contain the description of each test case.
The first line of each test case contains an integer n (1≤n≤105), indicating the length of the permutation a.
The second line of each test case contains n integers b1,b2,…,bn (0≤bi≤n+1), indicating the elements of the sequence b.
It is guaranteed that there exists at least one pair of permutation a1,a2,…,an and threshold k that produce the sequence b1,b2,…,bn.
It is guaranteed that the sum of n over all test cases does not exceed 105.
每个测试包含多个测试用例。第一行包含一个整数 t(1≤t≤105),表示测试用例的数量。接下来的各行描述各个测试用例。
每个测试用例的第一行包含一个整数 n(1≤n≤105),表示排列 a 的长度。
每个测试用例的第二行包含 n 个整数 b1,b2,…,bn(0≤bi≤n+1),表示序列 b 的元素。
保证至少存在一对排列 a1,a2,…,an 和阈值 k,能生成序列 b1,b2,…,bn。
保证所有测试用例的 n 之和不超过 105。
输出格式
For each test case, output the threshold k (0≤k≤n) in the first line, and then output the permutation a1,a2,…,an (1≤ai≤n) in the second line such that the permutation a1,a2,…,an and threshold k produce the sequence b1,b2,…,bn. If there are multiple solutions, you can output any of them.
对于每个测试用例,第一行输出阈值 k(0≤k≤n),第二行输出排列 a1,a2,…,an(1≤ai≤n),使得该排列 a1,a2,…,an 与阈值 k 共同生成序列 b1,b2,…,bn。若存在多个解,输出任意一个即可。
输入输出样例
输入#1
3 4 5 3 1 2 6 7 7 7 3 3 3 6 4 4 4 0 0 0
输出#1
2 1 3 2 4 3 1 2 3 4 5 6 3 6 5 4 3 2 1
说明/提示
For the first test case, permutation a=[1,3,2,4] and threshold k=2 will produce sequence b as follows.
- When i=1, x=ai=1≤k, there is no aj (1≤j<i) that aj>k. Therefore, b1=n+1=5.
- When i=2, x=ai=3>k, the last element aj that aj≤k is a1. Therefore, b3=a1=1.
- When i=3, x=ai=2≤k, the last element aj that aj>k is a2. Therefore, b2=a2=3.
- When i=4, x=ai=4>k, the last element aj that aj≤k is a3. Therefore, b4=a3=2.
Finally, we obtain sequence b=[5,3,1,2].
For the second test case, permutation a=[1,2,3,4,5,6] and threshold k=3 will produce sequence b as follows.
- When i=1,2,3, ai≤k, there is no aj (1≤j<i) that aj>k. Therefore, b1=b2=b3=n+1=7.
- When i=4,5,6, ai>k, the last element aj that aj≤k is a3. Therefore, b4=b5=b6=a3=3.
Finally, we obtain sequence b=[7,7,7,3,3,3].
For the third test case, permutation a=[6,5,4,3,2,1] and threshold k=3 will produce sequence b as follows.
- When i=1,2,3, ai>k, there is no aj (1≤j<i) that aj≤k. Therefore, b4=b5=b6=0.
- When i=4,5,6, ai≤k, the last element aj that aj>k is a3. Therefore, b1=b2=b3=a3=4.
Finally, we obtain sequence b=[4,4,4,0,0,0].
对于第一个测试用例,排列 a=[1,3,2,4] 与阈值 k=2 将生成序列 b,过程如下:
- 当 i=1 时,x=ai=1≤k,不存在满足 1≤j<i 且 aj>k 的 aj。因此,b1=n+1=5。
- 当 i=2 时,x=ai=3>k,最后一个满足 aj≤k 的 aj 是 a1。因此,b3=a1=1。
- 当 i=3 时,x=ai=2≤k,最后一个满足 aj>k 的 aj 是 a2。因此,b2=a2=3。
- 当 i=4 时,x=ai=4>k,最后一个满足 aj≤k 的 aj 是 a3。因此,b4=a3=2。
最终,我们得到序列 b=[5,3,1,2]。
对于第二个测试用例,排列 a=[1,2,3,4,5,6] 与阈值 k=3 将生成序列 b,过程如下:
- 当 i=1,2,3 时,ai≤k,不存在满足 1≤j<i 且 aj>k 的 aj。因此,b1=b2=b3=n+1=7。
- 当 i=4,5,6 时,ai>k,最后一个满足 aj≤k 的 aj 是 a3。因此,b4=b5=b6=a3=3。
最终,我们得到序列 b=[7,7,7,3,3,3]。
对于第三个测试用例,排列 a=[6,5,4,3,2,1] 与阈值 k=3 将生成序列 b,过程如下:
- 当 i=1,2,3 时,ai>k,不存在满足 1≤j<i 且 aj≤k 的 aj。因此,b4=b5=b6=0。
- 当 i=4,5,6 时,ai≤k,最后一个满足 aj>k 的 aj 是 a3。因此,b1=b2=b3=a3=4。
最终,我们得到序列 b=[4,4,4,0,0,0]。
输入解题思路,AI测评打分。不知道怎么写?