踢了某人十一遍的'经济节约'(看来我真的不适合节约233

题目描述

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

输入

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

输出

输出多余士兵的个数。

示例输入

5
0 10
2 9
3 8
1 15
6 11

示例输出

3

代码

#include <iostream>
#include <algorithm>

using namespace std;

struct node
{
    int ai,bi;
    bool operator <(const node b)const
    {
        return ai<b.ai;
    }
}a[100100];

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;
    while(cin>>n)
    {
        for(int i=0;i<n;i++)
        {
            cin>>a[i].ai>>a[i].bi;
        }
        sort(a,a+n);
        int ans=0;
        int mx=-11111;
        for(int i=0;i<n;i++)
        {
            if(a[i].bi>mx) mx=a[i].bi;
            else if(a[i].bi<mx) ans++;
        }
        cout<<ans<<endl;
    }
    return 0;
}

你可能感兴趣的:(踢了某人十一遍的'经济节约'(看来我真的不适合节约233)