莫隊,分塊 洛谷P2709 小B的詢問

2021-08-25 10:56:12 字數 853 閱讀 3296

給定乙個長度為

n n

的序列,

m' role="presentation">m

m次詢問,詢問

1..k

1..k

的所有數在l.

.rl ..

r中出現了幾次,求它們的平方和

樸素演算法tl

e tle

,線段樹tl

e tle

(可能是我打的不夠優美)

又突然想到這道題貌似沒有修改,於是就打了乙個不帶修改的莫隊

首先,純莫隊是一定會tl

e tle

的,所以我們要加上分塊去優化,然後跑莫隊就行啦。。。

#include

#include

#include

#include

using namespace std;int n,m,k,block,pos[50005],t[50005],a[50005];

long long ans,ans[50005];

struct nodeq[50005];

inline bool cmp(node x,node y)

inline int

read()

inline void write(long long x)

inline void updata(register int

x,register int

y)//更改左右指標

signed main()

for(register int i=1;i<=m;i++) write(ans[i]),putchar(10);//輸出

}

洛谷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的詢問 基礎莫隊

洛谷p2709小b的詢問 void add int x void remove int x 這兩個函式都是用來處理l,r指標移動時對答案的貢獻,x是移走 來的點的id for int i 1 i m i 下面是預處理 int len sqrt n query i k query i l 1 len ...