#P15901. [TOPC 2025] Reactor

[TOPC 2025] Reactor

说明

在一个高科技工业设施中,一系列核反应堆呈线性排列。每个反应堆都在严格的压力规范下运行,以确保安全和效率。为了防止关键性故障,每个反应堆都有一个特定的最大压力限值。当反应堆的内部压力达到或超过该限值时,就会启动受控泄压(排气)。由于运行调整的动态性和持续监测的需求,该系统需要复杂的管理。

你的任务是设计并实现一个系统,来管理一排 nn 个反应堆的压力。每个反应堆从 11nn 编号,初始最大压力限值为 pip_i。所有反应堆的初始压力均为 00。该系统必须支持两种操作:

  1. 增压操作:对于给定区间 [l,r][l, r] 内的反应堆,将其压力增加 kk 个单位。如果该区间内任意反应堆的压力达到或超过其最大限值,则该反应堆将泄压,其压力重置为 00。并且泄压反应堆的最大压力限值将被更新为 max(pold2,1)\max(\lfloor \frac{p_{old}}{2} \rfloor, 1),其中 poldp_{old} 是该反应堆在本次增压操作前的最大压力限值。
  2. 泄压次数查询:对于给定区间 [l,r][l, r] 内的反应堆,你需要报告自系统开始运行以来,该指定区间内所有反应堆发生泄压的总次数。

输入格式

第一行包含两个整数 nnqq,分别表示反应堆的数量和操作的数量。

第二行包含 nn 个整数,其中第 ii 个整数 pip_i 表示第 ii 个反应堆的初始最大压力限值。

接下来的 qq 行描述操作。每行以一个整数 opop 开头。

  • 如果 op=1op = 1,则后面跟三个整数 llrrkk,表示对区间 [l,r][l, r] 内的反应堆进行压力增加 kk 个单位的增压操作。
  • 如果 op=2op = 2,则后面跟两个整数 llrr,表示对区间 [l,r][l, r] 内的反应堆进行泄压次数查询。

输出格式

对于每个 op=2op = 2 的查询,在新的一行输出一个整数,表示自系统开始运行以来,指定区间内所有反应堆发生泄压的总次数。

10 5
5 10 23 45 10 45 65 10 68 9
1 5 10 664
1 2 9 5
2 4 10
1 8 8 5
2 1 10
8
9
10 10
79 26 9 28 13 40 26 54 69 19
1 1 5 6
1 5 7 2
2 4 7
1 9 10 19
2 5 7
1 5 7 27
2 10 10
2 9 9
1 6 6 20
1 3 8 6
0
0
1
0
10 10
56 29 49 42 47 21 23 54 8 31
2 9 9
1 5 6 23
2 6 7
2 4 7
1 5 6 68
2 1 9
2 3 6
1 2 10 89
2 6 8
1 3 6 53
0
1
1
3
3
5

提示

  • 1n2×1051 \le n \le 2 \times 10^5
  • 1q2×1051 \le q \le 2 \times 10^5
  • 1pi4×1051 \le p_i \le 4 \times 10^5
  • 1lrn1 \le l \le r \le n
  • 1k4×1051 \le k \le 4 \times 10^5
  • 保证至少有一个泄压次数查询。

翻译由 DeepSeek V3.2 完成