🌳 砍树问题:二分单调性动画
拖动锯片高度 H 或树木高度,观察砍到的木头数量怎么变化。
check(H):砍下木材 ≥ M ?
🧩 数据设置
需要木材总长度 $M$
树木高度 $A_i$,用空格隔开
20 15 10 17
生成 / 更新
样例1
样例2
随机森林
锯片高度 H
15
砍到木头
7
目标 M
7
孩子要看懂的重点:
锯片高度 $H$ 越高,砍掉的部分越少;$H$ 越低,砍掉的部分越多。
所以满足条件的 $H$ 会连成一段:
YES YES YES ... NO NO NO
。这就是二分的单调性。
🎨 大号卡通砍树图
🕊️
H = 15
🐇
调整锯片高度 H
H = 15
H - 1
H + 1
跳到答案
调整每棵树高度
直接拖动
单调性数轴
绿色 = 满足,红色 = 不满足
H
l
r
mid
🤖 二分过程演示
重置二分
单步执行
自动演示
暂停
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;