2026年8月27日(二分笔记)
2026-08-27 10:05:22
发布于:广东
//二分查找
//给定一个数组a[N];
//求x所在的下标
// 1.求第一个大于等于x的位置
//lower_bound(a+1,a+n+1,x)-a;
// 2.求第一个大于x的位置
//upper_bound(a+1,a+n+1,x)-a;
// 3.求最后一个小于等于x的位置
//upper_bound(a+1,a+n+1,x)-a-1;
// 4.求最后一个小于x的位置
//lower_bound(a+1,a+n+1,x)-a-1;
//二分的前提 有序(具有单调性)
//100问二分查找最多需要多少次
//100=64+32+4;
//1 2 4 8 16 32 64
//0 0 1 0 0 1 1
//csp-j
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
#define ll long long
ll a[N];
int main(){
// int n;cin>>n;
// for(int i=1;i<=n;i++)cin>>a[i];
// sort(a+1,a+n+1);//二分的前提:具有单调性!!!
// ll L=1,R=n,ans=n+1;//分别指向首位置和尾位置
// //L,R m
// ll x;
// while(L<=R){//L<R
// ll mid=(L+R)/2;
// // 1.求第一个大于等于x的位置
// // if(a[mid]>=x){
// // 2.求第一个大于x的位置
// // if(a[mid]>x){
// R=mid-1;
// ans=mid;//记录答案,但不一定是最终答案
// }else{
// L=mid+1;
// }
// // 3.求最后一个小于等于x的位置
// // if(a[mid]<=x){
// // 4.求最后一个小于x的位置
// // if(a[mid]<x){
// L=mid+1;
// ans=mid;//记录答案,但不一定是最终答案
// }else{
// R=mid-1;
// }
// }
// //lower_bound(a+1,a+n+1,x)-a;//第一个大于等于x的地址
// //upper_bound(a+1,a+n+1,x)-a;//第一个大于x的地址
// cout<<ans<<endl;
int n=10;
for(int i=1;i<=n;i++)a[i]=i*10;
cout<<(lower_bound(a+1,a+n+1,100000000)-a)<<endl;
}
全部评论 1
我觉得很有用
昨天 来自 广东
0

















有帮助,赞一个