求助,刚学二分

P2249 【深基13.例1】查找

liangcha_crush_ly @ 2024-01-21 14:37:57

#include<iostream>
using namespace std;long long n,m,a[111100],b[111000],x,s=0;
int main(){
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1;i<=n;i++){
    cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>x;
int L=1,R=n,flag=0;
s++;
while(L<=R){
    int mid=(L+R)/2;
    if(a[mid]==x){
    b[s]=mid;
    flag=1;
    break;
    }if(m<a[mid])R=mid-1;
    else L=mid+1;
}if(!flag)b[s]=-1;
}
for(int i=1;i<=m;i++){
    cout<<b[i]<<" ";
}
    return 0;
}

by Crab_Tang @ 2024-01-21 14:42:23

@liangcha_crush 不会


by danlao @ 2024-01-21 15:06:15

题目说要求输出这个数字在序列中第一次出现的编号


by WydnksqhbD @ 2024-01-21 15:10:04

@liangcha_crush 你这个马蜂啊。。。


by Lucky_Star @ 2024-01-21 15:38:24

1.输入的x,你用的m比较; 2.求的是第一此出现的位置,不能在循环里面判断相等就退出。 3.二分写法有多种,适用的范围有所不同。这里求第一次出现的位置,即在x==a[mid]时,右边界也要R=mid。


|