最簡單的莫隊入門,洛谷資料有加強,吸氧+讀優莽過去 注釋見**
//各種優化+o2終於過了
#includeusing
namespace
std;
const
int maxn=1e6+7
;template
inline void read(t &re)
struct
nodemo[maxn*4
];int
block;
ints[maxn];
long
long ans[maxn];//
離線儲存答案
int cnt[maxn];//
數列中每個數出現的次數
long
long
sum;
intn,m,k;
int l,r;//
兩個指標
//莫隊演算法首先將整個序列分成√n個塊(同樣,只是概念上分的塊,實際上我們並不需要嚴格儲存塊),接著將每個詢問按照塊序號排序(一樣則按照右端點排序)。
bool
cmp(node a,node b)
inline
void add(int
x)inline
void del(int
x)int
main()
for(register int i=1;i<=m;i++)
sort(mo+1,mo+1+m,cmp);
l=1; r=0; //
兩個指標的初始位置,模擬於佇列
for(register int i=1;i<=m;i++)
for(register int i=1;i<=m;i++)
return0;
}
洛谷P2709 小B的詢問 莫隊
按根下n分個塊,對詢問區間雙關鍵字排序,若不在乙個塊裡按左端點排序,若在按右端點排序,然後掃一遍統計答案 考慮每次移動指標後答案的改變 分為四種情況 分別是l,r指標在查詢區間的l和r的左邊還是右邊,都討論一下 每種情況該怎麼做在紙上畫畫就明白了。沒必要特意記 include include inc...
洛谷 P2709 小B的詢問 (莫隊)
小b有乙個序列,包含n個1 k之間的整數。他一共有m個詢問,每個詢問給定乙個區間 l.r 求sigma c i 2 的值,其中i的值從1到k,其中c i 表示數字i在 l.r 中的重複次數。小b請你幫助他回答詢問。第一行,三個整數n m k。第二行,n個整數,表示小b的序列。接下來的m行,每行兩個整...
洛谷 P2709 小B的詢問 普通莫隊 入門
題意 小b有乙個序列,包含n個1 k之間的整數。他一共有m個詢問,每個詢問給定乙個區間 l r 求 c i 2 sigma c i 2 c i 2 的值,其中i的值從1到k,其中c i 表示數字i在 l r 中的重複次數。對於每個區間詢問,輸出乙個 c i 2 sigma c i 2 c i 2 分...