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

单调栈(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.xdnf.cn/news/1560533.html

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

相关文章

数据交换的金钟罩:合理利用安全数据交换系统,确保信息安全

政府单位为了保护网络不受外部威胁和内部误操作的影响&#xff0c;通常会进行网络隔离&#xff0c;隔离成内网和外网。安全数据交换系统是专门设计用于在不同的网络环境&#xff08;如内部不同网络&#xff0c;内部网络和外部网络&#xff09;之间安全传输数据的解决方案。 使用…

DVWA | DVWA 靶场初识

关注这个靶场的其它相关笔记&#xff1a;DVWA —— 靶场笔记合集-CSDN博客 0x01&#xff1a;DVWA 靶场简介 DVWA&#xff08;Damn Vulnerable Web Application&#xff09;是一个 PHP/MySQL 的 Web 应用程序&#xff0c;它被故意设计成包含多种安全漏洞&#xff0c;以便为网络…

正点原子学习笔记之汇编LED驱动实验

1 汇编LED原理分析 为什么要写汇编     需要用汇编初始化一些SOC外设     使用汇编初始化DDR、I.MX6U不需要     设置sp指针&#xff0c;一般指向DDR&#xff0c;设置好C语言运行环境 1.1 LED硬件分析 可以看到LED灯一端接高电平&#xff0c;一端连接了GPIO_3上面…

安卓手机平板远程访问内网服务器中安装的code-server编程开发实战

文章目录 前言1.Ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址6.结语 前言 本文主要介绍如何在Linux Ubuntu系统安装code-server&#xff0c;并结合cpolar内网穿透工具配置公网地址&#xff0c;轻松实现使用安…

【开源免费】基于SpringBoot+Vue.JS医院电子病历管理系统(JAVA毕业设计)

本文项目编号 T 008 &#xff0c;文末自助获取源码 \color{red}{T008&#xff0c;文末自助获取源码} T008&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 医…

YOLOv10改进策略【注意力机制篇】| 引入MobileNetv4中的Mobile MQA,提高模型效率

一、本文介绍 本文记录的是基于Mobile MQA模块的YOLOv10目标检测改进方法研究。MobileNetv4中的Mobile MQA模块是用于模型加速&#xff0c;减少内存访问的模块&#xff0c;相比其他全局的自注意力&#xff0c;其不仅加强了模型对全局信息的关注&#xff0c;同时也显著提高了模…

Spring Boot洗衣店订单系统:简化您的业务流程

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…

JavaScript 常量/数据类型/类型转换 简单学习

目录 1. 常量 1.1 常量概述 1.2 案例 1.3 总结 2. 数据类型 2.1 概述 2.2 分类 2.2.1 基本数据类型 2.2.1 基本数据类型——number (数值/字型) 2.2.1 数字型——算术运算符 2.2.1 基本数据类型——String (字符串类型) 2.2.1 字符串拼接 2.2.1 模板字符串 2.2.1…

VMwareWorkstation安装KylinV10sp3(银河麒麟)系统教程

版本说明 VMware版本如下 OS版本如下 创建虚拟机 点击创建新的虚拟机 按图下所示选择&#xff0c;点击下一步 按照图下所示选择&#xff0c;点击下一步 按照图下所示选择&#xff0c;点击下一步 按照图下所示选择&#xff0c;点击下一步 设置虚拟机名称&#xff0c;点击下一步…

java-02 数据结构-队列

在Java中&#xff0c;队列是一种常见的数据结构&#xff0c;用于在保持顺序的同时存储和检索数据。Java提供了java.util.Queue接口&#xff0c;它的常见实现包括ArrayDeque、LinkedList和PriorityQueue等。 如果你觉得我分享的内容或者我的努力对你有帮助&#xff0c;或者你只…

git删除错误的commit

git的流程如图&#xff1a; 当某次失误造成commit的版本有问题&#xff0c;需要回退到正常的版本修改后重新add。 首先通过git log查看commit提交记录&#xff0c;可以看到HEAD->mater是本地最新的commit&#xff0c;而origin/master, origin/HEAD是远程仓库上的最新记录…

Golang | Leetcode Golang题解之第467题环绕字符串中唯一的子字符串

题目&#xff1a; 题解&#xff1a; func findSubstringInWraproundString(p string) (ans int) {dp : [26]int{}k : 0for i, ch : range p {if i > 0 && (byte(ch)-p[i-1]26)%26 1 { // 字符之差为 1 或 -25k} else {k 1}dp[ch-a] max(dp[ch-a], k)}for _, v :…

【GT240X】【3】Wmware17和Centos 8 安装

文章目录 一、说明二、安装WMware2.1 下载WMware2.2 安装2.3 虚拟机的逻辑结构 三、安装Centos3.1 获取最新版本Centos3.2 创建虚拟机 四、问题和简答4.1 centos被淘汰了吗&#xff1f;4.2 centos里面中文显示成小方块的解决方法4.3 汉语-英语输入切换4.4 全屏和半屏切换 五、练…

【mmsegmentation】Backbone模块(进阶)自定义自己的BACKBONE

1、定义自己的backboe driving\models\backbones\efficientnetlite.py import math import torch import torch.nn as nn import torch.functional as F from mmengine.model import BaseModule from mmseg.models import BACKBONES, build_backboneefficientnet_lite_params …

双主轴车床的优势

双主轴车床作为现代制造业中的一项重要技术&#xff0c;其优势显而易见。下面我将从几个方面详细阐述双主轴车床的优势&#xff1a; ‌一、提高生产效率‌ ‌并行加工‌&#xff1a;双主轴车床最大的特点在于其能够同时在两个主轴上进行加工&#xff0c;这种并行加工方式使得在…

苍穹外卖--分页查询

pagehelper插件 先导入坐标 重点代码&#xff1a;service层 利用pagehelper动态拼接limit语句 不用在mapper中写limit 底层利用localthread来传递数据 时间显示不规范 解决方式&#xff1a; 方式一&#xff1a;在属性上加入注解&#xff0c;对日期进行格式化 方式二&#x…

vue基础(总结很详细)

vue 基础 1. vue 是什么&#xff1f; Vue.js &#xff08;读音 /vju ː /, 类似于 view &#xff09; 是一套构建用户界面的渐进式框架。 Vue 只关注视图层&#xff0c; 采用自底向上增量开发的设计。 Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图…

set的基本用法 和 底层简单了解

在前面&#xff0c;已经了解过搜索二叉树了&#xff0c;也了解了一点红黑树的内容&#xff08;不太了解的可以先查看前面的内容哦&#xff09;&#xff1b;现在我们了学习一下&#xff0c;底层以红黑树实现&#xff0c;遍历以搜索树的中序实现的set/multset&#xff1b; 序列式…

Java | Leetcode Java题解之第470题用Rand7()实现Rand10()

题目&#xff1a; 题解&#xff1a; class Solution extends SolBase {public int rand10() {int a, b, idx;while (true) {a rand7();b rand7();idx b (a - 1) * 7;if (idx < 40) {return 1 (idx - 1) % 10;}a idx - 40;b rand7();// get uniform dist from 1 - 63…

如何实现MySQL异地多活场景

作为现代化的互联网企业 &#xff0c;最怕的是什么 &#xff1f;是意外&#xff01;由各种意外导致的数据库问题&#xff0c;磁盘问题、网络问题、人员误操作问题等等&#xff0c;这些问题都可能导致数据不可用或者丢失&#xff0c;造成重大损失。因此&#xff0c;很少会有企业…