#HK4080. 「ROI 2023 Day1」前缀最值

「ROI 2023 Day1」前缀最值

题目描述

译自 ROI 2023 Day1 T3. Рекорды и антирекорды

长度为 nn 的排列是指一个由 nn 个整数 a1,a2,,ana_{1}, a_{2}, \ldots, a_{n} 组成的序列,其中从 11nn 的每个数都恰好出现一次。

如果可以通过从 aa 中删除一些元素得到 bb,那么我们称序列 b1,b2,,blb_{1}, b_{2}, \ldots, b_{l} 是序列 a1,a2,,ana_{1}, a_{2}, \ldots, a_{n} 的子序列。(也就是说 lnl \leq n 并且存在 i1<i2<<ili_{1}<i_{2}<\ldots<i_{l} 使得 ait=bta_{i_{t}}=b_{t}

  • 如果序列 aa 中的第 ii 个元素 aia_{i} 严格大于所有前面的元素,它被称为前缀最大值(也就是说对于所有 1j<i1 \leq j<i,都有 aj<aia_{j}<a_{i})。
  • 如果序列 aa 中的第 ii 个元素 aia_{i} 严格小于所有前面的元素,它被称为前缀最小值(也就是说对于所有 1j<i1 \leq j<i,都有 aj>aia_{j}>a_{i})。

给定一个长度为 nn 的排列 p1,p2,,pnp_{1}, p_{2}, \ldots, p_{n}。要求把它分成两个非空的子序列 qqrr。换句话说,pp 中每个元素必须恰好属于一个子序列。同时要求最大化 qq 中前缀最大值的数量和 rr 中前缀最小值的数量的和。

输入格式

输入包含多组数据。第一行包含一个整数 t (1t105)t\ (1 \leq t \leq 10^5),表示测试数据的组数。接下来的 2t2t 行每两行描述了一组测试数据:

每组测试数据的第一行包含一个整数 n (2n2×105)n\ (2 \leq n \leq 2\times 10^5),表示排列的长度。

每组测试数据的第二行包含 nn 个整数 p1,p2,,pnp_{1}, p_{2}, \ldots, p_{n},表示原始的排列。保证在 pp11nn 的每个数都恰好出现一次。

所有测试数据中的 nn 之和不超过 2×1052\times 10^5

输出格式

对于每组测试数据,输出一个整数,表示在最优的划分方案下,qq 中前缀最大值的数量和 rr 中前缀最小值的数量的和的最大值。

4
5
4 1 2 3 5
10
3 8 10 4 1 2 7 9 5 6
3
1 2 3
6
4 2 5 1 6 3
5
6
3
5

在第一个测试数据中,一种最优的划分方案是(qq 中的前缀最大值和 rr 中的前缀最小值被框了起来):

  • q=1 2 3 5q = \boxed{1}~\boxed{2}~\boxed{3}~\boxed{5}
  • r=4r = \boxed{4}

在第二个测试数据中,一种最优的划分方案是:

  • q=3 8 4 1 2 9q = \boxed{3}~\boxed{8}~4~1~2~\boxed{9}
  • r=10 7 5 6r = \boxed{10}~\boxed{7}~\boxed{5}~6

数据范围与提示

NN 表示一个测试点中所有 nn 的和。其中子任务 00 是样例。

详细子任务附加限制及分值如下表所示。

子任务编号 分值 n,Nn, N 的限制 附加限制 子任务依赖
11 2121 n16n \leq 16 t120t \leq 120 00
22 2222 n200,N2000n \leq 200, N \leq 2000 0,10, 1
33 1414 N2000N\leq 2000 0,120, 1\sim 2
44 1010 N10000N \leq 10000 0,130, 1\sim 3
55 1313 N2105N \leq 2\cdot 10^5 pp 中最大递减子序列的长度不超过 22
66 2020 0,150, 1\sim 5