B. Restaurant--cf579B (贪心)

http://codeforces.com/problemset/problem/597/B

把右节点从小到大排序  在跑一遍就行了

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <math.h>
#include <ctype.h>

using namespace std;
#define memset(a,b) memset(a,b,sizeof(a))
#define N 500100
typedef long long  ll;
const double ESP = 1e-8;
#define INF 0xfffffff

struct node
{
    int l,r;
}a[N];

int cmp(node c,node d)
{
    if(c.r!=d.r)
        return c.r<d.r;
    else
        return c.l<d.l;
}

int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        for(int i=0;i<n;i++)
        {
            scanf("%d %d",&a[i].l,&a[i].r);
        }
        sort(a,a+n,cmp);
        int sum=0;
        int ret=-1;
        for(int i=0;i<n;i++)
        {
            if(a[i].l>ret)
            {
                sum++;
                ret=a[i].r;
            }
        }
        printf("%d
",sum);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/linliu/p/5448360.html