CF1585B Array Eversion

题目描述

给定一个长度为 $n$ 的数组 $a$。 我们定义一次“翻转”操作。令 $x = a_n$。然后将数组 $a$ 分为左右两部分:左部分包含所有不大于 $x$(即 $\le x$)的元素,右部分包含所有严格大于 $x$(即 $> x$)的元素。每一部分内元素的顺序保持不变,即分割是稳定的。然后用左部分和右部分拼接后的新数组替换原数组。 例如,如果数组 $a$ 为 $[2, 4, 1, 5, 3]$,则翻转过程如下:$[2, 4, 1, 5, 3] \to [2, 1, 3], [4, 5] \to [2, 1, 3, 4, 5]$。 我们从数组 $a$ 开始,对其进行多次翻转操作。可以证明,经过若干次翻转后,数组 $a$ 会停止变化。请输出最小的整数 $k$,使得经过 $k$ 次翻转后,数组不再发生变化。

输入格式

每个测试包含多个测试用例。第一行包含测试用例数 $t$($1 \le t \le 100$)。接下来是每个测试用例的描述。 每个测试用例的第一行包含一个整数 $n$($1 \le n \le 2 \cdot 10^5$)。 第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$($1 \le a_i \le 10^9$)。 保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。

输出格式

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

说明/提示

考虑第一个示例。 - 第一次翻转:$a = [1, 4, 2, 5, 3]$,$x = 3$。$[2, 4, 1, 5, 3] \to [2, 1, 3], [4, 5] \to [2, 1, 3, 4, 5]$。 - 第二次及之后的翻转:$a = [2, 1, 3, 4, 5]$,$x = 5$。$[2, 1, 3, 4, 5] \to [2, 1, 3, 4, 5], [] \to [2, 1, 3, 4, 5]$。这次翻转不会改变数组,因此答案为 $1$。 考虑第二个示例。 - 第一次翻转:$a = [5, 3, 2, 4, 1]$,$x = 1$。$[5, 3, 2, 4, 1] \to [1], [5, 3, 2, 4] \to [1, 5, 3, 2, 4]$。 - 第二次翻转:$a = [1, 5, 3, 2, 4]$,$x = 4$。$[1, 5, 3, 2, 4] \to [1, 3, 2, 4], [5] \to [1, 3, 2, 4, 5]$。 - 第三次及之后的翻转:$a = [1, 3, 2, 4, 5]$,$x = 5$。$[1, 3, 2, 4, 5] \to [1, 3, 2, 4, 5], [] \to [1, 3, 2, 4, 5]$。这次翻转不会改变数组,因此答案为 $2$。 由 ChatGPT 4.1 翻译