BZOJ 3781 小B的詢問

2021-07-24 01:35:36 字數 939 閱讀 5082

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