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 ≤ h≤ 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

Line 1: The number of cows,N.
Lines 2..N+1: Linei+1 contains a single integer that is the height of cowi.

Output

Line 1: A single integer that is the sum ofc1throughcN.

Sample Input

6
10
3
7
4
12
2

Sample Output

5

Source

USACO 2006 November Silver

问题链接: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【单调递减队列+堆栈】相关推荐

  1. 二叉树的各种遍历方式,我都帮你总结了,附有队列堆栈图解

    今天我来分享一篇关于二叉树的文章(建议收藏,便于巩固基础). 看完此文leetcode至少解决八道题 掌握二叉树的前序.中序.后序遍历以及两种不同的实现方式:递归与非递归 非递归时遍历与层次遍历时,有 ...

  2. ICPC程序设计题解书籍系列之三:秋田拓哉:《挑战程序设计竞赛》(第2版)

    白书<挑战程序设计竞赛>(第2版)题目一览 白书:秋田拓哉:<挑战程序设计竞赛>(第2版) 第1章 蓄势待发--准备篇(例题) POJ1852 UVa10714 ZOJ2376 ...

  3. 线性结构 —— 单调栈与单调队列

    [单调栈] 1.原理 单调栈,就是栈内元素保持一定单调性(单调递增或单调递减)的栈,即从栈底到栈顶单调递增或递减. 对于单调递增的栈,如果栈为空或入栈元素值大于等于栈顶元素值,则入栈:否则,若入栈会破 ...

  4. java中的队列详解

    队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作.进行插入操作的端称为队尾,进行删除操作的端称为队头.队列中没有元素时,称为空队列. 在队列这 ...

  5. POJ2823 Sliding Window【单调队列】【线段树】【ST表】

    Sliding Window POJ - 2823 题意: 给出一个长度为N的序列,通过一个窗口,可以看到序列中连续的K个元素,窗口从最左边出发,每次移动一个单位,对于每次移动,输出当前窗口中的最大值 ...

  6. 算法竞赛入门与进阶 (二)单调队列、单调栈

    栈(stack)和队列( queue ) 1.栈的定义:栈是限定仅在表头进行插入和删除操作的线性表(先进后出) 2.队列的定义:队列是一种特殊的线性表,特殊之处在于 它只允许在表的前端(front)进 ...

  7. POJ 2823-Sliding Window单调队列解题报告

    链接:http://poj.org/problem?id=2823 利用单调队列的出队入队,维护区间的最值,保证队列单调递增或单调递减,要维护单调递增队列,当一个数字插入的时候,从队尾往前找到第一个比 ...

  8. 数据结构 - 单调栈、单调队列

    单调栈:每日温度 请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度.如果气温在这之后都不会升高,请在该位置用 0 来代替 单调栈基本只处理NGE问题(Nex ...

  9. 详解--单调队列 经典滑动窗口问题

    单调队列,即单调的队列.使用频率不高,但在有些程序中会有非同寻常的作用. 动态规划·单调队列的理解 做动态规划时常常会见到形如这样的转移方程: f[x] = max or min{g(k) | b[x ...

最新文章

  1. ToolBarManager可任意选择你想要的菜单
  2. redis高并发原理_Java中的42行代码中的URL缩短服务— Java(?!)Spring Boot + Redis...
  3. bat 批量提取指定目录下的文件
  4. PHP快速入门 如何操作MySQL
  5. android实现过程,Android:一个完整app开发流程
  6. C++ const对象仅在文件内有效
  7. ant使用指南详细入门教程
  8. 匹配正则_Day233:正则表达式匹配方法 match()
  9. PMP - 考试将于2011年8月31日更新
  10. gevent开始学习-第一步
  11. WCF入门(八)---WCF服务绑定
  12. .NET开发设计模式-获取某个接口下面所有的派生类
  13. php 5分钟前,PHP实现时间轴函数(刚刚、5分钟前)
  14. kafka知识 --kafka权威指南
  15. mysql实现分组查询每个班级的前三名、每门课程的前三名
  16. 医学统计学笔记之设计
  17. bcm5396交换机级联配置_「收藏」Cisco交换机安全配置设定
  18. 十二黄金圣斗士-合辑-修复版-3D打印图纸
  19. android安装自动打开网页,Android调用系统自带浏览器打开网页的实现方法
  20. Linux从图形界面切换到文本界面快捷键不好用的解决方法

热门文章

  1. service mysql k8s_Kubernetes(k8s)中文文档 名词解释 Services_Kubernetes中文社区
  2. 模块化加载_前端模块化概述
  3. GeoTools——JTS空间操作
  4. html——attr与val、attr与prop、attr与css区别
  5. 高级着色语言HLSL入门(5)
  6. id 怎么获取jira 评论_【JIRA】如何快速地批量查找各迭代的SprintID
  7. CentOS7安装KVM、KVM安装CentOS7
  8. 使用函数式编程方式-递归
  9. adb dumpsys 查看手机内存
  10. 人工智能目标检测模型(四)——ResNet