1. 程式人生 > 其它 >【李超線段樹應用】【斜率優化】

【李超線段樹應用】【斜率優化】

【李超線段樹應用】【斜率優化】

李超樹可以用於維護斜率優化。

斜率優化的維護

一般來說,斜率優化有三種維護方式:

  1. 維護凸包
    對於狀態轉移方程:\(f(i)=A(i)B(j)+C(i)+D(j)\)
    可以寫成:\(D(j)=-A(i)B(j)+f(i)-C(i)\)
    把所有的決策點\(j\),計作二維平面座標上的一個點\((-B(j),D(j))\),則求對於以\(A(i)\)為斜率的直線,代入某個決策點後,使得截距取的最值的決策點即為\(f(i)\)的最值
    若求的是最小值,則維護下凸包;最大值則維護上凸包。
    維護方式:
    若查詢的斜率或插入的點的橫座標具有單調性的話,首先考慮單調棧和單調佇列(程式碼,複雜度,常數,都要比其他方法好)。
    否則,用平衡樹維護(一般用set)
  2. 李超樹維護
    對於狀態轉移方程:\(f(i)=A(i)B(j)+C(i)+D(j)\)
    可以寫成:\(f(i)-C(i)=B(j)A(i)+D(j)\)
    所以想要求\(f(i)\)的最值,實際上就是對於每條\(k=B(j)\),\(b=D(j)\)的直線,求在\(x=A(i)\)處的極值,顯然可以用李超樹來維護。
    當然還要滿足所查詢的\(A(i)\)不應過大。
    複雜度只有一個log,原因是插入的是直線。
    例題
  3. 離線用cdq分治。