博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
栈的应用
阅读量:6941 次
发布时间:2019-06-27

本文共 1507 字,大约阅读时间需要 5 分钟。

POJ2559

求一系列不等高的柱状体中最大的长方形面积

思路:答案中的长方形必定有至少有一条边与其中一个柱状体的顶边重合。那么我们只需求解对于每个柱状体,它最多能向左右延伸多长。

设当前柱状体下标为j (0 <= j < n)

L[i] = (j <= i 且 h[j - 1] < h[i]的最大的j)(左闭)

R[i] = (j > i 并且h[j] > h[i]的最小的j)(右开)

ans = max{h[i] * (R[i] - L[i])}

 

在计算L[i]时,若柱状体左端高度高于其,则其左端的所有柱状体高度没有意义。

运用栈,栈中的元素从上到下的值为x[i], 则x[i] > x[i + 1] 且h[x[i]] > h[x[i + 1]]

 在计算L[i]时,首先,当栈顶的元素j满足h[j] >= h[i], 则不断取出栈顶元素。

如栈的为空,则L[i] = 0; 若h[j] < h[i], 则L[i] = j + 1。然后把i压入栈中。

 

#include 
#include
#include
#include
#include
#include
#define INF 0x3f3f3f3f#define mod 1000000007typedef long long LL;using namespace std;const int maxn = 100000 + 10;int hei[maxn];int s[maxn], l[maxn], r[maxn];int N;LL ans;int main(int argc, const char * argv[]) { while (~scanf("%d", &N) && N) { memset(hei, 0, sizeof(hei)); memset(l, 0, sizeof(l)); memset(r, 0, sizeof(r)); for (int i = 0; i < N; i++) { scanf("%d", &hei[i]); } int t = 0; for (int i = 0; i < N; i++) { while (t > 0 && hei[s[t - 1]] >= hei[i]) t--; if (t == 0) { l[i] = 0; } else { l[i] = s[t - 1] + 1; } s[t++] = i; } t = 0; for (int i = N - 1; i >= 0; i--) { while (t > 0 && hei[s[t - 1]] >= hei[i]) t--; if (t == 0) { r[i] = N; } else { r[i] = s[t - 1]; } s[t++] = i; } ans = -1; for (int i = 0; i < N; i++) { LL tmp = (LL)hei[i] * (LL)(r[i] - l[i]); ans = max(ans, tmp); } printf("%lld\n", ans); } return 0;}
View Code

 

转载于:https://www.cnblogs.com/xFANx/p/6884494.html

你可能感兴趣的文章
深入理解哈希表
查看>>
【python】编码
查看>>
LaTex Remove Left Margin 去除左边空间
查看>>
树莓派进阶之路 (006) - 树莓派安装wiringPi
查看>>
泛在传感器网络(Ubiquitous Sensor Network; USN)
查看>>
如何解决exe4j生成exe文件后弹出提示信息
查看>>
第六十节,文本元素标签
查看>>
Dapper ORM VS SqlSugar ORM的 8场对决
查看>>
详解MySQL性能优化(二)
查看>>
详解KMP算法【转】
查看>>
计算机网络中通信协议都有哪些
查看>>
CentOS挂Windows的NFS备忘
查看>>
【死磕jeesite源码】mybatis动态调用表名和字段名
查看>>
【C002】Excel VBA - 文件打开关闭
查看>>
对WF工作流异常(Event on interface type for instance id cannot be delivered)的一点总结....
查看>>
目前常用的加密解密算法
查看>>
近期的一点感慨
查看>>
为什么Linux不需要碎片整理?
查看>>
EasyARM i.mx28学习笔记——开箱试用总结
查看>>
ASP怎么解除文件上传200kb限制
查看>>