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;
}