Min-Max 容斥

Min-Max 容斥

一种关于 min,max 的容斥。

公式:

max(S)=TS,T(1)|T|+1min(S)(1)

min(S),max(S) 分别表示 S 中的最大值和最小值。

证明:考虑枚举每个元素作为最小中的贡献(如果有多个值相同的数再再按下标比较)

那么小于当前元素的数不能选。假设有 k 个大于当前元素的数,则有式子:

i=0k(ki)(1)i=(1+1)k=0k

也就是说只有最大值才会有 1 的贡献。

这个式子在期望意义下依旧满足,根据期望的线性性那么有:

E(max(S))=TS,T(1)|T|+1E(min(T))(2)

扩展式子:

kthmax(S)=TS,|T|k(1)|T|k(|T|1k1)min(T)(3)

证明类似,还是枚举每个元素作为最小元素所在的贡献。

设当前元素 x 从大到小排名为 pp<k 时贡献为 0

否则枚举 T 的大小。

i=kp(1)ik(p1i1)(i1k1)=i=kp(1)ik(p1k1)(ckik)=(p1k1)i=0pk(1)i(pki)=(p1k1)0pk

只有元素 x 恰好是第 k 大的时候才会有 1 的贡献。

P3175 [HAOI2015] 按位或

板子题,使用形式二转化为求集合 T 至少一个位置 1 的期望步数。

相当于求的是所有子集和,再套一个 FMT 板子即可。

P4707 重返现世

题目求得是第 k 小元素出现的期望时间,等价于求第 n+1k 大元素出现的期望时间。接下所有的 k 都是转化后的。

使用形式三转化为求集合 T 中出现第一个元素的期望时间,根据期望的线性性,转步数为: wTmpw,那么有:

E(kthmax(S))=TS(|T|1k1)(1)|T|kwTmpw

自然想到一个一个加物品。这种容斥式子的一个经典优化方式是直接将一部分记录为权值,把不好转移的放下标上。

fi,j,k 表示前 i 个数中选的所有数的 pw=j,第 k 大值的 (|T|1k1)(1)|T|k 的和是多少。

如果不选当前的数有转移 fi,j,k=fi1,j,k

否则选的话,会出现新的系数,比较难处理,考虑:

(|T|1k1)(1)|T|k=((|T|2k1)+(|T|2k2))(1)|T|k=((|T|1)1k1)(1)(|T|1)k+((|T|1)1(k1)1)(1)(|T|1)(k1)

你会发现前面一坨的系数等于 fi1,jpi,k 记录的,后面一坨的系数等于 fi1,jpi,k1 的,那么有:

fi,j,k=fi1,j,kfi1,jpi,k+fi1,jpi,k1

滚动数组优化即可。

[AGC038E] Gachapon

感觉这题出得非常好啊!改变了对 min,max 的刻板影响。

重新定义 min(S) 表示集合中第一个满足出现次数 cibi 的时间,max(S) 表示最后一个,设 sumaa 的总和。

那么依旧可以套用形式二将本题转化为求第集合 T 中第一个满足条件的期望时间。

首先排除掉集合外元素的干扰,即期望下每 sumawT1aw 次才会选到一个集合内的元素。

然后注意到从集合内元素出现次数从 0,0,0 到恰好有一个数满足 ci=bi 的过程中一共经过了 wTcw 个状态(最终状态不算),那在中间的每个状态做一的贡献。那么也就转化为对于每个 iT,ci<bi 的状态,经过这里的概率。

期望转计数,那么对于一个固定状态 c,概率为:

(ci)!ci!(aixTax)ci

第一项为多重排列数,第二项表示生成 cii 的概率。

再把反演公式带入:

ans=TS(1)|T|+1sumawT1aw×(ci)!ci!(aixTax)ci=sumaTS(1)|T|+1wT1aw×(ci)!ci!aici(1xTax)ci

跟上面类似,将一些更多的系数记录在权值上。

fi,j,k 表示前 i 个数选了若干个数使得 ai=jci=k(1)|T|1aicici! 的系数和。

转移依旧分两种,不选的话 fi,j,k=fi1,j,k

选的话 fi,j,k=fi1,jai,kci×aicici!

