相信大家對o(
n32)
離線解決序列問題莫隊演算法都不陌生,在這裡我要介紹一下能夠茲瓷修改操作的莫隊演算法。
關於基本的不帶修改的莫隊演算法,參考cty的部落格:
分塊大小
s 為n2
3,那麼我們就有n1
3 塊。
原本的莫隊關鍵字只有兩個,乙個是左邊界,乙個是右邊界。而帶修改莫隊要再加上一維:在第幾個操作之後。
我們按照這左邊界所在塊、右邊界所在塊以及第三關鍵字排序(上面說的那個)。
統計答案時多維護乙個指標記錄修改操作執行到**,移動時直接修改即可,如果在區間內還要計算其對答案的影響。
左指標移動次數:o(
n×n2
3)=o
(n53
) 。
右指標移動次數:o(
n×n2
3+n1
3×n)
=o(n
53) 。
修改指標移動:o(
(n13
)2×n
)=o(
n53)
。 因此總時間複雜度o(
n53)
。題目**[jzoj2491]維護佇列。帶修改莫隊裸題。
#include
#include
#include
#include
using
namespace
std;
int read()
const
int n=10005;
const
int m=10005;
const
int c=1000005;
const
int b=250;
struct q
query[m];
bool
operator
<(q x,q y)modify[m];
int color[n],ct[n];
int n,m,qs,es,now;
int ans[m];
int cnt[c];
void add(int x)
void erase(int x)
void change(int x,int l,int r,bool tp)
void motao()
}int main()
for (int i=1;i<=n;i++) color[i]=ct[i];
sort(query+1,query+1+qs);
motao();
for (int i=1;i<=qs;i++) printf("%d\n",ans[i]);
fclose(stdin),fclose(stdout);
return
0;}
帶修改的莫隊
數顏色 墨墨購買了一套n支彩色畫筆 其中有些顏色可能相同 擺成一排,你需要回答墨墨的提問。墨墨會向你發布如下指令 1 q l r代表詢問你從第l支畫筆到第r支畫筆中共有幾種不同顏色的畫筆。2 r p col 把第p支畫筆替換為顏色col。為了滿足墨墨的要求,你知道你需要幹什麼了嗎?就是在基礎的莫隊上...
HDU4638 不帶修改莫隊演算法
hdu4638 題意 n個人,幾個人為一組的要求是號連續,每組價值是人數的平方,詢問m個區間回答每個區間分幾組能達到和最大。思路 明顯是一組人越多越好,那相當於問給定區間能分幾組的問題了,離線用莫隊演算法,把詢問存起來。需要注意的就是當前後兩個詢問區間沒有重疊部分的時候,如果先進行了刪除操作,那麼就...
莫隊演算法的學習
問題 給定乙個長度為n的序列,然後對m個區間 l,r 進行查詢。解題 離線區間問題,莫隊無敵。對m個查詢按照 l 所屬的塊號 塊的大小為sqrt n 為第一優先順序 r的大小為第二優先順序排序。然後根據當前的區間 l,r 的答案去推導出下乙個區間 l r 的答案。這樣,每查詢乙個區間,需要移動abs...