【题解】绝地求生

题目描述

        小飞最近迷上了一个叫绝地求生的游戏。不过他的技术并不好,假设他的战斗力是x。不过,他的战斗力是由心情来定的,每天都不同。现有一群(1≤n≤100000)也是玩绝地求生的朋友,他们也有战斗力。小飞想找一些比自己强的人玩,提高自己的战斗力,如:小烨,小祖,小明等。

       小飞一共玩了m天,假设其他人的战斗力不变。问:小飞每天可以找到多少比自己强的人。

 

输入输出格式

输入格式

        第一行,输入一个n,表示有n个朋友;(1≤n≤100000)

        第二行输入n个朋友的战斗力;每个朋友战斗力不超过long int(已有序);

        第三行输入一个m,表示有m天;(1≤m≤100000)

        接下来m行,表示小飞每天的战斗力;(小飞战斗力不超过int范围)。

 

输出格式 

       共m行,每一行小飞每天找到的人数。

 

输入输出样例

输入样例

5

1 1 3 5 5

3

0

2

5

 

输出样例

5

3

0

 

题解

       二分查找模板题,暴力即可。

【题解】绝地求生
#include<iostream>
using namespace std;
int n,m,a[100005],k[100005],mid;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    cin>>m;
    for(int i=1;i<=m;i++)
    {
        cin>>k[i];
    }
    for(int i=1;i<=m;i++)
    {
        for(int low=0,high=n+1;;)
        {
            mid=(low+high)/2;
            if(mid==low||mid==high)
            {
                cout<<n-mid;
                break;
            }
            else if(a[mid]<=k[i])
            {
                if(a[mid+1]>k[i])
                {
                    cout<<n-mid;
                    break;
                }
                else
                {
                    low=mid;
                }
            }
            else
            {
                if(a[mid-1]<=k[i])
                {
                    cout<<n-mid+1;
                    break;
                }
                else
                {
                    high=mid;
                }
            }
        }
        if(i<m) cout<<endl;
    }
    return 0;
} 
参考程序

 

上一篇:CodeForces 1095B Array Stabilization


下一篇:优化Nginx并发访问量