给定 nn 个区间 [li,ri][li,ri],要求合并所有有交集的区间。
注意如果在端点处相交,也算有交集。
输出合并完成后的区间个数。
例如:[1,3][1,3] 和 [2,6][2,6] 可以合并为一个区间 [1,6][1,6]。
输入格式
第一行包含整数 nn。
接下来 nn 行,每行包含两个整数 ll 和 rr。
输出格式
共一行,包含一个整数,表示合并区间完成后的区间个数。
数据范围
1≤n≤1000001≤n≤100000,
−109≤li≤ri≤109−109≤li≤ri≤109输入样例:
5 1 2 2 4 5 6 7 8 7 9
输出样例:
3
#include <bits/stdc++.h> using namespace std; const int N = 1e5+10; vector< pair<int, int> > v; bool cmp(pair<int , int> a, pair<int, int> b) { if(a.first != b.first) return a.first<b.first; return a.second < b.second; } int main() { int n; cin>>n; while( n -- ) { int l, r; cin>>l>>r; v.push_back(make_pair(l, r)); } int ans = 0; sort(v.begin(), v.end(), cmp); int l = v[0].first, r = v[0].second; for(int i =1; i<(int)v.size(); i++) { if(v[i].second < l || v[i].first > r) { ans++; l = v[i].first; r = v[i].second; } if(v[i].first < l && v[i].second >= l) l = v[i].first; if(v[i].second > r && v[i].first <= r) r = v[i].second; } ans++; cout<<ans; return 0; }