【李超線段樹應用】【斜率優化】
阿新 • • 發佈:2022-03-03
【李超線段樹應用】【斜率優化】
李超樹可以用於維護斜率優化。
斜率優化的維護
一般來說,斜率優化有三種維護方式:
- 維護凸包
對於狀態轉移方程:\(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) - 李超樹維護
對於狀態轉移方程:\(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,原因是插入的是直線。
例題 - 離線用cdq分治。