莫隊演算法學習筆記(二) 帶修莫隊

2022-05-14 15:20:52 字數 912 閱讀 6773

莫隊演算法,是乙個十分優雅暴力

普通的莫隊可以輕鬆解決一些離線問題,但是,當遇上了一些有修改操作的問題,普通莫隊就無能為力了。

於是,改進後的莫隊——帶修莫隊就這樣產生了。

接下來,我們一起在普通莫隊的基礎之上,學會帶修莫隊這個強大無比的演算法。

既然是帶修莫隊,那麼第乙個關鍵問題就是如何處理修改

其實,我們可以增加乙個變數,來記錄對於每乙個詢問操作,在進行詢問之前一共進行了多少次修改,然後對於每一次詢問,只要像普通莫隊的\(l\)指標和\(r\)指標一樣新增乙個\(k\)指標來表示當前進行了多少次修改,而\(k\)指標的移動也與\(l\)指標和\(r\)指標是類似的。

模板如下:

register int l=0,r=0,k=0,ans=0;

for(sort(q+1,q+q_num+1,cmp),i=1;i<=q_num;++i)

)\)。

對於\(r\)指標

\(∴r\)指標的總複雜度為\(o(n^)\)。

對於\(k\)指標

\(∴k\)指標的總複雜度為\(o(n^)\)。

綜上所述,演算法的總時間複雜度應為\(o(n^)\),那麼我們的目的就是找到乙個\(x\)(\(0)使\(max(x+1,2-x,3-2x)\)最小。

此時的\(x\)應取\(\frac23\),所以塊的大小就是\(o(n^)\)。

呃,我想這個問題應該已經在上個問題中解決了。

帶修莫隊的時間複雜度應為\(o(n^)\)。

帶修莫隊這樣差不多就講完了,下面給一道例題:

【bzoj2120】數顏色(帶修莫隊)

莫隊演算法學習筆記(一) 普通莫隊

前言 在學習莫隊演算法之前,我一直以為這是乙個很高深的演算法。實際上,它就是乙個很高深的演算法 這個演算法玄學地將分塊與暴力兩大演算法實現了二合一,從而打造出了乙個時間複雜度為o n n o n sqrt n o nn 的求解多個區間詢問的離線演算法。具體介紹 首先,我們以詢問中l ll所在的區間為...

莫隊演算法學習筆記(三) 樹上莫隊

樹上莫隊的核心思想,就是將一棵樹轉化成乙個序列,然後用普通莫隊來搞。以一棵樹為例 要想對這棵樹進行樹上莫隊,我們第一步就是用乙個 s 陣列把它的括號序存下來 id 12 3456 78910 1112 1314 1516 s 12 4788 7455 2366 31 同時,我們用 i 陣列儲存每個數...

F Machine Learning(帶修莫隊)

f.machine learning 思路 統計每個數字出現的次數numi,記錄次數numi出現的次數cnti。然後就是帶修莫隊的事情了。注意 不要用node x,y,z 這種方式,不然就是錯,很迷。include include include include include includeusi...