BZOJ2038 小Z的襪子(莫隊演算法)

2022-01-29 16:39:50 字數 670 閱讀 1746

題目:

分析:莫隊演算法

莫隊演算法是一種思想……

處理問題:不帶修改的區間詢問

使用要求:[l-1,r] [l,r-1]的結果可由[l,r]的答案在o(1)或o(logn)的時間內推出

具體步驟:

1、對整個區間軸分成根號n塊

2、以l所在的塊的編號為第一關鍵字,r為第二關鍵字給所有詢問排序方便處理

3、對於每個塊內的詢問單獨處理

①對於當前塊裡的第乙個詢問暴力求解

②剩下的在第乙個詢問基礎上遞推得到

那麼對於本題,只要說明如何從[l,r]的答案推到[l-1,r] [l,r-1]就行了

注意題目最後求的是概率,那麼我們不妨推種類,概率最後除以總數就行了

假設對於某個塊,第乙個詢問[l,r]我們已經解決,且完成了這個詢問的col陣列(col[i]表示第i種顏色出現的次數)

那麼考慮區間[l-1,r],假設第i-1位的顏色為k,那麼ans[l-1,r]=ans[l,r]+新增乙個顏色k多的種類

那麼這個東西是多少呢,其實就是c(col[k]+1,2)-c(col[k],2)=col[k]啦

對於[l,r-1]就是減了啊……完美解決了……

總結:對於那成堆的無修改的區間問題,可以先考慮莫隊演算法啦……即使資料結構可以破,但是絕壁沒莫隊演算法好!(其實是**短~\(≧▽≦)/~啦啦啦)

BZOJ2038 小Z的襪子 莫隊

bzoj2038 題意 q 5000 次詢問,問在區間中隨意取兩個值,這兩個值恰好相同的概率是多少?分數表示 感覺自己複述的題意極度抽象,還是原題意有趣 逃 思路 設在l到r這個區間中,x這個值得個數為a個,y這個值的個數為b個,z這個值的個數為c個。那麼答案即為 a a 1 2 b b 1 2 c...

BZOJ 2038 小Z的襪子(莫隊演算法)

莫隊演算法的話,看這個比較好懂 net bossup article details 39236275 不過這裡面的部落格的 貌似有點問題,所以 的話,net lwt36 article details 50583757 這個是對的,看我的也行。什麼時候用莫隊?1 區間不會被修改 2 可以離線 3 ...

BZOJ2038,小Z的襪子(莫隊演算法)

莫隊演算法。這道題wa了很多次,猜測可能是跟oj系統有關,有點坑。如下 include include include includeusing namespace std typedef long long ll const int maxn 5e4 5 const int mm 2e6 5 in...