操作好像比较神秘。
发现 \(k\) 很小,考虑和 \(k\) 有关的 DP,考虑不出来。
费用提前计算,对 \(w_i\) 做后缀和,那么序列的权值就是 \(\sum_{i=1}^nyw_i\)。
考虑 DP,明显有 \(dp[n][x]=\max_{i=-k}^kdp[n-1][x+i]+i\times w_n\)。
注意到这个形式有点像 \((\max,+)\) 卷积,很容易发现右边的东西是一个一次函数。
一次函数一定是一个凸包,所以 DP 数组一定也是一个凸包。
我们需要计算的就是两个凸包的闵可夫斯基和。闵可夫斯基和是将两个凸包的点按照斜率归并起来。
注意到一次函数的斜率都相同,在归并的时候可以视作将一段连续的点插入凸包。
然后因为 \(b_i\leq a_i\),每次操作结束后需要删掉一个后缀。
上述操作使用平衡树可以做到 \(O(n\log n)\),可以通过。