Largest Rectangle in a Histogram /// 单调栈 oj23906
2024-10-07 22:46:24
题目大意:
输入n,,1 ≤ n ≤ 100000,接下来n个数为每列的高度h ,0 ≤ hi ≤ 1000000000
求得最大矩阵的面积
Sample Input
7 2 1 4 5 1 3 3
4 1000 1000 1000 1000
0
Sample Output
8
4000
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll n,a[],L[],R[],sta[]; // sta[]模拟栈
int main()
{
while(~scanf("%lld",&n)) {
if(n==) break;
for(int i=;i<n;i++) scanf("%lld",&a[i]);
int tail=;
for(int i=;i<n;i++) {
while(tail> && a[sta[tail-]]>=a[i]) tail--;
L[i]= tail== ? :sta[tail-]+;
sta[tail++]=i;
}
/// L[]存放向左能达到的最远下标
// for(int i=0;i<n;i++) printf("%lld ",L[i]);printf("\n");
tail=;
for(int i=n-;i>=;i--) {
while(tail> && a[sta[tail-]]>=a[i]) tail--;
R[i]= tail== ? n:sta[tail-];
sta[tail++]=i;
}
/// R[]存放向右能达到的最远下标+1
// for(int i=0;i<n;i++) printf("%lld ",R[i]);printf("\n");
ll ans=;
for(int i=;i<n;i++)
ans=max(ans,a[i]*(R[i]-L[i]));
/// R[i]-L[i]就能得到该矩阵的长度
printf("%lld\n",ans);
} return ;
}
最新文章
- SharePoint 2013 工作流平台的选项不可用
- Redis安装配置与Jedis访问数据库
- Window环境下搭建MyEclipse+Tomcat+MAVEN+SVN
- phpMyAdmin中sql-parser组件的使用
- Windows server上rsync的安装和使用
- JAVA基础----java中E,T,?的区别
- MySQL【第三篇】数据类型
- SMACSS:一个关于CSS的最佳实践-1.Overview
- 使用 Passenger +Apache扩展 Puppet,代替其Webrick的web框架
- APM和PIX飞控日志分析入门贴
- QTP - 描述性编程
- 【bzoj2875】 Noi2012—随机数生成器
- webdriver实用指南python版本(1)-安装开发环境
- QT 交叉编译工具选择
- BZOJ 2039 人员雇佣(最小割)
- View坐标系详解(getTop(),getLeft(),getX(),getY(),getLocationOnScreen(), getLocationInWindow())
- flask扩展 -- flask-script
- Python与快速排序
- 对drf序列化器的理解
- 原!操作 excel 03/07