C++ 算法学习——1.8 单调栈算法

news2024/10/22 17:23:48

单调栈(Monotonic Stack)是一种在解决一些数组或者链表相关问题时非常有用的数据结构和算法。在C++中,单调栈通常用于解决一些需要快速找到元素左右第一个比当前元素大或小的问题。

  1. 定义

    • 单调栈实际上是一个栈,但是与普通栈不同的是,单调栈中的元素是按照单调递增或者单调递减的顺序存放的。
  2. 应用

    • 单调栈通常用于解决一些数组或链表相关的问题,例如找到每个元素左边或右边第一个比当前元素大或小的元素等。
    • 优化大规模的问题,以空间换时间。
  3. 实现

    • 在C++中,可以使用STL中的stack来实现单调栈。在处理问题时,通常需要遍历数组或链表,维护一个递增或递减的栈结构。
  4. 算法步骤

    • 遍历数组元素,对于每个元素:
      • 如果栈为空,将当前元素下标入栈。
      • 如果当前元素大于栈顶元素,出栈直到栈为空或者栈顶元素大于当前元素,然后将当前元素入栈。
      • 如果当前元素小于等于栈顶元素,直接将当前元素下标入栈。
  5. 时间复杂度

    • 单调栈算法的时间复杂度通常为O(n),其中n是数组或链表的长度。

P1. 洛谷p2866bad hair days

#include<iostream>
#include<stack>
using namespace std;
long long ans=0;

