CF2241G.Summmon
入门
通过率:0%
时间限制:4.00s
内存限制:256MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
对于任意长度为 m 的数组 b,定义 f(b) 为:通过对 b 执行以下操作任意多次后所能达到的 max(b)−min(b) 的最小可能值:
- 任选一个下标 1≤i<m,并恰好执行以下操作之一:
- 将 bi+1 更新为 bi+1+bi,
- 将 bi+1 更新为 bi+1−bi。
给定一个长度为 n 的数组 a。你的任务是计算 f 在 a 的所有子数组∗ 上的和。更准确地说,需计算如下表达式的值:
1≤l≤r≤n∑f([al,al+1,…,ar]).
∗ 若数组 b 可通过从数组 a 的开头删除若干(可能为零或全部)元素、再从结尾删除若干(可能为零或全部)元素而得到,则称 b 是 a 的一个子数组。特别地,一个数组是其自身的子数组。
输入格式
第一行包含一个整数 t(1≤t≤104)——测试用例的数量。随后是每个测试用例的描述。
每个测试用例的第一行包含一个整数 n(1≤n≤2⋅105)——数组 a 的长度。
每个测试用例的第二行包含 n 个整数 a1,a2,…,an(1≤ai≤109)——数组 a 的元素。
保证所有测试用例的 n 之和不超过 2⋅105。
输出格式
对于每个测试用例,输出一个整数——即 ∑1≤l≤r≤nf([al,al+1,…,ar]) 的值。
输入输出样例
输入#1
5 3 6 4 8 4 1 2 3 4 9 9 9 8 2 4 4 3 5 3 6 18 12 24 9 6 36 6 36 24 18 12 9 6
输出#1
4 3 39 72 111
说明/提示
对于第一个测试用例,我们考察所有子数组:
- 对于单元素子数组 [6]、[4] 和 [8],无法执行任何操作,因此每个子数组的贡献均为 0。
- 对于 [6,4],首元素固定为 6;第二元素只能变为 4+6=10 或 4−6=−2,此时差值(即 max−min)分别为 4 或 8。因此不执行任何操作最优,贡献为 2。
- 对于 [4,8],选择 i=1 并执行操作 b2:=b2−b1,子数组变为 [4,4],其贡献为 0。
- 对于 [6,4,8],保持前两个元素不变,并选择 i=2,执行操作 b3:=b3−b2,使 8 变为 4。数组变为 [6,4,4],因此 max(b)−min(b)=6−4=2。可以证明该值即为最优值。
因此,第一个测试用例的答案为 0+0+0+2+0+2=4。
对于第二个测试用例,所有长度为 1 的子数组贡献均为 0。在其余子数组中,仅有 [2,3]、[3,4] 和 [2,3,4] 的贡献非零,且各自贡献均为 1。因此答案为 1+1+1=3。
输入解题思路,AI测评打分。不知道怎么写?