题解:P16758 [GKS 2020 #C] Candies

· · 题解

题意:

有长度为 n 的糖果甜度数组 a,支持两类操作:

S(L,R)=\sum_{i=L}^R(−1)^{i−L}\times a_i\times (i−L+1)

最后需要输出每个测试用例所有查询的甜度分数总和。

推公式:

展开:

S(L,R)\\=\sum_{i=L}^Ra_i\times(-1)^{i-L}\times(i-L+1)\\=(-1)^{i-L}\times[\sum_{i=L}^Ra_i\times i\times (-1)^i-(L-1)\times \sum_{i=L}^Ra_i\times (-1)^i]

据此我们可以定义两个辅助数组:

最终查询公式简化为:

S(L,R)=(-1)^L\times (\sum_{i=L}^{R}c_i-(L-1)\times\sum_{i=L}^{R}b_i)

这样就转化为两个普通数组的区间求和问题。

思路1:分块:

思路:

将整个数组划分为大小为 \sqrt{n} 的块,每块维护两个全局统计量: