poj 2769 感觉♂良好 (单调栈)
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 感觉♂良好 (单调栈)相关推荐
- 【SSL 2882】[POJ 3250]排队【单调栈模板】
排队 Time Limit:10000MS Memory Limit:65536K Case Time Limit:1000MS Description n个人排成一条直线(一排),给出队伍中每个人的 ...
- POJ 3415 后缀数组+单调栈
题目大意: 给定A,B两种字符串,问他们当中的长度大于k的公共子串的个数有多少个 这道题目本身理解不难,将两个字符串合并后求出它的后缀数组 然后利用后缀数组求解答案 这里一开始看题解说要用栈的思想,觉 ...
- 【思维题 单调栈】loj#2430. 「POI2014」沙拉餐厅 Salad Bar
t老师的做法好神-- 题目描述 桌面上有 n 个水果,分别是苹果和橘子.Bytea需要从水果中选择连续的一个区间,并从左到右或从右到左拿水果,且过程中橘子的数量必须始终不小于苹果的数量.求最长的区间大 ...
- POJ 3250 Bad Hair Day (单调栈)
POJ 3250 Bad Hair Day (单调栈) 手动博客搬家:本文发表于20170806 22:53:35, 原地址https://blog.csdn.net/suncongbo/articl ...
- *【POJ - 2796】 Feel Good (前缀和优化+单调栈维护)
题干: Feel Good Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 12409 Accepted: 3484 Ca ...
- [poj 2796]单调栈
题目链接:http://poj.org/problem?id=2796 单调栈可以O(n)得到以每个位置为最小值,向左右最多扩展到哪里. #include<cstdio> #include ...
- POJ 3250 解题报告 Bad Hair Day (单调栈)
传送门:http://poj.org/problem?id=3250 这题--水题啊,单调栈可解. 上一波C艹实现 #include <iostream> #include <cst ...
- POJ - 2559 Largest Rectangle in a Histogram(笛卡尔树,单调栈实现)
题目链接:点击查看 题目大意:给出一排高度不同,宽度都为 1 的矩形,问拼起来后最大的矩形面积是多少 题目分析:普通做法是用单调栈直接维护,我一直觉得单调栈处理这种矩形问题都比较抽象,也可能是我太菜了 ...
- POJ - 3415 Common Substrings(后缀数组+单调栈)
题目链接:点击查看 题目大意:给出两个字符串,再给出一个k,问两个字符串中长度大于等于k的公共子串有多少个(种类可重复) 题目分析:因为涉及到了子串问题,先用后缀数组跑出height数组来,接下来如果 ...
最新文章
- 【分享】工作流支持邮件提醒相关配置
- java 策略模式会员_七:策略模式(不同等级会员打折算法)
- 文字收缩下面半透明效果
- modules runAllManagedModulesForAllRequests=true /(转1)
- ACM学习历程—HDU2068 RPG的错排(组合数学)
- python语言语句块标记是_Python的基本语法——语句块
- Android学习点点滴滴之获取正在运行的进程
- 解决新安装的Ubuntu18.04没有网络连接的问题
- Linq,企业类库,EXECL生成,Execl chart的一些基本操作记录.(一)
- 三自由度机械臂的三维设计
- android图片尺寸大小设置
- Excel 筛选唯一值或删除重复值
- html5语音听写流式,iOS 讯飞语音听写(流式版)
- java监听微信_一种基于java后台应用监控微信小程序的用户访问量的方法与流程...
- prometheus告警功能
- Python Environment Interpreter
- 211计算机考研难度小,考研难度小比较好考的211名校,一共有17所,报录比也不高~...
- 我的王姨!YYDS!富婆这套路实在是太深了...
- 计算机考研学校好又好考的是,考研最容易的985大学 考研院校难度排名
- 2013全国计算机一级考试,2013全国计算机等级考试一级试题及讲解