bzoj2120 數顏色 莫隊(帶修改)

2022-09-11 02:12:09 字數 1225 閱讀 8875

【題目描述】

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

第1行兩個整數n,m,分別代表初始畫筆的數量以及墨墨會做的事情的個數。第2行n個整數,分別代表初始畫筆排中第i支畫筆的顏色。第3行到第2+m行,每行分別代表墨墨會做的一件事情,格式見題幹部分。

對於每乙個query的詢問,你需要在對應的行中給出乙個數字,代表第l支畫筆到第r支畫筆中共有幾種不同顏色的畫筆。

6 51 2 3 4 5 5

q 1 4

q 2 6

r 1 2

q 1 4

q 2 644

34對於100%的資料,n≤10000,m≤10000,修改操作不多於1000次,所有的輸入資料**現的所有整數均大於等於1且不超過10^6。

2016.3.2新加資料兩組by nano_ape

【題解】

帶修改莫隊模板題。

先分塊,將詢問按左端點所在塊為第一關鍵字,右端點所在塊為第二關鍵字,編號(在第幾次修改後查詢)為第三關鍵字排序,大力修改。

複雜度分析與無修改莫隊相同,塊內為o(n*塊的大小),塊數為o((n/快的大小)^2),當塊的大小為n^(2/3)時取到最小值o(n^(5/3))。

/* --------------

user vanisher

problem bzoj-2120

----------------*/

# include # define ll long long

# define n 1000010

using namespace std;

int read()

while (ch>='0'&&ch<='9')

return tmp*fh;

}struct qq[n];

bool cmp(q x, q y)

}else for (int j=lasq; j>q[i].ti; j--)

}lasq=q[i].ti;

ans[q[i].id]=sum;

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

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

return 0;

}

帶修莫隊 bzoj2120 數顏色

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

BZOJ 2120 數顏色(帶修莫隊)

給定乙個序列要求查詢乙個區間不同顏色的個數,支援修改操作。記乙個看起來很sb時間複雜度o n5 3 o n 5 3 連暴力都是o n2 o n 2 但是有些時候可以代替樹套樹而且空間非常小而且超好些的高科技演算法帶修莫隊 時間複雜度就懶得分析了。說幾個細節吧 include using namesp...

bzoj 2120 數顏色 帶修莫隊)

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