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

2021-08-05 19:05:46 字數 1451 閱讀 9590

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]中的重複次數。小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

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

顯然就是一道裸莫隊,裸到不能再裸…我們可以稱其為,沒有穿衣服的莫隊演算法

/**

****

****

****

****

****

****

****

****

****

****

****

****

****

****

****

problem: 3781

user: cdqz_hhl

language: c++

result: accepted

time:1688 ms

memory:3060 kb

****

****

****

****

****

****

****

****

****

****

****

****

****

****

****

****/

#include

#include

#include

#include

#include

#define ll long long

const int maxn=50005;

using namespace std;

int n,m,k,len;

int b[maxn];

long long cnt[maxn],final[maxn];

struct questionq[maxn];

bool cmp(const question& a,const question& b)

}int main()

solve();

for(register int i=1;i<=m;i++) printf("%lld\n",final[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的詢問(莫隊演算法)

還能不能再裸點。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 ...

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