設\(S\)是一個集合,\(\max(S)\)和\(\min(S)\)分別表示集合中的最大值與最小值。
那么有如下式子成立:
因為證明很簡單就寫一下吧,以第一個式子為例,設\(\max(S)=x\),那么只有\(T=\{x\}\)時的\(\min(T)\)為\(x\)(可能有多個相同的最大值,這時候隨便欽點一個就可以了),對於除此之外的所有\(T\),肯定至少存在一個集合中的數\(y\)使得\(\min(T \cup \{y\})=\min(T)\),假設有\(k\)個這樣的\(y\),那么從中選奇數個和選偶數個的方案數是一樣的,於是\(\min(T)\)就被抵消了。
這個式子在期望下也是成立的,即:
用期望的線性性證明即可。
於是就可以用來做題了,一般的套路是每個位置有概率從\(0\)變成\(1\),問都變成\(1\)的期望步數,這就是\(\max(S)\),然后就反演成\(\min(T)\),至少一個數變成\(1\)的期望就好做很多了。
\(upd\):來填坑了...現在來介紹一下最值反演的推廣:通過求\(\min\)來求第\(k\)大(\(kth\max\))。前置知識是二項式反演,如果不知道請戳這里。
我們來嘗試構造一個函數\(f\),使得:
然后來考慮一下對於集合中第\(i\)大的元素,如果\(\min(T)\)等於這個元素,那么只有比它大的\(i-1\)個元素是可能存在的,那么它的貢獻就是:
也就是說\(f\)需要滿足:
等價於:
為了方便我們用\(\widehat f_i=f_{i+1}\)替換\(f\),然后用\(g_i\)表示\([i=k-1]\),那么就得到:
看這個是不是一個經典的二項式反演的形式呀,所以二項式反演一下:
然后因為\(g_i=[i=k-1]\),所以上面的式子只有\(j=k-1\)這一項是有貢獻的,我們再把\(f\)替換回去,得:
再把\(f_{i+1}\)替換成\(f_i\),最終得到:
終於結束啦!
同時我們可以發現如果要求第\(k\)大,那么只需要計算元素個數\(\geq k\)的子集就可以了。
