#10258. 砍树最大高度

砍树最大高度

🪵【砍树最大高度】


🧩 题目描述:

伐木工人米尔科需要收集至少 M 米的木材。

他可以将伐木机的锯片升到某个高度 H(单位:米),然后砍掉所有高于 H 的树木部分(低于等于 H 的部分不会被砍)。

例如: 若树高为 20,锯片高度为 15,则可得到 20 - 15 = 5 米木材。 目标是:找到最大的 H,使得砍下的木材总长度 ≥ M 米。


📥 输入格式:

第一行:两个整数 N 和 M,分别表示树的数量和需要的木材长度。
第二行:N 个整数,表示每棵树的高度。
  • 1 ≤ N ≤ 10⁶
  • 1 ≤ M ≤ 2×10⁹
  • 树高不超过 10⁹,且木材总长度保证 ≥ M

📤 输出格式:

一个整数,表示最大锯片高度 H。

🎯 输入样例:

5 20
4 42 40 26 46

✅ 输出样例:

36

🧠 思路解析:

  • 设置一个二分区间 [l, r],表示锯片高度 H 的取值;
  • 编写 check(H) 函数,判断是否能砍出 ≥ M 的木材;
  • 随着 H 升高,砍到的木材会减少,满足单调性:
    • H 越小 → 木材越多(check(H) = true)
    • H 越大 → 木材越少(check(H) = false)

✅ 最终答案:

36

(这是使木材总量刚好 ≥ 20 米的最大 H)