先看我的代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 100000001;
int n, a[maxn], m, q;
int find(int b){
int l = 1, r = n + 1;
while(l < r){
int mid = l + ((r - l) >> 2);//这里有问题
if(a[mid] >= b){
r = mid;
}
else{
l = mid + 1;
}
}
// cout << a[l] << "\n";
if(a[l] == b) return l;
else return -1;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for(int i = 1; i <= n; i++) cin >> a[i];
for(int i = 1; i <= m; i++){
cin >> q;
cout << find(q) << " ";
}
return 0;
}
为啥
int mid = l + ((r - l) >> 2);
能过,不应该是
int mid = l + ((r - l) >> 1);
吗?