Find the maximum slope
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
Special Judge, 64bit IO Format: %lld

题目描述

给定一个长度为 n 的数组 a_1, a_2, \ldots, a_n,并给出 q 次操作:

每次操作 (l, r, x) 表示将 a_l, a_{l + 1}, \ldots, a_r 增加 x,即 a_i \leftarrow a_i + x, i \in [l, r]

定义一个数组的倾斜度 L = \displaystyle\max_{\substack{1 \leq i,j \leq n \\ i \neq j}} \left|\frac{a_i - a_j}{i - j}\right|。请编写一个程序求出数组最初和每次操作后的倾斜度。


输入描述:

第一行包含两个整数 n, q (2 \leq n \leq 5 \times 10^5, 1 \leq q \leq 10^5),分别表示数组的长度和操作次数。

第二行包含 n 个整数 a_1, a_2, \ldots, a_n (-100 \leq a_i \leq 100),分别表示数组的每个元素。

接下来 q 行,每行包含三个整数 l, r, x (1 \leq l \leq r \leq n, -200 \leq x \leq 200),表示该次操作将所有下标位于区间 [l, r] 的元素增加 x

输入数据保证数组中的每个数在任何时候均为 [-100, 100] 之间的整数。

输出描述:

输出 q + 1 行,每行一个实数,第 i 行表示第 i - 1 次操作后数组的倾斜度。

如果你的答案与标准答案的绝对误差或相对误差不超过 10^{-6},那么它会被判为正确。

正式地说,令你的答案为 a,裁判程序的答案为 b,你的答案会被判为正确当且仅当 \frac{|a-b|}{\max{(1, |b|)}} \leq 10^{-6}
示例1

输入

复制
3 1
1 1 1
1 2 1

输出

复制
0.000000
1.000000

备注:

1 次操作前数组为 1, 1, 1,倾斜度为 0

1 次操作后数组为 2, 2, 1,倾斜度为 1