POJ 3250 Bad Hair Day 算法学习:单调栈
来源:互联网 发布:数据库软件工程师考试 编辑:程序博客网 时间:2024/05/22 11:45
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, cowi 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 cowi.
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 cowi; 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: Line i+1 contains a single integer that is the height of cowi.
Output
Sample Input
610374122
Sample Output
5
题意:
有N只牛向右看,只能看到第一只比他高的牛之前的牛。问每头牛能看到的牛的总数是多少?
方法:单调栈
所谓单调栈,就是在每次押入一个元素之前,将栈中所有大于(小于)他的元素弹出栈,这样就保证栈有一定的大小顺序。
每次读入一只牛的高度,就将栈中比他矮的牛弹出,然后将这只牛压入栈。因为比他矮的牛将看不到他及其右边的牛。所以,此时栈的大小便是能看到当前牛的牛的只数。这时再将这只牛的身高压入栈中。
代码:
//By Sean Chen#include <iostream>#include <cstdio>#include <cstring>using namespace std;int Stack[800005],top; //单调栈和栈顶指针int main(){ int n,hi; long long cnt=0; //答案需要用long long 表示 scanf("%d",&n); for (int i=0;i<n;i++) { scanf("%d",&hi); while (top>0 && hi>=Stack[top]) //单调栈操作,题目要求高度大于才能看到,所以弹栈的条件应是hi>=Stack[top] top--; cnt+=top; Stack[++top]=hi; } printf("%lld\n",cnt); return 0;}
- POJ 3250 Bad Hair Day 算法学习:单调栈
- poj 3250:Bad Hair Day---单调栈
- POJ 3250 Bad Hair Day(单调栈)
- POJ 3250 Bad Hair Day(单调栈)
- POJ 3250 Bad Hair Day 单调栈
- poj 3250 Bad Hair Day 单调栈
- [单调栈] poj 3250 Bad Hair Day
- POJ 3250 Bad Hair Day 【单调栈】
- poj 3250 Bad Hair Day 【单调栈】
- poj 3250 Bad Hair Day(单调栈)
- Poj 3250 Bad Hair Day 【单调栈】
- POJ 3250 - Bad hair day(单调栈)
- poj-3250 Bad Hair Day(单调栈)
- Bad Hair Day(POJ 3250) 单调栈
- poj 3250 Bad Hair Day单调栈
- Bad Hair Day -- 3250poj 单调栈
- POJ 3250 Bad Hair Day (单调栈)
- poj 3250 Bad Hair Day(单调栈)
- 二叉树的前序遍历
- 最大网络流
- Pixhawk原生固件PX4之添外置传感器MPU6500
- [已解决]您的PHP似乎没有安装运行WordPress所必需的MySQL扩展。
- 骄傲的代价
- POJ 3250 Bad Hair Day 算法学习:单调栈
- 孤儿进程与僵尸进程
- ssh连接时的警告
- pandas numpy学习笔记
- valid-palindrome
- 字符串--hdu--3783--ZOJ
- vue -- mixins
- VK Cup 2017 B. Volatile Kite (Div . 1)(凸多边形退化)(计算几何)
- Cluster