地面上從左到右併排緊挨著擺放多個矩形,已知這此矩形的底邊寬度都為1,高度不完全相等。求在這些矩形包括的範圍內能得到的面積最大的矩形,列印出該面積。所求矩形可以橫跨多個矩形,但不能超出原有矩形所確定的範圍。
如 n = 7, 序列為2 1 4 5 1 3 3
_ _
_ | | _ | |
| || | _ _ |h||h| _ _
_ | || | | || | _ |h||h| | || |
| | _ | || | _ | || | | | _ |h||h| _ | || |
|||||||||||||| |||||h||h|||||||
最大面積:8
輸入有多組資料,每組資料一行:
第乙個數n,表示矩形個數
後面跟n個正整數,第i個正整數hi表示第i個矩形的高度。
最後一行,以乙個單獨的0結束。
每組輸入資料一行,乙個數表示最大矩形面積。
721
4513
341000
1000
1000
1000
0
8
4000
30 %: 1<=n<=100
60 %: 1<=n<=1,000
100%: 1<=n<=500,000,0<=hi<=1,000,000,000
#include
#define m(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define mod 100003
using
namespace std;
inline
void
read
(int
&x)while
(ch>=
'0'&& ch<=
'9')
if(c==
'-')x=
-x;}
stack<
int> st;
int i,j,k,m,n;
int h[
500005
],l[
500005
],r[
500005];
intmain()
l[i]
=st.
top();
st.push
(i);
}long
long ans=0;
for(i=
1;i<=n;i++
)ans=
max(ans,
1ll*
(r[i]
-l[i]-1
)*h[i]);
printf
("%lld\n"
,ans);}
return0;
}
48 最大矩形面積
48.最大矩形面積 統計描述 提交自定義測試 題目描述 地面上從左到右併排緊挨著擺放多個矩形,已知這此矩形的底邊寬度都為1,高度不完全相等。求在這些矩形包括的範圍內能得到的面積最大的矩形,列印出該面積。所求矩形可以橫跨多個矩形,但不能超出原有矩形所確定的範圍。如 n 7,序列為2 1 4 5 1 3...
最大矩形面積
題目描述 地面上從左到右併排緊挨著擺放多個矩形,已知這此矩形的底邊寬度都為1,高度不完全相等。求在這些矩形包括的範圍內能得到的面積最大的矩形,列印出該面積。所求矩形可以橫跨多個矩形,但不能超出原有矩形所確定的範圍。如 n 7,序列為2 1 4 5 1 3 3 h h h h h h h h 最大面積...
最大矩形面積
地面上從左到右併排緊挨著擺放多個矩形,已知這此矩形的底邊寬度都為1,高度不完全相等。求在這些矩形包括的範圍內能得到的面積最大的矩形,列印出該面積。所求矩形可以橫跨多個矩形,但不能超出原有矩形所確定的範圍。如 n 7,序列為2 1 4 5 1 3 3 h h h h h h h h 最大面積 8 輸入...