1. 程式人生 > >51 nod 1102 面積最大的矩形

51 nod 1102 面積最大的矩形

 收藏 關注有一個正整數的陣列,化為直方圖,求此直方圖包含的最大矩形面積。例如 2,1,5,6,2,3,對應的直方圖如下:面積最大的矩形為5,6組成的寬度為2的矩形,面積為10。Input
第1行:1個數N,表示陣列的長度(0 <= N <= 50000)
第2 - N + 1行:陣列元素A[i]。(1 <= A[i] <= 10^9)
Output
輸出最大的矩形面積
Input示例
6
2
1
5
6
2
3
Output示例
10

對於每個小的矩形來說,它所能參與拼接的大矩形的面積可視為向左找高度不比它低的和向右找高度不比它低的矩形拼成的大矩形的面積。

#include <bits/stdc++.h>
#define maxn 50005
using namespace std;
long long a[maxn],Left[maxn],Right[maxn];
// left[i]表示第i個矩形左右最大可以延伸到矩形的位置 
int main()
{
	int n,i;
	cin>>n;
	for(i=1; i<=n; ++i)
	{
		cin>>a[i];
		Left[i]=i;
		Right[i]=i;
	}
	Left[0]=Left[n+1]=-1;
	for(i=2; i<=n; ++i)             //找到每個矩形的最大左延伸 
	{
		while(a[Left[i]-1] >= a[i])
		{
			Left[i]=Left[Left[i]-1];
		}
	}
	Right[0]=Right[n+1]=-1;
	for(i=1; i<=n-1; ++i)          //找到每個矩形的最大右延伸 
	{
		while(a[Right[i]+1] >= a[i])
		{
			Right[i]=Right[Right[i]+1];
		}
	}
	long long sum=0;
	for(i=1; i<=n; ++i)
	{
		if((Right[i]-Left[i]+1)*a[i]>sum)
		sum= (Right[i]-Left[i]+1)*a[i];
	}
	cout<<sum<<endl;
	return 0;
} 

相關推薦

51 nod 1102 面積矩形

 收藏 關注有一個正整數的陣列,化為直方圖,求此直方圖包含的最大矩形面積。例如 2,1,5,6,2,3,對應的直方圖如下:面積最大的矩形為5,6組成的寬度為2的矩形,面積為10。Input第1行:1個數

51Nod - 1102 面積矩形

array ear true 矩形 tps clu n-1 ios tex 51Nod - 1102 面積最大的矩形 有一個正整數的數組,化為直方圖,求此直方圖包含的最大矩形面積。例如 2,1,5,6,2,3,對應的直方圖如下: 面積最大的矩形為5,6組成的

51nod 1102 面積矩形 (笛卡爾樹)

之前用的單調棧解決的,這次發現了一個新方法 笛卡爾樹,記錄一下 #include<cstdio> #include<cstring> #include<iostream> using namespace std; const int maxn=100

[51Nod] (1102) 面積矩形 ---- 單調棧(思維)

題目傳送門 思路: 自己的想法跟題解一樣,也是從左右兩邊找到最遠能擴充套件的位置。但這樣複雜度一定是O(n^2) 顯然會超時,於是自己發現除了這個思路沒有好辦法了,於是去學習一波新技能√ ---- 單

51NOD 1102 面積矩形

有一個正整數的陣列,化為直方圖,求此直方圖包含的最大矩形面積。例如 2,1,5,6,2,3,對應的直方圖如下: 面積最大的矩形為5,6組成的寬度為2的矩形,面積為10。 Input 第1行

POJ 2559 &&HDU 1506 Largest Rectangle in a Histogram && 51nod 1102 面積矩形 單調棧的應用

題目大意:POJ 2559 &&HDU 1506 && 51NOD 1102這三個題其實都是一個題,有N個矩形,寬度都為1,給出N個矩形的高度,求由這N個矩形組成

51nod-【1102 面積矩形

 收藏  關注 有一個正整數的陣列,化為直方圖,求此直方圖包含的最大矩形面積。例如 2,1,5,6,2,3,對應的直方圖如下: 面積最大的矩形為5,6組成的寬度為2的矩形

