CF2156F2.Strange Operation (Hard Version)

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

这是该问题的困难版本。本版本与其他版本的区别在于,这一版本中 nn 的约束更大。仅当你完成了该问题的所有版本时,才可以尝试 Hack。

给定一个长度为 nn 的排列 pp 。你可以进行如下操作任意多次(包括零次):

  • 选择三个互不相同的下标 ii、jj 和 kk(1≤i<j<k≤n1 \le i < j < k \le n),使得下列两个条件同时成立:pi=max⁡(pj,pk)+1p_i = \max(p_j, p_k) + 1 且 pi=min⁡(pj,pk)+2p_i = \min(p_j, p_k) + 2。然后,将 pip_i 减 22,将 pjp_j 和 pkp_k 各加 11。即 pi:=pi−2p_i := p_i - 2,pj:=pj+1p_j := p_j + 1,pk:=pk+1p_k := p_k + 1。

可以证明,由于 pi=max⁡(pj,pk)+1p_i = \max(p_j, p_k) + 1 且 pi=min⁡(pj,pk)+2p_i = \min(p_j, p_k) + 2 这两个条件的限制,每次操作后 pp 仍然是一个排列。

你的任务是,经过若干次操作后,求出能够获得的字典序最小的排列。

∗^{\text{∗}} 长度为 nn 的排列是指包含 nn 个互不相同、从 11 到 nn 的整数的一种排列。例如,[2,3,1,5,4][2,3,1,5,4] 是一个排列,但 [1,2,2][1,2,2] 不是一个排列(22 在数组中出现了两次),[1,3,4][1,3,4] 也不是排列(n=3n=3,但数组中出现了 44)。

†^{\text{†}} 如果两个长度相同的序列 aa 与 bb 满足:

  • a≠ba \ne b,且在第一个不相等的位置,aa 的元素小于 bb 的元素,

则称 aa 的字典序小于 bb。

输入格式

本题包含多组测试数据。第一行为测试用例个数 tt(1≤t≤1041 \le t \le 10^4)。接下来的每组数据格式如下。

每组测试数据的第一行为一个整数 nn(3≤n≤3×1053 \le n \le 3 \times 10^5),表示排列的长度。

第二行为 nn 个整数 p1,p2,…,pnp_1, p_2, \ldots, p_n(1≤pi≤n1 \le p_i \le n),表示排列 pp。

保证所有测试用例中 nn 的总和不超过 3×1053 \times 10^5。

输出格式

对于每组测试数据,输出一行 nn 个整数,表示通过若干次操作能够得到的字典序最小的排列。

输入输出样例

  • 输入#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=1i=1,j=2j=2,k=3k=3 执行一次操作。注意,不能对 i=1i=1,j=3j=3,k=4k=4 执行操作,因为必须同时满足两个条件。此处第二个条件 p1=min⁡(p3,p4)+2p_1 = \min(p_3, p_4) + 2 成立,但第一个条件 p1=max⁡(p3,p4)+1p_1 = \max(p_3, p_4) + 1 不成立。

在第二个测试用例中,可以依次进行以下操作:

  • 选择 i=1i=1,j=4j=4,k=5k=5,此时排列变为 [1,4,5,3,2][1, 4, 5, 3, 2]。
  • 选择 i=2i=2,j=4j=4,k=5k=5,排列变为 [1,2,5,4,3][1, 2, 5, 4, 3]。
  • 选择 i=3i=3,j=4j=4,k=5k=5,排列变为 [1,2,3,5,4][1, 2, 3, 5, 4]。

在第三个测试用例中,没有合法的 i<j<ki < j < k 使条件成立,因此无法进行任何操作。

由 ChatGPT 5 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页