#include<stdio.h>
#include<stdlib.h>//malloc
int main(){
int L,M,init,end,num=0;
scanf("%d%d",&L,&M);
//int road[L+1];错误
int *road = (int*)malloc(L * sizeof(int));
//初始化数组
for(int i=0;i<=L;i++){
road[i]=0;
}
//把移走的树标记成1
for(int i=0;i<M;i++){
scanf("%d%d",&init,&end);
for(int j=init;j<=end;j++){
road[j]=1;
}
}
//计算数组中为0的数,即为剩下的树
for(int i=0;i<=L;i++){
if(road[i]==0)num++;
}
//输出
printf("%d",num);
return 0;
}
范围有重叠部分的情况:
用数组把范围内的数都定义为1,其他数都为0,这样就可以解决重叠问题。最后输出数组中0的个数就是树的数量。