二分查找一定要注意两边界的值和数组范围。很可能会下标越界。
#include<stdio.h>
int main()
{
int m,n,key;
scanf("%d %d",&n,&m);
int a[n+2]; //因为可能有a[n+1]
for(int i=1; i<=n; i++)
{
scanf("%d",&a[i]);
}
a[n+1] = a[n]; //赋个值
while(m--)
{
int left=1,right=n;
scanf("%d",&key);
while(left<=right)
{
int mid=(left+right)/2;
if(a[mid]<key) left=mid+1;
else right=mid-1;
}
if(a[right+1]==key) printf("%d ",right+1);
else printf("-1 ");
}
}