求最大矩形面积,如果按一般的方法肯定超时,这里用到了迭代法,类似于动态规划以空间去换时间,这一题主要是找到当前高度所能扩展的最左边和能扩展的最右边,从而得出当前高度的最大宽度,这一题坑爹的是用long long类型1s,而用—int64却78ms。。这到底是为什么啊。。。
#include<iostream>
#include<string.h>
#include<cstdio>
#include<algorithm>
#include<string>
#define N 100005
using namespace std;
int l[N],r[N];
long long s[N];
int main()
{
int n;
while(scanf("%d",&n),n)
{
for(int i=1;i<=n;++i)
{
scanf("%lld",&s[i]);
l[i]=i;
r[i]=i;
}
s[0]=s[n+1]=-1;
for(int i=1;i<=n;++i)
while(s[l[i]-1]>=s[i]) l[i]=l[l[i]-1];
for(int j=n;j>=1;--j)
while(s[r[j]+1]>=s[j]) r[j]=r[r[j]+1];
long long maxx=(r[1]-l[1]+1)*s[1];
for(int i=2;i<=n;++i)
if(maxx<(r[i]-l[i]+1)*s[i]) maxx=(r[i]-l[i]+1)*s[i];
printf("%lld\n",maxx);
}return 0;
}