SP1805 HISTOGRA - Largest Rectangle in a Histogram
题目描述
求一下在图形中最大的矩形面积
算法分析
用单调栈来维护,保证在栈中高度递增,如果此时来了一个较小值则一点一点出栈,顺便算一下答案。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=110000;
int n,q[N],top;
long long ans,a[N],d[N];
int main(){
while(1){
scanf("%d",&n);
if(n==0)return 0;
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
top=0;ans=0;
memset(q,0,sizeof q);
n++;a[n]=0;
for(int i=1;i<=n;i++){
int yy=0;
while(top>0&&a[i]<=d[top]){
yy+=q[top];
ans=max(ans,d[top]*yy);
--top;
}
++top;yy++;
q[top]=yy;
d[top]=a[i];
}
printf("%lld\n",ans);
}
return 0;
}