前缀和的发疯是终生的

当一个人类定义了一个这样的数组:

int a[M][M][M][M];

当一个人类又得到了两根木棍……

容斥原理

两根木棍如下摆放:
木棍
长度分别为 444777,中间重叠了 222,总长本应该是 4+7=114+7=114+7=11,但是由于中间的重叠,所以总长是 11−2=911-2=9112=9
紧接着我们充分发挥人类智慧,两个集合 AAABBB,有
A∪B=A+B−A∩B A\cup B=A+B-A\cap B AB=A+BAB
对于三个集合 AAABBBCCC,有
A∪B∪C=A+B+C−A∩B−A∩C−B∩C+A∩B∩C A\cup B\cup C=A+B+C-A\cap B-A\cap C-B\cap C+A\cap B\cap C ABC=A+B+CABACBC+ABC
注意到这里的三集合交集被前面减去两两交集时多减了一次,所以应该加回来。
到这里,可以发现,求多个集合的并集,应该先加上所有集合,再减去相加时重复的,再加上减去时重复的,再减去加上时重复的……
所以……

四维前缀和

根据容斥原理,很好得出四维前缀和的推导公式。

求多个集合的并集,应该先加上所有集合,再减去相加时重复的,再加上减去时重复的,再减去加上时重复的……

四维数组 SSS 中,Si−1,j,k,lS_{i-1,j,k,l}Si1,j,k,lSi,j−1,k,lS_{i,j-1,k,l}Si,j1,k,l 的重叠部分是Si−1,j−1,k,lS_{i-1,j-1,k,l}Si1,j1,k,l,剩余同理,接着,Si−1,j−1,k,lS_{i-1,j-1,k,l}Si1,j1,k,lSi,j−1,k−1,lS_{i,j-1,k-1,l}Si,j1,k1,l 的重叠部分是 Si−1,j−1,k−1,lS_{i-1,j-1,k-1,l}Si1,j1,k1,l,最后,Si−,j−1,k−1,lS_{i-,j-1,k-1,l}Si,j1,k1,lSi−1,j−1,k,l−1S_{i-1,j-1,k,l-1}Si1,j1,k,l1 的重叠部分是Si−1,j−1,k−1,l−1S_{i-1,j-1,k-1,l-1}Si1,j1,k1,l1
so……
Si,j,k,l=ai,j,k,l+Si−1,j,k,l+Si,j−1,k,l+Si,j,k−1,l+Si,j,k,l−1−Si−1,j−1,k,l−Si−1,j,k−1,l−Si−1,j,k,l−1−Si,j−1,k−1,l−Si,j−1,k,l−1−Si,j,k−1,l−1+Si−1,j−1,k−1,l+Si−1,j−1,k,l−1+Si−1,j,k−1,l−1+Si,j−1,k−1,l−1−Si−1,j−1,k−1,l−1 S_{i,j,k,l}=a_{i,j,k,l}+S_{i-1,j,k,l}+S_{i,j-1,k,l}+S_{i,j,k-1,l}+S_{i,j,k,l-1}\\-S_{i-1,j-1,k,l}-S_{i-1,j,k-1,l}-S_{i-1,j,k,l-1}-S_{i,j-1,k-1,l}\\-S_{i,j-1,k,l-1}-S_{i,j,k-1,l-1}+S_{i-1,j-1,k-1,l}+S_{i-1,j-1,k,l-1}\\+S_{i-1,j,k-1,l-1}+S_{i,j-1,k-1,l-1}-S_{i-1,j-1,k-1,l-1} Si,j,k,l=ai,j,k,l+Si1,j,k,l+Si,j1,k,l+Si,j,k1,l+Si,j,k,l1Si1,j1,k,lSi1,j,k1,lSi1,j,k,l1Si,j1,k1,lSi,j1,k,l1Si,j,k1,l1+Si1,j1,k1,l+Si1,j1,k,l1+Si1,j,k1,l1+Si,j1,k1,l1Si1,j1,k1,l1
区间求和的公式可以逆推。
同理,剩下的 NNN 维前缀和也可以这样推出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值