NC23619(小A的柱状图 )

感受

思路

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int maxn = 1e6 + 10;
int sum[maxn], h[maxn];
int l[maxn], r[maxn];
int n;
void solve1(){
    stack<int> stk;
    int i = 1;
    for(; i <= n; i++){
        while(!stk.empty() && h[stk.top()] > h[i]) r[stk.top()] = i - 1, stk.pop();
        stk.push(i);
    }
    while(!stk.empty()) r[stk.top()] = i - 1, stk.pop();
}
void solve2(){
    stack<int> stk;
    int i = n;
    for(; i >= 1; i--){
        while(!stk.empty() && h[stk.top()] > h[i]) l[stk.top()] = i + 1, stk.pop();
        stk.push(i);
    }
    while(!stk.empty()) l[stk.top()] = i + 1, stk.pop();
}
void print(){
    for(int i = 1; i <= n; i++){
        printf("l[%d] = %d r[%d] = %d\n", i, l[i], i, r[i]);
    }
}
int main(){
    scanf("%d", &n);
    int x;
    for(int i = 1; i <= n; i++){
        scanf("%d", &x);
        sum[i] = sum[i - 1] + x;
    }
    for(int i = 1; i <= n; i++){
        scanf("%d", &h[i]);
    }
    solve1(); solve2();
    ll ans = 0;
    //print();
    for(int i = 1; i <= n; i++){
        ans = max(ans, (ll)1 * (sum[r[i]] - sum[l[i] - 1]) * h[i]);
    }
    printf("%lld\n", ans);
    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 18:22
投了几百份简历,专业和方向完全对口,都已读不回。尝试改了一下学校,果然有奇效。
steelhead:这不是很正常嘛,BOSS好的是即便是你学院本可能都会和聊几句,牛客上学院本机会很少了
点赞 评论 收藏
分享
小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务