CF1919C.Grouping Increases

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

Grouping Increases

题目描述

给定一个大小为 nn 的数组 aa。你需要按照以下过程计算你的惩罚值:

  1. 将数组 aa 分成两个(可能为空)子序列 ^\dagger sstt,使得 aa 的每个元素都属于 sstt^\ddagger
  2. 对于一个大小为 mm 的数组 bb,定义数组 bb 的惩罚值 p(b)p(b) 为满足 bi<bi+1b_i < b_{i+1} 的下标 ii1im11 \leq i \leq m-1)的数量。
  3. 你最终获得的总惩罚值为 p(s)+p(t)p(s) + p(t)

如果你最优地执行上述过程,求你能获得的最小惩罚值。

^\dagger 序列 xx 是序列 yy 的子序列,如果 xx 可以通过从 yy 中删除若干(可能为零或全部)元素得到。

^\ddagger 一些将数组 a=[3,1,4,1,5]a=[3,1,4,1,5] 分成 (s,t)(s,t) 的合法方式有 ([3,4,1,5],[1])([3,4,1,5],[1])([1,1],[3,4,5])([1,1],[3,4,5])([],[3,1,4,1,5])([\,],[3,1,4,1,5]),而一些不合法的方式有 ([3,4,5],[1])([3,4,5],[1])([3,1,4,1],[1,5])([3,1,4,1],[1,5])([1,3,4],[5,1])([1,3,4],[5,1])

输入格式

每组测试数据包含多组测试用例。第一行包含一个整数 tt1t1041 \leq t \leq 10^4)——表示测试用例的数量。接下来的每组测试用例描述如下。

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

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n1ain1 \le a_i \le n)——数组 aa 的元素。

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

输出格式

对于每个测试用例,输出一个整数,表示你能获得的最小惩罚值。

说明/提示

在第一个测试用例中,一种分割方式是 s=[2,4,5]s=[2,4,5]t=[1,3]t=[1,3]。惩罚值为 p(s)+p(t)=2+1=3p(s)+p(t)=2+1=3

在第二个测试用例中,一种分割方式是 s=[8,3,1]s=[8,3,1]t=[2,1,7,4,3]t=[2,1,7,4,3]。惩罚值为 p(s)+p(t)=0+1=1p(s)+p(t)=0+1=1

在第三个测试用例中,一种分割方式是 s=[]s=[\,]t=[3,3,3,3,3]t=[3,3,3,3,3]。惩罚值为 p(s)+p(t)=0+0=0p(s)+p(t)=0+0=0

由 ChatGPT 4.1 翻译

样例

5
5
1 2 3 4 5
8
8 2 3 1 1 7 4 3
5
3 3 3 3 3
1
1
2
2 1
3
1
0
0
0

在线编程 IDE

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