n阶前缀和 の 拆解
二阶
\[\sum_{i=l}^{r} \sum^{i}_{j=1} a_j
\]
\[=\sum_{i=l}^{r} (r-i+1) a_i
\]
\[=(r+1)\sum_{i=l}^{r} a_i+\sum_{i=l}^{r} i \cdot a_i
\]
这个很好理解,因为对于第 \(i\) 个数,他加了 \((r-i+1)\) 次
三阶
正常拆解
\[\sum_{i=l}^{r} \sum^{i}_{j=1} \sum_{k=1}^{j} a_k
\]
\[=\sum_{i=l}^{r} \sum_{j=1}^{i} (i-j+1) a_j
\]
\[=\sum_{i=l}^{r} {\Large (}(i+1) \cdot \sum_{j=1}^{i} a_j - \sum_{j=1}^{i} j \cdot a_j{\Large )}
\]
\[=\sum_{i=l}^{r} {\Large (} (i+1) \cdot \sum_{j=1}^{i} a_j {\Large )} - \sum_{i=l}^{r} \sum_{j=1}^{i} j \cdot a_j
\]
直接拆开可得(可用数学归纳法):
\[\sum^{r}_{i=l} \frac{(r-i+1)(r+i+2)}{2} a_i - \sum_{i=l}^{r} i \cdot (r-i+1) a_i
\]
合并,得:
\[\sum^{r}_{i=l} \frac{(r-i+1)(r-i+2)}{2} a_i
\]
展开,得:
\[\sum^{r}_{i=l} \frac{r^2+i^2-2ri-3i+2}{2} a_i
\]
即:
\[\frac{1}{2}\sum^{r}_{i=l} i^2 \cdot a_i -\frac{2r+3}{2} \sum^{r}_{i=l} i \cdot a_i + \frac{r^2+2}{2}\sum^{r}_{i=l} a_i
\]
即维护 \(\sum^{r}_{i=l} i^2 \cdot a_i\),\(\sum^{r}_{i=l} i \cdot a_i\),\(\sum^{r}_{i=l} a_i\) 即可
另一种方法
令
\[b_i=\sum_{j=1}^i a_j
\]
然后原式化为:
\[\sum_{i=l}^{r} \sum^{i}_{j=1} b_j
\]
同2阶,展开:
\[(r+1) \cdot \sum_{i=l}^{r} b_i - \sum_{i=l}^{r} i \cdot b_i
\]
然后把
\[b_i=\sum_{j=1}^i a_j
\]
代入得:
\[(r+1) \cdot \sum_{i=l}^{r} \sum_{j=1}^i a_j - \sum_{i=l}^{r} i \cdot \sum_{j=1}^i a_j
\]
其中 \(\sum_{i=l}^{r} \sum_{j=1}^i a_j\) 是不是很眼熟!
展开得:
\[(r+1) \cdot \sum_{i=l}^{r} (r-i+1) a_i - \sum_{i=l}^{r} i \cdot (r-i+1) a_j
\]
然后就是同第一种方法得到答案啦!
n阶可以类推
本文来自博客园,作者:whrwlx,转载请注明原文链接:https://www.cnblogs.com/whrwlx/p/18287504
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!