澤澤在英國【澤澤四部曲之二】
澤澤在英國
時間限制: 1000 ms 空間限制: 262144 KB 具體限制
題目描述
澤澤用了100000000000000000000 mod 10天的時間爬出了長城。長城的另一端是一條隧道,澤澤走了進去……
澤澤不小心又到了英國。英國多雨,基本上隔2天就要下一場雨。澤澤人品不好,到這裡的時候天正在下酸雨。
酸雨會腐蝕建築物,讓那些建築物顯得很難看。英國有家工廠免費為一條街道的建築物的牆面塗油漆。心腸雖好,但是由於技術問題,他們只能塗出一個矩形。現在由於酸雨事 態嚴重,街道辦主任下命令塗出面積最大的矩形。
街道上的建築物高度參差不齊,那該怎麼辦呢?
他們想到了澤澤。
澤澤接到了這個任務,就去測量了這個街道上的所有建築物的高度。
請根據澤澤的資料,計算出最大面積。
輸入
第1行1個整數n。表示有幾幢樓。
之後的一行有n個整數,表示第幾幢樓的高度,最高的樓的高度為m。
輸出
一個整數,製作防護板的最大面積。
樣例輸入
20
5 3 7 4 8 9 2 4 5 5 5 4 4 4 8 7 4 4 5 10
樣例輸出
52
資料範圍限制
提示
【樣例說明】
最大面積為如圖灰色部分所示 :
【限制】
對於30%的資料,n<=100,m<=20
對於100%的資料,n<=100000,m<=50
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一開始讀錯了題,導致自己一直卡住,以為一定要按最開始的那一棟的高度來,然後就一直WA。
正解是從最底層開始,找到了斷檔處就停下,計算,然後繼續。
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int a[1000001]; int main(){ int n; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; int maxx=-1; for(int i=1;i<=n;i++)//找最大高度 maxx=max(a[i],maxx); int s=0; int maxs=-1; for(int i=1;i<=maxx;i++){//開始找 for(int j=1;j<=n;j++){ if(a[j]>=i){//如果大於或等於當前的高度就繼續 s+=i;//加上當前的一牆面 continue; } if(a[j]<i){//如果斷檔了,就判斷 maxs=max(maxs,s); s=0; continue; } } maxs=max(maxs,s);//每次再判斷 s=0; } cout<<maxs; return 0; }