小A的柱状图

小A的柱状图

https://ac.nowcoder.com/acm/contest/549/H

题意:
给你一个柱状图,有n根柱子,给予你每根的宽度和高度,求柱状图的最大矩形面积?

思路:
单调栈,维护一个单调递增的栈,维护高度和左边界。
当h[i]>栈顶元素的高度时入栈,左边界不变。
当h[i]<栈顶元素的高度时,栈顶元素出栈,并计算以该栈顶元素高度为一条边的矩形最大面积(既(右边界-左边界) * 高度)。直到栈为空或h[i]>栈顶元素的高度时停止。将其入栈。如果栈为空,左边界不变,否则更新左边界。
当h[i]=栈顶元素的高度时,开始下一个元素。

代码:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <string>
#include <string.h>
#include <map>

#define inf 1000000007
#define eps 0.00000001
using namespace std;

typedef long long ll;
typedef unsigned long long ull;

const int maxn=100005;

inline int read()
{
    char c=getchar();
    int f=1, x=0;
    while(c>'9'||c<'0')
    {
        if(c=='-')
        {
            f=-1;
        }
        c=getchar();
    }
    while(c<='9'&&c>='0')
    {
        x=(x<<3)+(x<<1)+(c^48);
        c=getchar();
    }
    return f*x;
}

ll d[1000005], a[1000005];

struct w
{
    ll s, x;
}w[1000005];

int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        ll di;
        scanf("%lld",&di);
        d[i]=d[i-1]+di;
    }
    for(int i=0;i<n;i++)
    {
        scanf("%lld",&a[i]);
    }
    int p=0;
    ll ans=0;
    for(int i=0;i<n;i++)
    {
        if(a[i]==w[p-1].x)
        {
            continue;
        }
        if(p==0||w[p-1].x<a[i])
        {
             w[p].s=d[i];
             w[p].x=a[i];
             p++;
             continue;
        }
        while(p!=0&&w[p-1].x>a[i])
        {
            ans=max(ans,(d[i]-w[p-1].s)*w[p-1].x);
            p--;
        }
        w[p].x=a[i];
        p++;
    }
    while(p!=0)
    {
         ans=max(ans,(d[n]-w[p-1].s)*w[p-1].x);
         p--;
    }
    cout << ans << endl;
    return 0;
}
全部评论

相关推荐

点赞 评论 收藏
分享
10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务