题目链接

  写代码能力需要极大提升。我在五分钟之内想到了单调栈,然后花了一个小时的时间去看我单调队列为啥写错了……

  首先这题需要转换自己的思维。枚举所有“最小点”,然后看它往左往右最大能扩展多少。

  维护一个单调递增的序列,弹栈时就会是这种情况:

  设被弹出去的元素是s,那它为什么会被弹出去呢?因为它比当前元素大。

  比当前元素大说明了什么呢?说明如果有一个区间以它为最小值,那这个区间向右扩展的极限就在当前元素前面。因为区间不能继续向右扩展,一扩展,区间就包含当前元素了,那元素s就不是最小值了,而我们这个区间又是以s为最小值的区间……

  所以我们分析出了区间的右端点。区间的左端点在栈顶的下面一个元素停住。推理同上。

  于是一个区间枚举成功。可以把这个区间的价值和当前答案比对并更新答案。

  代码如下。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std; long long ans;
long long sum[];
long long que[];
int d[],t;
int main(){
int n;
scanf("%d",&n);
for(int i=;i<=n;++i){
scanf("%lld",&que[i]);
sum[i]=sum[i-]+que[i];
while(t&&que[d[t]]>=que[i]){
ans=max(ans,que[d[t]]*(sum[i-]-sum[d[t-]]));
t--;
}
d[++t]=i;
}
while(t){
ans=max(ans,que[d[t]]*(sum[n]-sum[d[t-]]));
t--;
}
printf("%lld",ans);
return ;
}

最新文章

  1. PL/SQL入门理解(一)
  2. JS函数节流
  3. [WPF实用技巧]如何使WPF的TreeView节点之间有连线
  4. HDU 5867 Sparse Graph (2016年大连网络赛 I bfs+补图)
  5. Objective-C(NSString、BOOL、多文件开发)
  6. 初学cocos2dx-3.x之使用Scale9Sprite时的配置问题
  7. 命令行工具cmder
  8. yii 操作session和cookie
  9. having count(*) &gt; 1
  10. 【开源java游戏框架libgdx专题】-01-libgdx介绍
  11. js:防抖动与节流
  12. Java使用DOM4J对XML文件进行增删改查操作
  13. 解决win10 蓝牙设备只能配对无法连接 ,并且删除设备无效的问题
  14. 5月份值得一看的 Java 技术干货!
  15. C# JArray与JObject 的使用
  16. vue之v-model
  17. LightOj 1104 - Birthday Paradox(生日悖论概率)
  18. IDEA配置GIT
  19. 【文文殿下】【BZOJ4804】欧拉心算
  20. java原生序列化和Kryo序列化性能比较

热门文章

  1. css命名规范&mdash;CSS样式命名整理
  2. 关于软件测试(5):初识Peer Review
  3. tomcat配置 —— 各个目录的作用
  4. 粗谈Android未来前景
  5. JAVASCRIPT闭包以及原型链
  6. shell 复合条件测试 if [ $1 == &quot;1&quot; -o $1 == &quot;0&quot; ] ------==和-eq怎么用
  7. ndarray数组变换
  8. UEditor练习(JSP版)
  9. 智能指针之 weak_ptr
  10. Java 局部变量未初始化会报错,局部变量没有初始值,成员变量有初始值