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

    ID: 17333 Type: RemoteJudge 1000ms 1024MiB Tried: 0 Accepted: 0 Difficulty: 6 Uploaded By: Tags>贪心排序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 替换为依次拼接 BB 和 CC 得到的数列,即 B+CB+C。

请编写一个程序,计算至少需要进行多少次操作,才能将数列 AA 按非递减顺序排列,即满足 A1≤A2≤⋯≤ANA_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 按非递减顺序排列。

限制条件

  • 输入中给出的所有数均为整数。
  • 1≤N≤300 0001 \le N \le 300\,000。
  • 对于每个整数 ii(1≤i≤N1 \le i \le N),均有 1≤Ai≤N1 \le A_i \le N。

子任务

  1. (66 分)对于每个整数 ii(1≤i≤N1 \le i \le N),均有 Ai≤2A_i \le 2。
  2. (1515 分)N≤15N \le 15。
  3. (2323 分)N≤100N \le 100。
  4. (2727 分)N≤750N \le 750。
  5. (3333 分)对于任意整数 i,ji,j(1≤i<j≤N1 \le i<j \le N),均有 Ai≠AjA_i \ne A_j。
  6. (4646 分)无附加限制。

翻译由 ChatGPT-5.6 完成