泽泽在英国【泽泽四部曲之二】

泽泽在英国

时间限制: 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;
}

猜你喜欢

转载自blog.csdn.net/qq_41734244/article/details/79851997