动态二维数组与循环问题

问题遇到的现象和发生背景

[NOIP2005]普及组 校门外的树 #题例子运行是对的,但是提交后不对

问题相关代码,请勿粘贴截图
int l,n,i,j,s;
scanf("%d %d",&l,&n);
int *lp = (int*)malloc(l*sizeof(int));
int (*scale)[2] = (int (*)[2])malloc(n*sizeof(int) );
for (i = 0; i < n; i++) 
{
    for (j = 0; j < 2; j++)
    {
        scanf("%d",&scale[i][j]);
    }
}
for ( s = 0; s < l; s++)
{
    lp[s] = 1;
}
for(i = 0; i < n; i++)
{
    for(s = scale[i][0]; s < scale[i][1]; s++)
    lp[s] = 0;
}

int last_l = 0;
for (s = 0; s < l; s++)
{
    last_l+=lp[s];
}
printf("%d",last_l - 1);
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

你具体题目是什么啊

#include<iostream>
#include<cstdio>
using namespace std;
int len,n,a[40100];

void insert(int x,int l,int r,int left,int right)
{
    if(a[x]==r-l+1)
        return;
    if(l==left&&r==right){
        a[x]=r-l+1;
        return;
    }
    int m=(l+r)/2;
    if(right<=m)
        insert(x+x,l,m,left,right);
    else if(left>m)
        insert(x+x+1,m+1,r,left,right);
    else{
        insert(x+x,l,m,left,m);
        insert(x+x+1,m+1,r,m+1,right);
    }
    a[x]=a[x+x]+a[x+x+1];//把两边的值加起来就好了~~~
}

int main()
{
    freopen("tree.in","r",stdin);
    freopen("tree.out","w",stdout);
    cin>>len>>n;
    for(int i=1;i<=n;++i){
        int x,y;
        cin>>x>>y;
        insert(1,0,len,x,y);
    }
    cout<<len+1-a[1]<<endl;
    return 0;
}

《NOIP2005年普及组题解https://blog.csdn.net/ljp946/article/details/82740838

#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
 int n,m,b,c,ans=0;
 bool a[10005];
 scanf("%d%d",&n,&m);
 memset(a,1,sizeof(a));
 for(int i=1;i<=m;i++)
 {
  scanf("%d%d",&b,&c);
  for(int i=b;i<=c;i++)
   a[i]=0;
 }
 for(int i=1;i<=n+1;i++)
  if(a[i])
   ans=ans+1;
 printf("%d",ans);
 return 0;
}