1. 程式人生 > 其它 >算階第二章Largest Rectangle in a Histogram

算階第二章Largest Rectangle in a Histogram

技術標籤:算階c++

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。