习题-华华听月月唱歌(分段区间排序)

习题-华华听月月唱歌

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

const int N = 1e5 + 10;
struct Node{
    int l, r;
    bool operator <(const Node W){
        return l < W.l;
    }
}p[N];

signed main(){
    int n, m; cin >> n >> m;
    
    for(int i = 0; i < m; ++i) cin >> p[i].l >> p[i].r;
    
    sort(p, p + m);
    
    int r = 0, maxr = 0;
    int res = 0, i = 0;
    while(r < n && i < m){
        ++res;
        if(r + 1 < p[i].l){
            cout << -1 << endl;
            return 0;
        }
        while(p[i].l <= r + 1 && i < m){
            maxr = max(maxr, p[i].r);
            ++i;
        }
        r = maxr;
    }
    
    if(r < n) cout << -1 << endl;
    else cout << res << endl;
    
    return 0;
}
posted @ 2025-03-27 19:57  awei040519  阅读(15)  评论(0)    收藏  举报