AT_agc058_e.[AGC058E] Nearer Permutation
NOI/NOI+/CTSC
通过率:0%
AC君温馨提醒
该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
在本题中,提到“顺序排列”时,指的是 $ (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 $,记为 $ S<T $,大于则记为 $ S>T $。
- 取 $ S $ 和 $ T $ 中较短的长度为 $ L $。依次比较 $ i=1,2,\dots,L $ 时 $ S_i $ 和 $ T_i $ 是否相等。
- 若存在 $ S_i\neq T_i $ 的 $ i $,取最小的此类 $ i $ 为 $ j $。若 $ S_j $ 小于 $ T_j $,则 $ S<T $,否则 $ S>T $,算法结束。
- 若所有 $ S_i=T_i $,则比较 $ S $ 和 $ T $ 的长度,短者字典序小。若 $ S $ 比 $ T $ 短,则 $ S<T $,否则 $ S>T $,算法结束。
输入格式
输入以如下格式从标准输入读入。
$ T $ $ case_1 $ $ case_2 $ $ \vdots $ $ case_T $
每个测试用例如下格式:
$ N $ $ A_1 $ $ A_2 $ $ \cdots $ $ A_N $
输出格式
对于每个测试用例,若存在排列 $ x $ 使得 $ f(x)=A $,输出 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
说明/提示
限制条件
- $ 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 翻译
输入解题思路,AI测评打分。不知道怎么写?