HYSBZ 2120 數顏色 (帶修莫隊)

2021-09-25 22:15:20 字數 1494 閱讀 9443

思路:帶修改莫隊在普通莫隊的基礎上增加了乙個時間指標,對時間指標的操作和對 l , r 指標操作幾乎相同,排序函式稍有變化。對於時間指標,新增乙個 update 函式,具體實現見**

code:

#include#define debug(x) cout << "[" << #x <<": " << (x) <<"]"<< endl

#define pii pair#define clr(a,b) memset((a),b,sizeof(a))

#define rep(i,a,b) for(int i = a;i < b;i ++)

#define pb push_back

#define mp make_pair

#define ll long long

#define ull unsigned ll

#define ls i << 1

#define rs (i << 1) + 1

#define fi first

#define se second

#define clr(a) while(!(a).empty()) a.pop()

using namespace std;

const int maxn = 1e4 + 10;

int ans[maxn],cnt[maxn * 100],ans = 0;

int a[maxn],belong[maxn];

struct xxq[maxn];

struct changecge[maxn];

int n,m;

inline int read()

while(isdigit(ch))

x = (x << 3) + (x << 1) + (ch ^ 48), ch = getchar();

return w ? -x : x;

}bool cmp(xx a,xx b)

void add(int x)

void del(int x)

void update(int i,int _time)

swap(cge[_time].val,a[cge[_time].pos]);

if(cge[_time].pos >= q[i].l && cge[_time].pos <= q[i].r)

}int main()

int tmp = 0,pq = 0;

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

else

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

int l = 1,r = 0,_time = 0;

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

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

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

return 0;

}

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次方,其他地方和普通莫隊維護是一...

bzoj 2120 數顏色 帶修改莫隊

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