题解 | #剩下的树#

剩下的树

https://www.nowcoder.com/practice/f5787c69f5cf41499ba4706bc93700a2

#include <bits/stdc++.h>
#include <vector>
using namespace std;

int cmp(vector<int>&a,vector<int>&b){//小的要在前面
    return a[0]<b[0]?1:0;
}

int main() {
    int L, M;
    cin>>L>>M;
    vector<vector<int>>qj(M,vector<int>(2,0));
    for(int i=0;i<M;i++){
        cin>>qj[i][0]>>qj[i][1];
    }
    sort(qj.begin(),qj.end(),cmp);
    int cnt=0;
    int left=qj[0][0],right=qj[0][1];
    for(int i=1;i<M;i++){
        if(qj[i][0]>=right){
            cnt+=(right-left+1);
            left=qj[i][0];
            right=qj[i][1];
        }else{//区间小于它
            right=max(right,qj[i][1]);
        }
        if(i==M-1){
            cnt+=(right-left+1);
        }
    }
    cout<<L-cnt+1;
}

先排序,然后用left和right存储左右区间,最后别忘记+1

全部评论

相关推荐

04-07 12:32
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务