问题标题: 酷町堂:2771救助啦!

0
0
已解决
王子逸
王子逸
新手天翼
新手天翼

我实在是看不出来哪错了!

#include<iostream>

#include<algorithm>

using namespace std;

int n,m,a[100001],x;

int main()

{

    cin>>n>>m;

    for(int i=1;i<=n;i++)

    {

        cin>>a[i];

    }

    for(int i=1;i<=m;i++)

    {

        cin>>x;

        if(lower_bound(a+1,n+a+1,x)-a==n+1)

        {

            cout<<-1<<endl;

        }

        else

        {

            cout<<lower_bound(a+1,n+a+1,x)-a<<endl;

        }

    }

    return 0;

}

 


0
已采纳
朱优扬
朱优扬
中级天翼
中级天翼

额……你知道lower_bound查找的是什么吗?

朱优扬在2021-11-11 12:34:18追加了内容

当前查找位置是第一个>=k的元素

而且整个序列是单调递增的

所以:

如果当前位置不是t,那就说明当前位置已经>t了

大于t也说明了在<=t的范围内没有找到t,所以当前序列就没有t这个元素(再加个判断就好)

0
张新杨
张新杨
高级守护
高级守护

二分思路

 


定义;
函数{
    定义l,r;
    while循环{
        定义mid为l,r的平均值
        若t比当前元素大{
             l的值改变;
        }
        否则{
            r的值改变;
        }
    }
   如果t存在{
       返回下标;
    } 
       否则{
        返回-1;

    }
}
主函数{
    输入;
    循环输入数组;
    循环*次,输入,输出函数值,换行;

    结束;

我要回答