思路
这个是经典的区间合并问题
可以参考acwing 基础课模板的贪心部分
这里不多写题解了
ac 代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const int inf = 1e9;
typedef struct range{
int l, r;
bool operator<(const range &a) const{
return this->l < a.l;
}
} range;
vector<range> pairs;
int n;
int st, ed;
int m;
int rangeNum(){
sort(pairs.begin(), pairs.end());
int cnt = 0;
for (int i = 0; i < n; ){
int r = -inf;
int j;
for (j = i; j < n && pairs[j].l <= st; j++){
r = max(r, pairs[j].r);
}if (r < st) return -1;
cnt++;
if (ed <= r) return cnt;
st = r + 1; i = j ;
}
return -1; // never reach there , just for compile
}
int main(){
cin >> m;
st = 1 , ed = m;
cin >> n;
for (int i = 0; i < n; i++){
int a, b;
cin >> a >> b;
pairs.push_back({a, b});
}
cout << rangeNum() << endl;
return 0;
}