點此看題面
大致題意:有乙個長度為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行,每行兩個整...