题目

一道单调栈裸题,主要是用单调栈维护单调性,和单调队列都可以在\(O(n)\)的时间内得出单调最大值或最小值,要比堆要快。

这个题可以用h来当做单调栈的使用对象,即用单调栈来维护高度,高度是越在栈深处越大,元素下标是越在栈深处越小。

\(Code\):

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <stack>
#define N 1100001
using namespace std;
struct da {
int H, V, MAXN;//H,V分别代表本身的高度,MAXN代表以i这个发射站所得到的最大值。
} stac[N];
int n, maxn, top, now;
int main()
{
scanf("%d", &n);
for (int i = 1, h, v; i <= n; i++)
{
scanf("%d%d", &h, &v);now = 0;
while (top && stac[top].H < h)//寻找第一个大于等于h的栈内元素.而且不仅要将小于h的栈内元素出栈 ,而且还要把这第一个元素出栈,因为该元素已经不可以在向右发挥作用了,且右边的发射站也肯定不会向左给该元素发挥作用了,那它就没用了。
now += stac[top--].V;
if (stac[top].H > h)
stac[top].MAXN += v;
stac[++top].H = h, stac[top].V = v, stac[top].MAXN = now;
if (top == 1)
maxn = max(maxn, stac[top].MAXN);
else//因为top元素和top-1元素在此次循环中都增加了,但不知道那个大,所以要判断。
maxn = max(maxn, max(stac[top].MAXN, stac[top - 1].MAXN));
}
printf("%d", maxn);
}

最新文章

  1. Apache的dbutils的架构图
  2. C#在二维码中添加圆角logo
  3. Ajax load html page
  4. .net(全局文件,错误页,静态页,IIS配置及防黑)
  5. 高逼格的实现WiFi共享,不安装第三方wifi共享软件,两种方式实现开启wifi的功能
  6. VC连接SQL server2005
  7. 基于visual Studio2013解决C语言竞赛题之1061最大值和次最大值
  8. python 调用图灵机器人api实现简单的人机交互
  9. ASP.NET网站单独
  10. Java学习笔记之类和对象
  11. OpenStack运维(一):OpenStack项目和用户
  12. LANMP系列教程之MySQL编译安装CentOS7环境
  13. cmseasy CmsEasy_5.6_20151009 无限制报错注入(parse_str()的坑)
  14. 并发库应用之十 &amp; 多线程数据交换Exchanger应用
  15. 关于Kafka配额的讨论(2)
  16. RDLC报表系列--------初级报表
  17. SAP WM 有无保存WM Level历史库存的Table?
  18. layui记录
  19. JAVA中Integer的==和equals注意
  20. 计算正多边形的面积 Gym - 101840G

热门文章

  1. 用less查看日志文件
  2. python 标准库subprocess
  3. UCOSIII系统内部任务
  4. iOS数组遍历
  5. SAP Marketing Cloud功能简述(五) : 销售计划管理
  6. java web编程 servlet
  7. Scrapy 框架的使用
  8. centos 7 安装webmin
  9. git 分支查看与切换
  10. c# HashTable 类