CF1055B Alice and Hairdresser

题目描述

Alice 的头发正在飞速生长。也许是因为维生素摄入过量,也许是某种黑魔法…… 为了防止头发继续疯长,Alice 决定去理发店。她希望剪完头发后,每根头发的长度都不超过 $l$ 厘米,其中 $l$ 是她最喜欢的数字。假设 Alice 的头是一直线,共有 $n$ 根头发,我们将它们编号为 $1$ 到 $n$。理发师每次挥剪刀,可以将某一段区间内所有长度严格大于 $l$ 的头发统一剪短到 $l$ 厘米。理发师希望尽快完成工作,因此他会尽量减少剪刀的挥动次数,因为每挥动一次剪刀需要一秒钟。 Alice 还没决定什么时候去理发店,所以她让你帮忙计算,如果她现在去理发店,理发需要多少时间。具体来说,你需要处理两种类型的操作: - $0$ — Alice 询问如果现在去理发店,理发需要多少时间。 - $1$ $p$ $d$ — 第 $p$ 根头发又长长了 $d$ 厘米。 注意,对于 $0$ 类型的询问,Alice 只关心当前的假设情况,头发长度不会因此发生变化。

输入格式

第一行包含三个整数 $n$、$m$ 和 $l$($1 \le n, m \le 100\,000$,$1 \le l \le 10^9$),分别表示头发的数量、操作的数量和 Alice 最喜欢的数字。 第二行包含 $n$ 个整数 $a_i$($1 \le a_i \le 10^9$),表示每根头发的初始长度。 接下来的 $m$ 行,每行描述一个操作,格式如下: 操作描述以一个整数 $t_i$ 开头。如果 $t_i = 0$,表示询问当前理发需要多少时间。如果 $t_i = 1$,表示有一根头发变长,接下来还有两个整数 $p_i$ 和 $d_i$($1 \le p_i \le n$,$1 \le d_i \le 10^9$),表示第 $p_i$ 根头发增长了 $d_i$ 厘米。

输出格式

对于每个类型为 $0$ 的询问,输出当前理发需要的时间(秒数)。

说明/提示

考虑第一个样例: - 初始时头发长度为 $1, 2, 3, 4$,只有第 $4$ 根头发长度大于 $l=3$,理发师可以在 $1$ 秒内剪完。 - 然后第 $2$ 根头发增长,长度变为 $1, 5, 3, 4$。 - 现在理发需要 $2$ 秒:第 $4$ 根头发和第 $2$ 根头发各需要一次剪刀。 - 然后第 $1$ 根头发增长,长度变为 $4, 5, 3, 4$。 - 现在理发仍需 $2$ 秒:第 $4$ 根头发和第 $1$、$2$ 根头发组成的区间各需要一次剪刀。 - 然后第 $3$ 根头发增长,长度变为 $4, 5, 4, 4$。 - 现在理发只需 $1$ 秒:可以一刀剪掉第 $1$ 到第 $4$ 根头发。 由 ChatGPT 4.1 翻译