[BZOJ2687]交与并[决策单调性]

题意

给定 \(n\) 个区间,我们定义区间集合 \(S(|S|>1)\) 的权值为 区间交 \(\times\) 区间并,找出权值最大的区间集合。

\(n\le 10^6\)

分析

  • 首先排除区间包含的情况,但是注意存在特殊情况:答案是两个区间,其中一个区间被另一个包含。

  • 排除之后的区间左右端点都递增,我们的答案一定是一段连续的区间,记最左最右的区间为 \(i,j\) ,容易得到

    \[ans=(R_j-L_i)\times(R_i-L_j)\]

    将式子拆开:

    \[ans=R_iR_j+L_iL_j-L_iR_i-L_jR_j\]

    \(L_iR_i\) 看做转移函数 \(g\)\(R_iR_j\) 是关于 \(i,j\) 的二元函数 \(s\) ( \(L_iL_j\) 同理)。容易证明 \(s\) 满足四边形不等式:

假设四个区间 \(a<b<c<d​\) (因为左右端点都单增所以可以如此判断),首先假设不满足决策单调,那么有

\[\begin{cases}g(a)+s(a,c)<g(b)+s(b,c) \\ g(a)+s(a,d)>g(b)+s(b,d)\end{cases}\]

移项之后容易得到:

\[s(b,c)-s(a,c)>s(b,d)-s(a,d)\]

\[R_c(R_b-R_a)>R_d(R_b-R_a)\]

由于 \(R\) 递增,上式显然不成立。

所以决策单调。

  • 然后套个单调队列的板子就没了。
  • 总时间复杂度 \(O(nlogn)\)

代码

代码链接

转载于:https://www.cnblogs.com/yqgAKIOI/p/10280573.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值