これはO(nlogn)ソリューションです。この回答の最後に、Willard Zhanによって指摘されたO(n)解が追加されています。
O(nlogn)ソリューション
convience、示すためにf(i,j)=(h[j]−h[i])(j−i)。
定義l1=1、およびli、そのような最小の指標であることがli>li−1とh[li]<h[li−1]。同様に、定義r1=n、及びri最大インデックスようなものでri<ri−1と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
それぞれについて、ようにH [ I ] < H [ jが〕、聞かせてUは最大インデックスであるように、L U ≤ I、およびVの最小のインデックスであっても、その結果のR V ≥ J、次いでH [ L 、U ] ≤ H [ I ](そうでなければL U + 1 ≤ Iの定義によってL U + 1i<jh[i]<h[j]ulu≤ivrv≥jh[lu]≤h[i]lu + 1≤ Ilu + 1、こうしての定義に矛盾)、同様にH [ R V ] ≥ H [ J ]。従って
(H [ R V ] - H [ L Uを ] )(R V - L U)≥ (H [ J ] - H [ I ] )(R V - L U)≥ (H [あなたh [ rv] ≥ H [ J ]
つまり、 l u < r vであるペア(l u、r v)のみを考慮する必要があります。
(h [ rv] − h [ lあなた] )(rv− lあなた)≥ (h [ j ] − h [ i ] )(rv− lあなた)≥ (H [ J ] - H [ I ] )(J - I )。
(lあなた、rv)lあなた< rv
意味の、我々は次の補題を持っています。v (u )= arg最高v :l あなた< rvf(lあなた、rv)
対L U < RのV、および場合があるUを0ように、U < U 0及びV < V (U 0)又はそのU > U 0及びV > V (U 0)は、最終的な最適解にはなりません。(lあなた、rv)lあなた< rvあなた0あなた< あなた0v < v (u0)u > u0v > 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 (u0)
または
(H[RV]-H[R V (U 0) ])L U 0 +H[L、U 0 ](RV-R V (U 0))+H[Rの V (U 0) ]r v (u 0) −
(h [ rv (u0)] − h [ lあなた0] )(rv (u0)− lあなた0)≥ (h [ rv] − h [ lあなた0] )(rv− lあなた0)、
(h [ rv] − h [ rv (u0)] )lあなた0+ h [ lあなた0] (rv− rv (u0))+ h [ rv (u0)] rv (u0)− h [ rv] rv (u0)≥0 。
あなた< あなた0v < v (u0)h [ rv] − h [ rv (u0)] < 0rv− rv (u0)> 0lあなた< lあなた0h [ lあなた] > h [ lあなた0]
> (h [ rv] − h [ rv (u0)] )lあなた+ h [ lあなた] (rv− rv (u0))(h [ rv] − h [ rv (u0)] )lあなた0+ h [ lあなた0] (rv− rv (u0))。
(h [ rv] − h [ rv (u0)] )lあなた+ h [ lあなた] (rv− rv (u0))+ h [ rv (u0)] rv (u0)− h [ rv] rv (u0)> 0 、
(h [ rv (u0)] − h [ lあなた] )(rv (u0)− lあなた)> (h [ rv] − h [ lあなた] )(rv− lあなた)。
(lあなた、rv (u0))(lあなた、rv)■
v (ℓ / 2 )ℓl1、l2、…o1(lあなた、rv)uが= 1 、... 、ℓ / 2 - 1v = v (ℓ / 2 )、v (ℓ / 2 )+ 1 、…o2(lあなた、rv)u = ℓ / 2 + 1 、ℓ / 2 + 2 、…v = 1 、… 、v (ℓ / 2 ){ (lℓ / 2、rv (ℓ / 2 ))、o1、o2}
O (n )
f(lあなた、rv)= - ∞lあなた≥ Rvu > u0v > v0f(lあなた0、rv0)≥ F(lあなた0、rv)f(lあなた、rv0)>f(lあなた、rv)M[x,y]:=−f(lx,rc−y+1)cr1,r2,…rc−y+1yMf