考慮乙個暴力做法。
維護乙個堆,每次取出深度最大的點,如果他還沒有覆蓋,那麼就給答案增加 $1$。
否則直接跳過,然後直接跳到他的 $k$ 級祖先加入堆中,複雜度是 $o(n^2log)$ 的。
然後發現這樣乙個事情,這個複雜度肯定是不滿的。
比如說對於單次操作,複雜度大概就是答案大小 $*log$ 級別的。
考場上大概想到了這裡,然後沒猜到結論就沒了。
設葉子的個數是 $l$,有乙個結論是答案的大小大概是 $l+\frac$ 級別的。
證明的方法大概是考慮除掉了這些關鍵點,剩下每個連通塊的大小至少為 $k$。
對於後者 $\frac$ ,因為調和級數所以可以直接暴力。
問題是咋處理葉子的貢獻。
然後很神仙的乙個辦法是,直接統計葉子的答案,然後把距離最近的葉子距離恰好為 $k$ 的節點塞入 $k$ 對應的堆。
對於覆蓋問題,其實用乙個樹狀陣列來搞一下就好了。
特別的,需要特判乙個點是否被葉子覆蓋,這個直接用前面預處理出的陣列就好了。
首先可以把這個期望通過期望的線性性展開。
然後問題就攤到了每個數前面沒有比他大的數的概率。
這個直接搞乙個 $0/1$ 序列出來就可以暴力了。
然後乙個優化的想法,其實並不關注具體的位置是啥,只要知道左側右側有多少個 $0/1$ 就可以轉移了。
然後發現還真轉移不了,因為對於當前考慮數的交換,沒辦法確定一步之後的狀態。
然後就掛了。
正解是這樣的,其實可以再列舉一下當前考慮數最終的位置在**。
然後記錄最終位置左右的 $0$ 的個數,當前考慮數在最終位置的左、中、右,最終位置上的數大於、小於當前考慮數即可。
考試時還是沒仔細分析。
經過分析可以得知,如果乙個數對是正常順序,那麼就正常排序下去。
如果乙個點對是逆序的,那一定是大的之後小的馬上出現。
然後可以討論乙個點對 $(a,b),a如果 $b如果 $x否則 $x$ 夾在中間,貢獻為 $0$ 或 $1$。
然後每個點對的貢獻都是獨立的,所以可以直接用 $2$ 的次冪和組合數計算。
前兩者用樹狀陣列即可維護,然後一減就可以得到最後乙個。
然後對於每次詢問,討論一下當前這個詢問的點對是正序的還是逆序的即可。
省選模擬104 題解
a.簽到題 把每個點向它右側比他大的第乙個點之間連邊,如果沒有那麼向 root 連邊。那麼可以構成一棵樹。特判一些情況之後,可以認為問題就是 1.給某節點和它的所有兒子節點權值加上乙個值。2.詢問一條路徑的權值和。首先考慮如果只詢問單點的維護方法,其實就是打乙個標記表示給整個兒子集合都加上了若干權值...
省選模擬102 題解
a.island 對於正負不同的情況,o n 列舉左側的位置然後計算。對於正負性相同的情況,把笛卡爾樹建出來,然後每次考慮跨過最小值的貢獻。分幾種情況 左右均不超過最小值,左右僅有乙個超過最小值,左右都超過最小值。然後順便統計上其中乙個端點為劃分點的貢獻。然後瘋狂的寫式子拆式子就沒了。做法挺簡單的,...
省選模擬101 題解
a.石子遊戲 問題可以簡單轉化為最少能取出多少個數,使得異或和為 k 顯然答案是小於 log a i 的,因為線性基已經可以拼出所有數了。所以可以考慮列舉這個答案,然後就是 dp 表示用 i 個數能否拼出 j 轉移可以用 fwt 優化,暴力做就是兩個 log 的,因為只需要一項所以手動 ifwt 可...