校门外的树

传送门

给定范围,给一些区间,这些区间树被清理掉,问最后剩多少种树。

方法一,预处理标记该点已不存在树。

#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;
}

 

posted @ 2020-05-28 22:21  mohari  阅读(158)  评论(0编辑  收藏  举报