題解 數顏色 帶修改莫隊

2022-03-13 06:03:03 字數 1240 閱讀 4081

p1903-國家集訓隊-數顏色

墨墨購買了一套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支畫筆中共有幾種不同顏色的畫筆。

輸入樣例#1:

6 51 2 3 4 5 5

q 1 4

q 2 6

r 1 2

q 1 4

q 2 6

輸出樣例#1:

#include #include #include #include #include #include #include #define ri register int 

using namespace std;

const int maxn=10005;

int n,m,block;

int belong[maxn],last[maxn],a[maxn];

struct askask[maxn];

struct change

modify[maxn];

int cnt[1000010],ll=1,rr=0,q=0,cha=0,now=0;

int anss[maxn],ans=0;

inline bool cmp(const ask & a,const ask & b)

while(nowask[i].r)sub(a[rr]),rr--;

while(llask[i].l)add(a[--ll]);

anss[ask[i].id]=ans;

// for(ri j=1;j<=n;j++)cout<}

for(ri i=1;i<=q;i++)

}int main()

for(ri i=1;i<=m;i++)

else

}sort(ask+1,ask+1+q,cmp);

solve();

return 0;

}

Luogu P1903數顏色(帶修改莫隊)

題目鏈結 帶修改莫隊模板。加乙個變數記錄現在是第幾次修改,看看當前列舉的詢問是第幾次修改,改少了就改過去,改多了就改回來。話說我棧用成佇列了能過樣例?include include include include include include include define maxn 50000 u...

bzoj 2120 數顏色 帶修改莫隊

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

BZOJ2120 數顏色 帶修改莫隊演算法

數顏色 做法 本題需要用到帶修改莫隊演算法 雖然暴力好像可過 在不帶修改的莫隊演算法裡,我們是將狀態 l r l,r 向狀態 l 1,r l r 1 l 1,r l,r 1 轉移,而帶修改的莫隊演算法就是在狀態中加上一維la stl as t,表示上一次修改操作的編號,然後狀態轉移變成將狀態 l r...