題目:
有乙個序列,包含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...