记录编号 147458 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [国家集训队 2010] 小Z的袜子 最终得分 100
用户昵称 Gravatar天一阁 是否通过 通过
代码语言 C++ 运行时间 2.508 s
提交时间 2015-02-01 07:33:25 内存使用 9.47 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define lb(x) (x&(-x))
#define Maxn 200010
#define LL long long
using namespace std;
int n,m,belong[Maxn],blcsiz,a[Maxn];
LL ans1[Maxn],ans2[Maxn];
LL temp=0,tot[Maxn]={0},d;
struct asks{
	int l,r,pos,blc;
}A[Maxn];
bool cmpx(asks a,asks b){
	if(a.blc==b.blc) return a.r<b.r; return a.l<b.l;
}
LL gcd(LL a,LL b){
	return b? gcd(b,a%b):a;
}
void insert(int t,LL v){
	temp-=tot[t]*tot[t];
	tot[t]+=v; temp+=tot[t]*tot[t];
}
int main(){
	freopen("hose.in","r",stdin);
	freopen("hose.out","w",stdout);
	scanf("%d%d",&n,&m); blcsiz=(int)sqrt(n+0.5);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]),belong[i]=(i+1)/blcsiz+1;
	for(int i=1;i<=m;i++){
		scanf("%d%d",&A[i].l,&A[i].r);
		A[i].pos=i; A[i].blc=belong[A[i].l];
	}
	sort(A+1,A+m+1,cmpx);
	int l=1,r=0;
	for(int i=1;i<=m;i++){
		while(l>A[i].l) insert(a[--l],1); while(r<A[i].r) insert(a[++r],1);
		while(l<A[i].l) insert(a[l++],-1); while(r>A[i].r) insert(a[r--],-1);
		if(!temp) ans1[A[i].pos]=0,ans2[A[i].pos]=1;
		else{
			LL Pp1=(LL)(r-l+1)*(r-l),Pp0=temp-(r-l+1); d=gcd(Pp0,Pp1);
			ans1[A[i].pos]=Pp0/d; ans2[A[i].pos]=Pp1/d;
		}
	}
	for(int i=1;i<=m;i++) printf("%lld/%lld\n",ans1[i],ans2[i]);
	return 0;
}