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)){  //可能此处bugans=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;
}

转载于:https://www.cnblogs.com/MyNameIsPc/p/8443346.html

poj 2769 感觉♂良好 (单调栈)相关推荐

  1. 【SSL 2882】[POJ 3250]排队【单调栈模板】

    排队 Time Limit:10000MS Memory Limit:65536K Case Time Limit:1000MS Description n个人排成一条直线(一排),给出队伍中每个人的 ...

  2. POJ 3415 后缀数组+单调栈

    题目大意: 给定A,B两种字符串,问他们当中的长度大于k的公共子串的个数有多少个 这道题目本身理解不难,将两个字符串合并后求出它的后缀数组 然后利用后缀数组求解答案 这里一开始看题解说要用栈的思想,觉 ...

  3. 【思维题 单调栈】loj#2430. 「POI2014」沙拉餐厅 Salad Bar

    t老师的做法好神-- 题目描述 桌面上有 n 个水果,分别是苹果和橘子.Bytea需要从水果中选择连续的一个区间,并从左到右或从右到左拿水果,且过程中橘子的数量必须始终不小于苹果的数量.求最长的区间大 ...

  4. POJ 3250 Bad Hair Day (单调栈)

    POJ 3250 Bad Hair Day (单调栈) 手动博客搬家:本文发表于20170806 22:53:35, 原地址https://blog.csdn.net/suncongbo/articl ...

  5. *【POJ - 2796】 Feel Good (前缀和优化+单调栈维护)

    题干: Feel Good Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 12409   Accepted: 3484 Ca ...

  6. [poj 2796]单调栈

    题目链接:http://poj.org/problem?id=2796 单调栈可以O(n)得到以每个位置为最小值,向左右最多扩展到哪里. #include<cstdio> #include ...

  7. POJ 3250 解题报告 Bad Hair Day (单调栈)

    传送门:http://poj.org/problem?id=3250 这题--水题啊,单调栈可解. 上一波C艹实现 #include <iostream> #include <cst ...

  8. POJ - 2559 Largest Rectangle in a Histogram(笛卡尔树,单调栈实现)

    题目链接:点击查看 题目大意:给出一排高度不同,宽度都为 1 的矩形,问拼起来后最大的矩形面积是多少 题目分析:普通做法是用单调栈直接维护,我一直觉得单调栈处理这种矩形问题都比较抽象,也可能是我太菜了 ...

  9. POJ - 3415 Common Substrings(后缀数组+单调栈)

    题目链接:点击查看 题目大意:给出两个字符串,再给出一个k,问两个字符串中长度大于等于k的公共子串有多少个(种类可重复) 题目分析:因为涉及到了子串问题,先用后缀数组跑出height数组来,接下来如果 ...

最新文章

  1. 【分享】工作流支持邮件提醒相关配置
  2. java 策略模式会员_七:策略模式(不同等级会员打折算法)
  3. 文字收缩下面半透明效果
  4. modules runAllManagedModulesForAllRequests=true /(转1)
  5. ACM学习历程—HDU2068 RPG的错排(组合数学)
  6. python语言语句块标记是_Python的基本语法——语句块
  7. Android学习点点滴滴之获取正在运行的进程
  8. 解决新安装的Ubuntu18.04没有网络连接的问题
  9. Linq,企业类库,EXECL生成,Execl chart的一些基本操作记录.(一)
  10. 三自由度机械臂的三维设计
  11. android图片尺寸大小设置
  12. Excel 筛选唯一值或删除重复值
  13. html5语音听写流式,iOS 讯飞语音听写(流式版)
  14. java监听微信_一种基于java后台应用监控微信小程序的用户访问量的方法与流程...
  15. prometheus告警功能
  16. Python Environment Interpreter
  17. 211计算机考研难度小,考研难度小比较好考的211名校,一共有17所,报录比也不高~...
  18. 我的王姨!YYDS!富婆这套路实在是太深了...
  19. 计算机考研学校好又好考的是,考研最容易的985大学 考研院校难度排名
  20. 2013全国计算机一级考试,2013全国计算机等级考试一级试题及讲解

热门文章

  1. Python学习day10-文件处理
  2. es6 的数组的方法
  3. linux简单文件管理命令的使用
  4. Git \Github使用文档(一)
  5. Object调用静态方法
  6. Jmeter中JDBC链接配置 JDBC Connection Configuration
  7. Struts拦截器使用
  8. Windows 下用 SecureCRT 连接 VirtualBox 中的 Ubuntu
  9. 新课改实践下美术课程的新教学观
  10. 今天收到 OCP 证书