AT_agc058_e [AGC058E] Nearer Permutation
题目描述
在本题中,提到“顺序排列”时,指的是 $ (1,2,\cdots,N) $ 的一个排列。
对于两个排列 $ p,q $,定义它们的距离 $ d(p,q) $ 如下:
- 通过不断交换 $ p $ 中相邻的两个元素,将 $ p $ 变为 $ q $。所需的最小操作次数即为 $ d(p,q) $。
进一步地,对于排列 $ x $,定义排列 $ f(x) $ 如下:
- 设 $ y=(1,2,\cdots,N) $。考虑所有排列 $ z $,满足 $ d(x,z)\leq d(y,z) $。在这些排列中,字典序最小的排列即为 $ f(x) $。
例如,当 $ x=(2,3,1) $ 时,满足 $ d(x,z)\leq 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=(A_1,A_2,\cdots,A_N) $,请判断是否存在排列 $ x $,使得 $ f(x)=A $。
每个输入文件包含 $ T $ 个测试用例。
什么是数列的字典序?判断两个不同数列 $ S $ 和 $ T $ 的大小的算法如下:
记 $ S $ 的第 $ i $ 个元素为 $ S_i $。若 $ S $ 的字典序小于 $ T $,记为 $ ST $。
1. 取 $ S $ 和 $ T $ 中较短的长度为 $ L $。依次比较 $ i=1,2,\dots,L $ 时 $ S_i $ 和 $ T_i $ 是否相等。
2. 若存在 $ S_i\neq T_i $ 的 $ i $,取最小的此类 $ i $ 为 $ j $。若 $ S_j $ 小于 $ T_j $,则 $ ST $,算法结束。
3. 若所有 $ S_i=T_i $,则比较 $ S $ 和 $ T $ 的长度,短者字典序小。若 $ S $ 比 $ T $ 短,则 $ ST $,算法结束。
输入格式
输入以如下格式从标准输入读入。
> $ T $ $ case_1 $ $ case_2 $ $ \vdots $ $ case_T $
每个测试用例如下格式:
> $ N $ $ A_1 $ $ A_2 $ $ \cdots $ $ A_N $
输出格式
对于每个测试用例,若存在排列 $ x $ 使得 $ f(x)=A $,输出 `Yes`,否则输出 `No`。
说明/提示
### 限制条件
- $ 1\leq T\leq 150000 $
- $ 2\leq N\leq 300000 $
- $ (A_1,A_2,\cdots,A_N) $ 是 $ (1,2,\cdots,N) $ 的一个排列
- 每个输入文件中 $ N $ 的总和不超过 $ 300000 $
- 所有输入值均为整数
### 样例解释 1
例如 $ A=(2,1) $ 时,取 $ x=(2,1) $,则 $ f(x)=A $。
### 样例解释 2
例如 $ A=(2,3,1) $ 时,取 $ x=(3,2,1) $,则 $ f(x)=A $。
由 ChatGPT 4.1 翻译