bzoj 2120 數顏色 帶修改莫隊

2022-05-11 16:45:22 字數 1051 閱讀 5650

墨墨購買了一套n支彩色畫筆(其中有些顏色可能相同),擺成一排,你需要回答墨墨的提問。

墨墨會向你發布如下指令:

1、 q l r代表詢問你從第l支畫筆到第r支畫筆中共有幾種不同顏色的畫筆。

2、 r p col 把第p支畫筆替換為顏色col。

為了滿足墨墨的要求,你知道你需要幹什麼了嗎?

參考:額外維護乙個當前修改操作執行的時間\(tim\),以及每個修改操作之前之後的效果,以便之後不斷進行修改還原

對於每個\(query\),也增加時間一維,按照\(l,r,tim\)排序。

移動時,首先移動\(tim\),再移動\(l\)和\(r\).

注意:移動時間時,僅當當前時間修改的位置\(x\)在當前的\([l,r]\)範圍內,才需要考慮這個修改操作的影響。

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

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

#define df(i, a, b) for (int i = (a); i > (b); --i)

#define df2(i, a, b) for (int i = (a); i >= (b); --i)

#define maxn 10010

#define maxm 1000010

using namespace std;

typedef long long ll;

int n,m,l,r,temp, cnt[maxm], a[maxn], t[maxn], bl[maxn], blo,ans[maxn];

struct qnode

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

return 0;

}

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

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

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