显然是二分题
初级版
#include<bits/stdc++.h>
#define MAXN 1000005
using namespace std;
int a[MAXN],m,n,q;
int find(int x){
int l=1,r=n;
while(l<=r){
int mid=(l+r)/2;//中间页数
if(a[mid]==x) return mid;//刚好找到需要的数字
else if (a[mid]>x) r=mid-1;//取区间的前一半
else l=mid+1;//取区间的后一半
}
return -1;//没找到
}
int main(void)
{
cin>>n>>m;
for(int i=1;i<=n;++i){
cin>>a[i];
}
for(int i=0;i<m;++i){
cin>>q;
cout<<find(q) <<" ";
}
return 0;
}
考虑到l+r有时会超过Int的极限
应避免溢出