Fork me on GitHub

收徒

题目来源:https://biancheng.love/contest-ng/index.html#/34/problems

题目描述

Nova君想要找个徒弟和他一起玩游戏机,然而,Nova君是个要求很多的人,游戏能力在他之上的或者和他一样强的都不要,要了岂不是很没面子 ╮(╯▽╰)╭ 能力太差的也不要_Orz__ 所以Nova君决定在游戏能力在他之下的人里挑选能力最强的。世界那么大,很可能有一些人能力值一样。Nova君在想,到底有多少人有资格呢?请来帮帮他找机友。

输入

多组测试数据(组数不超过10),对于每组数据,输入两行,第一行为两个正整数N和M,分别表示所有候选人的个数以及Nova君的能力值;第二行包含N个正整数,表示N个候选人的能力值(已经按非降序排列好)。N<=1000000

输出

对于每组数据,输出一行,输出有资格的人的个数。

输入样例

7 9
2 4 6 8 8 8 9

输出样例

3

HINT

请用二分实现

解题思路:
根据题目要求,我们需要做的就是找到能力不超过自己的能力最大的人。也就是第二大数有多少个。
要求使用二分实现。
二分实现的一些函数lower_bound upper_bound.
推荐博客:http://www.cnblogs.com/cobbliu/archive/2012/05/21/2512249.html
现在给出代码:
#include <bits/stdc++.h>
#define MAX 10000010
using namespace std;

int a[MAX];

int main()
{
    int n,m,k;
    int *f,*p,*l;
    while(~scanf("%d%d", &n,&m))
    {
        for(int i=0;i<n;i++)
            scanf("%d",&a[i]);
        p=lower_bound(a,a+n,m);
        k=*(p-1);
        f=lower_bound(a,a+n,k);
        l=upper_bound(a,a+n,k);
        printf("%d\n", l-f);
    }
}
 
posted @ 2015-12-10 22:26  伊甸一点  阅读(401)  评论(0编辑  收藏  举报