复杂度看起来是 O(n4) 的,(默认 ai,bi,n 同阶),状态三维转移需要枚举 ci

但是仔细一想 ci 的一共的枚举量是 bi 的,摊下来就是 O(n3) 的!

P5643 [PKUWC2018] 随机游走

依旧可以适用形式二将转化为走到集合第一次走到 T 任意一个元素的期望时间。

让出发点为树的根节点,设 fi 表示从 i 节点出发走到 T 的期望步数。

di 表示 i 的度数,那么有:

fi=1di(ffa+jsonifj)+1

显然 iT 的步数为 0

那么可以直接高斯消元得到 f 的真实值,但是复杂度略有些爆,可能需要卡常。

注意到这题其实性质非常好,如果 f 的值只和儿子有关的话那么就可以递推了。唯一的问题就是 fa 的贡献,那么考虑设 fikiffa+bi 表示。

那么有:

fi=1di(ffa+jsoni(kjfi+bj))+1difi=ffa+fijsonikj+jsonibj(dikj)fi=ffa+bj+difi=1dikjffa+di+bjdikjki=1dikj,bi=di+bjdkj

现在转移就跟父亲节点无关了,一遍 DFS 即可求出所有值。

现在我们对于每个集合 T 都可以 O(n) 求出 frt 的值。

注意到:

E(max(S))=TS(1)|T|+1E(min(T))

我们处理出 (1)|T|+1E(min(T)) 即可。

再套上高维前缀和即可。

P3600 随机数生成器

还是更改 min,max 的定义。

min(S) 表示每次询问的答案的最小值,max(S) 表示最大值。

套用形式二:

max(S)=TS(1)|T|+1min(T)

集合 T 的答案显然只和所包含的本质不同的位置个数(区间并)有关。

fi,j 表示 i 个数中最小值为 j 的概率,sfi,j 表示前 i 个数中最小值大于等于 j 的概率,Fi 表示区间并大小为 i 的期望。

fi,j=1n((xj+1)fi1,j+sfi1,j+1)Fi=j=1nfi,j×j

首先如果一个区间包含另一个区间是没有任何作用的。(如果一个大的区间被选择了,那么小区间选和不选分别带来 11 的代价,抵消了)。那把所有包含另一个区间的区间给消除掉。再按照右端点排序。

直接记录区间并略有些麻烦,考虑记补集大小,再设 gi,j,0/1 表示前 i 个区间选了若干个区间使得区间并的 补集j 且选了奇数/偶数个区间。

gi,j,w=rp<ligp,j(lirp1),w1+rpligp,j,w1

注意到 l,r 分别单调递增,两坨式子分别考虑,第一坨考虑对于每个 gp,j,wrp<li 的时候再加入贡献,贡献到 cj+rp,w,第二托式子考虑对于每个 gp,j,w 在算出的时候就贡献到 dj,w,在 rp<li 的时候取消贡献即可。

那么有:

gi,j,w=cj(li1),w1+dj,w1

最后再把贡献带入:

ans=i=1qj=0ri(gi,j,1gi,j,0)F(rij)

Become Big For Me

一道扩展 minmax 容斥题,真的很牛牛。

Vp(n) 表示最大的 k,满足 pkn

对于所有质因子 p,设 vp(ai) 中的最小值和次小值(不要求严格)为 xp,yp,那么答案为 ppxp+yp,注意到操作都是跟 lcm 有关,也就是跟 vp(ai) 的最大值有关。套上 minmax 容斥有:

gcdij(Ai×Aj)=TSlcm(T)(1)|T|1(TSlcm(T)(1)|T|2(|T|1))=TSlcm(T)(1)|T|(|T|2)

这个其实应该是先对每个因子做 minmax 容斥,然后再相乘。

有一个经典的结论为我们任意一个值域为 [1,106] 的集合 S,都存在一个大小为至多为 7 的子集 T 使得 gcd(T)=gcd(S)

构造则可以任选一个数,将其最小幂次对应的数加入集合,再检查这个数能否去除即可,证明见 CF 官方题解。

我们这样选出两组数,使得答案不变,使用的子序列总长度约为 O(2k×k2),其中 2k×k 为操作次数,其中带一个 14 的常数,足以通过。

posted @   Hanghang007  阅读(196)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示