POJ3250 Bad Hair Day【单调递减队列+堆栈】
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 20834 | Accepted: 7120 |
Description
Some of Farmer John's N cows (1 ≤ N ≤ 80,000) are having a bad hair day! Since each cow is self-conscious about her messy hairstyle, FJ wants to count the number of other cows that can see the top of other cows' heads.
Each cow i has a specified height hi (1 ≤ hi ≤ 1,000,000,000) and is standing in a line of cows all facing east (to the right in our diagrams). Therefore, cow i can see the tops of the heads of cows in front of her (namely cows i+1, i+2, and so on), for as long as these cows are strictly shorter than cow i.
Consider this example:
= = = = - = Cows facing right --> = = = = - = = = = = = = = = 1 2 3 4 5 6
Cow#1 can see the hairstyle of cows #2, 3, 4
Cow#2 can see no cow's hairstyle
Cow#3 can see the hairstyle of cow #4
Cow#4 can see no cow's hairstyle
Cow#5 can see the hairstyle of cow 6
Cow#6 can see no cows at all!
Let ci denote the number of cows whose hairstyle is visible from cow i; please compute the sum of c1 through cN.For this example, the desired is answer 3 + 0 + 1 + 0 + 1 + 0 = 5.
Input
Lines 2..N+1: Linei+1 contains a single integer that is the height of cowi.
Output
Sample Input
6 10 3 7 4 12 2
Sample Output
5
Source
问题链接:POJ3250 Bad Hair Day
问题简述:(略)
问题分析:
一群高度不同的牛从左到右排开,每头牛只能看见它右边的比它矮的牛的发型,若遇到一头高度大于或等于它的牛,则无法继续看到这头牛后面的其他牛。求所有的牛能够看见发型总数。
这是一个单调递减队列问题,即计算连续递减长度问题。该问题算的是递减和,不是区间值,所以只需要一个堆栈就可以了。高度递减的时候就进栈,来个高个子则堆栈中的低个子弹出即可。
用一个数组和一个指针就可以模拟一个堆栈。
程序说明:(略)
题记:(略)
参考链接:(略)
AC的C++语言程序如下:
/* POJ3250 Bad Hair Day */#include <iostream>
#include <stdio.h>using namespace std;int const N = 80000;
int stack[N], top;int main()
{int n, a;long long ans = 0;scanf("%d", &n);for(int i=1; i<=n; i++) {scanf("%d", &a);while (top > 0 && stack[top - 1] <= a)top--;ans += top;stack[top++] = a;}printf("%lld\n", ans);return 0;
}
POJ3250 Bad Hair Day【单调递减队列+堆栈】相关推荐
- 二叉树的各种遍历方式,我都帮你总结了,附有队列堆栈图解
今天我来分享一篇关于二叉树的文章(建议收藏,便于巩固基础). 看完此文leetcode至少解决八道题 掌握二叉树的前序.中序.后序遍历以及两种不同的实现方式:递归与非递归 非递归时遍历与层次遍历时,有 ...
- ICPC程序设计题解书籍系列之三:秋田拓哉:《挑战程序设计竞赛》(第2版)
白书<挑战程序设计竞赛>(第2版)题目一览 白书:秋田拓哉:<挑战程序设计竞赛>(第2版) 第1章 蓄势待发--准备篇(例题) POJ1852 UVa10714 ZOJ2376 ...
- 线性结构 —— 单调栈与单调队列
[单调栈] 1.原理 单调栈,就是栈内元素保持一定单调性(单调递增或单调递减)的栈,即从栈底到栈顶单调递增或递减. 对于单调递增的栈,如果栈为空或入栈元素值大于等于栈顶元素值,则入栈:否则,若入栈会破 ...
- java中的队列详解
队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作.进行插入操作的端称为队尾,进行删除操作的端称为队头.队列中没有元素时,称为空队列. 在队列这 ...
- POJ2823 Sliding Window【单调队列】【线段树】【ST表】
Sliding Window POJ - 2823 题意: 给出一个长度为N的序列,通过一个窗口,可以看到序列中连续的K个元素,窗口从最左边出发,每次移动一个单位,对于每次移动,输出当前窗口中的最大值 ...
- 算法竞赛入门与进阶 (二)单调队列、单调栈
栈(stack)和队列( queue ) 1.栈的定义:栈是限定仅在表头进行插入和删除操作的线性表(先进后出) 2.队列的定义:队列是一种特殊的线性表,特殊之处在于 它只允许在表的前端(front)进 ...
- POJ 2823-Sliding Window单调队列解题报告
链接:http://poj.org/problem?id=2823 利用单调队列的出队入队,维护区间的最值,保证队列单调递增或单调递减,要维护单调递增队列,当一个数字插入的时候,从队尾往前找到第一个比 ...
- 数据结构 - 单调栈、单调队列
单调栈:每日温度 请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度.如果气温在这之后都不会升高,请在该位置用 0 来代替 单调栈基本只处理NGE问题(Nex ...
- 详解--单调队列 经典滑动窗口问题
单调队列,即单调的队列.使用频率不高,但在有些程序中会有非同寻常的作用. 动态规划·单调队列的理解 做动态规划时常常会见到形如这样的转移方程: f[x] = max or min{g(k) | b[x ...
最新文章
- ToolBarManager可任意选择你想要的菜单
- redis高并发原理_Java中的42行代码中的URL缩短服务— Java(?!)Spring Boot + Redis...
- bat 批量提取指定目录下的文件
- PHP快速入门 如何操作MySQL
- android实现过程,Android:一个完整app开发流程
- C++ const对象仅在文件内有效
- ant使用指南详细入门教程
- 匹配正则_Day233:正则表达式匹配方法 match()
- PMP - 考试将于2011年8月31日更新
- gevent开始学习-第一步
- WCF入门(八)---WCF服务绑定
- .NET开发设计模式-获取某个接口下面所有的派生类
- php 5分钟前,PHP实现时间轴函数(刚刚、5分钟前)
- kafka知识 --kafka权威指南
- mysql实现分组查询每个班级的前三名、每门课程的前三名
- 医学统计学笔记之设计
- bcm5396交换机级联配置_「收藏」Cisco交换机安全配置设定
- 十二黄金圣斗士-合辑-修复版-3D打印图纸
- android安装自动打开网页,Android调用系统自带浏览器打开网页的实现方法
- Linux从图形界面切换到文本界面快捷键不好用的解决方法
热门文章
- service mysql k8s_Kubernetes(k8s)中文文档 名词解释 Services_Kubernetes中文社区
- 模块化加载_前端模块化概述
- GeoTools——JTS空间操作
- html——attr与val、attr与prop、attr与css区别
- 高级着色语言HLSL入门(5)
- id 怎么获取jira 评论_【JIRA】如何快速地批量查找各迭代的SprintID
- CentOS7安装KVM、KVM安装CentOS7
- 使用函数式编程方式-递归
- adb dumpsys 查看手机内存
- 人工智能目标检测模型(四)——ResNet