题意:这题是要找最大的矩形面积。

解题思路:这题的关键是要找每个条形能够往左和往右能够到达的最大长度。我最开始的思路是单调栈去维护,只要入栈的元素比栈顶元素小,栈顶就要出栈,并且知道其最右能够到达的最远距离。当要入栈的元素已经找到了位置,那么它左边的元素所在的位置就是其能到达的最左距离。

这道题比较坑,要用__int64位,而且在当栈为空时,加入的新元素的最左是能够到达1的,这里我开始没发现,结果WA到死。。。

这里还有一个dp版本的,感觉实际上和单调栈差不多,都是找最左和最右的距离。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;const int maxn = 100005;
struct Node
{__int64 h;int id;
}Stack[maxn];
struct Keep
{__int64 l,r,h;
}res[maxn];
__int64 n,top,hi[maxn];int main()
{while(scanf("%I64d",&n)!=EOF && n){for(__int64 i = 1; i <= n; i++){scanf("%I64d",&hi[i]);res[i].l = res[i].r = i;res[i].h = hi[i];}top = 0;for(__int64 i = 1; i <= n; i++){while(top > 0 && hi[i] <= Stack[top-1].h){res[Stack[top-1].id].r = i - 1;top--;}Stack[top].id = i;Stack[top].h = hi[i];if(top != 0)res[i].l = Stack[top-1].id + 1;else res[i].l = 1;   //最容易丢掉的条件,一直WA的原因top++;}while(top > 0){res[Stack[top-1].id].r = n;top--;}__int64 ans = 0;for(int i = 1; i <= n; i++){__int64 area = (res[i].r - res[i].l + 1) * res[i].h;if(area > ans)ans = area;}printf("%I64d\n",ans);}return 0;
}
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;const int maxn = 100005;
int n,l[maxn],r[maxn];
__int64 hi[maxn];int main()
{while(scanf("%d",&n)!=EOF && n){for(int i = 1; i <= n; i++)scanf("%I64d",&hi[i]);l[1] = 1; r[n] = n;int t;for(int i = 2; i <= n; i++) //更新每个l[i]{t = i;while(t > 1 && hi[t-1] >= hi[i]) t = l[t-1];l[i] = t;}for(int i = n - 1; i >= 1; i--) //更新每个r[i]{t = i;while(t < n && hi[t+1] >= hi[i]) t = r[t+1];r[i] = t;}__int64 ans = 0, tmp = 0;for(int i = 1; i <= n; i++){tmp = (r[i] - l[i] + 1) * hi[i];if(tmp > ans)ans = tmp;}printf("%I64d\n",ans);}return 0;
}

hdu 1506(dp || 单调栈)相关推荐

  1. bzoj 1233: [Usaco2009Open]干草堆tower【dp+单调栈】

    参考:https://www.cnblogs.com/N-C-Derek/archive/2012/07/11/usaco_09_open_tower.html 虽然长得很像斜率优化,但是应该不算-- ...

  2. CodeForces - 1484E Skyline Photo(dp+单调栈)

    题目链接:点击查看 题目大意:给出 nnn 个建筑,每个建筑有一个高度和一个美丽值,现在要求划分为数个连续的区间,使得所有区间的贡献之和最大,其中每个区间的贡献值为,区间中高度最低的建筑物的美丽值 题 ...

  3. CF1131 G. Most Dangerous Shark(DP+单调栈优化)

    文章目录 problem solution code problem solution dpi:dp_i:dpi​: 前iii个多米诺骨牌全都倒下的最小花费 li,ril_i,r_ili​,ri​分别 ...

  4. LeetCode 1130. 叶值的最小代价生成树(区间DP/单调栈贪心)

    文章目录 1. 题目 2. 解题 2.1 DP 2.2 单调栈贪心 1. 题目 给你一个正整数数组 arr,考虑所有满足以下条件的二叉树: 每个节点都有 0 个或是 2 个子节点. 数组 arr 中的 ...

  5. HDU - 5875 Function(单调栈)

    题目链接:点击查看 题目大意:给出一段连续数列,在给出m个询问,要求按照给出的函数查询得到结果 题目分析:第一眼一看题目会觉得是个递归题目,但是盲目递归肯定会TLE,所以我们要分析这个题目到底要干什么 ...

  6. [TJOI2011] 书架(线段数优化dp + 单调栈)

    problem luogu-P1295 首先可以列出一个暴力 dpdpdp 转移. 设 f(i):f(i):f(i): 到 iii 为止划分若干组,每组最大值的和 的最小值. 然后枚举最后一组,即 i ...

  7. 【BZOJ】3039: 玉蟾宫(DP/单调栈)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3039 每次看到我的提交都有点淡淡的忧伤T_T.. 看到此题我想到用前缀和维护点ij向左和向上能拓展的 ...

  8. Codeforces Round #709 (Div. 1) C. Skyline Photo dp + 单调栈优化

    传送门 文章目录 题意: 思路: 题意: 思路: 首先一个非常明显的dpdpdp式子就是f[i]=max(f[j]+val(j+1,i))f[i]=max(f[j]+val(j+1,i))f[i]=m ...

  9. 入门经典_Chap08_题解总结:极角扫描法 滑动窗口 单调队列 单调栈

    总结  本章主要关注一个重要的问题 – 单调队列和单调栈的使用  同时还有一些其他的问题,如扫描法,递归的思想, 构造, 分治, 二分等 知识点 单调队列 和 单调栈 题目 UVA - 1606 Am ...

最新文章

  1. HAOI2011 Problem b
  2. Java实现二分法(折半)查找数组中的元素
  3. php 判断字符是否是数字_php判断输入是否是纯数字,英文,汉字的方法
  4. matlab变量名不同循环,Matlab for 多个变量循环能不能这样啊 ,求教高手!!!!...
  5. Ubuntu18.04安装Docker
  6. Oracle 估算数据库大小的方法
  7. python程序显示自己的版权_手把手教你Pycharm皮肤主题及个性化设置,python程序员必备-Go语言中文社区...
  8. 开发手记之实现web.config的快速配置(转载)
  9. NP管理器v3.0.25 一键添加去除apk对话框等
  10. [LeetCode]400. Nth Digit
  11. ZOJ 4028 15th浙江省省赛E. LIS(神奇贪心)
  12. 光学定位与追踪技术_贺岁片《疯狂外星人》中徐峥出演外星人?幕后动捕技术了解一下...
  13. c语言基础代码_全国计算机二级等级考试:C语言二级考试有多难?不看不知道...
  14. 一、简单工厂模式 : 面向对象 特性 封装
  15. 【深入浅出通信原理-学习笔记】信号与频谱
  16. Three.js杂记(十一)—— 精灵与粒子(绘制中国地图)
  17. 尝试“Android应用图标微技巧,8.0系统中应用图标的适配”
  18. 海格里斯HEGERLS深度解析|重型四向穿梭车的轨道换向组件及轨道系统
  19. 聚合广告SDK API
  20. 《科技日报》:神州控股、神州信息、神州数码集团携手合力打造 “神州信创云”正式启航

热门文章

  1. 神策数据荣登《中国企业家》2019 中国科创企业百强榜
  2. 行业谈实践,客户送祝福
  3. 使用Opencv构建一个简单的图像相似检测器(MSE、SSIM)
  4. Vue会了吗?来认识一下React吧(上)
  5. mysql通过字段凝视查找字段名称
  6. [NOIP2002] 提高组 洛谷P1031 均分纸牌
  7. 记一次not in 和 minus的优化
  8. 德国精品软件 Steganos Safe 数据加密软件
  9. 6.LibSVM核函数
  10. vc开发soap客户端(方式一)