[BZOJ2658][Zjoi2012]小蓝的好友(mrx)(扫描线+Treap)

该博客介绍了如何使用Treap解决一个与矩形区域和资源点相关的数学问题。通过扫描线方法和Treap的数据结构,博主详细讲解了如何计算特定子矩形内没有资源点的子矩形个数,并给出了复杂度分析。
摘要由CSDN通过智能技术生成

Treap 的妙用。

Source

https://www.lydsy.com/JudgeOnline/problem.php?id=2658

Solution

First

直觉告诉我们:「至少一个」是不好直接做的。
因此考虑补集转换:用「选出一个子矩形的所有方案数」减去「子矩形内没有资源点的方案数」。
「选出一个子矩形的所有方案数」比较显然:

r×(r+1)2×c×(c+1)2 r × ( r + 1 ) 2 × c × ( c + 1 ) 2

而下面就考虑怎么求「子矩形内没有资源点的方案数」。

Second

考虑使用扫描线来求解。具体的思路就是设一个 pos p o s ,从第一行移到最后一行,在移动的过程中,维护出:
「所有的子矩形 [l,pos][a,b] [ l , p o s ] [ a , b ] (即表示行号从 l l p o s ,列号从 a a b )中,没有资源点的子矩形个数」。
设这个时候, 定义一个 w[i] w [ i ] 1ic 1 ≤ i ≤ c ):
表示第 i i 列,行号在 [ 1 , p o s ] 范围内,位置最下(行号最大)的资源点的编号。
这时候,假设固定

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值