线段树好题(2004集训队林涛PPT中的3题)
1、snake:主要是要意识到全局的可能连法只有一种= =(略坑,题目的最小长度是唬人的……),所以关键就是能否构造出符合题意的图,可以考虑搜索解决,搜出一个就OK了,但是会发现那些满足条件中线段在非端点处不自交不好判断,这里用线段树解决,按扫描线扫,横着的线段就插入,竖着的线段就看它所在的横坐标是否被线段树中某条横着的线段覆盖了,如果覆盖了就无解,http://blog.sina.com.cn/s/blog_51cea4040100gf9l.html
2、Cuboid:
先来看最简单的二维的:
在一个封闭矩形平面上有n个点,在这个封闭平面上找一个点,使得以这个点和矩形平面左下角(原点)为对角顶点而形成的子矩形中不包含给定的任何一个点(在边上不算),且使得子矩形面积最大。
分析问题:1、设n个点的x坐标的集合为X,y坐标的集合为Y,你选择的点P(m,n),则m∈X,n∈Y。这个很好理解,也就是说如果当前你找到的点构成的矩形 的两条边没有经过任何一个点,那么这一定不是最优的,因为可以向上扩展△y,向右扩展△x使得面积更大
2、由1可以很快想到一个n^3的算法,就是枚举横纵坐标并判定
3、2中的复杂度无法接受,从以前的经验我们可以马上想到这种题觉得可以用扫描线做:
①先把点排序(第一关键字:x从小到大 第二关键字 y从小到大)
②我们从x的从小到大一个个看,假设当前x0是我们要找找的P点的横坐标,则现在我们想要的是要在X=x0这条直线上找一个最高的点使得能够满足题设要求,很容易发现这个最高的点就是从左到右扫到现在的所有点中纵坐标的最小,我们不妨max(i)表示x=i时,y的最大值。易得这个扫描是O(n)的
4、ans=max{i*max(i)} i∈X
那么其实此题就是二维在三维上的推广,三维当然从扫描线变到扫描面了啦
1、易得此问题要求的点仍满足二维中的第一点
2、不妨枚举X坐标,那么接下来要解决的问题又是我们最擅长的平面问题了
3、对于确定X坐标所在的平面,我们可以还按照二维的方法做O(n)的,那么总的复杂度为n^2
想一想有更优的做法吗!!!?
其实如果我们只是枚举了一维坐标,其他都按照二维的一模一样做,那么怎么能叫推广呢?????
现在仔细想想我们是如何把二维问题降到O(n)的?————那是因为每一列扫描线中间都有他们间的关系,即max(i)=min(max(i-1),当前扫描线所在列上的输入的点的最小纵坐标),所以我们可以O(1)实现状态转移
而我们要推广的实质就是这个性质!下面回到三维中重新考虑下,我们有必要每次都要对新的平面重新做吗?
没必要!我们可以完成X=i -> i+1的快速转移,即用线段树。这个论文讲的十分清楚了这里就不说了。
总结:主要的就是以后碰见三维的题目而且不好下手的不妨从二维先入手,一般都能推广到三维,但“推广”并不是数学中的“降维”那样注定你的时间复杂度是不可接受的,推广的其实是二维的一些性质和决策转移,而一般转移都需要用到数据结构。
PS:论文中提到的线段树收缩和释放的实质应该就是Lazy标记……各位神犇不用太过纠结……
3、战场统计系统:这个就是水水的二维线段树(一般用矩形树写),没什么东西,注意一点矩形树的数组一般开1.5*m*n就行了
线段树好题(2004集训队林涛PPT中的3题)的更多相关文章
- ACM学习历程—SNNUOJ 1110 传输网络((并查集 && 离线) || (线段树 && 时间戳))(2015陕西省大学生程序设计竞赛D题)
Description Byteland国家的网络单向传输系统可以被看成是以首都 Bytetown为中心的有向树,一开始只有Bytetown建有基站,所有其他城市的信号都是从Bytetown传输过来的 ...
- HDU 1828 / POJ 1177 Picture (线段树扫描线,求矩阵并的周长,经典题)
做这道题之前,建议先做POJ 1151 Atlantis,经典的扫描线求矩阵的面积并 参考连接: http://www.cnblogs.com/scau20110726/archive/2013/0 ...
- cf276E 两棵线段树分别维护dfs序和bfs序,好题回头再做
搞了一晚上,错了,以后回头再来看 /* 对于每次更新,先处理其儿子方向,再处理其父亲方向 处理父亲方向时无法达到根,那么直接更新 如果能达到根,那么到兄弟链中去更新,使用bfs序 最后,查询结点v的结 ...
- 【刷题】洛谷 P3834 【模板】可持久化线段树 1(主席树)
题目背景 这是个非常经典的主席树入门题--静态区间第K小 数据已经过加强,请使用主席树.同时请注意常数优化 题目描述 如题,给定N个正整数构成的序列,将对于指定的闭区间查询其区间内的第K小值. 输入输 ...
- 【LOJ6029】「雅礼集训 2017 Day1」市场(线段树裸题)
点此看题面 大致题意: 维护序列,支持区间加法,区间除法(向下取整),区间求\(min\)和区间求和. 线段树维护区间除法 区间加法.区间求\(min\)和区间求和都是线段树基本操作,因此略过不提. ...
- 刷题总结——二逼平衡树(bzoj3224线段树套splay)
题目: Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:1.查询k在区间内的排名2.查询区间内排名为k的值3.修改某一位值上的数值4.查询k在 ...
- Wannafly Winter Camp Day8(Div1,onsite) E题 Souls-like Game 线段树 矩阵乘法
目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog @ Problem:传送门 Portal 原题目描述在最下面. 简单的 ...
- ZKW线段树
简介 zkw线段树虽然是线段树的另一种写法,但是本质上已经和普通的递归版线段树不一样了,是一种介于树状数组和线段树中间的存在,一些功能上的实现比树状数组多,而且比线段树好写且常数小. 普通线段树采用从 ...
- POJ 3667 Hotel(线段树 区间合并)
Hotel 转载自:http://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html [题目链接]Hotel [题目类型]线段树 ...
随机推荐
- redis 优化
系统优化echo "vm.overcommit_memory=1" > /etc/sysctl.conf 0, 表示内核将检查是否有足够的可用内存供应用进程使用:如果有足够的 ...
- 在VMware上安装CentOS-6.5 minimal - 配置网络
CentOS的minimal版本默认不启动网络,所以安装完CentOS要自己配置网络. 老伯的VMware虚拟机网络连接方式采用NAT方式(其他方式没试过). 1 修改配置文件/etc/sysconf ...
- ORA-01034: ORACLE not available如何解决
一个小小的问题,让我折腾了一个上午,下午三点彻底解决了,分享一个给大家解决方法,尽管在测试服务器上,但是经验是值得总结和分享的. ERROR:ORA-01034: ORACLE not availab ...
- ref out 方法参数
ref out 相似 ref和out两个关键字的作用大致相同,但是有一些微妙但是重要的区别. 两者的行为相似到连编译器都认为这两者不能被重载:public void SampleMethod(out ...
- View (五)自定义View的实现方法
一些接触Android不久的朋友对自定义View都有一丝畏惧感,总感觉这是一个比较高级的技术,但其实自定义View并不复杂,有时候只需要简单几行代码就可以完成了. 如果说要按类型来划分的话,自定义Vi ...
- C#综合揭秘——细说多线程(下)
引言 本文主要从线程的基础用法,CLR线程池当中工作者线程与I/O线程的开发,并行操作PLINQ等多个方面介绍多线程的开发.其中委托的BeginInvoke方法以及回调函数最为常用.而 I/O线程可能 ...
- EmberJS路由详解
配置路由器,ember中是根据路径寻找与路由名相对应的模板和控制器的,比如当访问http://localhost:80/这个网址的时候,ember框架会自动寻找与路由名post相对应的PostTemp ...
- 用运算符代替if、else
- BZOJ 3572: [Hnoi2014]世界树
BZOJ 3572: [Hnoi2014]世界树 标签(空格分隔): OI-BZOJ OI-虚数 OI-树形dp OI-倍增 Time Limit: 20 Sec Memory Limit: 512 ...
- 认识实验室信息管理系统(LIMS)
在当今互联网如日中天的大环境下,各种伴随着互联网的产物如p2p,o2o在如火如荼的进行着,吸引了大量的开发人员都涌向了这个行业,所有的技术似乎都在围绕着互联网发展,传统行业软件开发的人气和关注度就相形 ...