省選模擬45 題解

2022-03-16 18:34:39 字數 1357 閱讀 3675

當然考慮左端點為 $l$的所有矩形的貢獻。

通過乙個 trie,對 trie 上每個節點開乙個 set,來找到每個串 $s$ 存在的位置。

那麼可以把當前答案的形式化成 $ans=\sum \limits_ val_s$ ,其中 $val_s$ 表示這個串出現的區間數。

$val_s$ 直接通過簡單的在 set 上查前驅後繼即可維護。然後在 trie 上每個節點另外開乙個變數 $sum$ 表示子樹和。

直接訪問 $sum_$ 累計答案即可。

考慮左端點每次的 $+1$ 操作,實際上把根節點的每個兒子合併到一起,並作為新的根節點即可。

然後需要寫乙個 trie 的合併函式,與線段樹合併類似可分析函式呼叫次數是正確的。

對於 set 中元素的處理,可以直接啟發式合併,然後就沒了,這樣做的複雜度是 $o(nmlog^2)$ 的。

然後有乙個結論,就是說使用 splay ,然後直接把小的 splay 按照中序遍歷插入大 splay。

這樣的複雜度可以去乙個 $log$,原因大概是 splay 的 finger search 性質。

容易發現,如果固定乙個右端點。

因為 $and$ 操作的性質,不同的區間取值只有 $log$ 種。

考慮維護出區間取值的變化位置。

對於每個區間的取值,判斷是否被 $k$ 整除。

如果整除,那麼直接進行區間加 $1$ 操作。

右端點從左往右掃,同時進行區間加法操作。

離線詢問,在對應的右端點處區間查詢即可。

然後大概學到了如何用樹狀陣列維護區間修改、區間查詢。

思想是將修改轉化為差分,詢問即做兩次字首和。

寫出來式子發現可以交換求和符號,於是可以用兩個樹狀陣列維護。

發現同時有 $a,b$ 兩個要求,不是很好維護。

其實很多排列的題都有的套路是,每次考慮最大的元素 $n$ 或者最小的元素 $1$。

考慮每次選擇乙個位置放置 $n$ ,那麼顯然會對 $a,b$ 均造成 $1$ 的貢獻。

然後 $a,b$ 都不會跨越這個 $n$,於是可以對左右分別 dp 處理。

然後發現這個 dp 的轉移和第一類斯特林數一毛一樣。

於是 $ans=\sum \limits_^n s(i-1,a-1)s(n-i,b-1)\binom$。

然後發現只要求 $a-1,b-1$ 列的斯特林數。

求一列斯特林數的方法是用 egf,$i$ 個點能構成的環排列個數就是 $(i-1)!$,然後整個快速冪就完事了。

然而這題的資料範圍 $2e5$ ,顯然多項式 $ln,exp$ 必死。

考慮上面那個式子,發現 $ans=s(n-1,a-1+b-1)\binom$ ,原因可以直接從組合含義理解。

然後現在只需要求單點斯特林數,用較小的常數求一行斯特林數就行了。

省選模擬104 題解

a.簽到題 把每個點向它右側比他大的第乙個點之間連邊,如果沒有那麼向 root 連邊。那麼可以構成一棵樹。特判一些情況之後,可以認為問題就是 1.給某節點和它的所有兒子節點權值加上乙個值。2.詢問一條路徑的權值和。首先考慮如果只詢問單點的維護方法,其實就是打乙個標記表示給整個兒子集合都加上了若干權值...

省選模擬102 題解

a.island 對於正負不同的情況,o n 列舉左側的位置然後計算。對於正負性相同的情況,把笛卡爾樹建出來,然後每次考慮跨過最小值的貢獻。分幾種情況 左右均不超過最小值,左右僅有乙個超過最小值,左右都超過最小值。然後順便統計上其中乙個端點為劃分點的貢獻。然後瘋狂的寫式子拆式子就沒了。做法挺簡單的,...

省選模擬101 題解

a.石子遊戲 問題可以簡單轉化為最少能取出多少個數,使得異或和為 k 顯然答案是小於 log a i 的,因為線性基已經可以拼出所有數了。所以可以考慮列舉這個答案,然後就是 dp 表示用 i 個數能否拼出 j 轉移可以用 fwt 優化,暴力做就是兩個 log 的,因為只需要一項所以手動 ifwt 可...