CF1591B Array Eversion
题目描述
给定一个长度为 $n$ 的数组 $a$。
我们定义“翻转操作”(eversion operation)。令 $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 翻译