maximal-rectangle——找出矩形面積

color filled largest 復雜度 組成 繼續 思路 find || Given a 2D binary matrix filled with 0‘s and 1‘s, find the largest rectangle containing all one

[51nod1102]面積矩形(單調棧||預處理)

return 棧模板 模板題 type its 長度 bit -- blog 題意:求序列上某區間最小值乘區間長度的最大值。 解題關鍵:很早就在《挑戰程序設計競賽》中見過了,單調棧模板題,註意彈棧時如何處理後面的元素。 法一:單調棧 #include<bit

暴力-矩形面積

題意描述: 給定n個非負的整數,代表n個依次相鄰的寬度為1的柱形的高,求這些柱形所能形成的最大的矩形面積。 解決思路: 此題最直接最原始的做法就是掃描起點和終點,並隨時更新最大面積, 暴力解法 import java.util.*; public class UniquePaths { &n

矩形面積 (單調佇列)

目錄 目錄 目錄 最大矩形面積  題目 程式碼 正解 程式碼(2) 附(矩形牛棚) 程式碼(3) 最大矩形面積  題目 此題很容易想到的一個方法莫過於暴搜了, 程式碼 #include<cstdio>

矩形面積

Problem Description 在一個矩形區域內有很多點,每個點的座標都是整數。求一個矩形,使之內部沒有點,且面積最大。所求矩形的邊與座標軸平行。 Input 一個整數t,表示測試組數。 整數l,w表示矩形橫向邊長和豎向邊長。  一個整數n,表示該矩形內點的個數

Leetcode 84. Largest Rectangle in Histogram 柱狀圖的矩形面積

解決思路:        問題主要考察每一根柱子最大能擴多大,這個行為的實質就是找到柱子左邊剛比它小的柱子的位置在哪裡,以及右邊剛比它小的柱子位置在哪裡,為了模擬這個過程,我們可以用棧模擬這個過程。        棧裡邊儲存的是一個遞增柱子的位置,每次遇到一個比棧頂位

51Nod1102 面積矩形

正常思路想就好了。 求出每一塊的最大面積,在比較出最大值。 時間複雜度大概會比o(n^2)小點,但是最壞情況還是o(n^2),最好情況是o(1),平均下來應該是o(nlog2n) #include<iostream> #include<algorithm> #

矩形面積(單調棧解法,我在此題探索到了許多)

目錄 》題目《 》思路《 》程式碼《 》題目《 在X軸上水平放置著 N 個條形圖,這 N 個條形圖就組成了一個柱狀圖,每個條形圖都是一個矩形,每個矩形都有相同的寬度,均為1單位長度,但是它們的高度並不相同。例如下圖,圖1包含的矩形的高分別為2,1,4,5,1,3,3 單位長度

Leetcode刷題記—— 84. Largest Rectangle in Histogram(柱形圖中矩形面積)

一、題目敘述: Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of large

Arithmetic problem | 找二維矩陣權值為1的矩形面積

題目如下: 給你一個二維矩陣,權值為False和True,找到一個最大的矩形,使得裡面的值全部為True,輸出它的面積。 樣例 給你一個矩陣如下 [ [1, 1, 0, 0, 1], [0,

尋找直方圖中面積矩形

給定直方圖,每一小塊的height由N個非負整數所確定,每一小塊的width都為1,請找出直方圖中面積最大的矩形。    如下圖所示,直方圖中每一塊的寬度都是1,每一塊給定的高度分別是[2,1,5,6,2,3]:    那麼上述直方圖中,面積最大的矩形便是下圖所示的陰影部分的面積

poj2559(單調棧)矩形面積

//單調棧 //思路很好的 #include<cstdio> #include<iostream> using namespace std; const int mn=10

Poj 2559 Largest Rectangle in a Histogram(柱形統計圖中的矩形面積

 給出一個柱形統計圖中,求其中的最大矩形面積 做完這道題,搜了一下題解大部分基本都是單調棧......然而做之前並不知道這是什麼,其實用遞推也可以做這道題,理解起來比較容易。 用兩個陣列l,r記