为什么-1输出不了,大佬救命

P2249 【深基13.例1】查找

lys_99 @ 2024-05-21 20:13:58

#include<bits/stdc++.h>
using namespace std;
int a[100000009],n,m,q;
int find(int x){
    int l=1,r=n+1;
    while(l<r){
        int mid=l+(r-1)/2;
        if(a[mid]>=x){
            r=mid;
        }
        else l=mid+1;//多个相同数中找最小编号 
        /*
        if(a[mid]<=x)l=mid+1;
        else r=mid;
         多个相同数中找最大编号 
        */
    }
    if(a[l]==x){
        return l;
    }
    else return -1; 
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=m;i++){
        cin>>q;
        cout<<find(q)<<" ";
    }
    return 0;
}

by Justin_love_coding @ 2024-05-21 20:29:29

mid = l + (r - l) / 2,l写成1了


by Justin_love_coding @ 2024-05-21 20:29:58

@lys_99


by lys_99 @ 2024-05-21 20:36:47

谢谢 大佬


by zeroeleven @ 2024-05-21 20:36:53

建议用upper_bound函数
你的代码交上去应该是TLE而不是WA 如果不会用的upper_bound话,建议还是改一下:
1.输入输出量较大,建议用scanf;
2.在第二个for里,应该是存下要输出的数,然后统一输出;
3.检查一下find函数里的while是否有问题(虽然我没看出来)


|