这是一个解决方案。此答案的最后附加了由Willard Zhan指出的O (n )解。O(nlogn)O(n)
解O(nlogn)
为便于学习,分别表示。f(i,j)=(h[j]−h[i])(j−i)
定义,并且l i是最小索引,以使l i > l i − 1且h [ l i ] < h [ l i − 1 ]。类似地,定义r 1 = n,并且r i是最大的索引,从而r i < r i − 1和h [ r i ] >l1=1lili>li−1h[li]<h[li−1]r1=nriri<ri−1。序列升1,升2,。。。和 - [R 1,- [R 2,...很容易计算在 Ö (Ñ )时间。h[ri]>h[ri−1]l1,l2,...r1,r2,…O(n)
没有使得h [ i ] < h [ j ](即f (i ,j )> 0)的情况是微不足道的。现在,我们将重点放在非平凡的案件上。在这种情况下,要找到解决方案,我们只需要考虑这样的对。i<jh[i]<h[j]f(i,j)>0
对于每个使得ħ [ 我] < ħ [ Ĵ ],让ü是最大的指数,使得升ü ≤ 我,和v是最小的索引,使得- [R v ≥ Ĵ,然后ħ [ 升ù ] ≤ ħ [ 我](否则升ü + 1 ≤ 我通过定义升ù + 1i<jh[i]<h[j]ulu≤ivrv≥jh[lu]≤h[i]lu+1≤ilu+1,从而对相矛盾的定义),并且类似地ħ [ - [R v ] ≥ ħ [ Ĵ ]。因此
(ħ [ - [R v ] - ħ [ 升ù ] )([R v - 升ù)≥ (ħ [ Ĵ ] - ħ [ 我] )([R v - 升ù)≥ (ħ [uh[rv]≥h[j]
这意味着我们只需要考虑对(升ü,[R v),其中升ü < [R v。
(h[rv]−h[lu])(rv−lu)≥(h[j]−h[i])(rv−lu)≥(h[j]−h[i])(j−i).
(lu,rv)lu<rv
表示,我们有以下引理。v (u )= arg最高v :升 ü< řvF(lü,[Rv)
一个对,其中l u < r v,并且存在u 0使得u < u 0和v < v (u 0)或u > u 0和v > v (u 0)),不能是最终的最佳解决方案。(lü,[Rv)升ü< řvü0û < ü0v < v (u0)你> 你0v > v (u0)
证明。根据的定义,我们有
(h [ r v (u 0) ] − h [ l u 0 ] )(r v (u 0) − l u 0)≥ (h [ r v ] − h [ l u 0 ] )(r v − lv (ü0)
或
(H ^[- [Rv]-ħ[- [R v (Ú 0) ])升 ü 0 +ħ[升 ù 0 ]([Rv-- [R v (Ú 0))+ħ[- [R v (Û 0) ]r v (u 0) −
(ħ [ řv (ü0)] – h [lü0] )( rv (ü0)− lü0)≥ (h [ rv] − h [ lü0] )( rv− lü0),
(ħ [ řv] − h [ rv (ü0)] )lü0+ h [ lü0] (řv- - [Rv (ü0))+ h [ rv (ü0)] rv (ü0)- ħ [ řv] rv (ü0)≥0 。
在和v < v (u 0)的情况下,注意h [ r v ] − h [ r v (u 0) ] < 0且r v − r v (u 0) > 0,并且l u < l u 0和h [ l u ] > hû < ü0v < v (u0)ħ [ řv] − h [ rv (ü0)] < 0[Rv- - [Rv (ü0)> 0升ü< lü0,我们有
ħ [ 升ü] > h [ lü0]
> (ħ [ řv] − h [ rv (ü0)] )lü+ h [ lü] (řv- - [Rv (ü0))(ħ [ řv] − h [ rv (ü0)] )lü0+ h [ lü0] (řv- - [Rv (ü0))。
这意味着
或
(ħ[ - [R v (Ú 0) ]-ħ[升ù ])( [R v (Ú 0) -升ù)>(ħ[ - [R v ]-ħ[升ù ])( r v − l u)。
(ħ [ řv] − h [ rv (ü0)] )lü+ h [ lü] (řv- - [Rv (ü0))+ h [ rv (ü0)] rv (ü0)- ħ [ řv] rv (ü0)> 0 ,
(ħ [ řv (ü0)] − h [ lü] )( rv (ü0)− lü)> (h [ rv] − h [ lü] )( rv− lü)。
因此比(l u,r v)是严格更好的解决方案。另一种情况的证明是相似的。◼(lü,[Rv (ü0))(lü,[Rv)■
v (ℓ / 2 )ℓ升1个,l2,…Ø1个(lü,[Rv)u = 1 ,… ,ℓ / 2 − 1v = v (ℓ / 2 ),v (ℓ / 2 )+ 1 ,...Ø2(lü,[Rv)u = ℓ / 2 + 1 ,ℓ / 2 + 2 ,…v = 1 ,… ,v (ℓ / 2 ){ (升ℓ / 2,[Rv (ℓ / 2 )),Ô1个,Ø2}
O (n )
F(lü,[Rv)= - ∞升ü≥ [Rv你> 你0v > v0F(lü0,[Rv0)≥ ˚F(lü0,[Rv)F(lü,[Rv0)> f(lü,[Rv)中号[ x ,y] := − f(lX,[RÇ - ÿ+ 1)C[R1个,[R2,…[RÇ - ÿ+ 1ÿ中号F