线段树好题(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 [题目类型]线段树 ...
随机推荐
- 烂泥:KVM安装Windows Server 2008 R2使用virtio硬盘
本文首发于烂泥行天下. 在上一篇文章中,我们介绍了使用IDE硬盘来安装Windows Server 2008 R2,这篇文章我们来介绍使用virtio硬盘来安装Windows Server 2008 ...
- sqoop sample code
本文使用的数据库是mysql的sample database employees. download url:https://launchpad.net/test-db/employees-db-1/ ...
- noip2008普及组3题题解-rLq
(第一次写题解,随意喷) (只是前一天的作业哈) (先凑个数) 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈 ...
- java如果读取xml内容
本文介绍的是使用dom4j方式读取,如需要其他方式可自行百度. 1.首先导入dom4j的jar包:http://www.dom4j.org/dom4j-1.6.1/ 2.准备xml文件 <?xm ...
- 广度优先搜索 cdoevs 1226 倒水问题
cdoevs 1226 倒水问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有两个无刻度标志的水壶,分别可装 x 升 ...
- UVALive 6093 Emergency Room --优先队列实现的模拟
题意:给n个医生,这些医生有一个上班时间,然后给一些病人,病人有一个到达的时间,以及一些诊断,诊断有property(优先级)和duration(诊断时间)这两个属性,每个病人可能要诊断多次,最后问每 ...
- 2014 Super Training #6 H Edward's Cola Plan --排序+二分
原题: ZOJ 3676 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3676 题意:给每个朋友一瓶可乐,可乐有普通和高 ...
- iOS自带地图纠偏问题
…………纠偏 篇………….. 1. 涉及接口:<CoreLocation/CoreLocation.h> 2. 核心代码解读: if ([CLLocationManager locatio ...
- webapi 获取请求参数
//获取请求消息提数据 Stream stream = filterContext.Request.Content.ReadAsStreamAsync().Result; Encoding encod ...
- &10 基本数据结构——指针和对象的实现,有根树的表示
#1,指针和对象的实现 如果所用的语言或者环境不支持指针和对象,那我们该怎么用数组来将其转化呢?实质上可以将这个问题的本质转化为数组和链表这两种数据结构的转换,准确来说,是将链表表示的数据用数组表示. ...