題意:兩種操作:q 詢問區間 l - r 內顏色的種類 ,r 單點修改
思路:帶修莫隊與普通莫隊不同之處就是,帶修莫隊可以支援修改操作,我們可以再維護一維來表示操作的時間,那麼離線處理詢問時,我們就需要維護 l,r,t,三根指標,同時因為是三根指標
塊的大小分成 n的2/3次方,其他地方和普通莫隊維護是一樣的,只是多維護了一維操作時間,可能看上去會繞一點。
實現**:
#includeusing13namespace
std;
const
int m = 1e4 + 10
;struct
node
}q[m];
struct
node1
}c[m];
int n,m,block,l,r,num[m],a[m],now[m],flag[m*100
],ans;
//排序優先度如果l,r都在乙個塊中,那麼優先選擇t小的
bool
cmp(node a,node b)
return a.r }
return a.l }void add(int col,int
val)
void solve(int pos,int
col)
intmain()
int k = 0
;
int cnt = 0; ans = 0
;
for(int i = 0;i < m;i ++)
else
}sort(q+1,q+cnt+1
,cmp);
l = 1; r = 0
;
int tim = 0
;
for(int i = 1;i <= cnt;i ++)
for(int i = 1;i <= cnt;i ++)
printf(
"%d\n
",num[i]);
return0;
}
'>n2
3'>
BZOJ 2120 數顏色(帶修莫隊)
給定乙個序列要求查詢乙個區間不同顏色的個數,支援修改操作。記乙個看起來很sb時間複雜度o n5 3 o n 5 3 連暴力都是o n2 o n 2 但是有些時候可以代替樹套樹而且空間非常小而且超好些的高科技演算法帶修莫隊 時間複雜度就懶得分析了。說幾個細節吧 include using namesp...
bzoj 2120 數顏色 帶修改莫隊
墨墨購買了一套n支彩色畫筆 其中有些顏色可能相同 擺成一排,你需要回答墨墨的提問。墨墨會向你發布如下指令 1 q l r代表詢問你從第l支畫筆到第r支畫筆中共有幾種不同顏色的畫筆。2 r p col 把第p支畫筆替換為顏色col。為了滿足墨墨的要求,你知道你需要幹什麼了嗎?參考 額外維護乙個當前修改...
帶修莫隊 bzoj2120 數顏色
塊大小為n2 3。把詢問和修改分開。每次兩個詢問之間的修改進行暴力轉移,如果修改在上一次詢問的區間裡,就會對當前狀態形成影響。好慢。include include include includeusing namespace std define n 10001 int num n n,m,b n ...