(学军集训)鱼死网破

题意

坐标系上,在 x x x轴上方有 n n n A A A类点和 k k k个平行于 x x x轴的障碍线段,在 x x x轴下方有 m m m B B B类点,求每个 B B B类点能看到的 A A A类点的个数(指不被任意一个障碍遮住)。
B类点强制在线给出。
数据范围: n , m ≤ 100000 , k ≤ 50 n,m\le 100000,k\le 50 n,m100000,k50

题解

注意到 k k k很小,考虑以障碍为中转点计算答案。
有一个部分分是所有 B B B类点纵坐标相等(设为 y y y),可以把 A A A类点与每个障碍的连线映射到与直线 y y y的交点,求出并集后进行区间加,对于每一个 B B B类点减掉包含它的区间个数即可。
由此拓展到一般情况:如果将连线映射到x轴上不能限制B类点的所有区间都不包含于对应 A A A类点区间。发现 A A A类点的每个不相交区间相当于把属于那一块的 B B B类点减 1 1 1,而效率不允许在枚举B类点的同时考虑每一个 A A A类点,考虑把该贡献拆开:在左端点 − 1 -1 1,在右端点 + 1 +1 +1。于是对于每个 B B B类点,考虑每个端点对其贡献:一开始答案是 n n n,每经过一个左端点的直线就-1,右端点就+1。这样只要对于每个端点算出在它左边的直线有几条即可,可直接排序预处理后二分算出。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值