zoukankan      html  css  js  c++  java
  • 二分 + 三分模板

    参考资料

    1. 将区间 ([l, r]) 划分为 ([l, mid])([mid + 1, r])
      代码:
    int bsearch_1(int l, int r){
        while (l < r){
            int mid = l + r >> 1;
            if (chk(mid)) r = mid;
            else l = mid + 1;
        }
        return l;
    }
    
    1. 将区间 ([l, r]) 划分为 ([l, mid - 1])([mid, r])
      代码:
    int bsearch_2(int l, int r){
        while (l < r){
            int mid = l + r + 1 >> 1; // 防止死循环
            if (chk(mid)) l = mid;
            else r = mid - 1;
        }
        return l;
    }
    
    1. 浮点数的二分
      代码:
    double bsearch_3(double l, double r){
        while(r - l > eps){  // eps 根据题意给的精度要求而定
            double mid = l + r >> 1;
            if(chk(mid)) l = mid; // 具体根据题意判断
            else r = mid;
        } 
        return l;
    }
    
    1. 三分
      代码:
    int bsearch_4(int l, int r){
        while(l + 1 < r){
            int lm = l  + r >> 1;
            int rm = lm + r >> 1;
            if(chk(lm) <= chk(rm)) r = rm; // 看题意而改符合
            else l = lm;
        }
        return l;
    }
    
  • 相关阅读:
    协程与IO模型
    进程池与线程池
    GIL全局解释器锁
    线程编程
    进程编程
    基于UDP协议的socket
    异常处理
    jquery mobile外部js无法载入问题
    禁用或限制部分WebKit特性
    eval 返回变量值
  • 原文地址:https://www.cnblogs.com/nonameless/p/13026518.html
Copyright © 2011-2022 走看看