City Skyline
题目大意:(poj 3044)
给出城市的正视图,所有的大楼都是矩形,给出正视图每个高度改变时的坐标,问最少有多少大楼。一共N个矩形,N<=50000
解题过程:
首先可以把问题转化一下:有N块木板要粉刷,每次只能刷矩形,并且矩形要挨着地面,也不能刷到外面,最少刷多少次。
题目给出的每块木板的宽度其实是木有用的,因为相同高度且挨在一起的木板肯定同时刷.所以可以把所有的宽度缩成1.
那么根据贪心的思想,如果横着刷一次可以刷掉多个矩形,那么肯定横着刷。但是数据范围有点大,想不出什么好的办法,我就用了分治的方法。每次找到区间内高度最矮的,然后横着刷一次,再以这个点为边界左右分治。很明显如果高度是单调增的,复杂度会退化到O(N2) 但还是被我32ms水过去了。。。
下面介绍另外3种方法:
A: 暴力处理出从每个点出发向右最多能刷多远(扫描到第一个比它矮的就停止),如果刷的路上碰到和它一样高的,就打个标记,下次就不用处理打过标记的点。 该方法比分治还要暴力,16ms水过去,但是很明显也会被单调性比较明显的数据卡死。
具体代码参考http://blog.csdn.net/z309241990/article/details/8596517
B:对方法A进行优化,从右往左扫,用类似并查集的方法处理出每个点向右最多能刷多远.复杂度不好估计,但是也可以出数据卡它,比如 5 9 8 7 4 处理最左边的那个5的时候需要扫4次找到4.如果这样的数据循环出现,那么时间显然会变慢。但是对付本题N<=50000的数据, 就算上面的数据循环出现k次,那么平均长度是N/k,最左边的点需要k次查找,其它点可以看做只要1次查找,所以还是O(N)级别的。 所以还是非常不错的一个办法。
具体代码参考http://www.cnblogs.com/tmeteorj/archive/2012/09/04/2670957.html
代码中y[i]表示高度为i的最远刷到哪里.
C:用单调栈优化方法A.对于一个高为h的点x,如果它前面有一些比它高的点,那么从那些点往右边刷肯定到达当前x.所以从栈中弹出,并ans++... 实在很难描述,看代码理解吧.时间复杂度O(N),应该算是最完美的算法了。
具体代码参考http://blog.csdn.net/u010770930/article/details/20155189
City Skyline的更多相关文章
- BZOJ1628: [Usaco2007 Demo]City skyline
1628: [Usaco2007 Demo]City skyline Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 256 Solved: 210[Su ...
- Leetcode 807 Max Increase to Keep City Skyline 不变天际线
Max Increase to Keep City Skyline In a 2 dimensional array grid, each value grid[i][j] represents th ...
- LC 807. Max Increase to Keep City Skyline
In a 2 dimensional array grid, each value grid[i][j] represents the height of a building located the ...
- LeetCode #807. Max Increase to Keep City Skyline 保持城市天际线
https://leetcode-cn.com/problems/max-increase-to-keep-city-skyline/ 执行用时 : 3 ms, 在Max Increase to Ke ...
- [Swift]LeetCode807. 保持城市天际线 | Max Increase to Keep City Skyline
In a 2 dimensional array grid, each value grid[i][j]represents the height of a building located ther ...
- [LeetCode] Max Increase to Keep City Skyline 保持城市天际线的最大增高
In a 2 dimensional array grid, each value grid[i][j] represents the height of a building located the ...
- [LeetCode&Python] Problem 807. Max Increase to Keep City Skyline
In a 2 dimensional array grid, each value grid[i][j] represents the height of a building located the ...
- 【BZOJ】1628 && 1683: [Usaco2007 Demo]City skyline 城市地平线(单调栈)
http://www.lydsy.com/JudgeOnline/problem.php?id=1628 http://www.lydsy.com/JudgeOnline/problem.php?id ...
- 【Leetcode】807. Max Increase to Keep City Skyline
Description In a 2 dimensional array grid, each value grid[i][j] represents the height of a building ...
- 【LeetCode】807. Max Increase to Keep City Skyline 解题报告(Python &C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
随机推荐
- jquery.pagination.js分页
参数说明 参数名 描述 参数值 maxentries 总条目数 必选参数,整数 items_per_page 每页显示的条目数 ...
- maven常见问题问答
1.前言 Maven,发音是[`meivin],"专家"的意思.它是一个很好的项目管理工具,很早就进入了我的必备工具行列,但是这次为了把project1项目完全迁移并应用maven ...
- JavaWeb学习总结(九)--JDBC入门
一.什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使用SQL语句来操作数据库 ...
- 静态库冲突的解决办法:duplicate symbol
昨天在做微信sdk和xmpp的集成,发现各自单独集成没问题,一起集成却总报错,百度了好一会儿才知道,这应该是库冲突造成的问题 然后参考了很多文章,跟着敲敲一遍,却发现问题多多,最后主要综合结合了这两个 ...
- 图片(img标签)的onerror事件
打开网页时提示 Stack overflow at line: 0.我做了截图如下: 经过分析,发现网页中存在类似如下的代码: <img src="pic.gif" oner ...
- 联想VIBE UI 固件ROM刷机包集合
固件下载_联想乐问吧http://ask.lenovomobile.com/?c-157.html 联想VIBE UI 固件ROM刷机包集合 悬赏分:0 解决时间:2014/09/12 15: ...
- 如何在腾讯云上开发一款O2O书签?
版权声明:本文由潘佳宇原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/187 来源:腾云阁 https://www.qclo ...
- Eclipse 添加SVN
第一种方法没试 第二种方法 可以使用 现在版本 最新为 1.10.x 1.下载最新的Eclipse,我的版本是3.7.2 indigo(Eclipse IDE for Java EE Develop ...
- solr5.2.1环境搭建教程
环境:w8.1 + solr5.2.1 + apache7.0+jdk1.7 解压:solr5.2.1 复制E:\solr-5.2.1\server\webapps 下的solr.war包到D:\ap ...
- Windows环境配置Apache+Mysql+PHP
一.安装配置Apache2.4.7(httpd-2.4.7-win64-VC11.zip ) 1.解压下载的安装包:httpd-2.4.7-win64-VC11.zip将其放到自己的安装目录(我的目录 ...