给定N个闭区间[ai,biai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。
输出选择的点的最小数量。
位于区间端点上的点也算作区间内。
输入格式
第一行包含整数N,表示区间数。
接下来N行,每行包含两个整数ai,biai,bi,表示一个区间的两个端点。
输出格式
输出一个整数,表示所需的点的最小数量。
数据范围
1≤N≤1051≤N≤105,
−109≤ai≤bi≤109−109≤ai≤bi≤109
输入样例:
3
-1 1
2 4
3 5
输出样例:
2
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
int l,r;
}nodes[100010];
int n,ans=1;
bool cmp(node a,node b)
{
return a.r<b.r;
}
//重点就是对区间右端点进行排序
int main()
{
cin>>n;
for(int i= 0;i<n ;i++) cin>>nodes[i].l>>nodes[i].r;
sort(nodes,nodes+n,cmp);
int nown=nodes[0].r;
for(int i=1;i<n;i++)
{
if(nown<nodes[i].l)
{
ans++;
nown=nodes[i].r;
}
}
cout<<ans;
}
最大不相交区间数量
给定N个闭区间[ai,biai,bi],请你在数轴上选择若干区间,使得选中的区间之间互不相交(包括端点)。
输出可选取区间的最大数量。
输入格式
第一行包含整数N,表示区间数。
接下来N行,每行包含两个整数ai,biai,bi,表示一个区间的两个端点。
输出格式
输出一个整数,表示可选取区间的最大数量。
数据范围
1≤N≤1051≤N≤105,
−109≤ai≤bi≤109−109≤ai≤bi≤109
输入样例:
3
-1 1
2 4
3 5
输出样例:
2
代码同上
重点分析:
首先,区间问题基本就是对左端点或者有端点或者双关键字进行排序。。。
博文持续更新中,来题目来自acwing,若有需要,请支持正版