烙饼
题号:NC265924
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

小利同学开了一家网红小吃店,专卖烙饼。
店里有 \mathrm{m} 台烙饼机可以同时工作,一台烙饼机同时只能烙一个饼,而不同种类的饼烙制时长是不同的。为了节省时间,小利同学想出了一种独特的烙饼方法:把一张饼分成若干次烙制,即一张饼的烙制过程可以是不连续的(比如一张饼需要烙 \mathrm{8} 分钟,可以选择在烙饼机 \mathrm{1} 中烙 \mathrm{3} 分钟,接着取出,去烙制别的饼,而后再取回该饼继续在任意烙饼机上烙 \mathrm{5} 分钟 )。店里的烙饼机烙制时长只能精确到分钟,因此小利只能在每张饼刚好烙制完整数分钟后将其取出。

由于是网红店,购买订单数量常常爆满,于是小利找到你,希望你根据 \mathrm{n} 个饼的订单信息制定一份包含 \mathrm{k} 条烙制记录的烙饼计划,使这天完成工作需要花费的时间最短(当然他也不希望这份计划太繁琐,因此在完成上述目标的前提下,还应该满足 \mathrm{1 \le k \le 2 \times n}

特殊的:小利身手敏捷,把饼放入烙饼机与从烙饼机取出饼的时间都可以忽略不计。

输入描述:

给出两个整数 \mathrm{n,m}(\mathrm{1 \le n,m \le 10^5}),表示需要制作的饼的数量和烙饼机数量。

下一行为 \mathrm{n} 个整数,第 \mathrm{i} 个整数 \mathrm{a_i} 表示 \mathrm{i} 号饼需要烙制 \mathrm{a_i}(\mathrm{1 \le a_i \le 10^9}) 分钟。

输出描述:

第一行输出一个整数 \mathrm{k},表示烙制记录数。

下面 \mathrm{k} 行,每行依次输出四个整数 \mathrm{id_1,id_2,l,r},表示 \mathrm{id_1} 号饼在 \mathrm{id_2} 号烙饼机上烙制时间段为 \mathrm{\left[ l,r \right]}

如果存在多种可行结果,请输出任意一种。

请注意,你的输出结果必须同时满足以下所有条件才会返回答案正确:
- \mathrm{1 \le k \le 2 \times n}
- \mathrm{1 \le id_1 \le n}
- \mathrm{1 \le id_2 \le m}
- \mathrm{0 \le l < r}
- 保证所有饼完成烙制,同时最后完成工作的烙饼机结束时间最早。
- 各饼在一台烙饼机上的烙制时间不能重叠,一张饼也不能同时在不同烙饼机上烙制。(烙制时间段边界处重合是合法的)
示例1

输入

复制
3 2
3 3 5

输出

复制
3
1 1 0 3
2 1 3 6
3 2 0 5

说明

对于样例一,三条记录表示:
\mathrm{1} 号饼放在 \mathrm{1} 号烙饼机烙制,时间段为 \mathrm{\left[0,3\right]}\mathrm{2} 号饼放在 \mathrm{1} 号烙饼机烙制,时间段为 \mathrm{\left[3,6\right]}\mathrm{3} 号饼放在 \mathrm{2} 号烙饼机烙制,时间段为 \mathrm{\left[0,5\right]}
此时 \mathrm{1} 号烙饼机最晚结束,时间为 \mathrm{6} 分钟。可以证明,不存在结束时间早于该值的分配方案。
示例2

输入

复制
3 100000
10 3 2

输出

复制
3
1 1 0 10
2 2 0 3
3 3 0 2