P2249 题解
二分查找是一种在有序数组中查找某一特定元素的搜索算法。它的基本思想是将数组分成两部分,然后比较目标元素与中间元素的大小,如果目标元素大于中间元素,则在右半部分继续查找;如果目标元素小于中间元素,则在左半部分继续查找;如果目标元素等于中间元素,则查找成功。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
int n,q,x,a[maxn];
int f(int n,int a[],int x){
int l=1,r=n-1,ans=-1;// 初始化结果为-1,表示未找到
while(l<=r){
int mid=(l+r)/2;
if(a[mid]==x){
ans=mid;// 找到目标元素,更新结果
r=mid-1; // 继续在左半部分查找,以找到第一个出现的位置
}else if(a[mid]<x){
l=mid+1;
}else{
r=mid-1;
}
}
return ans;
}
int main(){
cin >> n >> q;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);//用cin会超时!
for(int i=1;i<=q;i++){
scanf("%d",&x);
int ans=f(n,a,x);//二分查找函数
printf("%d ",ans);
}
return 0;
}