rt,样例都过不了
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=50005,K=224;//K:块长
int n,nq,a[N],c[N],L,R,lst;
struct Q
{
int l,r,id;
ll ans,sum;
}q[N];
int k(int pos)
{
return (int)ceil((double)pos/K);
}
bool cmp1(Q A,Q B)
{
return k(A.l)<k(B.l)||(k(A.l)==k(B.l)&&A.r<B.r);
}
bool cmp2(Q A,Q B)
{
return A.id<B.id;
}
ll gcd(ll a,ll b)
{
return b?gcd(b,a%b):a;
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>nq;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=nq;i++){cin>>q[i].l>>q[i].r;q[i].id=i;}
sort(q+1,q+nq+1,cmp1);
for(int i=1;i<=n;i+=K)
{
L=1,R=0;memset(c,0,sizeof(c));
for(int j=i;j<=min(i+K-1,n);j++)
{
if(q[j].l==q[j].r)
{
q[j].ans=0,q[j].sum=1;
continue;
}else lst=j-1;
q[j].ans=(i==j?0:q[lst].ans);
while(R<q[j].r)q[j].ans+=c[a[++R]]++;
while(L<q[j].l)q[j].ans-=--c[a[L++]];
while(L>q[j].l)q[j].ans+=c[a[--L]]++;
q[j].sum=(ll)(q[j].r-q[j].l+1)*(q[j].r-q[j].l)/2;
ll t=gcd(q[j].sum,q[j].ans);
cout<<q[j].id<<":"<<q[j].ans<<"/"<<q[j].sum<<'\n';
q[j].ans/=t,q[j].sum/=t;
}
}
sort(q+1,q+nq+1,cmp2);
for(int i=1;i<=nq;i++)cout<<q[i].ans<<'/'<<q[i].sum<<'\n';
return 0;
}