BZOJ 2120 數顏色(帶修莫隊)

2021-08-18 09:57:55 字數 836 閱讀 3914

給定乙個序列要求查詢乙個區間不同顏色的個數,支援修改操作。

記乙個看起來很sb時間複雜度o(

n5/3

) o(n

5/3)

連暴力都是o(

n2) o(n

2)

但是有些時候可以代替樹套樹而且空間非常小而且超好些的高科技演算法帶修莫隊:

時間複雜度就懶得分析了。

說幾個細節吧

#include

using namespace std;

const int maxn=1e4+105,maxm=1e6+105,tim=464;

int n,m;

int belong[maxn],vis[maxm],a[maxn],b[maxn];

char s[5];

void build()

l=r+1;r=n;

for(int j=l;j<=r;j++)belong[j]=num;

}int m1,m2;

int ans[maxn];

struct data

else

}build();

sort(d+1,d+m1+1);

}int l=1,r=0,t,cnt;

void add(int

x)void del(int

x)void modify(int

sub,int v)

void modui()

for(int i=1;i<=m1;i++)

printf("%d\n",ans[i]);

}int main()

bzoj 2120 數顏色 帶修莫隊)

題意 兩種操作 q 詢問區間 l r 內顏色的種類 r 單點修改 思路 帶修莫隊與普通莫隊不同之處就是,帶修莫隊可以支援修改操作,我們可以再維護一維來表示操作的時間,那麼離線處理詢問時,我們就需要維護 l,r,t,三根指標,同時因為是三根指標 塊的大小分成 n的2 3次方,其他地方和普通莫隊維護是一...

bzoj 2120 數顏色 帶修改莫隊

墨墨購買了一套n支彩色畫筆 其中有些顏色可能相同 擺成一排,你需要回答墨墨的提問。墨墨會向你發布如下指令 1 q l r代表詢問你從第l支畫筆到第r支畫筆中共有幾種不同顏色的畫筆。2 r p col 把第p支畫筆替換為顏色col。為了滿足墨墨的要求,你知道你需要幹什麼了嗎?參考 額外維護乙個當前修改...

帶修莫隊 bzoj2120 數顏色

塊大小為n2 3。把詢問和修改分開。每次兩個詢問之間的修改進行暴力轉移,如果修改在上一次詢問的區間裡,就會對當前狀態形成影響。好慢。include include include includeusing namespace std define n 10001 int num n n,m,b n ...