请问为什么这样会MLE?
  • 板块灌水区
  • 楼主czflshzy
  • 当前回复0
  • 已保存回复0
  • 发布时间2020/8/30 22:16
  • 上次更新2023/11/5 13:55:35
查看原帖
请问为什么这样会MLE?
69758
czflshzy楼主2020/8/30 22:16
#include <bits/stdc++.h>
using namespace std;

int b[3100];
long long ans;
map<int,int> a[3100];
map<int,int>::iterator p;

int main()
{
	

	
int n,m,i,j,k,x,y,z,s1=0;
cin>>m;
for (k=1;k<=m;k++)
	{
	cin>>n;
	for (i=1;i<=n;i++)scanf("%d",&b[i]);
	for (i=1;i<=n+1;i++)a[i].clear();
	for (i=2;i<=n+1;i++)
		{
		for (p=a[i-1].begin();p!=a[i-1].end();p++)
			{
			x=(*p).first;
			y=(*p).second;
			a[i][x]=y;
			}
		x=b[i-1];
		a[i][x]++;		
		}
	ans=0;
	for (i=2;i<=n;i++)
		for (j=i+1;j<=n-1;j++)
			{
			x=b[i];
			y=b[j];
			ans=ans+((long long)a[i][y]*(a[n+1][x]-a[j+1][x]));
			}
	cout<<ans<<endl;
	for (i=1;i<=n;i++)s1=s1+a[i].size();

	}


return 0;
}

我开了一个这样的map,在碰上极端数据m=1;n=3000;b[i]=i的数据,map用size累加,算出map中值为8991003个。可实际使用空间居然达到了412.5MB 而且,一个n^2logn的算法,在n=3000时时间达到了12秒。

请问有哪位大佬能帮我看看为什么会这样?

原题在原题 (请各位善良的管理员不要屏蔽我,我不是在宣传网站)

2020/8/30 22:16
加载中...