//第二题代码 #include<bits/stdc++.h> using namespace std; const int maxn = 5*1e5 + 10; int num[maxn],s[maxn]; int r[maxn],l[maxn]; int main(){     int n;     scanf("%d",&n);     s[0] = 0;     for(int i = 1; i <= n; i++){         scanf("%d",&num[i]);         s[i] = s[i-1] + num[i];     }     num[0] = -1;     num[n+1] = -1;     for(int i = 1; i <= n; i++){//求出左边比当前值小的第一个数         int k = i -1;         while(num[i] <= num[k])             k = l[k]-1;         l[i] = k+1;     }     for(int i = n; i >= 1; i--){         int k=i+1;         while(num[i] <= num[k])             k=r[k]+1;         r[i]=k-1;     }     int ans = -1;     for(int i = 1; i <= n; i++){         ans = max(ans,num[i]*(s[r[i]] - s[l[i]-1]));     }     printf("%d\n",ans); }
点赞 评论

相关推荐

07-14 13:37
重庆大学 C++
点赞 评论 收藏
分享
07-10 14:08
已编辑
江西农业大学 Java
念旧select:做完把项目放到自己硬盘里给他看,看完拷走
点赞 评论 收藏
分享
07-18 18:05
门头沟学院 Java
挂了&nbsp;正式批求捞
投递滴滴等公司9个岗位
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务