CF2241G.Summmon

入门

通过率:0%

时间限制:4.00s

内存限制:256MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

对于任意长度为 mm 的数组 bb,定义 f(b)f(b) 为:通过对 bb 执行以下操作任意多次后所能达到的 max(b)min(b)\max(b) - \min(b) 的最小可能值:

  • 任选一个下标 1i<m1 \le i \lt m,并恰好执行以下操作之一
    1. bi+1b_{i+1} 更新为 bi+1+bib_{i+1} + b_i
    2. bi+1b_{i+1} 更新为 bi+1bib_{i+1} - b_i

给定一个长度为 nn 的数组 aa。你的任务是计算 ffaa所有子数组^{\text{∗}} 上的和。更准确地说,需计算如下表达式的值:

1lrnf([al,al+1,,ar]).\sum_{1 \le l \le r \le n} f([a_l,a_{l+1},\dots,a_r]).

^{\text{∗}} 若数组 bb 可通过从数组 aa 的开头删除若干(可能为零或全部)元素、再从结尾删除若干(可能为零或全部)元素而得到,则称 bbaa 的一个子数组。特别地,一个数组是其自身的子数组。

输入格式

第一行包含一个整数 tt1t1041 \le t \le 10^4)——测试用例的数量。随后是每个测试用例的描述。

每个测试用例的第一行包含一个整数 nn1n21051 \le n \le 2\cdot10^5)——数组 aa 的长度。

每个测试用例的第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n1ai1091 \le a_i \le 10^9)——数组 aa 的元素。

保证所有测试用例的 nn 之和不超过 21052\cdot10^5

输出格式

对于每个测试用例,输出一个整数——即 1lrnf([al,al+1,,ar])\sum_{1 \le l \le r \le n} f([a_l,a_{l+1},\dots,a_r]) 的值。

输入输出样例

  • 输入#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][6][4][4][8][8],无法执行任何操作,因此每个子数组的贡献均为 00
  • 对于 [6,4][6,4],首元素固定为 66;第二元素只能变为 4+6=104+6=1046=24-6=-2,此时差值(即 maxmin\max-\min)分别为 4488。因此不执行任何操作最优,贡献为 22
  • 对于 [4,8][4,8],选择 i=1i=1 并执行操作 b2:=b2b1b_{2}:=b_{2}-b_{1},子数组变为 [4,4][4,4],其贡献为 00
  • 对于 [6,4,8][6,4,8],保持前两个元素不变,并选择 i=2i=2,执行操作 b3:=b3b2b_{3}:=b_{3}-b_{2},使 88 变为 44。数组变为 [6,4,4][6,4,4],因此 max(b)min(b)=64=2\max(b)-\min(b)=6-4=2。可以证明该值即为最优值。

因此,第一个测试用例的答案为 0+0+0+2+0+2=40+0+0+2+0+2=4

对于第二个测试用例,所有长度为 11 的子数组贡献均为 00。在其余子数组中,仅有 [2,3][2,3][3,4][3,4][2,3,4][2,3,4] 的贡献非零,且各自贡献均为 11。因此答案为 1+1+1=31+1+1=3

输入解题思路,AI测评打分。不知道怎么写?

首页