算階第二章Largest Rectangle in a Histogram
阿新 • • 發佈:2021-02-12
Largest Rectangle in a Histogram
傳送門.
題目描述
這道題讓求直方圖中最大的矩形
輸入和輸出
Input
輸入包含多組資料。每組資料包含一行,第一個正整數N表示有N個矩形,接下來N個正整數描述其高度。 資料以N=0結束。 資料範圍參看英文題面。
Output
對於每組資料輸出一行包含一個正整數,表示該組資料的答案。
樣例
Sample Input
7 2 1 4 5 1 3 3
4 1000 1000 1000 1000
0
Sample Output
8
4000
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
long long ans,h[N],t,q[N],n,l[N],r[N];
void get(long long b[N])
{
t=0,h[0]=-1;
for(int i=1;i<=n;i++)
{
while(h[q[t]]>=h[i]) t--;
b[i]=q[t];
q[++t]=i;
}
}
int main()
{
while(cin>>n)
{
if(n==0) return 0;
for(int i=1;i<=n;i++) cin>>h[i];
get(l);
reverse (h+1,h+1+n);
get(r);
ans=0;
for(int i=1,j=n;i<=n;i++,j--) ans=max(ans,h[i]*(n-l[j]-r[i]));
cout<<ans<<endl;
}
return 0;
}
看了YXC大佬的講解,我大徹大悟.
用單調棧求左邊層右邊層,求每個數左邊第一個比它小的和右邊第一個比它小的
S=(right-left+1)*h。