國家集訓隊 數顏色 維護佇列(帶修莫隊)

2022-07-25 08:15:10 字數 712 閱讀 2572

題意:

對給定的序列,回答m個詢問,q:詢問l到r中不同的顏色數量,r:將下標為x的顏色改為y

題解:帶修莫隊,相對普通的莫隊,加多了乙個關鍵字排序

#include#define num ch-'0'

#define pn putchar('\n')

using namespace std;

templatevoid read(t &res)

templatevoid write(t x)

const int maxn=50010;

const int m=50010;

int n,m;

int qu_num,op_num;

int lst[maxn],col[maxn],blo[maxn],cnt[1000010],res[m];

struct query

col[op[t].x]=op[t].lst;

t--;

}while(rqu[i].l) if(!cnt[col[--l]]++) ans++;

while(r>qu[i].r) if(!--cnt[col[r--]]) ans--;

while(lres[qu[i].pos]=ans;

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

write(res[i]),pn;

return 0;

}

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

然而這題還帶修改。帶修改的莫隊怎麼做呢?於是我趕緊去補習了一波。對於當前詢問,可以知道的是只有它之前的修改操作能夠對它造成影響。所以我們可以記錄下每個詢問的前面有幾次修改 struct queryq maxm struct changec maxm main函式中 for register int ...

數顏色 維護佇列(帶修莫隊)

一直想學這個演算法,但是沒有碰見類似的於是就作罷 今天忽然看到這道題有點感覺,搞一搞 感覺帶修莫隊其實不是特別深奧難懂的 只是在原有的基礎上加了乙個時間軸 我比較喜歡在struct裡面寫過載 struct mo return l q n 這樣就排好序了,大致的也沒啥,直接上 看看就很容易懂的哦 in...

國家集訓隊 數顏色

點此看題 正解應該是帶修莫隊,我們這裡講一下樹套樹的做法。本題主要涉及的問題是去重,我們定義nxt i nxt i nxt i 為最靠近i ii位置後面顏色和i ii相同的位置,統計 l,r l,r l,r 裡面不同顏色的個數即統計 i lrnx t i r sum nxt i r i lr nxt...