区间相交问题
给定 x 轴上 n 个闭区间。去掉尽可能少的闭区间,使剩下的闭区间都不相交。
★算法设计: 对于给定的 n 个闭区间,计算去掉的最少闭区间数。
Input
对于每组输入数据,输入数据的第一行是正整数 n (1<=n<=40,000),表示闭区间数。接下来的 n 行中,每行有 2 个整数,分别表示闭区间的 2 个端点。
Output
输出计算出的去掉的最少闭区间数。
Sample Input
3 10 20 15 10 20 15
Sample Output
2
思路:首先将区间排好,左小右大,之后再按区间的右侧从小到大排序,找出最多我可以放多少个区间在一起并且不想交,最后减掉它们就是最少要去掉多少个闭区间。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct lou
{
int l,r;
} s[40010];
bool cmp(lou a,lou b)
{
return a.r<b.r;
}
int main()
{
int n,i,t;
while(~scanf("%d",&n))
{
for(i=0; i<n; i++)
{
scanf("%d%d",&s[i].l,&s[i].r);
if(s[i].l>s[i].r)
{
t=s[i].l;
s[i].l=s[i].r;
s[i].r=t;
}
}
sort(s,s+n,cmp);
int max=s[0].r,sum=1;
for(i=1; i<n; i++)
{
if(s[i].l>max)
{
sum++;
max=s[i].r;
}
}
printf("%d\n",n-sum);
}
return 0;
}