🌳 砍树问题:二分单调性动画

拖动锯片高度 H 或树木高度,观察砍到的木头数量怎么变化。

check(H):砍下木材 ≥ M ?

🧩 数据设置

锯片高度 H
15
砍到木头
7
目标 M
7
孩子要看懂的重点:
锯片高度 $H$ 越高,砍掉的部分越少;$H$ 越低,砍掉的部分越多。
所以满足条件的 $H$ 会连成一段:YES YES YES ... NO NO NO。这就是二分的单调性。

🎨 大号卡通砍树图

🕊️
H = 15
🐇
调整锯片高度 H H = 15
调整每棵树高度 直接拖动
单调性数轴 绿色 = 满足,红色 = 不满足
H

🤖 二分过程演示

l
0
r
20
ans
0

💻 对应代码

int l = 0, r = maxn, ans = 0;
while(l <= r){
    int mid = (l + r) >> 1;
    if(check(mid)){
        ans = mid;
        l = mid + 1;
    }else{
        r = mid - 1;
    }
}
cout << ans;