二分查找
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;
}

浙公网安备 33010602011771号