TopCoder14929 MaxSquare

official editorial

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=r1l1=r2l2max{(r1l1)(sr2sl2)+(r2l2)(sr1sl1)}

显然最优的时候 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{(rl)(srsl)}

想象成平面上有 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<jsi<sj,那么 ( i , s i ) (i,s_i) (i,si)是没有用的。右上角同理。

所以有用的点会形成这样的分布:

然后对于每个右上角的点,考虑矩形面积在左下角的哪一个点取到最大值。观察下图:

TopCoder14929_2_.png

可以得到结论:如果对于 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,q2Sp1,q1+Sp2,q2<Sp1,q2+Sp2,q1Sp1,q1+Sp2,q2Sp1,q2Sp2,q1<0

也就是上图中绿色标出的部分,其面积要小于 0 0 0,推出了矛盾。

用经典的决策单调性的分治算法,就可以在 O ( n log ⁡ n ) O(n\log n) O(nlogn)的时间内解决问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值