题解 | #编程题2#

编程题2

http://www.nowcoder.com/practice/1aeba6ba677949249aba82d81edc3fea

单调栈的模板题
如果你做过leetcode的柱状图中最大的矩形。
枚举元素ai为区间最小值,显然区间越大越好,因此对ai向左右分别找到第一个小于ai的值,此区间即为选择ai为最小值时最大值。
枚举a1...an,题目可解。
#include <bits/stdc++.h>
#define maxn 500005
typedef long long ll;
using namespace std;
int n,a[maxn],l[maxn],r[maxn];
ll ans,sum[maxn];
int main()
{
ios::sync_with_stdio(0),cin.tie(0);
int i,j;
cin>>n;
for(i=1; i<=n; i++)
cin>>a[i],sum[i]=sum[i-1]+a[i];
stack<int>st;
for(i=1; i<=n; i++)
{
while(st.size()&&a[st.top()]>=a[i])
st.pop();
if(st.empty())
l[i]=0;
else
l[i]=st.top();
st.push(i);
}
while(st.size())st.pop();
for(i=n;i>=1;i--)
{
while(st.size()&&a[st.top()]>=a[i])
st.pop();
if(st.empty())
r[i]=n+1;
else
r[i]=st.top();
st.push(i);
}
for(i=1;i<=n;i++)
ans=max(ans,1LLa[i](sum[r[i]-1]-sum[l[i]]));
cout<<ans;</int>

return 0;

}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-01 17:00
点赞 评论 收藏
分享
废物一个0offer:认真的吗二本本科找人工智能岗位
点赞 评论 收藏
分享
屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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