关于memset函数导致的MLE

写了一个简单的差分数组的题目,在写的过程中对全局数组变量使用memset进行了初始化,
结果不停的MLE。原题传送门

我的代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;

const int maxn = 10000 + 100;

int aim[maxn];
int n,i,h,r;
int vis[maxn][maxn];
int b[maxn];

int main(){
    //freopen("in.txt","r",stdin);
    cin>>n>>i>>h>>r;
    for(int i=0;i<=n+1;i++){
        b[i] = h;
    }
      //memset(aim,0,sizeof(aim));
      //memset(vis,0,sizeof(vis));
//这里原本就是有两个memset函数的,但是如果不去掉的话就会一直MLE
    while(r--){
        int a,y;
        scanf("%d%d",&a,&y);
        if(a>y)swap(a,y);
        if(vis[a][y])continue;
        vis[a][y]=1;
        aim[a+1]--;
        aim[y]++;
    }
    //
    for(int i=1;i<=n;i++){
		b[i]=b[i-1]+aim[i];
		printf("%d\n",b[i]);
	}
    /*aim[0] = 0;
    for(int i=1;i<=n;i++){
        aim[i] = aim[i-1] + aim[i];
        if(i)cout<< aim[i] + h <<endl;
    }*/
    return 0;
}

然后我在网络上搜了相关问题,有一个这样的解答

百度了一下才发现:

对于全局变量的处理,如果不初始化,那么它一开始占的内存会比初始化了的全局变量小非常多。

我这里一开始就对一个比较大的数组用memset进行了初始化,导致了全局变量占用了很多的内存。

其实只需要for循环遍历已用的空间即可。(又涨知识了..)

OK

posted @ 2020-10-05 19:53  SavenNeer  阅读(177)  评论(0编辑  收藏  举报