关于MLE
  • 板块CF1637E Best Pair
  • 楼主y0y68tahs6
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/2/13 10:28
  • 上次更新2023/10/28 08:41:59
查看原帖
关于MLE
115668
y0y68tahs6楼主2022/2/13 10:28

mxqz,有大佬能有方法解决一下这个MLE的问题吗

#include<bits/stdc++.h>
using namespace std;
const int N=3e5+5;
int T,n,m,r,a[N],b[N],x[N],y[N],c[N];
set<int,greater<int> >st[N];
map<int,int>cnt;
map< pair<int,int>,bool>mp;
int main(){
	for(cin>>T;T;T--){
		cin>>n>>m;
		for(int i=1;i<=n;i++)scanf("%d",&a[i]),cnt[a[i]]++;
		sort(a+1,a+n+1);r=0;
		for(int i=2;i<=n;i++)
			if(a[i]!=a[i-1])r++,b[r]=a[i-1];
		r++,b[r]=a[n];
		for(int i=1;i<=r;i++)
			st[cnt[b[i]]].insert(b[i]);
		int pp=0;
		for(int i=1;i<=r;i++)
			c[++pp]=cnt[b[i]];
		sort(c+1,c+pp+1);
		pp=unique(c+1,c+pp+1)-c-1;
		for(int i=1;i<=m;i++){
			scanf("%d%d",&x[i],&y[i]);
			mp[make_pair(x[i],y[i])]=mp[make_pair(y[i],x[i])]=1;
		}
		long long ans=0;
		for(int i=1;i<=r;i++){
			for(int j=1;j<=pp;j++){
				set<int>::iterator it=st[c[j]].begin();
				for(;it!=st[c[j]].end()&&(mp[make_pair(b[i],(*it))]||(*it)==b[i]);it++);
				if(it==st[c[j]].end())continue;
				ans=max(ans,1ll*(cnt[b[i]]+c[j])*(b[i]+(*it)));
			}
		}
		cout<<ans<<endl;
		for(int i=1;i<=n;i++)
			st[i].clear();
		for(int i=1;i<=n;i++)cnt[a[i]]=0;
		for(int i=1;i<=m;i++)
			mp[make_pair(x[i],y[i])]=mp[make_pair(y[i],x[i])]=0;
	}
	return 0;
}
2022/2/13 10:28
加载中...