CFCF2205D.Simons and Beating Peaks
普及+/提高
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
我最美好的愿望随风消散;十八岁时,我将梦想倾注于麦克风,与你们分享。
—— SHUN,720
我们称长度为 m 的数组 b 为“cool”(酷),当且仅当:
- 不存在下标 i(1<i<m),使得 bi=max({bi−1,bi,bi+1})。
Simons 有一个大小为 n 的数组 a。最初,该数组是一个排列∗。
他需要持续进行如下操作,直到数组变为cool:
- 选择一个下标 i(1<i<n),满足 ai=max({ai−1,ai,ai+1})。
- 然后,他可以从数组中删除 ai−1 或 ai+1。删除后,数组的左右部分会重新拼接起来形成一个新数组。
请你求出 Simons 至少需要进行多少次操作。
∗ 长度为 n 的排列是指一个包含 1 到 n、且每个数恰好出现一次的数组。比如 [2,3,1,5,4] 是一个排列,但 [1,2,2] 不是(2 出现了两次),[1,3,4] 也不是(n=3,但出现了 4)。
输入格式
每组测试数据包含多个测试用例。第一行包含测试用例个数 t(1≤t≤5⋅104)。接下来描述各组测试数据。
第一行包含一个整数 n(3≤n≤5⋅105)——a 的长度。
第二行包含 n 个整数 a1,a2,…,an(1≤ai≤n,且所有 ai 都互不相同),表示 Simons 最初拥有的数组。
保证所有测试用例中 n 的总和不超过 5⋅105。
输出格式
对于每个测试用例,输出一行一个整数,表示 Simons 至少需要多少次操作。
输入输出样例
输入#1
5 3 1 2 3 5 4 1 3 2 5 6 4 5 3 6 2 1 7 6 5 1 7 4 2 3 15 7 4 10 12 9 14 5 3 8 11 1 15 2 13 6
输出#1
0 1 3 3 9
说明/提示
在第一个测试用例中,数组一开始就是 cool 的,因此 Simons 不需要任何操作。答案为 0。
在第二个测试用例中,Simons 可以这样操作:
- 选择下标 3,因为 a3=max({a2,a3,a4})。然后,他删除 a2。数组变为 [4,3,2,5]。
可以发现,数组现在已经 cool。于是答案为 1。
在第三个测试用例中,Simons 可以这样操作:
- 选择下标 2,然后删除 a1,数组变为 [5,3,6,2,1]。
- 选择下标 3,然后删除 a2,数组变为 [5,6,2,1]。
- 选择下标 2,然后删除 a1,数组变为 [6,2,1]。
因此,Simons 一共进行了 3 次操作使数组变为 cool。