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。