推荐在 cnblogs 上阅读
Solution
题意简述
给你一个正整数 N N N 和 N 3 N^3 N3 个非负整数,表示为 A x , y , z A_{x,y,z} Ax,y,z 其中 1 ≤ x , y , z ≤ N 1 \leq x, y, z \leq N 1≤x,y,z≤N 。
您将得到以下格式的 Q Q Q 个查询,必须按顺序处理。
对于第 i i i 次查询 ( 1 ≤ i ≤ Q ) (1 \leq i \leq Q) (1≤i≤Q) ,您将得到一个整数元组 ( L x i , R x i , L y i , R y i , L z i , R z i ) (Lx_i, Rx_i, Ly_i, Ry_i, Lz_i, Rz_i) (Lxi,Rxi,Lyi,Ryi,Lzi,Rzi) ,其中 1 ≤ L x i ≤ R x i ≤ N 1 \leq Lx_i \leq Rx_i \leq N 1≤Lxi≤Rxi≤N , 1 ≤ L y i ≤ R y i ≤ N 1 \leq Ly_i \leq Ry_i \leq N 1≤Lyi≤Ryi≤N , 和 1 ≤ L z i ≤ R z i ≤ N 1 \leq Lz_i \leq Rz_i \leq N 1≤Lzi≤Rzi≤N 。求
∑ x = L x i R x i ∑ y = L y i R y i ∑ z = L z i R z i A x , y , z \sum\limits_{x=Lx_i}^{Rx_i} \sum\limits_{y=Ly_i}^{Ry_i} \sum\limits_{z=Lz_i}^{Rz_i} A_{x,y,z} x=Lxi∑Rxiy=Lyi∑Ryiz=Lzi∑RziAx,y,z
题解
简单三维前缀和。考虑一下容斥关系就好了。
容斥知识补充
既然题解写都写了,写详细一点。
首先引入容斥的最经典的就是这张韦恩图(来自 OI-wiki):
现在我想知道 ∣ A ∪ B ∪ C ∣ |A\cup B\cup C| ∣A∪B∪C∣,并不是简单粗暴的三个集合大小相加,因为互相有重叠部分。正确答案是: ∣ 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| ∣A∪B∪C∣=∣A∣+∣B∣+∣C∣−∣A∩B∣−∣A∩C∣−∣B∩C∣+∣A∩B∩C∣。相信还是很好理解的这里不赘述了。
把它推广到一般情况,就是我们熟悉的容斥原理了。
定义
∣ ⋃ i = 1 n S i ∣ = ∑ i ∣ S i ∣ − ∑ i < j ∣ S i ∩ S j ∣ + ∑ i < j < k ∣ S i ∩ S j ∩ S k ∣ − … + ( − 1 ) m − 1 ∑ a i < a i + 1 ∣ ⋂ i = 1 m S a i ∣ + ⋯ + ( − 1 ) n − 1 ∣ S 1 ∩ ⋯ ∩ S n ∣ \left|\bigcup_{i=1}^nS_i\right|=\sum\limits_i\left|S_i\right|-\sum\limits_{i<j}\left|S_i\cap S_j\right|+\sum\limits_{i<j<k}\left|S_i\cap S_j\cap S_k\right|-\dots\\ +(-1)^{m-1}\sum\limits_{a_i<a_{i+1}}\left|\bigcap_{i=1}^mS_{a_i}\right|+\dots+(-1)^{n-1}\left|S_1\cap\dots\cap S_n\right| i=1⋃nSi =i∑∣Si∣−i<j∑∣Si∩Sj∣+i<j<k∑∣Si∩Sj∩Sk∣−…+(−1)m−1ai<ai+1∑ i=1⋂mSai +⋯+(−1)n−1∣S1∩⋯∩Sn∣
整理,得
∣ ⋃ i = 1 n S i ∣ = ∑ m = 1 n ( − 1 ) m − 1 ∑ a i < a i + 1 ∣ ⋂ i = 1 m S a i ∣ \left|\bigcup_{i=1}^nS_i\right|=\sum\limits_{m=1}^n(-1)^{m-1}\sum\limits_{a_i<a_{i+1}}\left|\bigcap_{i=1}^mS_{a_i}\right| i=1⋃nSi =m=1∑n(−1)m−1ai<ai+1∑ i=1⋂mSai
证明
我们计算每个元素出现的次数,对于 x x x,假设它出现在 T 1 , … , T m T_1,\dots,T_m T1,…,Tm 的集合中。
C n t = ∣ { T i } ∣ + ⋯ + ( − 1 ) k − 1 ∣ { ⋂ i = 1 k T a i ∣ a i < a i + 1 } ∣ + ⋯ + ( − 1 ) m − 1 ∣ { T 1 ∩ ⋯ ∩ T m } ∣ = ( m 1 ) − ( m 2 ) + ⋯ + ( − 1 ) m − 1 ( m m ) = ( m 0 ) − ∑ i = 0 m ( − 1 ) i ( m i ) = 1 − ( 1 − 1 ) m = 1 \begin{aligned} Cnt&=|\{T_i\}|+\dots+(-1)^{k-1}\left|\left\{\bigcap_{i=1}^kT_{a_i}|a_i<a_{i+1}\right\}\right|+\dots+(-1)^{m-1}|\{T_1\cap\dots\cap T_m\}|\\ &=\binom{m}{1}-\binom{m}{2}+\dots+(-1)^{m-1}\binom{m}{m}\\ &=\binom{m}{0}-\sum\limits_{i=0}^m(-1)^i\binom{m}{i}\\ &=1-(1-1)^m=1 \end{aligned} Cnt=∣{Ti}∣+⋯+(−1)k−1 {i=1⋂kTai∣ai<ai+1} +⋯+(−1)m−1∣{T1∩⋯∩Tm}∣=(1m)−(2m)+⋯+(−1)m−1(mm)=(0m)−i=0∑m(−1)i(im)=1−(1−1)m=1
每个元素出现次数为 1 1 1,合并起来就是并集了,证毕。