POJ2559 Largest Rectangle in a Histogram(单调栈)
2016-02-28 19:55
281 查看
题目给一个由几个相连接的矩形组成的多边形,计算多边形包含的最大的矩形的面积。
要求的矩形的高一定是某一个用来组合的矩形的高;如果枚举每个矩形作为高的话,那样长就是这个矩形能向左向右继续延伸矩形的长度了。
所以这题本质也是用单调栈在O(n)计算出每个数作为最小数向左和向右能延伸的最长距离。
要求的矩形的高一定是某一个用来组合的矩形的高;如果枚举每个矩形作为高的话,那样长就是这个矩形能向左向右继续延伸矩形的长度了。
所以这题本质也是用单调栈在O(n)计算出每个数作为最小数向左和向右能延伸的最长距离。
#include<cstdio> #include<algorithm> using namespace std; #define MAXN 111111 int a[MAXN]; int l[MAXN],r[MAXN]; int stack[MAXN],top; int main(){ int n; while(~scanf("%d",&n) && n){ for(int i=1; i<=n; ++i){ scanf("%d",a+i); } a[++n]=-1; top=0; for(int i=1; i<=n; ++i){ l[i]=r[i]=i; while(top && a[stack[top]]>a[i]){ l[i]=l[stack[top]]; r[stack[top]]=i-1; --top; } if(top && a[stack[top]]==a[i]) l[i]=l[stack[top]]; stack[++top]=i; } long long res=0; for(int i=1; i<n; ++i){ res=max(res,(r[i]-l[i]+1LL)*a[i]); } printf("%lld\n",res); } return 0; }
相关文章推荐
- 反射
- Linux网络编程:原始套接字的魔力【下】
- CCPC 2015 I Mahjong hdu 5548
- Android技术积累:开发规范
- PL/SQL之异常处理
- CentOS中设置系统级代理
- Linux网络编程:原始套接字的魔力【上】
- win10开机密码输入错误 无法登陆系统
- linux 根目录扩容
- 迭代器2
- 【LeetCode OJ 203】Remove Linked List Elements
- POJ3368/HDU1806/UVa11235 Frequent Values 游程编码+RMQ
- JSP与JavaBean
- 效率: 条款21 利用重载技术避免隐式类型转换(implicit type conversions)
- 1.NSNotification|远程通知|本地通知|激光推送
- SharePoint服务器端对象模型 之 访问用户、用户组和权限(Part 3)
- ssh整和hibernate时出现错误(一)
- ssh整和hibernate时出现错误(二)
- AndroidStudio-------IdeaVim插件
- app登陆以及与后台通讯安全性