BZOJ3781 小B的詢問 莫隊

2021-07-27 13:12:33 字數 1124 閱讀 8720

題目:

有乙個序列,包含n個1~k之間的整數。他一共有m個詢問,每個詢問給定乙個區間[l..r],求sigma(c(i)^2)的值,其中i的值從1到k,其中c(i)表示數字i在[l..r]中的重複次數。

思路:

裸的莫隊吧。。

直接開陣列

c 暴力維護每個數出現的次數,區間轉移的時候如果假如加入乙個數

k,維護平方和就是: an

s=an

s−c[

k]2+

(++c

[k])

2 反之減去乙個數就是:an

s=an

s−c[

k]2+

(−−c

[k])

2 **:

#include 

using

namespace

std;

const

int maxn = 50005;

typedef

long

long ll;

inline ll sqr(const ll &x)

inline

char get(void)

return *p1++;

}inline

void read(int &x)

int belong[maxn];

ll ans[maxn];

struct cmd

} cmd[maxn];

int n, m, k, c[maxn], sum[maxn];

inline

void upd(ll &now, int p, int v)

inline

void solve(void)

}int main(void)

for (int i = 1; i <= m; i++)

sort(cmd + 1, cmd + m + 1);

solve();

for (int i = 1; i <= m; i++)

return

0;}

完。

by g1n0st

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

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