编程练习

编程练习-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;
}
上一篇下一篇

猜你喜欢

热点阅读