查看原帖
1008234
byk_ALEX楼主2025/8/3 21:20

先看我的代码:

#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);

吗?

2025/8/3 21:20
加载中...