经济节约

Description
由于经济紧张,某国国王决定减少一部分多余的士兵,这些士兵在边界都有各自的管辖范围。例如,士兵x 的管辖范围[ax,bx]。
我们定义:对于i号士兵,如果存在j号士兵的管辖范围[aj,bj], aji且bij成立,那么i号士兵就是多余的。给出多个士兵的管辖范围,问有多少个士兵是多余的?

Input
有多组数据,每组数据的第一行为一个整数n(1<=n<=100000),下面n行每行包含两个整数ai,bi,代表i号士兵的管辖范围(0<=aii<=200000)。
所有的ai是不同的,bi也是不同的。

Output

输出多余士兵的个数。

Sample Input
5
0 10
2 9
3 8
1 15
6 11
Sample Output
3

题目意思:给定一个士兵的管辖范围,若再有士兵的管辖范围包含他,那么他就是多余的,反之就不是。

解题思路:这道题有一点贪心的意味,贪心方案将每一个士兵按照管辖的结束范围(或者开始的范围)有小到大排序,比较另一边,遇到小的加一,大的更新。

上代码:

#include<stdio.h>
#include<algorithm>
using namespace std;
struct message
{
    int x;
    int y;
} a[];
int my_comp(message a,message b)
{
    if(a.y>b.y)
        return ;
    else
        return ;
}
int main()
{
    int n,i,count,min;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=; i<n; i++)
        {
            scanf("%d%d",&a[i].x,&a[i].y);
        }
        sort(a,a+n,my_comp);
        min=a[].x ;
        count=;
        for(i=; i<n; i++)
        {
            if(a[i].x<min)
            {
                min=a[i].x;
            }
            else
            {
                count++;
            }
        }
        printf("%d\n",count);
    }
    return ;
}