值周

值周

https://ac.nowcoder.com/acm/problem/24636

思路:贪心+离散化
对离散化有点误解,想把每个区间的点映射成一个小的点,但因为每个点的大小与结果有关,这样不好实现,想了我好久,看了大佬的代码后豁然开朗。
1.按左区间升序排序,如果左区间相同就按右区间升序排序,统计被移走的人数。
2.第一个区间被移走的人数是,标记右区间
3.如果区间i的左区间比end大,移走的人数是,标记右区间
4.如果区间i的右区间不小于end,移走的人数是,标记右区间
5.答案就是
Code:

#include<bits/stdc++.h>
#define  js  ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
typedef long long ll;
const int maxn = 1e6+7;
pair<int, int> a[maxn];//先first升序,后second升序
int main() {
    js; int n,m,l,r;
    cin>>n>>m;
    for(int i=1;i<=m;++i) cin>>l>>r,a[i]=make_pair(l,r);
    sort(a+1,a+1+m);
    int sum=a[1].second-a[1].first+1,end=a[1].second;
    for(int i=2;i<=m;++i) {
        if(a[i].first>end) {
            sum+=a[i].second-a[i].first+1;
            end=a[i].second;
        }
        else if(a[i].second>=end) {
            sum+=a[i].second-end;
            end=a[i].second;
        }
    }
    cout<<n-sum+1<<"\n";
}

为雨巨打call

全部评论

相关推荐

jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
11-02 09:49
已编辑
货拉拉_测试(实习员工)
热爱生活的仰泳鲈鱼求你们别卷了:没事楼主,有反转查看图片
点赞 评论 收藏
分享
5 收藏 评论
分享
牛客网
牛客企业服务