题意概述
给定一个序列 {an},q 次操作,每次全局加系数非负的二次函数,询问全局最小值。
具体地,第 j 次操作给定 Aj,Bj,Cj(Aj,Bj,Cj≥0),令所有 ai 变为 ai+Aj×i2+Bj×i+Cj。
每次操作后输出 min1≤i≤n{Ai}。
做法
注意到二次函数是不下降的,因此全局最小值下标是不上升的。我们可以通过二分来判断哪些时刻内最小值下标是否改变。
具体地,先求出初始条件下的全局最小值下标 minpos,然后二分计算最大的时间 t 使得进行完编号为 [1,t] 的全局加操作后 minpos 不变。不断重复上述过程即可。
朴素实现为 O((n+q)logq)。
问题
有没有线性(即 O(n+q))的做法?