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

2021-09-08 17:25:38 字數 1334 閱讀 7386

還能不能再裸點。。

#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<(n); ++i)

#define for1(i,a,n) for(int i=(a);i<=(n);++i)

#define for2(i,a,n) for(int i=(a);i<(n);++i)

#define for3(i,a,n) for(int i=(a);i>=(n);--i)

#define for4(i,a,n) for(int i=(a);i>(n);--i)

#define cc(i,a) memset(i,a,sizeof(i))

#define read(a) a=getint()

#define print(a) printf("%d", a)

#define dbg(x) cout << (#x) << " = " << (x) << endl

#define error(x) (!(x)?puts("error"):0)

#define rdm(x, i) for(int i=ihead[x]; i; i=e[i].next)

inline const int getint()

const int n=50005;

struct dat q[n];

int a[n], n, m, k, pos[n];

ll sum, ans[n], s[n];

inline bool cmp(const dat &a, const dat &b)

for1(i, 1, m) printf("%lld\n", ans[i]);

return 0;

}

小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 6

9 5

2對於全部的資料,1<=n、m、k<=50000

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 中的...

bzoj3781 小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...