Prince0618 @ 2024-11-05 22:02:26
我用的是二分查找。
帮助我的大佬可以互关吗?
#include<bits/stdc++.h>
using namespace std;
int a[1000003];
int c[1000003];
int main(){
int n,x,b;
cin>>n>>x;
for(int i=1;i<=n;i++){
cin>>a[i];
c[i]=-1;
}
for(int i=1;i<=x;i++){
cin>>b;
int L=1,R=n,mid,cnt=0;
while(L<=R){
mid=(L+R)/2;
if(a[mid]==b){
c[i]=mid;
break;
}
else if(a[mid]<b) L=mid+1;
else R=mid-1;
}
}
for(int i=1;i<=x;i++) cout<<c[i]<<" ";
return 0;
}
就是这里。
谢谢啦!
by liuye20100123 @ 2024-11-05 22:11:09
c数组没必要,边查找边输出就行了。
by zzz13579zzz @ 2024-11-05 22:36:42
#include<bits/stdc++.h>
using namespace std;
#define mid (L+R>>1)
int a[1000010],n,x,b,L,R;
signed main(){
cin>>n>>x;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=x;i++){
cin>>b;L=1,R=n;
while(L<=R){if(a[mid]<b)L=mid+1;else R=mid-1;}
cout<<(a[L]==b?L:-1)<<' ';
}return 0;
}
by ssine233 @ 2024-11-05 22:48:40
@Prince0618 有可能二分结束了但是你没给 c[i] 赋值
by Prince0618 @ 2024-11-06 19:55:11
@ssine233 谢谢大佬,已关(能关一下我嘛)