洛谷 P1903 數顏色 分塊 bitset

2021-08-18 02:31:06 字數 965 閱讀 3995

題目鏈結

給你乙個數列代表不同的顏色(可以修改)。

詢問一段區間內有多少種顏色。

很容易想到的就是線段樹來維護bitset。

這裡為了練習,使用分塊維護bitset。

* 事實上線段樹可以看成是無限分塊。*

修改的時候直接暴力將被修改位置所在的塊重新計算,形成新的bitset。

查詢的時候,直接按塊合併bitset即可。

注意細節:由於bitset不能開太大,因此有必要將給出的顏色進行離散化。

我採用的方法是使用unordered_map進行離散化,簡單易行。

#include 

#include

using

namespace

std;

int n,m,l,r;

int a[10007];

bitset

<12007> block[107];

bitset

<12007> now;

int base = 100;

unordered_map

mpid;

inline

int getid(int x)

int main()

scanf("%d",&a[i]);

now.set(getid(a[i]));

}block[n/base] = now;

char op;

while(m--)

for(;(r+1) % base != 0 && r >= l;--r)

if(l >= r)

int bl = l / base,br = r / base;

for(;bl <= br;++bl)

now |= block[bl];

printf("%d\n",now.count());

}else

}}

Bzoj2120 洛谷P1903 數顏色(莫隊)

bzoj 洛谷考慮對操作離線後分塊處理詢問操作 莫隊演算法 將詢問操作按照編號分塊後左端點第一關鍵字,右端點第二關鍵字排序 分塊大小為 n 對於每乙個詢問操作,記下當前最後乙個修改操作。之後就是莫隊的板子了。include include include include include using ...

P1903 國家集訓隊 數顏色 維護佇列

h yp erli nk hyperlink hyperl ink de scri ptio ndescription descri ptio n 這道題的帶修版本 s ol utio nsolution soluti on原來那道靜態主席樹就可以解決了,這道當然是樹套樹啦 可是,原來那道莫隊不是也...

洛谷P3939 數顏色

題目大意 有n個物品,每個物品有乙個顏色。現在有兩種操作 1.查詢l r內有多少顏色為c的物品並輸出。2.將第x個物品和第x 1個交換。現在讓你實現這些操作。解題思路 首先一共有300000種顏色,最多只有300000個物品,但如果直接開陣列,結果可想而知。所以考慮用vector儲存每種顏色的編號。...