5816. 小明的代码错误
时间限制:1000 MS 内存限制:256 MB
题目描述
### 题目描述 为了备战即将到来的 PSC 比赛,小明正在进行最后的冲刺训练。他刚刚完成了一份模拟赛的程序,代码总共有 $n$ 行,但由于时间紧迫,代码中不幸地遗留了 $m$ 个 bug。 小明的调试方法非常独特。当他决定修复某个 bug 时,他会选择一个**当前还存在 bug** 的代码行 $b_i$,然后他的调试器会从第 1 行开始,一直扫描到第 $b_i$ 行。这个过程会修复所有位于 $[1, b_i]$ 区间内的**尚未被修复的** bug。 每一次这样的修复操作都需要花费一定的时间,其计算方式为:**本次扫描的行数** $+$ **本次新修复的 bug 数量的四次方**。 具体来说,如果小明选择对第 $b_i$ 行进行操作,并且这个操作一次性修复了 $k$ 个 bug,那么这次操作花费的时间就是 $b_i + k^4$。 小明可以进行多次修复操作,他的目标是修复全部的 $m$ 个 bug,并使得总花费的时间最少。请你帮助他计算出这个最小的总时间。 ### 输入格式 输入共两行。 第一行包含两个正整数 $n$ 和 $m$,分别表示代码的总行数和 bug 的总数量。 第二行包含 $m$ 个正整数 $b_1, b_2, \ldots, b_m$,表示每个 bug 所在的行号。输入数据保证 bug 所在行号互不相同,且**按升序给出**(即 $b_1 < b_2 < \ldots < b_m$)。 ### 输出格式 输出一个整数,表示修复所有 bug 所需的最小总时间。 ### 样例 #1 #### 样例输入 #1 ``` 10 3 3 7 9 ``` #### 样例输出 #1 ``` 22 ``` #### 样例解释 #1 输入的 bug 分布在第 3, 7, 9 行。最优的修复策略是分三次修复,每次只修复一个 bug。 ### 样例 #2 #### 样例输入 #2 ``` 100 9 10 20 30 70 71 72 80 90 99 ``` #### 样例输出 #2 ``` 355 ``` #### 样例解释 #2 最优策略的步骤分解如下: 1. **第一次操作**:单独修复第 1 个 bug。 - 选择第 10 行进行操作,扫描到第 10 行,修复 1 个 bug。 - 花费:$10 + 1^4 = 11$。 - 累计总花费:11。 2. **第二次操作**:将第 2 和第 3 个 bug (位于 20, 30 行) 一起修复。 - 选择第 30 行进行操作,扫描到第 30 行,修复 2 个新 bug。 - 花费:$30 + 2^4 = 30 + 16 = 46$。 - 累计总花费:$11 + 46 = 57$。 3. **第三次操作**:将第 4 和第 5 个 bug (位于 70, 71 行) 一起修复。 - 选择第 71 行进行操作,扫描到第 71 行,修复 2 个新 bug。 - 花费:$71 + 2^4 = 71 + 16 = 87$。 - 累计总花费:$57 + 87 = 144$。 4. **第四次操作**:将第 6 和第 7 个 bug (位于 72, 80 行) 一起修复。 - 选择第 80 行进行操作,扫描到第 80 行,修复 2 个新 bug。 - 花费:$80 + 2^4 = 80 + 16 = 96$。 - 累计总花费:$144 + 96 = 240$。 5. **第五次操作**:将第 8 和第 9 个 bug (位于 90, 99 行) 一起修复。 - 选择第 99 行进行操作,扫描到第 99 行,修复 2 个新 bug。 - 花费:$99 + 2^4 = 99 + 16 = 115$。 - 累计总花费:$240 + 115 = 355$。 最终,修复所有 bug 的最小总时间为 355。 ### 提示 #### 数据范围 对于所有测试数据,保证 $1 \le b_1 < b_2 < \ldots < b_m \le n$。 - 对于 $40\%$ 的数据,满足 $1 \le m \le n \le 5000$。 - 对于 $100\%$ 的数据,满足 $1 \le m \le n \le 5 \times 10^5$。