为何往左边收缩的时候r = mid -1会错呢?
查看原帖
为何往左边收缩的时候r = mid -1会错呢?
257318
BugManMax楼主2024/4/19 14:35
#include<bits/stdc++.h>
using namespace std;
int n,m,a[1000005],b[100005],q,p;
int fenzhi(int i,int j,int k)
{
	int l = i;
	int r = j;
	while(l<r){
		int mid = (l+r)/2;
		if(a[mid]>=k){
			if(a[mid]==k&&(mid==0 or a[mid-1]!=k)){
				return mid+1;
			}
			r = mid;
		}else{
			l = mid+1;
		}
	}
	return -1;
}
int main()
{
	ios::sync_with_stdio(0);
	cin>>n>>m;
	for(int i=0;i<n;i++)
		cin>>a[i];
	for(int i=0;i<m;i++){
		cin>>b[i];
	}
	for(int i=0;i<m;i++){
		p = fenzhi(0,n-1,b[i]);
		cout<<p<<" ";
	}
}

mid已经被判断不等于了不就应该-1了吗

2024/4/19 14:35
加载中...