社区讨论

莫队TLE求大佬帮忙卡常

P1494[国家集训队] 小 Z 的袜子参与者 8已保存回复 8

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
8 条
当前快照
1 份
快照标识符
@lodp7pfq
此快照首次捕获于
2023/10/31 10:17
2 年前
此快照最后确认于
2023/11/07 00:53
2 年前
查看原帖
RT
开了O2最后一个点过不了
求教
CPP
#include<bits/stdc++.h>
using namespace std;

int read() {
	register int x=1,ans=0;register char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-') x*=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){ans=(ans<<3)+(ans<<1)+ch-48;ch=getchar();}
	return x*ans;
}

const int N=50005;
int n,m,a[N],c[N];
long long a1[N],a2[N];
int f[N],s[N],id[N];

bool cmp(int x,int y) {
	if(f[x]==f[y]) return s[x]<s[y];
	return f[x]<f[y];
} 

long long gcd(long long a,long long b) {
	long long t;
	while(b) {
		t=b;b=a%b;a=t;
	}
	return a;
} 

int main() {
//	freopen("P1494_7.in","r",stdin);
//	freopen("out.txt","w",stdout);
	n=read(); m=read(); a[0]=n+1;
	for(register int i=1;i<=n;++i) a[i]=read();
	for(register int i=1;i<=m;++i) f[id[i]=i]=read(),s[i]=read();
	sort(id+1,id+m+1,cmp);
	long long x=0,y=0,k=0;
	int p=1,q=0;
	for(register int t=1;t<=m;++t) {
		int i=id[t];
		for(;p<=f[i]-1;++p) x-=--c[a[p]];
		while(q<=s[i]-1) x+=c[a[(q++)+1]]++;
		while(q>=s[i]+1) x-=--c[a[q--]];
		y=(long long)(s[i]-f[i]+1)*(s[i]-f[i])/2;
		p=f[i]; q=s[i];
		if(x==0) { a2[i]=1; continue; }
		k=gcd(x,y);
		a1[i]=x/k; a2[i]=y/k;
	}
	for(register int i=1;i<=m;++i) {
		printf("%lld/%lld\n",a1[i],a2[i]);
	}
	return 0;
} 

回复

8 条回复,欢迎继续交流。

正在加载回复...