CF1637B.MEX and Array

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

MEX and Array

题目描述

给定一个数组 b1,b2,,bkb_1, b_2, \ldots, b_k。将该数组划分为若干段 [l1,r1],[l2,r2],,[lc,rc][l_1, r_1], [l_2, r_2], \ldots, [l_c, r_c],其中 l1=1l_1 = 1rc=kr_c = k,并且对于任意 2ic2 \leq i \leq c,都有 ri1+1=lir_{i-1} + 1 = l_i。换句话说,数组中的每个元素恰好属于一个段。

我们定义一次划分的代价为 $c + \sum_{i = 1}^{c} \operatorname{mex}(\{b_{l_i}, b_{l_i + 1}, \ldots, b_{r_i}\})$,其中 mex\operatorname{mex} 表示集合 SS 中未出现的最小非负整数。也就是说,划分的代价等于段数加上所有段的 MEX 之和。我们定义数组 b1,b2,,bkb_1, b_2, \ldots, b_k 的价值为所有划分方式中代价的最大值。

现在给定一个长度为 nn 的数组 aa。请你计算其所有子段的价值之和。数组 xx 是数组 yy 的子段,当且仅当 xx 可以通过从 yy 的开头和结尾各删除若干(可能为零或全部)元素得到。

输入格式

输入包含若干组测试数据。第一行包含一个整数 tt1t301 \leq t \leq 30),表示测试数据组数。

每组测试数据的第一行包含一个整数 nn1n1001 \leq n \leq 100),表示数组的长度。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n0ai1090 \leq a_i \leq 10^9),表示数组的元素。

保证所有测试数据中 nn 的总和不超过 100100

输出格式

对于每组测试数据,输出一个整数,表示该组数据的答案。

说明/提示

在第二组测试数据中:

  • 子段 [2,0,1][2, 0, 1] 的最佳划分为 [2],[0,1][2], [0, 1]。该划分的代价为 $2 + \operatorname{mex}(\{2\}) + \operatorname{mex}(\{0, 1\}) = 2 + 0 + 2 = 4$。
  • 子段 [2,0][2, 0] 的最佳划分为 [2],[0][2], [0]。该划分的代价为 $2 + \operatorname{mex}(\{2\}) + \operatorname{mex}(\{0\}) = 2 + 0 + 1 = 3$。
  • 子段 [2][2] 的最佳划分为 [2][2]。该划分的代价为 1+mex({2})=1+0=11 + \operatorname{mex}(\{2\}) = 1 + 0 = 1
  • 子段 [0,1][0, 1] 的最佳划分为 [0,1][0, 1]。该划分的代价为 1+mex({0,1})=1+2=31 + \operatorname{mex}(\{0, 1\}) = 1 + 2 = 3
  • 子段 [0][0] 的最佳划分为 [0][0]。该划分的代价为 1+mex({0})=1+1=21 + \operatorname{mex}(\{0\}) = 1 + 1 = 2
  • 子段 [1][1] 的最佳划分为 [1][1]。该划分的代价为 1+mex({1})=1+0=11 + \operatorname{mex}(\{1\}) = 1 + 0 = 1

所有子段的价值之和为 4+3+1+3+2+1=144 + 3 + 1 + 3 + 2 + 1 = 14

由 ChatGPT 4.1 翻译

样例

4
2
1 2
3
2 0 1
4
2 0 5 1
5
0 1 1 0 1
4
14
26
48

在线编程 IDE

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