(草稿展示)构式题:P4458 [BJOI2018] 链上二次求和
这篇并非题解,相当于我的草稿本,但我觉得这太傻逼了所以我为了泄愤发了出来,如果想学习的最好不要看这个,记号太乱了。
考虑如何查询,设\(pre_i\)为\(a_i\)的前缀和
\[\sum_{len=l}^{r}\sum_{i=len}^{n}(pre_i-pre_{i-len})\\
=\sum_{len=l}^{r}(\sum_{i=len}^{n}pre_i-\sum_{i=1}^{n-len}pre_{i})
\]
设 \(pre^2_i\) 为 \(pre_i\)的前缀和
\[原式=(r-l+1)pre^2_n-\sum_{i=1}^{r-1}pre^2_{i}+\sum_{i=1}^{l-2}pre^2_{i}-\sum_{i=1}^{n-l}pre^2_{i}+\sum_{i=1}^{n-r-1}pre^2_{i}
\]
我们需要在线段树上维护 \(pre^2_i\),再对其做区间和即可
\[pre^2_k=\sum_{i=1}^{k}\sum_{j=1}^{i}a_j=\sum_{i=1}^{k}(k-i+1)a_i=k\sum_{i=1}^{k}a_i-\sum_{i=1}^{k}ia_i+\sum_{i=1}^{k}a_i
\]
三项都可维护,所以\((r-l+1)pre^2_n\)就做完了
再套一个求和呢?
设\(f(n)=\sum_{i=1}^{n}pre^2_i\),则
\[f(n)=\sum_{k=1}^{n}\sum_{i=1}^{k}ka_i-\sum_{k=1}^{n}\sum_{i=1}^{k}ia_i+\sum_{k=1}^{n}\sum_{i=1}^{k}a_i
\]
再套上面的式子
\[\sum_{k=1}^{n}\sum_{i=1}^{k}a_i=\sum_{i=1}^{n}(n-i+1)a_i=(n+1)\sum_{i=1}^{n}a_i-\sum_{i=1}^{n}ia_i\\
-\sum_{k=1}^{n}\sum_{i=1}^{k}ia_i=-(n+1)\sum_{i=1}^{n}ia_i+\sum_{i=1}^{n}i^2a_i\\
\sum_{k=1}^{n}\sum_{i=1}^{k}ka_i=\sum_{i=1}^{n}\frac{(n-i+1)(n+i)}{2}a_i=\frac{1}{2}\bigg((n^2+n)\sum_{i=1}^{n}a_i-\sum_{i=1}^{n}i^2a_i+\sum_{i=1}^{n}ia_i\bigg)
\]
合并:
\[f(n)=\frac{1}{2}\bigg(\sum_{i=1}^{n}i^2a_i-(2n+3)\sum_{i=1}^{n}ia_i+(n^2+3n+2)\sum_{i=1}^{n}a_i\bigg)
\]
然后询问的答案:
\[ans=(r-l+1)\bigg((n+1)\sum_{i=1}^{n}a_i-\sum_{i=1}^{n}ia_i\bigg)-f(r-1)+f(l-2)-f(n-l)+f(n-r-1)
\]
然后我们就做完了这一坨勾石

浙公网安备 33010602011771号