題目描述
小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行,每行兩個整數l、r。
輸出格式
m行,每行乙個整數,其中第i行的整數表示第i個詢問的答案。
輸入輸出樣例
輸入 #1
6 4 3
1 3 2 1 1 3
1 42 6
3 55 6
輸出 #169
52說明/提示
對於全部的資料,1<=n、m、k<=50000
#include
using
namespace std;
typedef
long
long ll;
const
int n=
50010
;int a[n]
,pos[n]
,cnt[n]
;struct node
p[n]
;ll res,ans[n]
;void
add(
int r)
void
sub(
int r)
intmain()
for(
int i=
1;i<=m;i++
)sort
(p+1
,p+1
+m,[
](node x,node y));
int l=
1,r=0;
for(
int i=
1;i<=m;i++
)for
(int i=
1;i<=m;i++
)printf
("%lld\n"
,ans[i]);
}
a new begin 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 求sigma c i 2 的值,其中i的值從1到k,其中c i 表示數字i在 l.r 中的重複次數。小b請你幫助他回答詢問。輸入輸出格式 輸入格式 第一行,三個整數n m k。第二行,n個整數,表示小...
P2709 小B的詢問 莫隊
題面只要能想出 o 1 的方式轉移 l,r 莫隊就不難了。此題求區間 sum kcnt i 2 那我們就 o 1 更新就好了,先減去原來的貢獻,更新cnt再加上現在的貢獻,這樣就更新完了。注意 莫隊小心初始化,直接l 0,r 0等可能會炸。include include include define...