Min-Max 容斥学习笔记

有些时候,我们想要计算一个集合 SS 里元素的最小值/最大值,设最小值为 MIN(S)=minxSx\operatorname{MIN}(S)=\min\limits_{x\in S}x,最大值为 MAX(S)=maxxSx\operatorname{MAX}(S)=\max\limits_{x\in S}x

但是有时我们想要求 MIN(S)\operatorname{MIN}(S),但却很难求,反而 MAX(S)\operatorname{MAX}(S) 很好求;或者想要求 MAX(S)\operatorname{MAX}(S),但却很难求,反而 MIN(S)\operatorname{MIN}(S) 很好求。那么这时就可以通过 Min-Max 容斥来实现 MIN(S)\operatorname{MIN}(S)MAX(S)\operatorname{MAX}(S) 的互相转化,从而求得 MIN(S)\operatorname{MIN}(S) 或者 MAX(S)\operatorname{MAX}(S)

朴素 Min-Max 容斥

Min-Max 容斥,先给出式子:

MIN(S)=TS(1)T+1MAX(T)MAX(S)=TS(1)T+1MIN(T)\operatorname{MIN}(S)=\sum\limits_{T\subseteq S}(-1)^{|T|+1}\operatorname{MAX}(T)\\ \operatorname{MAX}(S)=\sum\limits_{T\subseteq S}(-1)^{|T|+1}\operatorname{MIN}(T)\\

先考虑第一个式子的证明:

首先假设 SS 内元素互不相同(离散化),然后SS 中元素升序排列后的数列为 AA

MAX(T)=Ai\operatorname{MAX}(T)=A_i,有以下两种情况:

  • i=1i=1,那么显然 T=1|T|=1,此时 MAX(T)=MIN(S)\operatorname{MAX}(T)=\operatorname{MIN}(S)TT 的贡献也就是 (1)2MIN(S)=MIN(S)(-1)^2\operatorname{MIN}(S)=\operatorname{MIN}(S)

  • i>1i>1,那么集合内显然不可能存在满足 j>ij>iAjA_{j},那么只有 2i12^{i-1} 个集合贡献为 AiA_i,显然有 2i22^{i-2} 个集合的大小是奇数,2i22^{i-2} 个集合的大小是偶数,它们抵消了,所以此时 TT 的贡献是 00

第二个式子证明过程大体相同,只不过 AA 换成了降序排列。

Min-Max 的优点在于它能实现 f(MIN(S))f(\operatorname{MIN}(S))f(MAX(S))f(\operatorname{MAX}(S)) 的不涉及到取 min\min 和取 max\max 操作的互相转化,其中 ff 是任意一个线性函数,例如期望

理解了它的原理后也不难推出式子:

f(MIN(S))=TS(1)T+1f(MAX(T))f(MAX(S))=TS(1)T+1f(MIN(T))f(\operatorname{MIN}(S))=\sum\limits_{T\subseteq S}(-1)^{|T|+1}f(\operatorname{MAX}(T))\\ f(\operatorname{MAX}(S))=\sum\limits_{T\subseteq S}(-1)^{|T|+1}f(\operatorname{MIN}(T))\\

Kth-Min-Max 容斥

Min-Max 容斥的另一个优点在于,它还能求出集合 SS 的第 kk 大/小 MAXk(S)\operatorname{MAX}_k(S)MINk(S)\operatorname{MIN}_k(S),推导如下:

考虑令 MINk(S)=TSF(T)MAX(T)\operatorname{MIN}_k(S)=\sum\limits_{T\subseteq S}F(|T|)\operatorname{MAX}(T),构造 FF

类似的,假设 SS 内元素互不相同(离散化),然后SS 中元素降升序排列后的数列 AA

我们设 MAX(T)=Ap\operatorname{MAX}(T)=A_p 那么显然只有 TT 不包含满足 j>pj>pAjA_j 才能让 MAX(T)=Ap\operatorname{MAX}(T)=A_p,即p1p-1 个数可供选择,所以对于所有满足 MAX(T)=Ap\operatorname{MAX}(T)=A_pTT,它的系数 FF

i=0p1(p1i)F(i+1)\sum\limits_{i=0}^{p-1}\dbinom{p-1}{i}F(i+1)

求和函数的变量 ii 表示除了 ApA_p 外多选的元素,然后 F(i+1)F(i+1) 表示选那么多数的贡献系数,(p1i)\dbinom{p-1}{i} 表示可以随便选择。

然后我们想让 FF 满足:

i=0p1(p1i)F(i+1)=[p=k]\sum\limits_{i=0}^{p-1}\dbinom{p-1}{i}F(i+1)=[p=k]

即:

i=0p(pi)F(i+1)=[p=k1]\sum\limits_{i=0}^{p}\dbinom{p}{i}F(i+1)=[p=k-1]

二项式反演一下:

[p=k+1]=i=0p(pi)F(i+1)F(p+1)=i=0p(1)pi(pi)[i=k1][p=k+1]=\sum\limits_{i=0}^{p}\dbinom{p}{i}F(i+1)\Rightarrow F(p+1)=\sum\limits_{i=0}^{p}(-1)^{p-i}\dbinom{p}{i}[i=k-1]

即:

F(p)=(1)pk(p1k1)F(p)=(-1)^{p-k}\dbinom{p-1}{k-1}

所以:

MINk(S)=TS(1)Tk(T1k1)MAX(T)MAXk(S)=TS(1)Tk(T1k1)MIN(T)\operatorname{MIN}_k(S)=\sum\limits_{T\subseteq S}(-1)^{|T|-k}\dbinom{|T|-1}{k-1}\operatorname{MAX}(T)\\ \operatorname{MAX}_k(S)=\sum\limits_{T\subseteq S}(-1)^{|T|-k}\dbinom{|T|-1}{k-1}\operatorname{MIN}(T)

代入 k=1k=1 验证:

MIN1(S)=TS(1)T1(T111)MAX(T)=TS(1)T1MAX(T)\begin{aligned} \operatorname{MIN}_1(S)&=\sum\limits_{T\subseteq S}(-1)^{|T|-1}\dbinom{|T|-1}{1-1}\operatorname{MAX}(T)\\ &=\sum\limits_{T\subseteq S}(-1)^{|T|-1}\operatorname{MAX}(T)\\ \end{aligned}

发现得到了之前的式子,所以我们推对了。

同样的,Kth-Min-Max 容斥也可以套上任意线性函数。

应用

HDU 4624 Endless Spin

双倍经验:ABC242Ex Random Painting

要求所有球均被染色的时间,可以通过 Min-Max 容斥转化为求一个子集 SS 中的球最早被染色的时间 TmeSTme_S

进一步的,若 SS 中的球被染色的概率为 pp,那么 TmeSTme_S 就等于 1p\frac{1}{p}

而被染色的概率很好求,只要求出能给这些球染色的区间个数 sumsum,除以总的区间个数 (n2)+n\binom{n}{2}+n 即可。

那么直接设 dpi,jdp_{i,j} 表示前 ii 个球处理完毕,当前子集 SS 选了球 ii 且不被染色的选区间的方案数为 jj 的选子集的方案数,转移的时候把容斥系数也乘进去,最后套 Min-Max 的式子即可。

时间复杂度 O(n4)O(n^4)