设 s i s_i si表示 B B B的前缀和。
A n s = max r 1 − l 1 = r 2 − l 2 { ( r 1 − l 1 ) ( s r 2 − s l 2 ) + ( r 2 − l 2 ) ( s r 1 − s l 1 ) } Ans = \max_{r_1-l_1=r_2-l_2} \{(r_1-l_1)(s_{r_2}-s_{l_2}) +(r_2-l_2)(s_{r_1}-s_{l_1})\} Ans=r1−l1=r2−l2max{(r1−l1)(sr2−sl2)+(r2−l2)(sr1−sl1)}
显然最优的时候 r 2 = r 1 , l 2 = l 1 r_2=r_1,l_2=l_1 r2=r1,l2=l1,所以
A n s = 2 max l , r { ( r − l ) ( s r − s l ) } Ans = 2 \max_{l,r} \{ (r-l)(s_r-s_l) \} Ans=2l,rmax{(r−l)(sr−sl)}
想象成平面上有 n n n个点 ( i , s i ) (i,s_i) (i,si),那么上式等价于:选择两个点作为矩形的两个相对的顶点,矩形的面积的最大值。
我们先考虑一个点作为左下角的点,另一个点作为右上角的点的情况(一个点作为左上角,另一个作为右下角是同理的)。
显然对于作为左下角的那些点来说,如果 i < j ∧ s i < s j i < j\wedge s_i < s_j i<j∧si<sj,那么 ( i , s i ) (i,s_i) (i,si)是没有用的。右上角同理。
所以有用的点会形成这样的分布:
然后对于每个右上角的点,考虑矩形面积在左下角的哪一个点取到最大值。观察下图:
可以得到结论:如果对于 p 1 p_1 p1, q 2 q_2 q2比 q 1 q_1 q1优,那么对于 p 2 p_2 p2, q 2 q_2 q2一定比 q 1 q_1 q1优秀。
证明:考虑反证
S p 1 , q 1 < S p 1 , q 2 , S p 2 , q 1 > S p 2 , q 2 ⇒ S p 1 , q 1 + S p 2 , q 2 < S p 1 , q 2 + S p 2 , q 1 ⇒ S p 1 , q 1 + S p 2 , q 2 − S p 1 , q 2 − S p 2 , q 1 < 0 S_{p_1,q_1} < S_{p_1,q_2},S_{p_2,q_1} > S_{p_2,q_2}\\ \Rightarrow S_{p_1,q_1} + S_{p_2,q_2} < S_{p_1,q_2} +S_{p_2,q_1}\\ \Rightarrow S_{p_1,q_1} + S_{p_2,q_2} - S_{p_1,q_2} - S_{p_2,q_1} < 0\\ Sp1,q1<Sp1,q2,Sp2,q1>Sp2,q2⇒Sp1,q1+Sp2,q2<Sp1,q2+Sp2,q1⇒Sp1,q1+Sp2,q2−Sp1,q2−Sp2,q1<0
也就是上图中绿色标出的部分,其面积要小于 0 0 0,推出了矛盾。
用经典的决策单调性的分治算法,就可以在 O ( n log n ) O(n\log n) O(nlogn)的时间内解决问题。