loj#P3256. 「JOI 2020 Final」火灾

    ID: 16448 传统题 1500ms 256MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>数据结构树状数组笛卡尔树 / Kruskal 重构树JOI2020

「JOI 2020 Final」火灾

题目描述

译自 JOI 2020 Final T5「火事 / Fire

在 JOI 世界里有 NN 个地区排成一条线。为了方便,我们将这些地区编号为 11NN。突然,各个地区都起火了。在时刻 00,第 ii 个区的火势大小为 SiS_i

此时(时刻 00),一阵风从 11 号地区一直吹到了 NN 号地区。对于每两个相邻的地区,如果 tt 时刻上风地区的火势比下风地区的强,t+1t+1 时刻下风地区的火势大小将变为 tt 时刻上风地区的火势,否则 t+1t+1tt 时刻时下风地区的火势大小不变。
形式化地说,如果 tt 时刻 ii 地区的火势为 Si(t)S_i(t),则 Si(t)=max{Si1(t1),Si(t1)}S_i(t)=\max\{S_{i-1}(t-1),S_i(t-1)\},其中 S0(t)=0, Si(0)=SiS_0(t)=0,~S_i(0)=S_i

你是一位消防员。现在,你想到了 QQ 种灭火方案,并打算执行其中一种。你的第 jj 种方案是在 TjT_j 时刻对 [Lj, Rj][L_j,~R_j] 中的所有地区使用灭火剂完全扑灭火灾。
对于一个火势大小为 ss 的城市,你将需要 ss 升的灭火剂来扑灭火灾。因此,执行方案 jj 总共要花费 SLj(Tj)+SLj+1(Tj)++SRj(Tj)S_{L_j}(T_j)+S_{L_j+1}(T_j)+\cdots +S_{R_j}(T_j) 升灭火剂。
译者注:英文版题面中没有定义 TjT_j,此处定义从日文版中提取。

为了更好地选取灭火方案,你的任务是编写一个程序,给出 00 时刻的火势大小,计算各个方案所需的灭火剂量。

输入格式

第一行两个数 N, QN,~Q,含义如题面所示。
接下来一行 NN 个数 S1SNS_1\dots S_N,表示初始时的火势大小。
接下来 QQ 行每行三个数 Tj, Lj, RjT_j,~L_j,~R_j,表示方案 jj 的相关信息。

输出格式

输出 QQ 行,第 ii 行表示方案 jj 所需的灭火剂量。

5 5
9 3 2 6 5
1 1 3
2 1 5
3 2 5
4 3 3
5 3 5
21
39
33
9
27
10 10
3 1 4 1 5 9 2 6 5 3
1 1 6
2 8 10
4 2 7
8 3 3
6 1 10
3 2 8
5 1 9
7 4 5
9 7 9
10 10 10
28
21
34
4
64
43
55
9
27
9
10 10
3 1 4 1 5 9 2 6 5 3
1 6 6
2 8 8
4 2 2
8 3 3
6 1 1
3 4 4
5 5 5
7 10 10
9 8 8
10 7 7
9
9
3
4
3
4
5
9
9
9
10 10
3 1 4 1 5 9 2 6 5 3
7 1 6
7 8 10
7 2 7
7 3 3
7 1 10
7 2 8
7 1 9
7 4 5
7 7 9
7 10 10
28
27
34
4
64
43
55
9
27
9
20 20
2 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 1 1
1 1 14
2 3 18
4 10 15
8 2 17
9 20 20
4 8 19
7 2 20
11 1 5
13 2 8
20 1 20
2 12 15
7 1 14
12 7 18
14 2 17
9 19 20
12 12 12
6 2 15
11 2 15
19 12 17
4 1 20
25
30
12
32
2
24
38
10
14
40
8
28
24
32
4
2
28
28
12
40

数据范围与提示

对于所有测试数据 $1\le N,Q\le 2\times 10^5,~1\le S_i\le 10^9,~1\le L_j,~R_j,~T_j\le N$。

子任务编号 分值 具体限制
11 11 1N,Q2001 \le N,Q \le 200
22 66 T1=T2==TQT_1 = T_2 = \ldots = T_Q
33 77 Lj=Rj (1jQ)L_j = R_j\ (1 \le j \le Q)
44 66 Si2 (1iN)S_i \le 2\ (1 \le i \le N)
55 8080