#include<bits/stdc++.h>
using namespace std;

int main(){
    
    //有 n 个数字,查找 x 第一次出现的位置

    // 数组:a[N]
    int l = 1, r = n, ans = -1;
    while(l <= r){
        int mid = (l + r) / 2;
        //int mid = l + (r - l) / 2;
        //int mid = l + r >> 1;

        if(a[mid] > x){
            //中间值比 x 大,中间值后面所有的元素都比 x 大
            r = mid - 1;
        }else if(a[mid] < x){
            //中间值比 x 小,中间值钱面所有的元素都比 x 小
            l = mid + 1;
        } else {
            //当前位置可能是第一次出现,也可能不是第一次出现
            ans = mid;
            r = mid - 1;
        }
    }
    
    return 0;
}
#include<bits/stdc++.h>
using namespace std;

int main(){
    
    //有 n 个数字,查找 x 最后一次出现的位置

    // 数组:a[N]
    int l = 1, r = n, ans = -1;
    while(l <= r){
        int mid = (l + r) / 2;
        //int mid = l + (r - l) / 2;
        //int mid = l + r >> 1;

        if(a[mid] > x){
            //中间值比 x 大,中间值后面所有的元素都比 x 大
            r = mid - 1;
        }else if(a[mid] < x){
            //中间值比 x 小,中间值钱面所有的元素都比 x 小
            l = mid + 1;
        } else {
            //当前位置可能是最后一次出现,也可能不是最后一次出现
            ans = mid;
            l = mid + 1;
        }
    }
    
    return 0;
}
#include<bits/stdc++.h>
using namespace std;

bool check(int x){
    
}

int main(){
    
    // 木材加工
    // 让小段木头尽可能的长,并且数量大于等于 k

    int l = 1, r = 1e8, ans = -1;//l,r表示答案所在的区间
    while(l <= r){
        int mid = l + r >> 1;
        if(check(mid)){
            //如果小段木头的长度是 mid ,数量 >= k
            ans = mid;
            l = mid + 1;
        }else{
            //当前长度的数量不足
            r = mid - 1;
        }
    }
    
    return 0;
}

8 条评论

  • 1