线段树好题(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 [题目类型]线段树 ...
随机推荐
- 初次使用Docker的体验笔记
一.前言 Docker容器已经发布许久,但作为一名程序员如今才开始接触,实在是罪过-- 在此之前,我还没有对Docker进行过深入的了解,对它的认识仍停留在:这是一种新型的虚拟机.这样的 ...
- Android+Sqlite 实现古诗阅读应用(一)
不说网络app,很多本地的app都有一些随机的内容推送,比如随机推送一些小知识,古诗,名言名画什么的,界面制作的好看一点就能看起来特别的文艺范, 最近就是看了这样的一些应用,就想自己实现一下,这种方法 ...
- IOS添加手势识别
ios里面有手势识别,多点触控等功能,过去要实现手势识别很复杂,现在苹果为我们实现了,手势识别变得很简单 1.向视图添加手势识别器:(一般由controller完成,有时View也可以添加) 2.提供 ...
- ES5和ES6中对于继承的实现方法
在ES5继承的实现非常有趣的,由于没有传统面向对象类的概念,Javascript利用原型链的特性来实现继承,这其中有很多的属性指向和需要注意的地方. 原型链的特点和实现已经在之前的一篇整理说过了,就是 ...
- 紧接上篇,jQuery调用jsonp,并且在页面上展示
在上篇中提到了spring4.1+支持jsonp的调用,做了个例子,用来在页面上展示jsonp: (js写的丑了点,本人后端出生,前端大侠们轻拍~) var Menu = function () { ...
- java12-6 冒泡排序法和选择排序法
1.冒泡排序法 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处 分析: 第一次比较排序的结果:会把其中最大的数据排到最大的索引处 第二次比较排序后的结果:因为第一次已经把最大的一个 ...
- SAP中主数据和单据的删除
在SAP实际操作的过程中,有些主数据或者单据需要删除,但是删除的方法却不尽相同,所以笔者今天总结了下,供大家参考. 1,用T-Code去删除 例如我们要删除某个物料,我们可以用T-Code MM06 ...
- laravel记录
1.使用数据库事务的时候需要传递参数,使用了use关键字,否则的话传递不进去,代码如下: public function postVote(Request $request){ $data = $re ...
- SQL 数据结构操作语句
修改字段 exec sp_rename '表名.[字段名]','新字段名','column' alter table tab_info rename column createname to this ...
- android 合并两个jar包
你所要导出的类里边用到了别的jar包.比如说你写的类连接了数据库,用到数据库驱动包oracl.jar(也就是你导入到Myeclipse或eclipse的jdbc包).. .在dos环境下,进入到D盘的 ...