洛谷2709 小B的詢問(莫隊模板題)

2021-08-21 20:06:01 字數 1054 閱讀 4851

點此看題面

大致題意:有乙個長度為n

nn的序列,每個數字在1∼k

1\sim k

1∼k之間,有m

mm個詢問,每個詢問給你乙個區間,讓你求出∑i=

1kc(

i)

2\sum_^k c(i)^2

∑i=1k​

c(i)

2,其中c(i

)c(i)

c(i)

表示數字i

ii在該區間內的出現次數。

莫隊演算法

顯然,這題可以用莫隊演算法來做,而這題本身就是莫隊演算法的一道模板題。

l in

klink

link

莫隊演算法詳見部落格莫隊演算法學習筆記(一)——普通莫隊

**
#include

#define n 50000

#define m 50000

using

namespace std;

int n,q,k,a[n+5]

,pos[n+5]

,cnt[n+5]

,ans[m+5]

;struct query

q[m+5]

;inline

chartc(

)inline

void

read

(int

&x)inline

void

write

(int x)

bool

cmp(query x,query y)

intmain()

for(i=

1;i<=q;

++i)

write

(ans[i]),

putchar

('\n');

//對每乙個答案按照讀入順序輸出

return0;

}

洛谷2709 小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的詢問 莫隊

按根下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行,每行兩個整...