// poj 2559 Largest Rectangle in a Histogram 栈
//
// n个矩形排在一块,不同的高度,让你求最大的矩形的面积(矩形紧挨在一起)
//
// 这道题用的是数据结构做。也能够递推做。眼下仅仅会数据结构的
//
// 对于每一个高度h,求一个左边界L和右边界R,分别表示的意义是
// L是下标为j的矩形的高度的hj小于当前h的最大的j的值。

则依据定义 // 我们能够知道j到i之间的h都是大于当前的hi的。 // R是下标为k的矩形的高度的hk大于当前h的最小的k的值。则依据定义 // 我们能够知道i到k之间的h都是大于当前的hi的。 // 则最后的结果就是max( ( R[i] - L[i] ) * h[i]). // // 详细实现是用一个栈依次保存每一个矩形的高度。 // 设栈中的元素从上到下的值是x[i](x[i] > x[i+1] && h[x[i]] > h[x[i+1]]) // // 在计算L[i]的时候。当栈顶元素j满足h[j]>=h[i]时。一直出栈。直到j=0或者 // h[j] < h[i] 的时候,我们就求出了最大的h[j]>=h[i]的j的最小值即j+1 // // 在计算R[i]的时候,当栈顶元素j满足h[j]>=h[i]时,一直出栈。知道j=0或者 // h[j] < h[i] 的时候。我们就求除了最小的h[j]>=h[i]的j的最大值即j。 // // 所要注意的是 // // 计算L的时候要从左边開始扫描,此时栈中须要的是1,2,...i的值 // 计算R的时候要从右边開始扫描,此时栈中须要的是i+1...n的值 // // // 感悟: // // 从这道题中就能够发现数据结构栈的魅力的所在,个人感觉数据结构非常奇妙, // 也更加笃定了我要学数据结构的决心。

// // 继续练 #include <algorithm> #include <bitset> #include <cassert> #include <cctype> #include <cfloat> #include <climits> #include <cmath> #include <complex> #include <cstdio> #include <cstdlib> #include <cstring> #include <ctime> #include <deque> #include <functional> #include <iostream> #include <list> #include <map> #include <numeric> #include <queue> #include <set> #include <stack> #include <vector> #define ceil(a,b) (((a)+(b)-1)/(b)) #define endl '\n' #define gcd __gcd #define highBit(x) (1ULL<<(63-__builtin_clzll(x))) #define popCount __builtin_popcountll typedef long long ll; using namespace std; const int MOD = 1000000007; const long double PI = acos(-1.L); const int maxn = 1e5 + 8; int a[maxn]; int st[maxn]; int n; int L[maxn]; int R[maxn]; void init(){ for (int i=0;i<n;i++) scanf("%d",&a[i]); int t = 0; for (int i=0;i<n;i++){ while(t>0 && a[st[t-1]]>=a[i]) t--; L[i] = t==0 ? 0 : st[t-1] + 1; st[t++] = i; } t = 0; for (int i=n-1;i>=0;i--){ while(t>0 && a[st[t-1]] >= a[i]) t--; R[i] = t==0 ? n : st[t-1]; st[t++] = i; } long long res = 0; for (int i=0;i<n;i++){ res = max(res,( R[i] - L[i] ) * (long long)a[i]); } printf("%lld\n",res); } int main() { //freopen("G:\\Code\\1.txt","r",stdin); while(scanf("%d",&n)!=EOF&&n){ init(); } return 0; }

转载于:https://www.cnblogs.com/jzssuanfa/p/6814535.html