int main()
{
    int nums;cin>>nums;
    stack<int> ox;
    for(int i=1;i<=nums;i++)
    {
        int p;cin>>p;
        if(ox.empty()) ox.push(p);
        else
        {
            if(p<ox.top()) {ans+=ox.size();ox.push(p);continue;}
            while(!ox.empty()&&p>=ox.top()) ox.pop();
            ans+=ox.size();
            ox.push(p);
        }
    }
    cout<<ans;
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2213548.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《大规模语言模型从理论到实践》第一轮学习--强化学习(RLHF、PPO)

个人学习笔记,如有错误欢迎指出。 一、强化学习的意义 RLHF(Reinforcement Learning from Human Feedback):强化学习(Reinforcement Learning)结合人类反馈(Human Feedback)来微调大语言模型。 大语言模型的训练步骤包括:预训练、指令微调(SFT)、对齐。 对齐(a…

NVM 安装步骤

NVM 安装步骤 文章目录 NVM 安装步骤一、NVM 是什么二、用途三、安装步骤详解1. 下载与安装2. 验证安装3. 安装Node.js4. 使用安装的Node.js版本5. 验证Node.js安装 四、NVM 常用命令1. 查看已安装的Node.js版本2. 安装指定版本的Node.js3. 卸载指定版本的Node.js4. 切换到已安…

Redis面试题——第四篇

1. Redis主从复制的常见拓扑结构有哪些 一主多从&#xff1a;这是最基本的拓扑结构&#xff0c;包含一个主节点和多个从节点&#xff0c;所有写操作都在主节点上执行&#xff0c;而读操作可以在从节点上进行&#xff0c;以提高读取速度和负载均衡。 树状主从结构&#xff1a;从…

小米澎湃工具箱,一键获取权限

Hyper工具箱已初步支持魅族设备一键获取权限&#xff0c;配置扫描与ROM包索引均已适配Flyme。 支持小米、魅族手机 功能不止刷机、获取权限更多功能下载体验&#xff01; 下载&#xff1a;https://pan.quark.cn/s/4e78f870813f

试着了解YOLOx

在特征提取上来说&#xff0c;主干部分使用了focus网络结构&#xff0c;对特征点进行了划分&#xff0c;将特征点信息堆叠到通道上。 同时采用CSPnet结构&#xff0c;在残差网络堆叠的同时&#xff0c;构建大的残差边&#xff0c;经过少量处理直接连接到最后。 过去的YOLO将分…

数据库系统概论之关系数据库标准语言SQL(一)【超详细】

教材&#xff1a; 数据库系统概论&#xff08;第6版&#xff09;王珊,杜小勇,陈红编著 目录 一、SQL概述 1.1 SQL 的产生与发展 1.2 SQL的特点 1.3 SQL的基本概念 二、数据定义 2.1 数据库的定义 2.2 数据表的定义 2.3 模式的定义 一、SQL概述 1974年IBM为关系DBMS设…

组合式二值编码

论文名称&#xff1a;《A Practical Approach to 3D Scanning in the Presence ofInterreflections, Subsurface Scattering and Defocus》 简介&#xff1a;组合式二值编码&#xff08;包含传统格雷码&#xff0c;XOR-02&#xff0c;XOR-04&#xff0c;minSW&#xff09;&…

Java学习Day25:基础篇15:反射

Java 反射&#xff08;Reflection&#xff09; 1.前置反应 是 Java 编程语言的一个强大特性&#xff0c;它允许程序在运行时检查或修改类的行为。这包括获取类的信息&#xff08;如字段、方法、构造函数等&#xff09;&#xff0c;以及动态地创建对象、调用方法、访问和修改字…

linux的学习第二天

1.vmware的功能&#xff1a; 快照 创建快照&#xff1a; 拍摄此虚拟机的快照&#xff1a;记录保存虚拟机的当前状态&#xff0c;如果系统出现故障&#xff0c;可以通过快照还原&#xff08;错删系统时可以找到快照的系统状态&#xff0c;然后恢复系统&#xff09; 恢复快照…

java项目之精品在线试题库系统设计与实现源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的精品在线试题库系统设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 精品在线试…

sentinel dashboard分布式改造落地设计实现解释(二)-分布式discovery组件

discovery discovery负责维护app/机器资料库&#xff0c;transport健康检测&#xff0c; transport上下线处理。discovery关键是分布式存储&#xff0c;后续研究一下raft&#xff0c;其复制&#xff0c;状态机&#xff0c;快照技术&#xff0c;但个人觉得&#xff0c;discover…

软件分享 | 截图工具 Snipaste

今天分享&#xff1a; 今日分享的是一款截图界的神器——Snipaste&#xff01; 特点&#xff1a; &#x1f3a8; 超清截图&#xff1a; Snipaste的截图功能&#xff0c;清晰度超乎你的想象。无论是工作文档还是游戏画面&#xff0c;都能一键捕捉&#xff0c;细节尽在掌握。 …

Excel:将一列拆分成多列

实现的效果是&#xff1a; 操作步骤如下&#xff1a; 1.选中列 → 点击菜单栏中的"数据" → 分列 2.选择"分列符号"&#xff0c;点击下一步 3.我想要按照空格分列&#xff0c;就选择空格 4.点击完成&#xff0c;就可以实现分列的效果了

uniapp学习(004-2 组件 Part.2生命周期)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战&#xff0c;开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第31p-第p35的内容 文章目录 组件生命周期我们主要使用的三种生命周期setup(创建组件时执行)不可以操作dom节点…

Shell编程-if判断

作者介绍&#xff1a;简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们前面学习了那么多命令&#xff0c;以及涉及到部分逻辑判断的问题。从简单来说&#xff0c;他就是Shell编…

【XYFrame unity框架使用文档】封装unity小框架工具集 —— XYFrame

文章目录 XYFrame介绍优点获取框架源码引入的第三方插件作者信息技术交流群反馈企鹅裙画饼使用文档导入文件目录启动1、单例模式不继承MonoBehaviour的单例模式基类继承MonoBehaviour的单例模式基类 2、Mono管理器3、事件管理系统4、工具类封装unity协程工具&#xff0c;避免 G…

每周心赏|必备AI神器第二弹

大家的假期都是怎么度过的&#xff1f;是已经玩嗨了&#xff1f;还是在家葛优躺&#xff0c;感叹时间飞逝呢&#xff1f; 别急&#xff0c;假期还没完全说拜拜呢&#xff01;赶紧抓住假期最后的尾巴&#xff0c;和AI神器一起&#xff0c;把快乐放大&#xff0c;不留遗憾&#x…

prompt learning

prompt learning 对于CLIP&#xff08;如上图所示&#xff09;而言&#xff0c;对其prompt构造的更改就是在zero shot应用到下游任务的时候对其输入的label text进行一定的更改&#xff0c;比如将“A photo of a{obj}”改为“[V1][V2]…[Vn][Class]”这样可学习的V1-Vn的token…

Docker配置网站环境

Mysql 先安装mysql 启动并后台运行&#xff1a;run -d 容器名称&#xff1a;--name 设置端口映射&#xff1a;-p 主机端口&#xff1a;容器端口 环境变量&#xff1a;-e 最后指定镜像名称 sudo docker run -d \--name mysql\-p 3306:3306\-e MYSQL_ROOT_PASSWORD123456\…

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.0 SP1升级到SP3操作方法(x64)

1、首先安装时候选择升级SQLEXPRADV_x64_CHS.exe。 2、接着安装SQLServer2008R2SP1-KB2528583-x64-sp1补丁后10.50.2500.0。 3、接着安装升级SQLEXPRWT_x64_CHS.exe。 4、继续安装SP3&#xff1a;SQLServer2008R2SP3-KB2979597-x64-CHS。 5、最后安装SP3补丁&#xff1a;SQ…