莫隊入門 洛谷P2709 小B的詢問

2022-03-18 00:07:33 字數 1055 閱讀 3302

最簡單的莫隊入門,洛谷資料有加強,吸氧+讀優莽過去  注釋見**

//

各種優化+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 分...