炸了
  • 板块P2709 小B的询问
  • 楼主diqiuyi奶龙
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/1/28 17:51
  • 上次更新2023/10/28 10:30:04
查看原帖
炸了
324666
diqiuyi奶龙楼主2022/1/28 17:51
#include <bits/stdc++.h>
using namespace std;
#define ll long long
struct q{
	int l,r,id;
	ll Ans;
}qu[50010];
ll quei[50010],sum[50010],a[50010],ans,n,m;
void md(int x,int add){
	ans-=sum[a[x]]*sum[a[x]];
	sum[a[x]]+=add;
	ans+=sum[a[x]]*sum[a[x]];
}
void Mo(){
	for(int i=1,lct=1,rct=0;i<=m;i++){
		for(;rct<qu[i].r;rct++)
			md(rct+1,1);
		for(;rct>qu[i].r;rct--)
			md(rct,-1);
		for(;lct<qu[i].l;lct++)
			md(lct,-1);
		for(;lct>qu[i].l;lct--)
			md(lct-1,1);
		qu[i].Ans=ans;
	}
}
bool cmp(const q &A,const q &B){
	return quei[A.l]==quei[B.l]?A.r<B.r:A.l<B.l;
}
bool ids(const q &x,const q &y){
	return x.id<y.id;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	for(int i=1;i<=m;i++){
		cin>>qu[i].l>>qu[i].r;
		qu[i].id=i;
	}
	int qrn=sqrt(n);
	for(int i=1;i<=n;i++)
		quei[i]=(i-1)/qrn+1;
	sort(qu+1,qu+m+1,cmp);
	Mo();
	sort(qu+1,qu+m+1,ids);
	for(int i=1;i<=m;i++)
		cout<<qu[i].Ans<<endl;
	return 0;
}
2022/1/28 17:51
加载中...