poj 2769 感觉♂良好 (单调栈)

比尔正在研发一种关于人类情感的新数学理论。他最近致力于研究一个日子的好坏,如何影响人们对某个时期的回忆。 比尔为人的一天赋予了一个正整数值。 比尔称这个值为当天的情感价值。情感价值越大,日子过的越好。比尔认为,某个时期人的情感,与某一时期的情感价值总和,乘以这一阶段的最小情感价值成正比。这个想法表示,一段时期的好心情可以被糟糕的一天破坏。 现在比尔正在审视自己的生活,并希望找到最有价值的人生阶段。请你帮帮他。由于他过度♂劳累,他的生命天数n<=10000。

这道题的思路和矩阵那道题一样,都是假定某个数为最小值,向左/向右扩展。求向左/向右最近最小值就是用单调栈。思路不详细说了。

然而我发现了单调栈的两个要素:维护与求最值。似乎能用单调栈解的题目,都必须满足,能在维护单调栈的同时,均摊O(1)求出最优解。所以能用单调栈解的题目都有这种很特殊的性质。如果不确定是不是玄学解法,应该证一证。

#include <cstdio>
using namespace std; typedef long long LL;
const int maxn=1e5+5, INF=1e9;
struct stack{
int t, a[maxn];
void push(int x){ a[++t]=x; }
void pop(){ if (--t==-1) ++t; }
int top(){ return a[t]; }
void RESET(){ t=0; }
}s; LL ans, sum[maxn];
int n, ans2, a[maxn];
int left[maxn], right[maxn]; int main(){
while (~scanf("%d", &n)){ //可能此处bug
ans=ans2=0;
for (int i=1; i<=n; ++i){
scanf("%d", &a[i]);
sum[i]=sum[i-1]+a[i];
}
a[0]=a[n+1]=-INF; s.push(0);
for (int i=1; i<=n; ++i){
while (a[i]<=a[s.top()]) s.pop();
left[i]=s.top(); s.push(i);
}
s.RESET(); s.push(n+1);
for (int i=n; i>0; --i){
while (a[i]<=a[s.top()]) s.pop();
right[i]=s.top(); s.push(i);
} LL v;
for (int i=1; i<=n; ++i){
v=a[i]*(sum[right[i]-1]-sum[left[i]]);
if (v>=ans){ ans=v; ans2=i; } //可能此处bug
}
printf("%lld\n%d %d\n", ans, left[ans2]+1, right[ans2]-1);
s.RESET();
}
return 0;
}

最新文章

  1. 【转】[教程]在 win7 / win8 下安装苹果系统 (懒人版)
  2. JDBC快速入门
  3. python3.x随手笔记2
  4. 几个不常见但非常出色的 .NET 开源库
  5. HDU-1238 Substrings
  6. 【译】4个你需要知道的Asset Catalog的秘密
  7. hihoCoder 1389 Sewage Treatment 【二分+网络流+优化】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛)
  8. html标签中head中两个标签的作用
  9. android 代码优化:封锁输出日志
  10. Traefik实现Kubernetes集群服务外部https访问
  11. poj1915
  12. java.lang.IllegalStateException: getWriter() has already been called for this response
  13. C++ 类定义
  14. php CI框架中URL特殊字符处理与SQL注入隐患
  15. 保密员(baomi)
  16. from * import *(ImportError: No module named *)为什么报错没有这个目录
  17. 【LeetCode43】 Multiply Strings
  18. 搜索入门之dfs--经典的迷宫问题解析
  19. Moq的一些基本用法
  20. Java Web应用软件保护方法

热门文章

  1. php分10个不同等级压缩优化图片(PNG)
  2. nokogiri
  3. 可视化工具与pymongo
  4. 5.1 《锋利的jQuery》jQuery对表单的操作
  5. jquery 3D分页翻转滑块
  6. HTML5响应式导航
  7. CentOS 7编译安装Tengine+PHP+MariaDB全程笔记
  8. tensorflow kmeans 聚类
  9. VC++动态链接库(DLL)编程深入浅出(转帖:基础班)
  10. 【Lintcode】036.Reverse Linked List II