aaa

https://class.51nod.com/Contest/Problem.html#contestProblemId=6392

看似数据结构,实则数学题。
而且题解做法和“原题”的做法没有啥关系。
先把式子换一种写法。
原式等于 \(\sum\limits_{l=1}^n \sum\limits_{r=l}^n \sum\limits_{i=l}^r( b_i \times(\sum\limits_{j=l}^r a_j))\)
显然可以待定系数一下:
设答案为 \(\sum\limits_{i=1}^nb_iq_i\)
再设 \(q_i=\sum\limits_{j=1}^n p_{i,j} a_j\)
由于修改是与 \(b\) 有关而与 \(a\) 无关的,所以 \(p,q\) 都不会修改。
看一下这样处理有什么好处。
对于一个区间 \([l,r]\) 增加 k,设它对原答案就会增加 \(\sum\limits_{i=l}^r kq_i=k\sum\limits_{i=l}^r q_i\)
那么只要求出 q 就好了。
而求 q 是与 p 有关的,考虑一下 \(p_{i,j}\) 的含义。
观察式子可以发现,它指的是既包含了 i,并且包含了 j 的区间的个数。(这里可以手动模拟思考一下)
那么当 \(i\le j\) 时, \(q_{i,j}=i\times (n-j+1)\)
否则为 \(j\times (n-i+1)\)
所以 \(p_i=\sum\limits_{j=1}^{i-1} j(n-i+1) a_j+\sum\limits_{j=i}^n i(n-j+1)a_j\)
但现在去求 p 依然是 n^2 的。
所以可以观察 \(p_i\)\(p_{i-1}\) 的关系。
显然先把一个 p 分为两个 \(\sum\) 加起来,设它们是 \(p_i=x_i+y_i\)
观察一下,\(x_i=x_{i-1}-\sum\limits_{j=1}^{i-1} ja_j\)
\(y_i=y_{i-1}+\sum\limits_{j=i}^{n}(n-j+1)a_j\)
所以预处理一下 ia_i 的前缀和与 (n-i+1)a_i的后缀和就做完了,时间复杂度很优秀,是 O(n+m) 的。

posted @ 2023-10-17 18:20  wscqwq  阅读(2)  评论(0编辑  收藏  举报