🐋
Blog
算法
算法
  • 算法
  • 基础
    • 高精度
    • 二分
    • 位运算
    • 贪心
    • KMP
    • Master Theorem
    • 前缀和 & 差分
    • sort
    • 双指
  • 数据结构
    • 数据结构模拟
  • 数学
    • 组合数
    • 约数
    • 欧拉函数
    • 扩展欧几里得
    • 高斯消元
    • 容斥原理
    • 线性筛
    • 快速幂
  • 动态规划
    • 背包
    • 字符串匹配
    • 区间DP
  • 图论
    • BFS
    • DFS
由 GitBook 提供支持
在本页
  1. 基础

二分

经典对数级别查找方法。二分有两个模板,下面针对性的分析一下这两个模板。

  • 将区间划分为 [l, r] 划分为 [l, mid] 和 [mid + 1, r] 时(下取整 mid l + r >> 1)。

int bsearch_1(int l, int r)
{
    while (l < r)
    {
        int mid = l + r >> 1;
        if (check(mid)) r = mid;
        else l = mid + 1;
    }
    return l;
}
  • 将区间划分为 [l, r] 划分为 [l, mid - 1] 和 [mid, r] 时(上取整 mid l + r + 1 >> 1)。

int bsearch_2(int l, int r)
{
    while (l < r)
    {
        int mid = l + r + 1 >> 1;
        if (check(mid)) l = mid;
        else r = mid - 1;
    }
    return l;
}
  • 如何判断使用那个模板? 根据 check 函数的结果来判断是谁取 mid。l = mid 那么上取整,r = mid 那么下取整。谁等于 mid 向那边取整。

上一页高精度下一页位运算

最后更新于2年前