bzoj3781 小B的詢問 莫隊演算法

2022-05-20 17:55:24 字數 762 閱讀 2651

題目描述

小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個詢問的答案。

樣例輸入

6 4 3

1 3 2 1 1 3

1 42 6

3 55 6

樣例輸出69

52題解莫隊演算法模板題,優雅的暴力

設原來有n個某顏色,加1後對答案的貢獻為(n+1)^2-n^2=2*n+1,減1對答案的貢獻為(n-1)^2-n^2=-(2*n-1)。

然後各種區間平移得到答案。

#include #include #include #define n 50010

using namespace std;

struct data

a[n];

int c[n];

long long ans[n] , cnt[n];

bool cmp(data x , data y)

int main()

for(i = 1 ; i <= m ; i ++ ) printf("%lld\n" , ans[i]);

return 0;

}

BZOJ3781 小B的詢問 莫隊

題目 有乙個序列,包含n個1 k之間的整數。他一共有m個詢問,每個詢問給定乙個區間 l.r 求sigma c i 2 的值,其中i的值從1到k,其中c i 表示數字i在 l.r 中的重複次數。思路 裸的莫隊吧。直接開陣列 c 暴力維護每個數出現的次數,區間轉移的時候如果假如加入乙個數 k,維護平方和...

BZOJ 3781 小B的詢問 莫隊演算法

time limit 10 sec memory limit 128 mb submit 942 solved 635 小b有乙個序列,包含n個1 k之間的整數。他一共有m個詢問,每個詢問給定乙個區間 l.r 求sigma c i 2 的值,其中i的值從1到k,其中c i 表示數字i在 l.r 中的...

BZOJ 3781 小B的詢問(莫隊演算法)

還能不能再裸點。include include include include include include include include include using namespace std typedef long long ll define rep i,n for int i 0 i ...