当前位置: 首页 > java >正文

洛谷 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;
}

http://www.xdnf.cn/news/3898.html

相关文章:

  • UNet 改进(22):结合Transformer结构
  • 《算法导论(原书第3版)》下载
  • Linux watch 命令使用详解
  • Vue 虚拟DOM和DIff算法
  • 从上帝视角看文件操作
  • 杜教筛原理,实现与时间复杂度分析
  • 【服务器通信-listen】——int listen(int sockfd, int backlog)
  • 【多次弹出“获取打开此tobiieyetracking链接的应用”的窗口】解决办法
  • [硬件电路-11]:模拟电路常见元器件 - 什么是阻抗、什么是输入阻抗、什么是输出阻抗?阻抗、输入阻抗与输出阻抗的全面解析
  • Python_leve2.1
  • Python语句入门:从基础到实践
  • STM32的定时器
  • 在Linux中如何创建自定义的systemd服务的步骤
  • 动静态库【Linux操作系统】
  • 股指期货风险管理功能及基差、升水、贴水的影响
  • 牛客月赛115 C题-命运之弹 题解
  • Linux环境下的进程创建、退出和进程等待
  • 谷歌 NotebookLM 支持生成中文播客
  • n8n 条件节点详解:IF 与 Switch 的多分支工作流设计
  • 虚函数VS虚拟继承:C++多重继承二义性破解与性能调优
  • 论快乐的学习和学习的快乐
  • 万字详解ADC药物Payload
  • Debezium 架构详解与实战示例
  • 【操作系统】深入理解内存管理:从虚拟内存到OOM Killer
  • cloudfare+gmail 配置 smtp 邮箱
  • 【CISCO】Se2/0, Se3/0:串行口(Serial) 这里串口的2/0 和 3/0分别都是什么?
  • React hooks详解
  • 快速外网访问,证书自动续约 | 极空间IPv4IPv6 DDNS 配置详解
  • 数据结构与算法:回溯
  • Python:Seaborn 美化图表的技术指南