0分蒟蒻求帮助,QWQ

P2249 【深基13.例1】查找

23_VS_24 @ 2023-08-28 11:51:31

#include<bits/stdc++.h>
using namespace std;    
int n,m;
int mag(int x,int a[])
{
    int l=1;
    int r=n;
    while(l<=r){
        int mid=(l+r)/2;
        if(a[mid]==x) return mid;
        else if(x<a[mid]) r=mid-1;
        else l=mid+1;   
    }
    return -1;
}
int main()
{
    int ask;
    cin>>n>>m;
    int *a=new int[n+5];
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=m;i++){
        cin>>ask;
        cout<<mag(ask,a)<<endl;
    }

    delete[] a;
    return 0;
}

by zhaojianchao @ 2023-08-28 11:59:46

@23_VS_24 你可以用lower_bound


by zhaojianchao @ 2023-08-28 12:00:34

#include<bits/stdc++.h>
using namespace std;
int n,m,t,a[1000010];
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a[i];
    while(m--){
        cin>>t;
        int ans=lower_bound(a+1,a+1+n,t)-a;
        if(a[ans]==t) cout<<ans<<" ";
        else cout<<-1<<" ";
    }
    return 0;
}

by vanishingloser @ 2023-08-28 12:04:30

这题要找的是第一次,所以将第8行改为l<r,再将10-12行合并为

if(x<=a[mid])r=mid;
else l=mid+1;

这样或许就行了


by vanishingloser @ 2023-08-28 12:06:00

你的程序在出现多个相同的数时会随机找到其中的一个


|