二分查找

3.二分

 


数的范围

在这里插入图片描述

输入样例:

6 3
1 2 2 3 3 4
3
4
5

输出样例:

3 4
5 5
-1 -1

模板:

#include<iostream>
#include<algorithm>
using namespace std;
const int MAX = 100005;
int asd[MAX];
int n,q;
int find_asdl(int x){
	int l=0,r=n-1;
	while(l<r){
		//cout<<" made in china "<<endl;
		int mid=l+r>>1;
		if(asd[mid]<x) l=mid+1;
		else r=mid;
	}
	if(asd[l]==x) return l;
	else return -1;
	
}
int find_asdr(int x){
	int l=0,r=n-1;
	while(l<r){
		//cout<<" made in china "<<endl;
		int mid=l+r+1>>1;
		if(asd[mid]<=x) l=mid;
		else r=mid-1;
	}
	if(asd[r]==x) return r;
	else return -1;
	
}
int main(){
	cin>>n>>q;
	for(int i=0;i<n;i++) cin>>asd[i];
	for(int i=0;i<q;i++){
		int x;
		cin>>x;
		cout<<find_asdl(x)<<" "<<find_asdr(x)<<endl;
		
	}
	return 0;
} 

 

数的三次方根(浮点数)

在这里插入图片描述

输入样例:

1000.00

输出样例:

10.000000

模板:

//浮点数二分查找 
#include<iostream>
using namespace std;
int main(){
	double n;
	cin>>n;
	
	double l=1e-4-10,r=1e4+10;
	while(r-l>1e8){
		double mid=(l+r)/2;
		if(mid*mid*mid>n) r=mid;
		else l=mid;
	}
	printf("%lf\n",l);
	return 0;
}


 

posted @ 2022-03-22 00:36  panse·  阅读(14)  评论(0)    收藏  举报