//1.将每个区间按右端点从小到大排序 //2.从前往后依次枚举每个区间,如果当前区间中已经包含点,就直接跳过,否则,选择当前区间的右端点 //选右端点的话,可以尽可能的包含在多个区间里 //那么选的点的数量,就是最大的不相交的区间的数量 #include <iostream> #include <algorithm> using namespace std; const int N = 100010; int n; struct Range { int l, r; bool operator< (const Range &W)const { return r < W.r; } } range[N]; int main() { scanf("%d", &n); for (int i = 0; i < n; i ++ ) scanf("%d%d", &range[i].l, &range[i].r); sort(range, range + n); int res = 0, ed = -2e9; for (int i = 0; i < n; i ++ ) if (range[i].l > ed) { res ++ ; ed = range[i].r; } printf("%d ", res); return 0; }