CF1686B.Odd Subarrays

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

Odd Subarrays

题目描述

对于一个数组 [b1,b2,,bm][b_1, b_2, \ldots, b_m],定义其逆序对数为满足 1i<jm1 \le i < j \le mbi>bjb_i > b_j 的整数对 (i,j)(i, j) 的数量。我们称数组 bb 为奇数组,如果其逆序对数是奇数。

例如,数组 [4,2,7][4, 2, 7] 是奇数组,因为其逆序对数为 11;而数组 [2,1,4,3][2, 1, 4, 3] 不是奇数组,因为其逆序对数为 22

现在给定一个由 11nn 的整数组成的排列 [p1,p2,,pn][p_1, p_2, \ldots, p_n](每个数恰好出现一次)。你需要将其划分为若干个连续子数组(也可以只划分成一个),使得这些子数组中奇数组的数量尽可能多。

你能得到的奇数组的最大数量是多少?

输入格式

输入的第一行包含一个整数 tt1t1051 \le t \le 10^5),表示测试用例的数量。接下来是每个测试用例的描述。

每个测试用例的第一行包含一个整数 nn1n1051 \le n \le 10^5),表示排列的长度。

第二行包含 nn 个整数 p1,p2,,pnp_1, p_2, \ldots, p_n1pin1 \le p_i \le n,所有 pip_i 互不相同),表示排列的元素。

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

输出格式

对于每个测试用例,输出一个整数,表示将排列划分为若干连续子数组后,最多能得到多少个奇数组。

说明/提示

在第一个和第三个测试用例中,无论如何划分排列,都不会有奇数组。

在第二个测试用例中,可以将排列划分为 [4,3],[2,1][4, 3], [2, 1] 两个子数组,这两个子数组都是奇数组,因为它们的逆序对数都是 11

在第四个测试用例中,可以将排列划分为一个子数组 [2,1][2, 1],它是奇数组。

在第五个测试用例中,可以将排列划分为 [4,5],[6,1,2,3][4, 5], [6, 1, 2, 3] 两个子数组。第一个子数组的逆序对数为 00,第二个子数组的逆序对数为 33,因此它是奇数组。

由 ChatGPT 4.1 翻译

样例

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

在线编程 IDE

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