在这个问题中,当我们提到“排列”时,指的是(1,2,...,N) 的排列。
对于 2 个排列 p 和 q,它们之间的距离 d(p,q) 定义如下:
考虑重复地交换 p 中相邻的 2个元素,直到p与 q 匹配。所需的最小操作次数被定义为 d(p,q)。
此外,对于一个排列 x,定义排列 f(x) 如下:
设 y=(1,2,…,N)。现在考虑满足d(x,z)≤d(y,z) 的排列 z。在这些排列中,选择字典序最小的作为 f(x)。
例如,对于 x=(2,3,1),满足d(x,z)≤d(y,z) 的可能排列 z 是(2,1,3),(2,3,1),(3,1,2),(3,2,1)。其中,字典序最小的是 (2,1,3),所以f(x)=(2,1,3)。
给定一个排列 A=(A1,A2,…,AN),确定是否存在一个排列x使得f(x)=A。
对于每个输入文件,解决 T 个测试样例。
字典序是指什么?以下是判断两个不同序列 S 和 T 的顺序的算法:
我们将 S 的第 i 个元素表示为Si。同时,如果 Si<Ti,则使用 S<T;如果 Si>Ti,则使用S>T。这是为了处理 S 和 T 长度不同的情况。
设LL为S和T之间较短序列的长度。对于i=1,2,...,L,检查S_i和T_i是否相同。 如果存在一个ii使得S_i ≠ T_i,则选择最小的ii为jj。然后比较S_j和T_j。如果S_j在数字上小于T_j,则S < T;如果S_j在数字上更大,则S > T。在任一情况下,确定顺序并结束算法。 如果不存在一个ii使得S_i ≠ T_i,则比较S和T的长度。如果S较短,则S < T;如果S较长,则S > T。结束算法。
输入格式 输入通过标准输入以以下格式给出。
T case1
case2
…
caseT
每个案例的格式如下。
N
A1A2...AN
输出格式:
对于每个案例,如果存在一个排列 x 使得 f(x)=A ,则输出 Yes。否则,输出No。