洛谷P5906 模板 回滾莫隊 不刪除莫隊

2021-10-24 21:05:12 字數 774 閱讀 1219

莫隊好多套路啊。。。建議都學習一下

學習自題解

回滾莫隊的意思大概就是,按l所在塊再求列舉詢問,相同的一起求答案,l部分的必須每次從當前塊的最右邊向左拓展到想要的地方,求完當前詢問之後,你此時更新出的答案要回滾到l向左移動之前,再求下個詢問。

左端點在乙個塊中的詢問處理完之後,我們清空所有最左和最右的數字位置的陣列,再處理下個塊中的詢問。

這樣,對於同乙個塊,右端點是不斷增加的,所以當前塊右邊的ed是不變的,當前塊內的數字的ed有可能新出現,就先標記上,然後回退的時候再清掉。

那麼乙個詢問最多就是l移動sqrt(n)次,對於同乙個塊內所有詢問,r最多移動n次,總複雜度還是nsqrt(n)

#includeusing namespace std;

const int maxl=2e5+10;

int n,m,len,bn,tot;

int a[maxl],num[maxl],ans[maxl];

int bel[maxl],last[maxl],st[maxl],ed[maxl],clr[maxl];

struct que

ans[q[ind].id]=now;

while(l<=br)

now=tmp;

++ind;

} for(int i=1;i<=cnt;i++)

st[clr[i]]=ed[clr[i]]=0; }}

inline void print()

int main()

P5906 模板 回滾莫隊 不刪除莫隊

p5906 模板 回滾莫隊 不刪除莫隊 回滾莫隊是拿來幹什麼的呢?在我們維護的資料不好刪除,但是可以撤銷,比較好新增的時候就可以使用回滾莫隊來維護。同樣反過來也是,但是好刪除不好新增應該很少見吧。fad 那麼具體怎麼做的呢?首先認清楚裸回滾莫隊的效率 大常數 o n sqrt 就是跑滿了的 n sq...

AT1219 歴史 研究(回滾莫隊模板)

點此看題面 這種區間詢問的問題一般來說可以利用莫隊解決。然而這道題求的是最大值,似乎普通莫隊就無法很好地實現刪除操作,因此就需要回滾莫隊這種黑科技。考慮我們先暴力處理掉左端點和右端點在同乙個塊內的詢問 顯然這部分複雜度是 o n sqrt n 的 然後對於剩餘的詢問把它扔到左端點對應塊的 vecto...

洛谷P1972(莫隊演算法)

hh 有一串由各種漂亮的貝殼組成的項鍊。hh 相信不同的貝殼會帶來好運,所以每次散步完後,他都會隨意取出一段貝殼,思考它們所表達的含義。hh 不斷地收集新的貝殼,因此,他的項鍊變得越來越長。有一天,他突然提出了乙個問題 某一段貝殼中,包含了多少種不同的貝殼?這個問題很難回答 因為項鍊實在是太長了。於...