題目傳送門
觀察前兩題,莫隊演算法好像是一種只支援查詢的離線演算法,但是莫隊真的不支援修改嗎?
答案當然是否定的——莫隊是一種支援查詢和修改的離線演算法。就是一種優美的暴力……
考慮在莫隊演算法中增加乙個變數no
w ,表示當前有no
w 個修改已經修改掉了。並在每乙個詢問中增加乙個變數pr
e ,表示最近的修改操作的編號。若q
[i].
pre>no
w ,那麼就把剩下的修改全部修改掉;反之,若q[
i].p
re>no
w ,就把多修改的操作全部撤銷掉就行了。
話說帶修改的莫隊演算法時間複雜度為什麼是o(
n53)
的,我也不知道……演算法什麼的不是只要能用就行了嗎?
附上ac**:
#include
#include
#include
#include
using namespace std;
const int n=1e4+10;
int n,m,size,a[n],wz[n],x,y,cnum,qnum,s[1000010],ans,out[n];
struct changec[n];
struct query
inline void read(int &a)
inline void updata(int
x,int w)
inline void work(int now,int i)
return swap(c[now].col,a[c[now].pos]);
}int main(void);
else
q[++qnum]=(query);
}sort(q+1,q+1+qnum);
for (int i=1,l=1,r=0,now=0; i<=qnum; ++i)
for (int i=1; i<=qnum; ++i) printf("%d\n",out[i]);
return
0;}
BZOJ 2120 數顏色(帶修莫隊)
給定乙個序列要求查詢乙個區間不同顏色的個數,支援修改操作。記乙個看起來很sb時間複雜度o n5 3 o n 5 3 連暴力都是o n2 o n 2 但是有些時候可以代替樹套樹而且空間非常小而且超好些的高科技演算法帶修莫隊 時間複雜度就懶得分析了。說幾個細節吧 include using namesp...
bzoj 2120 數顏色(單點修改莫隊)
普通不帶修改的莫隊是對詢問二元組 l,r l,r l,r 進行分塊排序以降低複雜度 對於單點修改的莫隊,引入乙個時間座標 t,詢問變成三元組 l,r,t l,r,t l,r,t 每一步 l,r,t l,r,t l,r,t 有6個方向可走 用類似普通莫隊的分塊方法,對 l,r 以 n23 n n3 2...
bzoj 2120 數顏色 帶修莫隊)
題意 兩種操作 q 詢問區間 l r 內顏色的種類 r 單點修改 思路 帶修莫隊與普通莫隊不同之處就是,帶修莫隊可以支援修改操作,我們可以再維護一維來表示操作的時間,那麼離線處理詢問時,我們就需要維護 l,r,t,三根指標,同時因為是三根指標 塊的大小分成 n的2 3次方,其他地方和普通莫隊維護是一...