题目背景
Damian 正在开发一款视频游戏!
题目描述
该游戏包含 N 个任务,第 i 个任务的初始难度为 Di。为了让玩家感受到难度的渐进性,Damian 对任务难度进行了若干次调整操作。
游戏设计支持两种操作:
- 补丁操作:将任务 L 到 R 的难度按公式 Di=Di+S+(i−L)×C 增加。
- 重写操作:将任务 L 到 R 的难度直接设置为 Di=S+(i−L)×C。
为了让游戏更加有趣,Damian 希望找到任务的连续子序列,使它们的难度呈等差数列。玩家可以按顺序或倒序完成任务。任务 a 到 b (1≤a≤b≤N) 构成可玩子段当且仅当对所有 a≤i<b,满足 Di+1−Di=k(k 为某个整数,可以为负)。单个任务也构成长度为 1 的可玩子段。
Damian 有时需要回答一个查询:找出某一区间内最长的可玩子段长度。你需要帮助 Damian 处理这些查询。
输入格式
- 第一行包含两个整数 N 和 Q,分别表示任务的数量和操作与查询的总数。
- 第二行包含 N 个整数,表示任务的初始难度 D1,D2,…,DN。
- 接下来的 Q 行描述操作或查询:
- 若行首为 1,接下来为 L,R,S,C,表示补丁操作。
- 若行首为 2,接下来为 L,R,S,C,表示重写操作。
- 若行首为 3,接下来为 L,R,表示查询操作。
输出格式
对于每个查询操作,输出一个整数,表示指定区间内最长的可玩子段长度。
提示
【样例解释】
对于样例 #1:
- 第一次查询时,任务 5 到 9 构成最长可玩子段。
- 第一次补丁操作后,任务难度变为 [0,0,0,0,1,2,3,4,5,5]。
第二次查询时,任务 4 到 9 构成最长可玩子段。
- 第二次补丁操作后,任务难度变为 [0,0,0,0,−2,−4,−6,−8,−10,−12]。
最后一次查询时,任务 4 到 10 构成最长可玩子段。
【数据范围】
- 1≤N,Q≤3×105
- −106≤Di,S,C≤106
- 1≤L≤R≤N
子任务编号 |
分值 |
限制条件 |
1 |
9 |
L=1,R=N |
2 |
15 |
1≤N,Q≤103 |
3 |
35 |
无补丁和重写操作。 |
4 |
11 |
L=R |
5 |
13 |
无重写操作。 |
6 |
17 |
无额外限制。 |