编程题
砍竹子 ### 问题描述 这天, 小明在砍竹子, 他面前有 $n$ 棵竹子排成一排, 一开始第 $i$ 棵竹子的 高度为 $h_{i}$. 他觉得一棵一棵砍太慢了, 决定使用魔法来砍竹子。魔法可以对连续的一 段相同高度的竹子使用, 假设这一段竹子的高度为 $H$, 那么 用一次魔法可以 把这一段竹子的高度都变为 $\left\lfloor\sqrt{\left\lfloor\frac{H}{2}\right\rfloor+1}\right\rfloor$, 其中 $\lfloor x\rfloor$ 表示对 $x$ 向下取整。小明想 知道他最少使用多少次魔法可 让所有的竹子的高度都变为 1 。 ### 输入格式 第一行为一个正整数 $n$, 表示竹子的棵数。 第二行共 $n$ 个空格分开的正整数 $h_{i}$, 表示每棵竹子的高度。 ### 输出格式 一个整数表示答案。 ### 样例输入 ``` 6 2 1 4 2 6 7 ``` ### 样例输出 ```text 5 ``` ### 样例说明 其中一种方案: $2 1 4 2 6 $7 $$ \begin{aligned} &\rightarrow 214262 \\\\ &\rightarrow 214222 \\\\ &\rightarrow 211222 \\\\ &\rightarrow 111222 \\\\ &\rightarrow 111111 \end{aligned} $$ 共需要 5 步完成 ### 评测用例规模与约定 对于 $20 \\%$ 的数据, 保证 $n \leq 1000, h_{i} \leq 10^{6}$ 。 对于 $100 \\%$ 的数据, 保证 $n \leq 2 \times 10^{5}, h_{i} \leq 10^{18}$ 。
查看答案
赣ICP备20007335号-2