DP激情奉献(三)hdu1506状图选最大矩形
来源:互联网 发布:fc2最新域名设置 编辑:程序博客网 时间:2024/05/20 23:31
//题目大意:给一个N,接下来N个数字..形成一个N格大的柱状图..answer问最大的矩形是什么
//最开始想的是优化了直接的N^2的处理方法,对于每个a[i],分别找他的左右两边分别有多少个
//比他要大的..只要遇见小的就break,优化在这儿..但是过不了.
//2次优化.思路还是去求每个a[i]能够带来的矩形宽是多少..
//那么,在这里..比如考虑a[i]的宽的时候..不必从i-1挨个看着走..
//a[i]与a[i-1]比较了以后,就可以直接去找a[i-1]比较失败的那个元素了..
//这样一优化之后,去掉了中间的蛮多不需要的步骤..就不会TLE了.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
#include<math.h>
#include<vector>
#include<algorithm>
using namespace std;
__int64 a[111111];
int r[111111],l[111111];
int main()
{
int n;
while(scanf("%d",&n) && n != 0)
{
for(int i = 1 ; i <= n ; i++)
{
scanf("%I64d",&a[i]);
r[i] = i;
l[i] = i;
}
__int64 ans = 0;
a[0] = -1;a[n+1] = -1;
for(int i = 1 ; i <= n ; i++)
{
while(a[l[i]-1] >= a[i])
{
l[i] = l[l[i]-1];
}
}
for(int i = n ; i >= 1 ; i--)
{
while(a[r[i]+1] >= a[i])
{
r[i] = r[r[i]+1];
}
}
__int64 sum;
for(int i = 1 ; i <= n ; i++)
{
//printf("%d %d %d\n",i,l[i],r[i]);
sum = a[i] * (r[i] - l[i] + 1);
ans = max(sum,ans);
}
printf("%I64d\n",ans);
}
}
//最开始想的是优化了直接的N^2的处理方法,对于每个a[i],分别找他的左右两边分别有多少个
//比他要大的..只要遇见小的就break,优化在这儿..但是过不了.
//2次优化.思路还是去求每个a[i]能够带来的矩形宽是多少..
//那么,在这里..比如考虑a[i]的宽的时候..不必从i-1挨个看着走..
//a[i]与a[i-1]比较了以后,就可以直接去找a[i-1]比较失败的那个元素了..
//这样一优化之后,去掉了中间的蛮多不需要的步骤..就不会TLE了.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
#include<math.h>
#include<vector>
#include<algorithm>
using namespace std;
__int64 a[111111];
int r[111111],l[111111];
int main()
{
int n;
while(scanf("%d",&n) && n != 0)
{
for(int i = 1 ; i <= n ; i++)
{
scanf("%I64d",&a[i]);
r[i] = i;
l[i] = i;
}
__int64 ans = 0;
a[0] = -1;a[n+1] = -1;
for(int i = 1 ; i <= n ; i++)
{
while(a[l[i]-1] >= a[i])
{
l[i] = l[l[i]-1];
}
}
for(int i = n ; i >= 1 ; i--)
{
while(a[r[i]+1] >= a[i])
{
r[i] = r[r[i]+1];
}
}
__int64 sum;
for(int i = 1 ; i <= n ; i++)
{
//printf("%d %d %d\n",i,l[i],r[i]);
sum = a[i] * (r[i] - l[i] + 1);
ans = max(sum,ans);
}
printf("%I64d\n",ans);
}
}
- DP激情奉献(三)hdu1506状图选最大矩形
- hdu1506 1505 2870最大子矩形 DP
- hdu 1505 && hdu1506 &&hdu 2830 && 2870 总结---------DP之状图选最大矩形
- DP激情奉献(一)hdu2955
- DP激情奉献(二)hdu1864
- DP激情奉献(五)hdu2571命运
- hdu1506直方图中的最大长方形(dp)
- DP激情奉献(四)hdu1505加强版1506
- hdu1506 dp
- HDU1505(最大矩形面积+DP)
- hdu1506 经典dp
- phonegap+html5 激情奉献 bookstroe 源代码
- hdu1506求最大子矩阵
- HDU1506(最大子矩阵)
- 九度1497(最大矩形面积+DP)
- City Game(DP,最大矩形问题)
- Largest Submatrix(DP,最大矩形问题)
- rqnoj-106-最大加权矩形-dp
- 动态输出Html表格
- Android 任务和回退堆栈---保存Activity状态
- 边学边写,琐碎记载oracle
- android反编译和防止反编译的方法
- pageContext内置对象
- DP激情奉献(三)hdu1506状图选最大矩形
- TOMCAT-报错The BASEDIR environment variable is not defined correctly
- 倒计时
- 考虑Android向后兼容的几条黄金法则
- CountDownLatch与CyclicBarrier二者很重要的区别
- 文件夹的最小化时,上面的名字。
- Excel基本操作
- 写代码如坐禅:你是哪一类程序员
- Cargo