CF2156F2.Strange Operation (Hard Version)
NOI/NOI+/CTSC
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是该问题的困难版本。本版本与其他版本的区别在于,这一版本中 n 的约束更大。仅当你完成了该问题的所有版本时,才可以尝试 Hack。
给定一个长度为 n 的排列 p 。你可以进行如下操作任意多次(包括零次):
- 选择三个互不相同的下标 i、j 和 k(1≤i<j<k≤n),使得下列两个条件同时成立:pi=max(pj,pk)+1 且 pi=min(pj,pk)+2。然后,将 pi 减 2,将 pj 和 pk 各加 1。即 pi:=pi−2,pj:=pj+1,pk:=pk+1。
可以证明,由于 pi=max(pj,pk)+1 且 pi=min(pj,pk)+2 这两个条件的限制,每次操作后 p 仍然是一个排列。
你的任务是,经过若干次操作后,求出能够获得的字典序最小的排列。
∗ 长度为 n 的排列是指包含 n 个互不相同、从 1 到 n 的整数的一种排列。例如,[2,3,1,5,4] 是一个排列,但 [1,2,2] 不是一个排列(2 在数组中出现了两次),[1,3,4] 也不是排列(n=3,但数组中出现了 4)。
† 如果两个长度相同的序列 a 与 b 满足:
- a=b,且在第一个不相等的位置,a 的元素小于 b 的元素,
则称 a 的字典序小于 b。
输入格式
本题包含多组测试数据。第一行为测试用例个数 t(1≤t≤104)。接下来的每组数据格式如下。
每组测试数据的第一行为一个整数 n(3≤n≤3×105),表示排列的长度。
第二行为 n 个整数 p1,p2,…,pn(1≤pi≤n),表示排列 p。
保证所有测试用例中 n 的总和不超过 3×105。
输出格式
对于每组测试数据,输出一行 n 个整数,表示通过若干次操作能够得到的字典序最小的排列。
输入输出样例
输入#1
5 4 3 2 1 4 5 3 4 5 2 1 5 2 4 5 3 1 7 5 3 4 1 2 6 7 10 2 7 5 1 3 9 4 10 6 8
输出#1
1 3 2 4 1 2 3 5 4 2 4 5 3 1 1 2 3 4 5 6 7 2 3 4 1 5 7 6 8 9 10
说明/提示
在第一个测试用例中,最优策略是对 i=1,j=2,k=3 执行一次操作。注意,不能对 i=1,j=3,k=4 执行操作,因为必须同时满足两个条件。此处第二个条件 p1=min(p3,p4)+2 成立,但第一个条件 p1=max(p3,p4)+1 不成立。
在第二个测试用例中,可以依次进行以下操作:
- 选择 i=1,j=4,k=5,此时排列变为 [1,4,5,3,2]。
- 选择 i=2,j=4,k=5,排列变为 [1,2,5,4,3]。
- 选择 i=3,j=4,k=5,排列变为 [1,2,3,5,4]。
在第三个测试用例中,没有合法的 i<j<k 使条件成立,因此无法进行任何操作。
由 ChatGPT 5 翻译
输入解题思路,AI测评打分。不知道怎么写?