校门外的树
给定范围,给一些区间,这些区间树被清理掉,问最后剩多少种树。
方法一,预处理标记该点已不存在树。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5;
int vis[maxn];
int main(){
int l,r,n,m,sum=0;cin>>n>>m;
for(int i=0;i<m;i++){
cin>>l>>r;
for(int j=l;j<=r;j++)vis[j]=1;
}
for(int i=0;i<=n;i++){if(!vis[i])sum++;}
cout<<sum<<endl;
return 0;
}
方法二,利用区间有树,则第一个点权值+1,最后一个点的后一个点-1,利用前缀和是否为0,判断是该点是否有树。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5;
int a[maxn];
int sum;
int main(){
int n,m,l,r;cin>>n>>m;
for(int i=0;i<m;i++){
scanf("%d%d",&l,&r);
a[l]++;a[r+1]--;
}
int ans=0;
for(int i=0;i<=n;i++){
sum+=a[i];
if(!sum)ans++;
}
cout<<ans<<endl;
return 0;
}