Compile Error求助
查看原帖
Compile Error求助
355448
Fido_Puppy楼主2021/3/19 19:18

据统计,蒟蒻已经 CE 39次了。

Dev C++ 上明明是能编译成功的。

不知为什么,标程有时也会 CE。

但是标程 CE 的概率明显小很多。

有一点怀疑是 RE 了。

求各位大佬麻烦看一看。

CE 记录

蒟蒻的代码:

#include<bits/stdc++.h>
using namespace std;
long long n,a[100001],b[100001],g[100001],len=0,m,Ans[100001],belong[100001],size,M;
long long B[100001],be[100001],d[100001];
struct Q {
	long long l,r,id;
}q[100001];
bool cmp(Q a,Q b) {
	if (belong[a.l]!=belong[b.l]) return belong[a.l]<belong[b.l];
	else return a.r<b.r;
}
long long query(long long x,long long y) {
	long long ans=0;
	for(long long i=x;i<=y;i++) {
		B[a[i]]++; ans=max(ans,be[a[i]]*B[a[i]]);
	}
	for(long long i=x;i<=y;i++) B[a[i]]--;
	return ans;
}
long long doit(long long Qnum,long long x) {
	for(long long i=1;i<=M;i++) b[i]=0;
	long long L=min(x*size,n);
	long long i=Qnum,l=L+1,r=L;
	long long anss=0;
	for(;belong[q[i].l]==x;i++) {
		if (belong[q[i].l]==belong[q[i].r]) {
			Ans[q[i].id]=query(q[i].l,q[i].r);
			continue;
		}
		while (r<q[i].r) {
			++r;
			b[a[r]]++;
			anss=max(anss,b[a[r]]*be[a[r]]);
		}
		long long qwq=anss;
		while (l>q[i].l) {
			--l;
			b[a[l]]++;
			anss=max(anss,b[a[l]]*be[a[l]]);
			g[++len]=a[l];
		}
		Ans[q[i].id]=anss;
		anss=qwq;
		for(long long j=1;j<=len;j++) b[g[j]]--;
		len=0;
		l=L+1;
	}
	return i;
}
int main() {
	scanf("%lld%lld",&n,&m); size=sqrt(n);
	for(long long i=1;i<=n;i++) scanf("%lld",a+i),d[i]=a[i],belong[i]=(i-1)/size+1;
	sort(d+1,d+n+1);
	M=unique(d+1,d+n+1)-d-1;
	for(long long i=1;i<=n;i++) {
		long long T=lower_bound(d+1,d+M+1,a[i])-d;
		be[T]=a[i]; a[i]=T;
	}
	for(long long i=1;i<=m;i++) {
		scanf("%lld%lld",&q[i].l,&q[i].r);
		q[i].id=i;
	}
	sort(q+1,q+m+1,cmp);
	long long Qnum=1;
	for(long long i=1;i<=belong[n];i++) {
		Qnum=doit(Qnum,i);
	}
	for(long long i=1;i<=m;i++) printf("%lld\n",Ans[i]);
	return 0;
}

标程:

#include<stdio.h>
#include<vector>
#include<algorithm>
#define SQ 100
/*

bucket size: 100

*/
using namespace std;
int c[110000];
int d[110000];
int z[110000];
vector<int>v[110000];
long long e[110000];
long long f[3000][3000];
int main(){
	int a,b;
	scanf("%d%d",&a,&b);
	for(int i=0;i<a;i++)scanf("%d",c+i);
	for(int i=0;i<a;i++){
		z[i]=c[i];
	}
	std::sort(z,z+a);
	for(int i=0;i<a;i++){
		d[i]=lower_bound(z,z+a,c[i])-z;
		v[d[i]].push_back(i);
	}
	for(int i=0;i<a/SQ;i++){
		for(int j=0;j<a;j++)e[j]=0LL;
		long long val=0LL;
		for(int j=i*SQ;j<=a;j++){
			if(j%SQ==0){
				f[i][j/SQ]=val;
			}
			e[d[j]]+=z[d[j]];
			val=max(val,e[d[j]]);
		}
	}
	for(int i=0;i<b;i++){
		int p,q;
		scanf("%d%d",&p,&q);
		p--;
		long long ret=f[(p+SQ-1)/SQ][q/SQ];
		for(int j=p;j%SQ;j++){
			ret=max(ret,(long long)z[d[j]]*(lower_bound(v[d[j]].begin(),v[d[j]].end(),q)-lower_bound(v[d[j]].begin(),v[d[j]].end(),p)));
		}
		for(int j=q-1;(j+1)%SQ;j--){
			ret=max(ret,(long long)z[d[j]]*(lower_bound(v[d[j]].begin(),v[d[j]].end(),q)-lower_bound(v[d[j]].begin(),v[d[j]].end(),p)));
		}
		printf("%lld\n",ret);
	}
}

标程

谢谢。

2021/3/19 19:18
加载中...