#662. 奶牛排队

奶牛排队

样例下载

题目描述

Farmer John 有 NN 头奶牛,编号为 11 ~ NN。奶牛 ii 的身高为 HiH_i

John 想把这些奶牛从矮到高排序。他使用的排序方法是选择排序,即每次从还未排序的奶牛中选出身高最矮的奶牛,将该奶牛添加到已排序奶牛队伍的末端。从一堆奶牛中选出最矮的奶牛是比较费时的,John 从 tt 头奶牛中选出最矮的奶牛需要花费 tt 个时间单位。当 John 选出最矮的奶牛后,他会立刻将该头奶牛添加到队伍末端。

但是这样排序太慢了,于是 John 找来了他的好朋友 Jack 帮忙。John 会把若干头(可以是 00 头,也可以是全部 NN 头)奶牛分给 Jack。

对于仍然留给自己的奶牛,John 仍按照他自己的排序方法进行排序。

而 Jack 的排序方法则非常奇特。对于一头身高为 hh 的奶牛,他会在第 hh 个时刻将该头奶牛添加到已排序奶牛队伍的末端。如果有多头身高相同的奶牛,则这些奶牛会被同时添加到队伍末端。

如果 John 和 Jack 同时向队伍末端添加奶牛,则 John 的奶牛将会先添加,Jack 的奶牛会被后添加。

添加奶牛是瞬间完成的,时间忽略不计。

分配完奶牛后,计时开始,Jack 和 John 便立刻开始按各自的排序方法对奶牛进行排队。

问:如何分配奶牛,可以使得全部排好队所需时间最短?你只需要输出排好队所需要的最短时间。

多组数据。

输入格式

第一行:一个整数 TT,表示数据组数。

对于每组数据:

  • 第一行:一个整数 NN
  • 第二行:NN 个整数 HiH_i

数据保证所有组数据的 N2105\sum N ≤ 2·10^5

输出格式

TT 行,每组数据的答案占一行。

输入样例

3
3
10 20 30
4
1 5 5 5
5
1 2 3 4 100

输出样例

6
5
6

样例解释

每组数据的分配方案不一定唯一,以下仅列出一种可能方案:

第一组数据:John 全部自己完成。

第二组数据:全部分给 Jack 完成。

第三组数据:John 对 3, 4, 100 进行排序,将 1, 2 分给 Jack。具体过程如下:

时刻 被添加的奶牛
11 Jack 将奶牛 11(身高 11) 添加到队伍末端,John 正在挑选奶牛
22 Jack 将奶牛 22(身高 22) 添加到队伍末端,John 正在挑选奶牛
33 John 将奶牛 33(身高 33) 添加到队伍末端
44 John 正在挑选奶牛
55 John 将奶牛 44(身高 44) 添加到队伍末端
66 John 将奶牛 55(身高 100100)添加到队伍末端

数据范围

  • 10% 的数据:N16N ≤ 16
  • 25% 的数据:N150N ≤ 150
  • 45% 的数据:N5000\sum N ≤ 5000
  • 100% 的数据:1T101 ≤ T ≤ 10; 1N21051 ≤ \sum N ≤ 2·10^5; 1Hi10111 ≤ H_i ≤ 10^{11}