【BZOJ4422】Cow Confinement【扫描线】【差分】【线段树】

题意一个10610^6106行10610^6106列的网格图,上面有一些牛、花和一些矩形围栏,围栏在格子的边界上,牛和花在格子里,牛只能向下或向右走,不能穿过围栏和地图边界,求每头牛它能到达的花的数量。(栅栏不会相交)题解暴力首先,可以想出一个很显然的dp,设dpi,jdp_{i,j}dpi,j​表示方格(i,j)(i,j)(i,j)能到达的花数。要分类讨论,前三种情况很简单,再次不赘述,...
摘要由CSDN通过智能技术生成

题意

一个 1 0 6 10^6 106 1 0 6 10^6 106列的网格图,上面有一些牛、花和一些矩形围栏,围栏在格子的边界上,牛和花在格子里,牛只能向下或向右走,不能穿过围栏和地图边界,求每头牛它能到达的花的数量。(栅栏不会相交)

题解

暴力

首先,可以想出一个很显然的dp,设 d p i , j dp_{i,j} dpi,j表示方格 ( i , j ) (i,j) (i,j)能到达的花数。要分类讨论,前三种情况很简单,再次不赘述,特别地,有一种情况不能忽略,如下图:(红色范围为栏杆,蓝色为当前格)
在这里插入图片描述
如果 d p i , j = d p i + 1 , j + d p i , j + 1 dp_{i,j}=dp_{i+1,j}+dp_{i,j+1} dpi,j=dpi+1,j+dpi,j+1,会发现黑色部分重复计算,需要减去围栏左下角的 d p dp dp值。

时间复杂度 O ( n 2 ) O(n^2) O(n2),需要优化

优化

我们发现除了有围栏遮挡的情况外,当前状态的更新都用到 d p i + 1 , j dp_{i+1,j} dpi+1,j d p i , j + 1 dp_{i,j+1} dpi,j+1,可以考虑差分
我们可以按 y y y从大往小扫描线,维护数组 f i f_i fi,表示第y列中(注意题目中的y是横坐标) d p i , y − d p i + 1 , y dp_{i,y}-dp_{i+1,y} dpi,ydpi+1,y的值。可以画个图帮助理解:
在这里插入图片描述
如上图 f 1 f_1 f1统计范围是蓝色部分, f 2 f_2 f2也是它对应的横条, f 3 f_3 f3统计围栏内,而 f 4 f_4

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值