为什么MLe?本地实测全过
查看原帖
为什么MLe?本地实测全过
554803
After_light楼主2023/8/3 05:22
#include<bits/stdc++.h>
#define ll long long
#define F(i,a,b) for(ll i=a;i<=b;i++)
#define R(i,a,b) for(ll i=a;i>=b;i--)
#define sc(a) scanf("%lld",&a)
#define ps(a) printf("%lld ",a)
#define pn(a) printf("%lld\n",a)
using namespace std;
const ll N=5e4+7;
ll n,m,sz,a[N],vis[N],sum=0,sump=0;
struct Ans{
	ll fz,fm;
}ans[N];
struct Moque{
	ll l,r,id;
}moq[N];
inline bool cmp(const Moque& a,const Moque& b){
	return (a.l-1)/sz==(b.l-1)/sz?a.r<b.r:a.l<b.l;
}
inline ll ins(ll x){
	sum-=vis[x]*vis[x],sump-=vis[x];
	vis[x]++;
	sum+=vis[x]*vis[x],sump+=vis[x];
}
inline ll del(ll x){
	sum-=vis[x]*vis[x],sump-=vis[x];
	vis[x]--;
	sum+=vis[x]*vis[x],sump+=vis[x];
}
inline ll gcd(ll a,ll b){
	if(!b) return a;
	return gcd(b,a%b);
}
int main(){
	sc(n),sc(m);
	sz=sqrt(n);
	F(i,1,n) sc(a[i]);
	F(i,1,m){
		sc(moq[i].l),sc(moq[i].r);
		moq[i].id=i;
	}
	sort(moq+1,moq+m+1,cmp);
	ll l=1,r=0;
	F(i,1,m){
		if(moq[i].l==moq[i].r){
			ans[moq[i].id].fz=0;
			ans[moq[i].id].fm=1;
			continue;
		}
		while(l<moq[i].l) del(a[l++]);
		while(l>moq[i].l) ins(a[--l]); 
		while(r<moq[i].r) ins(a[++r]);
		while(r>moq[i].r) del(a[r--]);
		ans[moq[i].id].fz=sum-sump;
		ans[moq[i].id].fm=(moq[i].r-moq[i].l+1)*(moq[i].r-moq[i].l);
	}
	F(i,1,m){
		if(ans[i].fz==0){
			printf("0/1\n");
			continue;
		}
		ll d=gcd(ans[i].fz,ans[i].fm);
		ans[i].fz/=d,ans[i].fm/=d;
		printf("%lld/%lld\n",ans[i].fz,ans[i].fm);
	}
	return 0;
}
2023/8/3 05:22
加载中...