CF1585B.Array Eversion

传统题 时间 2000 ms 内存 256 MiB 4 尝试 1 已通过 1 标签

Array Eversion

题目描述

给定一个长度为 nn 的数组 aa

我们定义一次“翻转”操作。令 x=anx = a_n。然后将数组 aa 分为左右两部分:左部分包含所有不大于 xx(即 x\le x)的元素,右部分包含所有严格大于 xx(即 >x> x)的元素。每一部分内元素的顺序保持不变,即分割是稳定的。然后用左部分和右部分拼接后的新数组替换原数组。

例如,如果数组 aa[2,4,1,5,3][2, 4, 1, 5, 3],则翻转过程如下:$[2, 4, 1, 5, 3] \to [2, 1, 3], [4, 5] \to [2, 1, 3, 4, 5]$。

我们从数组 aa 开始,对其进行多次翻转操作。可以证明,经过若干次翻转后,数组 aa 会停止变化。请输出最小的整数 kk,使得经过 kk 次翻转后,数组不再发生变化。

输入格式

每个测试包含多个测试用例。第一行包含测试用例数 tt1t1001 \le t \le 100)。接下来是每个测试用例的描述。

每个测试用例的第一行包含一个整数 nn1n21051 \le n \le 2 \cdot 10^5)。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n1ai1091 \le a_i \le 10^9)。

保证所有测试用例中 nn 的总和不超过 21052 \cdot 10^5

输出格式

对于每个测试用例,输出一个整数 kk,表示经过 kk 次翻转后数组停止变化。

说明/提示

考虑第一个示例。

  • 第一次翻转:a=[1,4,2,5,3]a = [1, 4, 2, 5, 3]x=3x = 3。$[2, 4, 1, 5, 3] \to [2, 1, 3], [4, 5] \to [2, 1, 3, 4, 5]$。
  • 第二次及之后的翻转:a=[2,1,3,4,5]a = [2, 1, 3, 4, 5]x=5x = 5。$[2, 1, 3, 4, 5] \to [2, 1, 3, 4, 5], [] \to [2, 1, 3, 4, 5]$。这次翻转不会改变数组,因此答案为 11

考虑第二个示例。

  • 第一次翻转:a=[5,3,2,4,1]a = [5, 3, 2, 4, 1]x=1x = 1。$[5, 3, 2, 4, 1] \to [1], [5, 3, 2, 4] \to [1, 5, 3, 2, 4]$。
  • 第二次翻转:a=[1,5,3,2,4]a = [1, 5, 3, 2, 4]x=4x = 4。$[1, 5, 3, 2, 4] \to [1, 3, 2, 4], [5] \to [1, 3, 2, 4, 5]$。
  • 第三次及之后的翻转:a=[1,3,2,4,5]a = [1, 3, 2, 4, 5]x=5x = 5。$[1, 3, 2, 4, 5] \to [1, 3, 2, 4, 5], [] \to [1, 3, 2, 4, 5]$。这次翻转不会改变数组,因此答案为 22

由 ChatGPT 4.1 翻译

样例

3
5
2 4 1 5 3
5
5 3 2 4 1
4
1 1 1 1
1
2
0

在线编程 IDE

建议全屏模式获得最佳体验