1:排序,按区间右端点从小到大排序。
2:设 st = 第一个右端点, ed = 第一个左端点。
3:循环以后处理每一个元素
每个元素与{st, ed} 有三种情况
{
if(a[i].first <= ed && a[i].second > ed) ed = a[i].second.
if(a[i] > ed){
ans.push_back({st, ed}).
st = a[i].first.
ed = a[i].second.
}
}
4:输出合并后的区间
for(int i = 0;i < ans.size(); i ++)
cout << ans[i].first << " " << ans[i].second << endl;
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> PII;
int n, res = 0;
vector<PII> a, ans;
int main()
{
cin >> n;
for(int i = 0; i < n; i ++)
{
int l, r;
cin >> l >> r;
a.push_back({l, r});
}
sort(a.begin(), a.end());
int len = a.size(), st = a[0].first, ed = a[0].second;
for(int i = 1; i < len; i ++)
{
if(a[i].first <= ed && a[i].second > ed){
ed = a[i].second;
}
if(a[i].first > ed){
ans.push_back({st, ed});
res ++;
st = a[i].first;
ed = a[i].second;
}
if(i == len - 1){
res ++;
ans.push_back({st, ed});
}
}
cout << res;
return 0;}