#1278. P5 钢条切割(加强版)

内存限制:512 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:Special Judge
上传者: YangDavid

题目描述

设有一个长度为 LL 的钢条,在钢条上标有 nn 个位置点 p1,p2,,pnp_1,p_2,\cdots,p_n。现在需要按钢条上标注的位置将钢条切割为 n+1n+1 段,假定每次切割所需要的代价与所切割的钢条长度成正比。请编写一个算法,能够确定一个切割方案,使切割的总代价最小。

注意:此题目数据范围增大至 10510^5。为了减小实现难度,如果有多种最优答案,任意输出一种即可

输入格式

第一行两个整数 nnLL

第二行 nn 个整数 p1,p2,,pnp_1, p_2, \cdots, p_n

输出格式

第一行一个整数,表示最小切割代价

第二行 nn 个整数,其中第 ii 个整数 xix_i 表示第 ii 次切割点的索引值,xi=1,2,,nx_i = 1, 2, \cdots, n

如果有多种最优答案,任意输出一种即可

样例

输入样例 1:

4 10
3 4 7 9

输出样例 1:

23
2 1 3 4

数据范围与提示

  • 1n1051 \leq n \leq 10^5
  • 0<p1<p2<<pn<L0 < p_1 < p_2 < \cdots < p_n < L
  • 0<L1090 < L \leq 10^9