奇奇怪怪的随机二分
查看原帖
奇奇怪怪的随机二分
815796
zzy0618楼主2023/2/10 22:09

用随机数取中间值

AC记录

#include<bits/stdc++.h>
using namespace std;
int n,m,q,a[1000005];
int find(int x){
	int l=1,r=n;
	while(l<r){
		int mid=rand()%(r-l+1)+l;
		if (a[mid]>=x)r=mid;
		else l=mid+1;
	}
	if(a[l]==x) return l;
	else return -1;
}
int main(){
	srand((int)time(0));
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	for(int i=1;i<=m;i++){
		scanf("%d",&q);
		int ans=find(q);
		printf("%d ",ans);
	}
	return 0;
}
2023/2/10 22:09
加载中...