ABC366D 题解

推荐在 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 1x,y,zN

您将得到以下格式的 Q Q Q 个查询,必须按顺序处理。

对于第 i i i 次查询 ( 1 ≤ i ≤ Q ) (1 \leq i \leq Q) (1iQ) ,您将得到一个整数元组 ( 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 1LxiRxiN , 1 ≤ L y i ≤ R y i ≤ N 1 \leq Ly_i \leq Ry_i \leq N 1LyiRyiN , 和 1 ≤ L z i ≤ R z i ≤ N 1 \leq Lz_i \leq Rz_i \leq N 1LziRziN 。求

∑ 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=LxiRxiy=LyiRyiz=LziRziAx,y,z

题解

简单三维前缀和。考虑一下容斥关系就好了。

code

容斥知识补充

既然题解写都写了,写详细一点。

首先引入容斥的最经典的就是这张韦恩图(来自 OI-wiki):

现在我想知道 ∣ A ∪ B ∪ C ∣ |A\cup B\cup C| ABC,并不是简单粗暴的三个集合大小相加,因为互相有重叠部分。正确答案是: ∣ 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。相信还是很好理解的这里不赘述了。

把它推广到一般情况,就是我们熟悉的容斥原理了。

定义

∣ ⋃ 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=1nSi =iSii<jSiSj+i<j<kSiSjSk+(1)m1ai<ai+1 i=1mSai ++(1)n1S1Sn

整理,得

∣ ⋃ 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=1nSi =m=1n(1)m1ai<ai+1 i=1mSai

证明

我们计算每个元素出现的次数,对于 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)k1 {i=1kTaiai<ai+1} ++(1)m1{T1Tm}=(1m)(2m)++(1)m1(mm)=(0m)i=0m(1)i(im)=1(11)m=1

每个元素出现次数为 1 1 1,合并起来就是并集了,证毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值