description【題目分析】小b有乙個序列,包含n個1~k之間的整數。他一共有m個詢問,每個詢問給定乙個區間[l..r],求sigma(c(i)^2)的值,其中i的值從1到k,其中c(i)表示數字i在[l..r]中的重複次數。小b請你幫助他回答詢問。
分塊【**】
#include
#include
#include
#include
#include
using namespace std;
int n,m,k;
struct lineb[50001];
int c[50001],a[50001],l[501],r[501],cnt,t;
long long ans[50001];
inline bool cmp1(line a,line b)
sort(b+1,b+m+1,cmp1);
t=sqrt(m);
for (int i=1;i<=n;i+=t)
r[cnt]=n;
for (int i=1;i<=cnt;++i) sort(b+l[i],b+r[i]+1,cmp2);
int l=1,r=0; long long tmp=0;
for (int i=1;i<=m;++i)
while (l>b[i].l)
while (r>b[i].r)
while (l*c[a[l]];
c[a[l]]--;
tmp+=c[a[l]]*c[a[l]];
l++;
}ans[b[i].num]=tmp;
}for (int i=1;i<=m;++i) printf("%lld\n",ans[i]);
}
BZOJ3781 小B的詢問
description 小b有乙個序列,包含n個1 k之間的整數。他一共有m個詢問,每個詢問給定乙個區間 l.r 求 r i lc i 2 i lrc i 2的值,其中i的值從1到k,其中c i 表示數字i在 l.r 中的重複次數。小b請你幫助他回答詢問。input 第一行,三個整數n m k。第二...
BZOJ 3781 小B的詢問
time limit 10 sec memory limit 128 mb submit 643 solved 435 submit status discuss 小b有乙個序列,包含n個1 k之間的整數。他一共有m個詢問,每個詢問給定乙個區間 l.r 求sigma c i 2 的值,其中i的值從1...
BZOJ3781 小B的詢問
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個...