#CSP1138. 战场模拟器 (simulator)

    ID: 4509 Type: Default File IO: simulator 1000ms 256MiB Tried: 21 Accepted: 1 Difficulty: 10 Uploaded By: Tags>CSP-S模拟暑期集训

战场模拟器 (simulator)

题目描述

战场模拟器中,NN 个英雄正在与魔王战斗。

NN 个英雄排成一排,其中位置 i (1iN)i\ (1 \leq i \leq N)的英雄最初的生命值为 AiA_i

在每个时刻,每个英雄都有以下其中一种状态:

  • 生命值 < 0 的英雄被视为死亡,而已经死亡的英雄则会永远死亡。
  • 生命值 = 0 的英雄被视为濒死。他们还未死亡,但处于危险之中。
  • 生命值 > 0 的英雄被视为健康。

总共有 QQ 个事件,依时间顺序发生:

  1. 1 L R x: 魔王攻击从位置 LL 到位置 RR(含)的英雄。对于每个英雄 ii (LiRL \leq i \leq R),英雄 ii 的生命值会减少 xx

  2. 2 L R x: 法师治疗从位置 LL 到位置 RR(含)的英雄。对于每个英雄 ii (LiRL \leq i \leq R),如果英雄 ii 还没有死亡,那么英雄 ii 的生命值会增加 xx

  3. 3 h: 为英雄 hh 提供护盾,防止下次攻击对 hh 造成伤害。一个英雄可以拥有多个护盾,而每次受到攻击都会消耗一个护盾。

  4. 4 L R: 查询从位置 LL 到位置 RR(含)之间死亡的英雄数量。

  5. 5 L R: 查询从位置 LL 到位置 RR(含)之间濒死的英雄数量。

你能够应付所有 QQ 个事件吗?

输入格式

simulator.in 文件读入数据。

第一行输入包含一个整数 NN

第二行输入包含 NN 个整数 A1,A2,,ANA_1, A_2, \dots, A_N

第三行输入包含一个整数 QQ

接下来的 QQ 行依时间顺序分别描述一个事件。每 jj 行以一个整数 TjT_j 开始,描述第 jj 个事件的类型:

  • 如果 Tj=1T_j = 122,则接下来有三个整数:Lj,Rj,xjL_j, R_j, x_j
  • 如果 Tj=3T_j = 3,则接下来有一个整数:hjh_j
  • 如果 Tj=4T_j = 455,则接下来有两个整数:Lj,RjL_j, R_j

输出格式

输出到 simulator.out 文件。

对于每个类型 44 或类型 55 事件,输出一行一个数字,代表该查询的答案。

样例

5
3 1 4 1 5
14
1 2 4 1
5 2 5
1 2 5 3
4 1 5
5 1 5
2 1 5 10
4 1 5
3 3
3 5
3 3
1 1 5 100
4 1 5
1 1 5 100
4 1 5
2
2
1
2
3
4
事件 1 3 0 3 0 5
事件 3 3 x 0 x 2
事件 6 13  x  10  x  12
事件 11  x  x  10   x  12 
事件 13 x   x  10  x  x

样例 2

点击链接 ex_simulator2.inex_simulator2.out 下载大样例 2 的输入数据和输出数据。

数据范围

对于所有测试数据,

1N,Q2×1051 \leq N, Q \leq 2 \times 10^5

0Ai1090 \leq A_i \leq 10^9

对于所有 1jQ1 \leq j \leq Q1Tj51 \leq T_j \leq 5

对于所有 1jQ1 \leq j \leq Q1LjRjN1 \leq L_j \leq R_j \leq N

对于所有 1jQ1 \leq j \leq Q1xj1091 \leq x_j \leq 10^9

对于所有 1jQ1 \leq j \leq Q1hjN1 \leq h_j \leq N

保证存在至少一个类别 44 或类型 55 的事件。

子任务 分数 附加约束条件
11 99 对于所有事件,Lj=RjL_j = R_j
22 2323 只有类型 11、类型 22 或类型 55 的事件,可以保证没有英雄死亡
33 1919 只有类型 11、类型 22、类型 33 或类型 55 的事件,可以保证没有英雄死亡
44 2222 只有类型 11、类型 44 或类型 55 的事件
55 2727 无附加限制