http://acm.hdu.edu.cn/showproblem.php?pid=1506

来源:互联网 发布:淘宝充值流量如何退款 编辑:程序博客网 时间:2024/04/27 22:42

求最大矩形面积,如果按一般的方法肯定超时,这里用到了迭代法,类似于动态规划以空间去换时间,这一题主要是找到当前高度所能扩展的最左边和能扩展的最右边,从而得出当前高度的最大宽度,这一题坑爹的是用long long类型1s,而用—int64却78ms。。这到底是为什么啊。。。

#include<iostream>#include<string.h>#include<cstdio>#include<algorithm>#include<string>#define N 100005using 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;}


原创粉丝点击