題面只要能想出\(o(1)\)的方式轉移\([l,r]\),莫隊就不難了。此題求區間\(\sum_^kcnt[i]^2\),那我們就\(o(1)\)更新就好了,先減去原來的貢獻,更新cnt
再加上現在的貢獻,這樣就更新完了。
注意:莫隊小心初始化,直接l=0,r=0
等可能會炸。
#include #include #include #define maxn 50005
using namespace std;
int n,m,k,a[maxn],block;
int cnt[maxn],sum,ans[maxn];
struct nod q[maxn];
inline bool cmp(nod a, nod b)
inline int my_sqr(int x)
inline int read()
inline void add(int x)
inline void del(int x)
int main()
sort(q+1, q+1+m, cmp);
int l=1,r=1;
sum=1;cnt[a[1]]=1;
for(int i=1;i<=m;++i)
for(int i=1;i<=m;++i) printf("%d\n", ans[i]);
return 0;
}
P2709 小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個整數,表示小...
P2709 小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的序列。接下...
P2709 小B的詢問 莫隊演算法
莫隊演算法被稱為優雅的暴力,是一種 毒瘤暴力的 區間操作演算法。初學莫隊,記錄一下思想。對於多個區間查詢 l,r 這類問題,可以離線操作,常規做法還有對左區間或者右區間從小到大排序,讓左指標或者右指標只走一遍,有效降低時間複雜度。但是遇到 1,1000000 2,3 3,1000000 4,5 5,...