c++16分二分求助!

P2249 【深基13.例1】查找

一个句号 @ 2023-04-30 08:09:39

134WA,5TLE,2AC

#include<iostream>
#include<cstdio>
#define ll  long long 
using namespace std;

int n,m;
ll a[1000006],x;
ll find(ll x){
    ll l=1,r=n;
    while(l<=r){
        if(l==r&&a[l]!=x)
        return -1;
        ll mid=(l+r)>>1;
        if(a[mid]>x)r=mid;
        if(a[mid]<x)l=mid+1;
        if(a[mid]==x){
            while(a[mid]==x){
                mid--;
            }
            return mid+1;
        }
    }

}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        scanf("%lld",&a[i]);
    for(int i=1;i<=m;i++){
        scanf("%lld",&x);
        x=find(x);
        printf("%lld ",x);
    }

    return 0;
} 

by zfj123456 @ 2023-04-30 08:35:37

第一点哈,如果输入为

5 1
0 0 0 0 0
0

那么输出为-3 很怪对吧原因是a[0]默认为0,初始化a[0]=-1即可,至于TLE……我知道你很急,但你先别急 @一个句号


|