1. 程式人生 > >斜率優化

斜率優化

spa 題意 交點 引導 str [1] 一個 化簡 radi

Gradient

  題意

  給定長度為 n 的序列 A = {a[1], a[2], ..., a[n]} , 求 G[2], G[3], G[4], ..., G[n] .

  G[i] = max((a[i] - a[j]) / (i - j)) , 1 <= j < i .

  分析

  嘗試找到答案的性質. ans = (a[i] - a[j]) / (i - j) , 化簡得 j * ans - j = i * ans - i . 所以 ans 是直線 i * x - i 與之前的一條直線 j * x - j 的最後一個交點.

  這種直線相關的式子引導我們想到了凸包, 隨著 i 的遞增, 我們可以用棧維護直線 {j * x - j} 的下凸殼.

  觀察發現對於任意的 i , 與直線 i * x - i 的最後一個交點一定是和下凸殼的上一條直線的交點.

斜率優化