#P17136. [KOI 2026 #1] 数列排序

    ID: 19479 远端评测题 1000ms 1024MiB 尝试: 0 已通过: 0 显示难度普及+/提高− 上传者: 标签>贪心排序2026KOI(韩国)

[KOI 2026 #1] 数列排序

题目描述

给定一个长度为 NN 的数列 A=[A1,A2,,AN]A = [A_1, A_2, \ldots, A_N]。你可以任意进行若干次下述操作,操作次数可以为 00

  1. 选定一个正整数 xx
  2. 从数列 AA 中提取所有值不大于 xx 的元素,并保持这些元素在原数列中的相对顺序不变,由此构成子序列 BB
  3. 从数列 AA 中提取所有值大于 xx 的元素,并保持这些元素在原数列中的相对顺序不变,由此构成子序列 CC
  4. 将原数列 AA 替换为依次拼接 BBCC 得到的数列,即 B+CB+C

请编写一个程序,计算至少需要进行多少次操作,才能将数列 AA 按非递减顺序排列,即满足 A1A2ANA_1 \le A_2 \le \cdots \le A_N

可以证明,对于所有满足限制条件的输入,都一定能够通过上述操作将给定数列按非递减顺序排列。

输入格式

第一行输入一个整数 NN

第二行输入 NN 个整数 A1,A2,,ANA_1,A_2,\ldots,A_N,整数之间以空格分隔。

输出格式

第一行输出一个整数,表示将数列 AA 按非递减顺序排列所需的最少操作次数。

6
3 4 5 1 2 6
1
9
1 5 9 9 5 1 1 5 9
2

提示

样例说明 1

可以按照如下方式,通过 11 次操作将数列 AA 按非递减顺序排列。

  1. x=2x=2。保持原有相对顺序,提取所有值不大于 x=2x=2 的元素,可得 B:=[1,2]B:=[1,2]。保持原有相对顺序,提取所有值大于 x=2x=2 的元素,可得 C:=[3,4,5,6]C:=[3,4,5,6]。因此,数列 AA 被替换为 B+C=[1,2,3,4,5,6]B+C=[1,2,3,4,5,6]

样例说明 2

可以按照如下方式,通过 22 次操作将数列 AA 按非递减顺序排列。

  1. x=3x=3。保持原有相对顺序,提取所有值不大于 x=3x=3 的元素,可得 B:=[1,1,1]B:=[1,1,1]。保持原有相对顺序,提取所有值大于 x=3x=3 的元素,可得 C:=[5,9,9,5,5,9]C:=[5,9,9,5,5,9]。因此,数列 AA 被替换为 B+C=[1,1,1,5,9,9,5,5,9]B+C=[1,1,1,5,9,9,5,5,9]
  2. x=7x=7。保持原有相对顺序,提取所有值不大于 x=7x=7 的元素,可得 B:=[1,1,1,5,5,5]B:=[1,1,1,5,5,5]。保持原有相对顺序,提取所有值大于 x=7x=7 的元素,可得 C:=[9,9,9]C:=[9,9,9]。因此,数列 AA 被替换为 B+C=[1,1,1,5,5,5,9,9,9]B+C=[1,1,1,5,5,5,9,9,9]

可以证明,无法通过少于 22 次操作将数列 AA 按非递减顺序排列。

限制条件

  • 输入中给出的所有数均为整数。
  • 1N3000001 \le N \le 300\,000
  • 对于每个整数 ii1iN1 \le i \le N),均有 1AiN1 \le A_i \le N

子任务

  1. 66 分)对于每个整数 ii1iN1 \le i \le N),均有 Ai2A_i \le 2
  2. 1515 分)N15N \le 15
  3. 2323 分)N100N \le 100
  4. 2727 分)N750N \le 750
  5. 3333 分)对于任意整数 i,ji,j1i<jN1 \le i<j \le N),均有 AiAjA_i \ne A_j
  6. 4646 分)无附加限制。

翻译由 ChatGPT-5.6 完成