离散化 + 线段树(树状数组) + 线扫描法

最近看了几道题 目  poj1151 和 hdu5481 .虽然现在没有写出代码,但是根据这几天的总结,我说说大概的思路和解题的思想 ;

1.poj1151  

题意:给你n个矩形,求矩形的面积并 ;

关键思想:由于n的范围很大,一个一个1*1的矩形元枚举是不吭能的,所以要使用所谓的 ‘离散化 ’ 离散化就是把无穷的数变化为有穷的数 ;

首先考虑到我们的最小矩形元并不是1*1,而是在出现的4n个点中的临近的组合。

方法一:   对于每一个矩形,都遍历每一个小矩形元,然后最后统计面积 ;复杂度为 0(n^3) 完全可以接受,期间可以使用二维树状数组,但是没有优化的作用;

方法二:   考虑每个临近的x,每两个临近的就画一条垂直于y的线,这两个线中夹的有两种情况 : 1.没有矩形 2.有矩形 ; 但是如果是第二种那么其中的面积一定是w*(线段的长度并)

由此,我们可以离散化之后使用线扫描一遍 , 每次扫描都可以可以得到所有的夹杂在线中的小矩形的面积 ; 而对于线段的长度并可以是再次使用y轴的线扫描法,但是复杂度就上去了 0(n^2)  ; 也可以使用线段树维护一个插入操作 。 复杂度为0(nlgn) ; 完美解决 ; 注意线段树的离散化的 写法很巧妙,不需要使用map也可以完成 ; 具体实现看kuangbin大神的博客   http://www.cnblogs.com/kuangbin/archive/2011/08/16/2140544.html  


2.hdu5481 也是考率小线段 ,对于包含的线段的条数可以使用离散化+树状数组类似数区间覆盖个数一样的方法 nlgn ,但也可以使用 线扫描法 , 0(n)来获得结果,而且对于后者 可以不使用map离散化,写法更方便 ;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值