![](https://i-blog.csdnimg.cn/blog_migrate/9bea8c88eab8402244f7a7af1bde33b3.png)
思路:
第一遍,将路上的所有树打上标记,表示这个点没有被访问过。
第二遍,读入区间的头和尾,从这个区间的头开始循环,到尾结束,标记为访问过。
第三遍,顺序访问路上的树,只要没访问过,计数加1,这样就求出了路上所有还存在的树的数目。
代码实现如下:
#include<iostream>
using namespace std;
int L,M;//变量名称与原题相同
int tree=0;//剩余树的数目
int vis[10000+10]={};//用来判断树木有没有被访问过
int main()
{
cin>>L>>M;
for(int i=0;i<=L;i++)
vis[i]=0;//从0这个树开始,将这条路上所有的树标记为未访问过
for(int i=1;i<=M;i++)
{
int head,tail;//定义区间的头和尾
cin>>head>>tail;
for(int j=head;j<=tail;j++)
if(vis[j]==0)
vis[j]=1;//从这个区间的头和尾开始,将所有区间内的树标记为访问过
}
for(int i=0;i<=L;i++)
{
if(vis[i]==0)
tree++;//计算未被访问过的树的数目
}
cout<<tree<<endl;
return 0;
}