线段树好题(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 [题目类型]线段树 ...
随机推荐
- C++类所占内存大小计算
C++类所占内存大小计算 说明:笔者的操作系统是32位的. class A {}; sizeof( A ) = ? sizeof( A ) = 1明明是空类,为什么编译器说它是1呢? 空类同样可以实例 ...
- POJ 2777 Count Color(线段树之成段更新)
Count Color Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33311 Accepted: 10058 Descrip ...
- 获取radio和select的值,获取select的值
获取radio的值 var val=$('input:radio[name="_objId"]:checked').val(); jQuery中获得选中select值 第一种方法$ ...
- Ubuntu进阶学习,指令迅速查询,Bug迅速查询(Ctrl+F)
There is some notes while I am learning Ubuntu Operate System! (Ask Ubuntu) 1-- Hard link : ln comma ...
- JavaScript的函数重载
java语言中函数的重载和重写可谓是很重要的概念,所以在写js的时候时不时的会想到这种用法,重写先不说,这里只说重载.. <script language="JavaScript&qu ...
- sudo: unable to resolve host xxx解决办法
问题: root@wiki:~# sudo lsb_release -a sudo: unable to resolve host wiki No LSB modules are available. ...
- ok,今天讲讲linux的部分指令吧
Linux布置服务 cd 进入 ../ 上一层目录 sh shutdown.sh -------tomcat的关闭指令 sh startup.sh ------ ...
- 【转载】jQuery Validate 菜鸟教程
文章1:http://www.runoob.com/jquery/jquery-plugin-validate.html (jQuery Validate 菜鸟教程)
- nginx 一二事(3) - 反向代理以及负载均衡
先来说说正向代理 就是普通的代理,记得高中年代偷跑去网吧是要办卡的 题外话: 就是这货...相信很多80同龄人都有吧... 回到正题,那正向代理就不让你直接访问网络,而需要登录一下网吧的某个系统 ...
- Linux搭建PHP+MySQL+Apache环境
环境: CentOS 6.4 MySQL详细安装可参考:http://www.cnblogs.com/yangxia-test/archive/2012/11/12/2766237.html Apac ...