选择不相交区间

/****思路:
为什么要这样做呢;
首先分析一下题意,就是选择尽量多的不相交区间,那么我们就要去掉一些区间,使剩下
的区间不相交,那么我们要去掉什么样的区间呢?
我们假设区间 [a1,b1],[a2,b2]
1,如果a1<a2&&b1>b2,我们说区间1包含区间2,那么我们就要去掉区间1;
2,如果a1>a2&&b1>b2, 这时候我们仍然要去掉区间1,因为这样能够是我们选择的时间更多;
3,
4,
3和4 只不过是把a1和a2变变顺序
结合一二两点那么算法也就出来了
1,首先对区间按照b排序,那么我们只要a2>b1 的也就是变相的去掉了,1,2,哪两种情况
*/

#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
struct Node
{
    int x,y;
}a[10008];
bool cmp(Node a,Node b)
{
    return a.y<=b.y;
}
int main()
{
    int icase;
    int n,m;
    scanf("%d",&icase);
    while(icase--)
    {
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        scanf("%d%d",&a[i].x,&a[i].y);
        sort(a,a+n,cmp);
        int abs = -1;
        int cn = 0;
        for(int i=0;i<n;i++)
        {
            if(a[i].x>abs){
            abs = a[i].y;
            cn++;
            }
        }
        printf("%d\n",cn);

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值