支 zi 持 ci 修改的莫隊演算法

2021-07-12 05:40:51 字數 1417 閱讀 8083

相信大家對o(

n32)

離線解決序列問題莫隊演算法都不陌生,在這裡我要介紹一下能夠茲瓷修改操作的莫隊演算法。

關於基本的不帶修改的莫隊演算法,參考cty的部落格:

分塊大小

s 為n2

3,那麼我們就有n1

3 塊。

原本的莫隊關鍵字只有兩個,乙個是左邊界,乙個是右邊界。而帶修改莫隊要再加上一維:在第幾個操作之後。

我們按照這左邊界所在塊、右邊界所在塊以及第三關鍵字排序(上面說的那個)。

統計答案時多維護乙個指標記錄修改操作執行到**,移動時直接修改即可,如果在區間內還要計算其對答案的影響。

左指標移動次數:o(

n×n2

3)=o

(n53

) 。

右指標移動次數:o(

n×n2

3+n1

3×n)

=o(n

53) 。

修改指標移動:o(

(n13

)2×n

)=o(

n53)

。 因此總時間複雜度o(

n53)

。題目**[jzoj2491]維護佇列。帶修改莫隊裸題。

#include 

#include

#include

#include

using

namespace

std;

int read()

const

int n=10005;

const

int m=10005;

const

int c=1000005;

const

int b=250;

struct q

query[m];

bool

operator

<(q x,q y)modify[m];

int color[n],ct[n];

int n,m,qs,es,now;

int ans[m];

int cnt[c];

void add(int x)

void erase(int x)

void change(int x,int l,int r,bool tp)

void motao()

}int main()

for (int i=1;i<=n;i++) color[i]=ct[i];

sort(query+1,query+1+qs);

motao();

for (int i=1;i<=qs;i++) printf("%d\n",ans[i]);

fclose(stdin),fclose(stdout);

return

0;}

帶修改的莫隊

數顏色 墨墨購買了一套n支彩色畫筆 其中有些顏色可能相同 擺成一排,你需要回答墨墨的提問。墨墨會向你發布如下指令 1 q l r代表詢問你從第l支畫筆到第r支畫筆中共有幾種不同顏色的畫筆。2 r p col 把第p支畫筆替換為顏色col。為了滿足墨墨的要求,你知道你需要幹什麼了嗎?就是在基礎的莫隊上...

HDU4638 不帶修改莫隊演算法

hdu4638 題意 n個人,幾個人為一組的要求是號連續,每組價值是人數的平方,詢問m個區間回答每個區間分幾組能達到和最大。思路 明顯是一組人越多越好,那相當於問給定區間能分幾組的問題了,離線用莫隊演算法,把詢問存起來。需要注意的就是當前後兩個詢問區間沒有重疊部分的時候,如果先進行了刪除操作,那麼就...

莫隊演算法的學習

問題 給定乙個長度為n的序列,然後對m個區間 l,r 進行查詢。解題 離線區間問題,莫隊無敵。對m個查詢按照 l 所屬的塊號 塊的大小為sqrt n 為第一優先順序 r的大小為第二優先順序排序。然後根據當前的區間 l,r 的答案去推導出下乙個區間 l r 的答案。這樣,每查詢乙個區間,需要移動abs...