#agc058e. [agc058_e]Nearer Permutation
[agc058_e]Nearer Permutation
问题陈述
在这个问题中,“排列”始终表示 的排列。
对于两个排列 和 ,我们定义它们之间的距离 如下。
- 考虑通过反复交换 中相邻的两个项使其等于 。令 为此过程所需的最小交换次数。
此外,对于一个排列 ,我们如下定义另一个排列 。
- 令 。考虑满足 的排列 。令 为其中词典序最小的排列。
例如,当 时,满足 的排列 是 。其中词典序最小的是 ,因此我们有 。
给定一个排列 。确定是否存在一个排列 ,使得 。
对于每个输入文件,解决 个测试案例。
关于序列的词典序是什么?
这里描述的算法确定了不同序列 和 之间的词典序。
下面,令 表示 的第 个元素。此外,令 和 分别表示 “ 词典序小于 ” 和 “ 词典序大于 ”。
- 令 为 和 中较短的序列的长度。对于每个 ,我们检查 和 是否相等。
- 如果存在 使得 ,令 是最小的这样的 ,并比较 和 。如果 小于 (作为一个数),我们得出 并退出;如果 大于 ,我们得出 并退出。
- 如果不存在 使得 ,比较 和 的长度。如果 的长度小于 ,我们得出 并退出;如果 的长度大于 ,我们得出 并退出。
约束条件
- 是 的排列。
- 一个输入文件中 的总和不超过 。
- 输入中的所有值都是整数。
输入
输入以以下格式从标准输入给出:
每个案例的格式如下:
输出
对于每个案例,如果存在一个排列 ,使得 ,则打印 Yes
,否则打印 No
。
样例输入 1
2
2
1 2
2
2 1
样例输出 1
Yes
Yes
例如,当 时,可以让 以满足 。
样例输入 2
6
3
1 2 3
3
1 3 2
3
2 1 3
3
2 3 1
3
3 1 2
3
3 2 1
样例输出 2
Yes
Yes
Yes
Yes
No
No
例如,当 时,可以让 以满足 。
样例输入 3
24
4
1 2 3 4
4
1 2 4 3
4
1 3 2 4
4
1 3 4 2
4
1 4 2 3
4
1 4 3 2
4
2 1 3 4
4
2 1 4 3
4
2 3 1 4
4
2 3 4 1
4
2 4 1 3
4
2 4 3 1
4
3 1 2 4
4
3 1 4 2
4
3 2 1 4
4
3 2 4 1
4
3 4 1 2
4
3 4 2 1
4
4 1 2 3
4
4 1 3 2
4
4 2 1 3
4
4 2 3 1
4
4 3 1 2
4
4 3 2 1
样例输出 3
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
No
No
No
No
No
No
No
No
No
No
No
No
No
No
No