poj 2559 Largest Rectangle in a Histogram 栈相关推荐

  1. POJ - 2559 Largest Rectangle in a Histogram(笛卡尔树,单调栈实现)

    题目链接:点击查看 题目大意:给出一排高度不同,宽度都为 1 的矩形,问拼起来后最大的矩形面积是多少 题目分析:普通做法是用单调栈直接维护,我一直觉得单调栈处理这种矩形问题都比较抽象,也可能是我太菜了 ...

  2. POJ - 2559 Largest Rectangle in a Histogram(单调栈)

    题意:有n个高度不同的直方图,求直方图内最大的矩形面积. 分析: 1.若当前研究高度大于栈顶高度,则直接入栈.否则,边处理栈内所有高度大于等于当前高度的元素边出栈,在此过程中,边累加宽度边以当前栈顶元 ...

  3. ACM PKU 2559 Largest Rectangle in a Histogram http://acm.pku.edu.cn/JudgeOnline/problem?id=2559

    关于覆盖,用DP是一种很不错的解决方法,时效也很不错.... 这题目把图一画就很明确了,没有说明的必要了. #include <iostream> using namespace std; ...

  4. 【单调栈】Largest Rectangle in a Histogram(luogu-SP1805/poj 2559)

    Largest Rectangle in a Histogram luogu-SP1805 poj 2559 题目大意: 有n个并排的矩阵,高度为aia_iai​,宽度为1,现在让求包含于这些矩阵的并 ...

  5. *【HDU - 1506】【POJ - 2559】Largest Rectangle in a Histogram(单调栈或动态规划)

    题干: Description A histogram is a polygon composed of a sequence of rectangles aligned at a common ba ...

  6. HDU 1506 Largest Rectangle in a Histogram(dp、单调栈)

    你是不是飘了?骚年! Problem Description A histogram is a polygon composed of a sequence of rectangles aligned ...

  7. Largest Rectangle in a Histogram (动态规划+奇思妙想单调栈)求最大矩状图面积

    感觉动态规划都是玄妙的很,思维题吧(单调栈思维) 题解:让求最大矩形面积,宽为1,暴力超时 可以发现   当第i-1个比第i个高的时候   比第i-1个高的所有也一定比第i个高 于是可以用到动态规划的 ...

  8. Largest Rectangle in a Histogram HDU - 1506 解题思路 单调栈

    原题目 Problem Description A histogram is a polygon composed of a sequence of rectangles aligned at a c ...

  9. 【Python CheckiO 题解】Largest Rectangle in a Histogram

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

最新文章

  1. matlab sol函数,sol=bvp4c(@f,@fsbc,solinit)解决有上下限的ODE函数
  2. Window下mysql的安装
  3. mastercam2019中文版
  4. shell在二级python_在Shell脚本中检查Python版本的方法
  5. SiteMesh参考
  6. android 组件化_Android 组件化路由框架设计(仿Arouter)
  7. 线程之线程池(ExecutorService)
  8. sleep方法和wait方法的区别?
  9. PhantomJS not found on PATH
  10. 计算机id dns知识,智能DNS解析知识集锦
  11. 重试利器之Guava Retrying
  12. 名人名言摘选-李嘉诚
  13. 安卓程序运行显示permission is only granted to system apps的解决方法
  14. java画一张笑脸_java swing应用(1):画一个眨眼珠的笑脸
  15. Matplotlib 绘图 笔记
  16. 学计算机类专业对电脑有要求,大学设计专业电脑配置须知
  17. Matlab 入门 - data函数
  18. mvvm框架_引入淘汰赛JavaScript框架(MVVM)
  19. WebView交互架构项目实战(二),张孝祥java基础视频教程
  20. 常识:分辨率1080p和720p有什么区别?

热门文章

  1. 2022-2028年中国BOPP消光膜行业全景调研及竞争格局预测报告
  2. 2022-2028年中国封装用胶膜行业运营现状及投资发展潜力报告
  3. Python 多线程总结(1)- thread 模块
  4. McCabe度量法计算程序的环路复杂性
  5. 三层交换机原理:02怎么用三层交换机?
  6. Electron、QT和JAVA PC桌面开发技术比较
  7. Jquery实现form表单回填数据
  8. LeetCode简单题之爬楼梯
  9. 部署通用基础设施, 满足顶级 SLA 要求
  10. HarmonyOS 修改App的默认加载的界面