解题思路
操作会给区间 [l,r] 加上一段从右往左递减的等差数列,公差为 m,右端点 r 增加 m。
考虑操作后可能出现下降的相邻对:
- 区间内部相邻对 i,i+1(l≤i<r):差值增加恰好 m,即 ai′−ai+1′=(ai−ai+1)+m。
- 右边界相邻对 r,r+1(若 r<n):同样有 ar′−ar+1=(ar−ar+1)+m。
- 左边界 l−1,l 不可能产生下降,因为 al 被加得最多,只会更大。
题目内容
给定一个长度为 n 的非降序列 a1≤a2≤⋯≤an。至多可以进行一次如下操作:
选择区间 [l,r](1≤l≤r≤n),对区间内每个下标 i,令 ai 增加 (r−i+1)×m。
希望操作后存在某个 j 使得 aj>aj+1。求为此需要选择的区间长度 r−l+1 的最小值;若一次操作无法做到,输出 -1。
数据组数不超过 104,单组 n 不超过 2×105,所有数据 n 之和不超过 2×105,m 与 ai 均不超过 109。