1.使用vector容器定义类似二维数组
2.使用vector容器的的特性对其排序
3.比较相邻区间是否有重叠并合并
#include "iostream"
#include "vector"
#include "algorithm"
using namespace std;
int main()
{
int n,t=0;
cin>>n;
vector<vector<int>>v(n); //使用vector容器定义类似二维数组
int a[n][2];
for (int i = 0; i < n; ++i) {
cin>>a[i][0]>>a[i][1];
v[i].resize(2);
}
for (int i = 0; i < n; ++i) {
for (int j = 0; j < 2; ++j) {
v[i][j]=a[i][j];
}
cout<<endl;
}
sort(v.begin(),v.end()); //调用sort方法进行排序,默认对区间第一个数排序
for (int i = 0; i < n; ++i) { //.比较相邻区间是否有重叠并合并,并用一个二维数组储存
if(i<n-1){
if(v[i][1]<v[i+1][0]){
a[t][0]=v[i][0];
a[t][1]=v[i][1];
t++;
}else if(v[i][1]<=v[i+1][1])swap(v[i][0],v[i+1][0]);
else if(v[i][1]>v[i+1][1]){
swap(v[i][0],v[i+1][0]);
swap(v[i][1],v[i+1][1]);
}
}else if(i=n-1){
if(v[i][0]>a[t-1][1]){
a[t][0]=v[i][0];
a[t][1]=v[i][1];
}else {
a[t-1][1]=v[i][1];
}
}
}
for (int i = 0; i <=t; ++i) {
cout<<a[i][0]<<" "<<a[i][1];
cout<<endl;
}
cout<<t;
return 0;
}