洛谷 P2866 [USACO06NOV] Bad Hair Day S

题目描述

农夫约翰有 N 头奶牛正在过乱头发节。

每一头牛都站在同一排面朝右,它们被从左到右依次编号为 1,2,⋯,N。编号为 i 的牛身高为 hi​。第 N 头牛在最前面,而第 1 头牛在最后面。

对于第 i 头牛前面的第 j 头牛,如果 hi​>hi+1​,hi​>hi+2​,⋯,hi​>hj​,那么认为第 i 头牛可以看到第 i+1 到第 j 头牛。

定义 Ci​ 为第 i 头牛所能看到的牛的数量。请帮助农夫约翰求出 C1​+C2​+⋯+CN​。

输入格式

输入共 N+1 行。

第一行为一个整数 N,代表牛的个数。

接下来 N 行,每行一个整数 ai​,分别代表第 1,2,⋯,N 头牛的身高。

输出格式

输出共一行一个整数,代表 C1​+C2​+⋯+CN​。

//想要找出一头牛可以看见那几头牛比较困难, 我们可以用单调栈来控制当前这头牛可以被几头牛看见 栈中的元素就是可以看见当前牛的个数 只需维护一个单调栈就可以找出所有可以看见当前牛的数量 如果当前牛小于栈顶元素就让他加入栈 否则就计算出当前牛可以被几头牛看见

#include<bits/stdc++.h>

using namespace std;

typedef long long LL;

int n,t;

LL ans;

stack <int> a;

int main() {

cin>>n;

for (int i=1; i<=n; i++) {

cin>>t;

while (!a.empty() && a.top() <= t) a.pop(); //如果当前牛的身高高于栈顶元素 就让栈中的牛出栈

ans+=a.size();//计算当前牛可以被几头牛看见

a.push(t);//入栈

}

cout<<ans;

return 0;

}

相关推荐
神里流~霜灭9 分钟前
(C++)数据结构初阶(顺序表的实现)
linux·c语言·数据结构·c++·算法·顺序表·单链表
一只乔哇噻30 分钟前
java后端工程师进修ing(研一版 || day41)
java·开发语言·学习·算法
愚润求学32 分钟前
【贪心算法】day7
c++·算法·leetcode·贪心算法
要开心吖ZSH1 小时前
软件设计师备考-(十六)数据结构及算法应用(重要)
java·数据结构·算法·软考·软件设计师
带娃的IT创业者1 小时前
如何开发一个教育性质的多线程密码猜测演示器
网络·python·算法
Aczone282 小时前
硬件(六)arm指令
开发语言·汇编·arm开发·嵌入式硬件·算法
luckys.one7 小时前
第9篇:Freqtrade量化交易之config.json 基础入门与初始化
javascript·数据库·python·mysql·算法·json·区块链
~|Bernard|8 小时前
在 PyCharm 里怎么“点鼠标”完成指令同样的运行操作
算法·conda
战术摸鱼大师8 小时前
电机控制(四)-级联PID控制器与参数整定(MATLAB&Simulink)
算法·matlab·运动控制·电机控制
Christo38 小时前
TFS-2018《On the convergence of the sparse possibilistic c-means algorithm》
人工智能·算法·机器学习·数据挖掘