给定 n 个区间 [li,ri],要求合并所有有交集的区间。
注意如果在端点处相交,也算有交集。
输出合并完成后的区间个数。
例如:[1,3] 和 [2,6] 可以合并为一个区间 [1,6]。
输入格式
第一行包含整数 n。
接下来 n 行,每行包含两个整数 l 和 r。
输出格式
共一行,包含一个整数,表示合并区间完成后的区间个数。
数据范围
1≤n≤10000
−109≤li≤ri≤109输入样例:
5 1 2 2 4 5 6 7 8 7 9
输出样例:
3
用pair来存储区间的左端点和右端点,把所有的区间sort一下(先按pair的first从小到大排再是second也是从小到大的),排完序之后两个数l,r来帮助我们更新区间。更新区间的时候有三种情况。
对于前面两种是一类,更新r就可以,对于第三种更新l,r🔆🔆
#include<bits/stdc++.h>
using namespace std;
pair<int,int>p[100010];
#define x first
#define y second
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)cin>>p[i].x>>p[i].y;
sort(p,p+n);
int l=p[0].x,r=p[0].y;
int ans=1;
for(int i=1;i<n;i++){
if(p[i].x<=r)
{
r=max(p[i].y,r);
}
else
{
ans++;
l=p[i].x;
r=p[i].y;
}
}
cout<<ans<<endl;
return 0;
}