#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
typedef pair<int, int>PII;
const int N = 1e6 + 10;
int n;
vector<PII> segs;
void merge(vector<PII> &segs){
vector<PII> res;
sort(segs.begin(), segs.end());
int st = -2e9, ed = -2e9;
for(auto seg : segs)
if(ed < seg.first){
if(st != -2e9) res.push_back({st, ed});
st = seg.first, ed = seg.second;
}
else ed = max(ed, seg.second);
if(st != -2e9) res.push_back({st, ed});
segs =res;
}
int main(){
cin >> n;
for(int i = 0; i < n; i++){
int l, r;
cin >> l >> r;
segs.push_back({l, r});
}
merge(segs);
cout << segs.size() << endl;
return 0;
}
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
typedef pair<int, int> PII;
const int N = 1e6 + 10;
int n;
vector<PII> segs;
void merge(vector<PII> &segs){
vector<PII> res;
sort(segs.begin(), segs.end());
int st = -2e9, ed = -2e9;
for(auto seg : segs)
//如果没交集就加载进result
if(ed < seg.first){
if(st != -2e9) res.push_back({st, ed});
st = seg.first, ed = seg.second;
}
//否则就是有交集 就是求两个区间的并集
//1.更新成维护的区间
//2.更新成当前区间的右端点的最大值 因为sort了 所以不可能左端点更新
else ed = max(ed, seg.second);
//把最后更新完的区间加到result里去
if(st != -2e9) res.push_back({st, ed});
//!=这个判断是防止我们输入里面是没有任何区间的
segs = res;
//把segs 更新成result
}
int main(){
cin >> n;
for(int i = 0; i < n; i++){
int l, r;
cin >> l >> r;
segs.push_back({l, r});
}
merge(segs);
cout << segs.size() << endl;
return 0;
}