站外题求调(玄关
  • 板块题目总版
  • 楼主Zh_terminal
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/14 09:59
  • 上次更新2024/8/14 11:42:41
查看原帖
站外题求调(玄关
1388579
Zh_terminal楼主2024/8/14 09:59

题目

本地通过,提交WA

#include <bits/stdc++.h>
using namespace std;
int h[100010];
int solve(int l,int r){
    int ans;
    if(l==r) return h[l];
    int m=(l+r)/2;
    ans=max(solve(l,m),solve(m+1,r));
    int lo=m,hi=m+1;int height=min(h[lo],h[hi]);
    ans=max(ans,height*2);
    while(l<lo||hi<r){
        if(hi<r&&(lo==l||h[lo-1]<h[hi+1])) hi++,height=min(height,h[hi]);
        else lo--,height=min(height,h[lo]);
    }
    ans=max(ans,height*(hi-lo+1));
    return ans;
}
int main(){
    while(1){
        int n;cin>>n;
        if(n==0) break;
        for(int i=1;i<=n;i++) cin>>h[i];
        cout<<solve(1,n)<<endl;
        memset(h,0,sizeof(h));
    }
    return 0;
}
2024/8/14 09:59
加载中...