题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1660

题意:

  有n头牛,身高分别为h[i]。

  它们排成一排,面向右边。第i头牛可以看见在它右边的牛j,只要h[i] > h[j],且中间没有身高 >= h[i]的牛挡住视线。

  第i头牛能看见c[i]只别的牛。

  问你 ∑ c[i]为多少。

题解:

  单调栈。

  

  单调性:

    栈内存牛的编号。

    从栈底到栈顶,h[i]单调递减。

  

  从左到右枚举每头牛。

  如果枚举到第i头牛时,栈内的某头牛k满足h[i] >= h[k],被弹出,则k的视野的最右端为i-1。

  所以c[k] = k-i-1。即:ans += k-i-1。

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#include <stack>
#define MAX_N 80005
#define INF_LL 100000000000000000LL using namespace std; int n;
long long ans=;
long long h[MAX_N];
stack<int> stk; void read()
{
cin>>n;
for(int i=;i<n;i++)
{
cin>>h[i];
}
} void solve()
{
h[n]=INF_LL;
for(int i=;i<=n;i++)
{
while(!stk.empty() && h[stk.top()]<=h[i])
{
ans+=i-stk.top()-;
stk.pop();
}
stk.push(i);
}
} void print()
{
cout<<ans<<endl;
} int main()
{
read();
solve();
print();
}

BZOJ 1660 [Usaco2006 Nov]Bad Hair Day 乱发节:单调栈的更多相关文章

  1. BZOJ 1660: [Usaco2006 Nov]Bad Hair Day 乱发节( 单调栈 )

    维护一个h严格递减的栈 , 出栈时计算一下就好了.. ------------------------------------------------------------------------- ...

  2. BZOJ 1660: [Usaco2006 Nov]Bad Hair Day 乱发节

    Description Input * Line 1: 牛的数量 N. * Lines 2..N+1: 第 i+1 是一个整数,表示第i头牛的高度. Output * Line 1: 一个整数表示c[ ...

  3. bzoj 1660: [Usaco2006 Nov]Bad Hair Day 乱发节【单调栈】

    开一个单调递减的单调栈,然后用sum数组维护每个点的答案,新加点的时候一边退栈一边把退掉的点的sum加进来 #include<iostream> #include<cstdio> ...

  4. BZOJ1660: [Usaco2006 Nov]Bad Hair Day 乱发节(单调栈)

    题意 题目链接 Sol 单调栈板子题.. 找到向左第一个比他大的位置,然后判断一下就可以了 #include<bits/stdc++.h> //#define int long long ...

  5. 1660: [Usaco2006 Nov]Bad Hair Day 乱发节

    1660: [Usaco2006 Nov]Bad Hair Day 乱发节 Time Limit: 2 Sec  Memory Limit: 64 MB Submit: 665  Solved: 31 ...

  6. 【BZOJ】1660: [Usaco2006 Nov]Bad Hair Day 乱发节(单调栈)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1660 单调栈裸题..累计比每一个点高的个数即可. #include <cstdio> # ...

  7. 【BZOJ 1660】 [Usaco2006 Nov]Bad Hair Day 乱发节

    1660: [Usaco2006 Nov]Bad Hair Day 乱发节 Time Limit: 2 Sec  Memory Limit: 64 MB Submit: 678  Solved: 32 ...

  8. BZOJ1660: [Usaco2006 Nov]Bad Hair Day 乱发节

    1660: [Usaco2006 Nov]Bad Hair Day 乱发节 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 606  Solved: 289 ...

  9. [Usaco2006 Nov]Bad Hair Day 乱发节

    Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 1268  Solved: 625[Submit][Status][Discuss] Description ...

随机推荐

  1. quartz 应用到 spring定时任务 执行两次

    https://my.oschina.net/superkangning/blog/467487

  2. robotframework使用之元素定位动态ID方法

    转自: http://blog.csdn.net/u011757108/article/details/53418671 一个弹出框所有元素ID竟然的动态的,关闭后再打开,里面的ID又变! 如下图:  ...

  3. FTP 连接报错

    Filezilla 站点管理器=>选中FTP站点=>加密(只使用普通FTP)

  4. 存储过程清理N天前数据

    CREATE OR REPLACE PROCEDURE APICALL_LOG_INTERFACE_CLEAN ( CLEANDAY IN Number --天数 ) AS v_cleanDay nu ...

  5. C语言的##

    比如说我定义一个宏:#define DECLARE_DYNAMIC(class_name) \public:static CRuntimeClass class##class_name; \virtu ...

  6. Windows 10 1703创意者更新官方ISO镜像大全

    2017年04月07日 20:00 19867 次阅读 稿源:快科技 12 条评论 Windows 10 Creators Update创意者更新正式版已经发布,目前只能通过易生.MCT工具或者ISO ...

  7. FTP匿名登录或弱口令漏洞及服务加固

    漏洞描述 FTP 弱口令或匿名登录漏洞,一般指使用 FTP 的用户启用了匿名登录功能,或系统口令的长度太短.复杂度不够.仅包含数字.或仅包含字母等,容易被黑客攻击,发生恶意文件上传或更严重的入侵行为. ...

  8. 杂谈:HTML 5的消息通知机制

    译文来源:http://www.ido321.com/1130.html 原文:HTML 5 Notification 译文:HTML 5 的消息通知机制 译者:dwqs watermark/2/te ...

  9. 开源监控软件ganglia

    开源监控软件ganglia安装手册 Ganglia是一个监控服务器,集群的开源软件,能够用曲线图表现最近一个小时,最近一天,最近一周,最近一月,最近一年的服务器或者集群的cpu负载,内存,网络,硬盘等 ...

  10. 【Python基础】之for循环、数组字典

    一. for循环实例 1.循环字符串 Python Shell: for i in "hello": print(i) h e l l o 2.循环数组Python Shell: ...