编程练习-2022-06-05-Andy
2022-06-05 本文已影响0人
nase_luobeng
题目描述
共n条木板紧密排列在一条直线上,从左到右的第i条高度为h[i],宽度为1。你希望在这些木条上找到一左一右两个木条,从左到右拉一个横幅。当然横幅的高度会是以这两个木条中较矮的那个为准。请问横幅的最大面积是多少?
输入输出格式
输入格式
输入文件banner.in 输入第一行为正整数n,n<=100000,第二行为整数h[1],h[2],..,h[n], 均在0到10000之间。
输出格式
输出文件banner.out 输出一个整数
样例数据
输入数据
3
2 1 3
输出数据
6
标签
普及/提高-
AC代码
#include <bits/stdc++.h>
using namespace std;
int main(){
freopen("banner.in","r",stdin);
freopen("banner.out","w",stdout);
long long n,h[200000];
cin>>n;
for(long long i=1;i<=n;i++)cin>>h[i];
long long l=1,r=n,ans=0;
while(l<r){
long long hei=min(h[l],h[r]);
long long wdh=r-l+1;
long long area=hei*wdh;
ans=max(ans,area);
if(h[l]<h[r])l++;
else r--;
}
cout<<ans;
return 0;
}