找最大值:
出题人说可以根据拉格朗日中值定理,得到最大值就为
a
i
a_i
ai
−
-
−
a
i
−
1
a_{i-1}
ai−1
(萌新小白哪会这些╮(๑•́ ₃•̀๑)╭,只会暴力打表找规律,发现最大值每次只会出现在两个相邻的数上)
那么答案不就变成找两个相邻的数差的绝对值的最大值了嘛,这不正好就是差分了嘛,用 m u l t i s e t multiset multiset维护一下(如果用 s e t set set的话还需要开个 m a p map map记录一下每个数的出现的个数,具体操作见我Java的代码).
这个有个细节, m u l t i s e t multiset multiset的erase函数会把全部所有相同的数给删除,但实际上我们只需要删除一个,所以需要用到 l o w e r _ b o u n d lower\_bound lower_bound或者 f i n d find find函数找到第一个数的地址后再删除.
时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)