然而這題還帶修改。帶修改的莫隊怎麼做呢?於是我趕緊去補習了一波。
對於當前詢問,可以知道的是只有它之前的修改操作能夠對它造成影響。所以我們可以記錄下每個詢問的前面有幾次修改:
struct queryq[maxm];
struct changec[maxm];
//main函式中
for(register int i=1;i<=m;i++)else c[++pos_c].pos=l,c[pos_c].val=r;
}
然後我們在莫隊的時候加入乙個計數的變數:now記錄目前做了多少次修改。然後對於當前的第i個詢問,設在這個詢問之前一共有pre個修改操作,那麼會有三種情況:
1.now2.now=pre,不需要做任何操作。
3.now>pre。那麼把pre+1~now的修改刪去即可。
#pragma gcc optimize(3)
#include#include#include#include#include#define maxn 50001
#define maxm 50001
#define maxcol 1000001
using namespace std;
int n,m,col[maxn];
inline int read()
}int main()else c[++pos_c].pos=l,c[pos_c].val=r;
}moqueue();
for(register int i=1;i<=pos_q;i++) printf("%d\n",ans[i]);
return 0;
}
國家集訓隊 數顏色 維護佇列(帶修莫隊)
題意 對給定的序列,回答m個詢問,q 詢問l到r中不同的顏色數量,r 將下標為x的顏色改為y 題解 帶修莫隊,相對普通的莫隊,加多了乙個關鍵字排序 include define num ch 0 define pn putchar n using namespace std templatevoid...
國家集訓隊 數顏色
點此看題 正解應該是帶修莫隊,我們這裡講一下樹套樹的做法。本題主要涉及的問題是去重,我們定義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...
數顏色 國家集訓隊
待修莫隊模板題 待修莫隊在普通莫隊的基礎上,額外維護乙個修改操作,每一次根據查詢操作的時間加入修改或是撤銷修改。實現蠻顯然的,配合 很容易搞懂。note 塊大小的證明參見這裡,此處不做贅述。include using namespace std namespace standardio templa...