#P16758. [GKS 2020 #C] Candies

[GKS 2020 #C] Candies

题目描述

Carl 有 NN 颗糖果组成的数组。数组的第 ii 个元素(下标从 11 开始)为 AiA_i,表示第 ii 颗糖果的甜度值。他想执行一系列 QQ 个操作。操作有两种类型:

  • 更新数组中某颗糖果的甜度值。
  • 查询某个子数组的甜度分数

从下标 llrr 的子数组的甜度分数定义为: $A_l \times 1 - A_{l+1} \times 2 + A_{l+2} \times 3 - A_{l+3} \times 4 + A_{l+4} \times 5 \dots$

形式化地,甜度分数为 i=lr(1)ilAi×(il+1)\sum_{i=l}^{r} (-1)^{i-l} A_i \times (i - l + 1)

例如:

  • [3,1,6][3, 1, 6] 的甜度分数为 3×11×2+6×3=193 \times 1 - 1 \times 2 + 6 \times 3 = 19
  • [40,30,20,10][40, 30, 20, 10] 的甜度分数为 $40 \times 1 - 30 \times 2 + 20 \times 3 - 10 \times 4 = 0$。
  • [2,100][2, 100] 的甜度分数为 2×1100×2=1982 \times 1 - 100 \times 2 = -198

Carl 想求出所有查询操作的甜度分数之和。如果没有查询操作,则和为 00。你能帮助 Carl 求出这个和吗?

输入格式

输入的第一行给出测试用例的数量 TT。接下来有 TT 个测试用例。每个测试用例的第一行包含 NNQQ。第二行包含 NN 个整数描述数组,其中第 ii 个整数为 AiA_i。接下来的 QQ 行中的第 jj 行描述第 jj 个操作。每行以一个字符开头,表示操作类型(U 表示更新,Q 表示查询)。

  • 对于更新操作,后面跟两个整数 XjX_jVjV_j,表示将数组的第 XjX_j 个元素修改为 VjV_j
  • 对于查询操作,后面跟两个整数 LjL_jRjR_j,表示查询从第 LjL_j 个元素到第 RjR_j 个元素(包含两端)的子数组的甜度分数。

输出格式

对于每个测试用例,输出一行,格式为 Case #x: y,其中 xx 是测试用例编号(从 11 开始),yy 是所有查询操作的甜度分数之和。

2
5 4
1 3 9 8 2
Q 2 4
Q 5 5
U 2 10
Q 1 2
3 3
4 5 5
U 1 2
U 1 7
Q 1 2
Case #1: -8
Case #2: -3

提示

在样例 #1 中:

  • 第一个查询询问子数组 [3,9,8][3, 9, 8] 的甜度分数,计算为 3×19×2+8×3=93 \times 1 - 9 \times 2 + 8 \times 3 = 9
  • 第二个查询询问子数组 [2][2] 的甜度分数,计算为 2×1=22 \times 1 = 2
  • 第三个查询询问子数组 [1,10][1, 10] 的甜度分数,计算为 1×110×2=191 \times 1 - 10 \times 2 = -19

因此最终输出为 9+219=89 + 2 - 19 = -8

在样例 #2 中:

  • 第一个(也是唯一一个)查询询问子数组 [7,5][7, 5] 的甜度分数,计算为 7×15×2=37 \times 1 - 5 \times 2 = -3

因此最终输出为 3-3

限制条件

1T1001 \le T \le 100

对于所有 ii1Ai1001 \le A_i \le 100

最多 66 个测试用例满足 1N2×1051 \le N \le 2 \times 10^51Q1051 \le Q \le 10^5

其余测试用例满足 1N3001 \le N \le 3001Q3001 \le Q \le 300

如果第 jj 个操作为更新操作,则 1XjN1 \le X_j \le N1Vj1001 \le V_j \le 100

如果第 jj 个操作为查询操作,则 1LjRjN1 \le L_j \le R_j \le N

测试集 1

最多有 55 个更新操作。

测试集 2

无特殊限制。

翻译由 DeepSeek V4 Pro 完成