CFCF2159D2.Inverse Minimum Partition (Hard Version)
NOI/NOI+/CTSC
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是该问题的困难版本。不同版本的区别在于,本版本要求你计算 a 的所有连续子序列 b 的 f(b) 之和。只有在你解决了所有版本后,才能进行 Hack。
对于一段长度为 k 的正整数序列 b,其“代价”定义如下∗:
cost(b)=⌈min(b1,b2,…,bk)bk⌉
假设你将一个序列 c 分割成一个或多个序列,使得这些序列拼接起来还是 c。例如,若序列 c 为 [3,1,4,1,5],那么如下几种分割方式都是合法的:[[3,1],[4,1,5]]、[[3],[1,4,1],[5]]、[[3,1,4,1,5]]。而 [[3,1],[1,5]] 和 [[3,4,1],[1,5]] 不是合法分割方式。
对于一个正整数序列 c 的一个分割,其总代价定义为分割中每个序列的代价之和。我们定义 f(c) 为将序列 c 分割后的最小总代价。
给定一个长度为 n 的正整数序列 a,你需要计算:
l=1∑nr=l∑nf([al,al+1,…,ar])
∗ 给定一个实数 x,⌈x⌉ 定义为不小于 x 的最小整数。例如,⌈3.14⌉=4。
输入格式
每组测试数据包含多组测试用例。第一行包含测试用例数量 t(1≤t≤104)。接下来是每组测试用例的描述。
每组测试用例第一行包含单个整数 n(1≤n≤4⋅105)。
第二行包含 a1,a2,…,an(1≤ai≤1018)。
保证所有测试用例中 n 的总和不超过 4⋅105。
输出格式
对于每个测试用例,输出一行答案。
输入输出样例
输入#1
4 5 3 1 4 1 5 10 9 2 6 5 3 5 8 9 7 9 8 1 2 3 4 5 6 7 8 2 1 1000000000000000000
输出#1
21 124 84 4
说明/提示
对于第一个测试用例,所有 a 的连续子序列以及对应的值如下:
- [3]→[[3]]:f([3])=1;
- [3,1]→[[3,1]]:f([3,1])=1;
- [3,1,4]→[[3,1],[4]]:f([3,1,4])=2;
- [3,1,4,1]→[[3,1,4,1]]:f([3,1,4,1])=1;
- [3,1,4,1,5]→[[3,1,4,1],[5]]:f([3,1,4,1,5])=2;
- [1]→[[1]]:f([1])=1;
- [1,4]→[[1],[4]]:f([1,4])=2;
- [1,4,1]→[[1,4,1]]:f([1,4,1])=1;
- [1,4,1,5]→[[1,4,1],[5]]:f([1,4,1,5])=2;
- [4]→[[4]]:f([4])=1;
- [4,1]→[[4,1]]:f([4,1])=1;
- [4,1,5]→[[4,1],[5]]:f([4,1,5])=2;
- [1]→[[1]]:f([1])=1;
- [1,5]→[[1],[5]]:f([1,5])=2;
- [5]→[[5]]:f([5])=1。
因此,第一个测试用例的答案是 1+1+2+1+2+1+2+1+2+1+1+2+1+2+1=21。