#loj5244. 「NOISG 2020 Final」Progression
「NOISG 2020 Final」Progression
[AdditionalFile5244.zip](file://AdditionalFile5244.zip?type=additional_file)
#5244. 「NOISG 2020 Final」Progression
标签: 传统 | 时间限制: 3000 ms | 内存限制: 1024 MiB |
题目描述
译自 NOISG 2020 Final T3. Progression
达米安正在开发一款视频游戏!游戏包含 个任务,第 个任务初始难度为 。这款游戏采用了最先进的游戏设计,可以正向或反向游玩。当然,确保玩家感受到进程感非常重要——难度应持续递增。因此,达米安执行了一系列操作。
他执行的操作有两种类型。第一种是补丁操作,由四个整数 定义,表示对于 的任务 ,其难度 将增加 。
第二种是重写操作,同样由四个整数 定义,表示对于 的任务 ,其难度 将被设置为 。
达米安决定,只有当一段连续的任务序列的难度以恒定速率变化时,这段序列才构成一个可玩片段(毕竟,玩家可以选择反向游玩)!换句话说,任务 到 (其中 )构成一个可玩片段,当且仅当对于所有 ,,其中 是一个整数(可能 )。单个任务本身构成一个长度为 的可玩片段。
达米安会不时执行一个评估查询,由两个整数 和 定义,表示他想知道在当前时刻,任务 到 之间最长可玩片段的长度。
然而,达米安的操作并不一定能改善游戏体验。因此,他需要你的帮助来回答这些查询,以便开发出最佳的游戏。
输入格式
程序需从标准输入读取数据。
第一行包含两个整数 和 ,分别表示任务数量和操作及查询的总数。
第二行包含 个空格分隔的整数 ,表示初始难度。
接下来的 行,每行表示一个操作或查询:
- 如果行以整数 开头,接下来的 个整数为 ,表示补丁操作。
- 如果行以整数 开头,接下来的 个整数为 ,表示重写操作。
- 如果行以整数 开头,接下来的 个整数为 ,表示评估查询。
输出格式
程序需向标准输出输出结果。
对于每个评估查询,输出一行,包含一个整数,表示当前时刻任务 到 之间最长可玩片段的长度。
样例 1
输入
10 6
1 2 3 4 1 2 3 4 5 5
3 1 10
1 1 4 -1 -1
3 1 10
3 9 10
2 5 10 -2 -2
3 1 10
输出
5
6
2
7
对于第一个评估查询,任务 到 构成最长可玩片段()。
在补丁操作后,难度变为 。
对于第二个评估查询,任务 到 构成最长可玩片段()。
对于第三个评估查询,任务 到 构成最长可玩片段(),因为仅考虑任务 到 之间的任务。
在重写操作后,难度变为 。
对于最后一个评估查询,任务 到 构成最长可玩片段()。
这个样例满足子任务 的限制。
样例 2
输入
10 5
1 2 3 4 1 2 3 4 5 5
3 1 10
1 1 10 1 2
3 1 10
2 1 10 3 4
3 1 10
输出
5
5
10
这个样例满足子任务 的限制。
样例 3
输入
10 5
1 2 3 4 1 2 3 4 5 5
3 1 4
3 4 5
3 2 4
3 5 9
3 10 10
输出
4
2
3
5
1
这个样例满足子任务 的限制。
样例 4
输入
10 5
1 2 3 4 1 2 3 4 5 5
2 10 10 6 1
3 5 10
1 5 5 4 1
3 1 5
3 1 6
输出
6
5
5
注意,当 时, 不一定为 ,但其值对操作无影响。
这个样例满足子任务 的限制。
样例 5
输入
10 5
1 2 3 4 1 2 3 4 5 5
1 1 4 -1 -1
3 1 5
3 4 5
1 5 10 -1 -1
3 1 10
输出
4
2
9
这个样例满足子任务 的限制。
数据范围与提示
对于所有输入数据,满足:
在给定限制下, 保证在 64 位有符号整数的表示范围内。
详细子任务附加限制及分值如下表所示:
| 子任务 | 分值 | 附加限制 |
|---|---|---|
| 对于所有操作和查询, | ||
| 没有补丁和重写操作 | ||
| 对于所有操作, | ||
| 没有重写操作 | ||
| 无附加限制 |