单调栈模版

单调栈需要两个数组,一个值数组,一个模拟栈数组,拿一道题来举例。

模拟栈数组中存储下标,单调栈顾名思义单调增或者单调减,并不是索引单调增或者单调减,这意义,我们要的是索引对应的值单调增或者单调减,这道题中我们显然是要单调减。我们知道在单增的序列中当前值永远比左边的的大,那么依照题意我们要找到左边第一个比当前值大的数,然后它们之间有多少个数便是题目要求的答案,那左边第一个比当前值大的数和当前值是不是构成一个单调减序列,只要将两者下标相减即可。

代码如下。

cpp 复制代码
int main() {
	int n,len=0;
	std::cin >> n;
	std::vector<int>a(n + 1), b(n + 1);
	for (int i = 1; i <= n; i++)std::cin >> a[i];
	for (int i = 1; i <= n; i++) {
		while (a[i] > a[b[len]] && len)len--;
		if (len == 0)std::cout << i - 1 << '\n';
		else std::cout << i - b[len] - 1 << '\n';
		b[++len] = i;
	}
	return 0;
}
相关推荐
飞Link16 小时前
动作方法中的分割与过度分割方法全解析(含代码实战与踩坑案例)
人工智能·python·算法·计算机视觉
张宇Joaquin17 小时前
鲲鹏统一并行加速库KUPL--异步数据拷贝
线性代数·算法·矩阵·numpy
GlobalInfo17 小时前
创新不是追逐热点,是在变化中建立长期竞争力
大数据·算法
lvwangshu17 小时前
线性代数基础 Linear Algebra Basics
数学·算法
ZhouDevin17 小时前
算法论文/数据集5——AlignPrune(CVPR2026)基于样本损失时间序列精确识别噪声样本
算法
十铭忘18 小时前
HMM(隐马尔可夫模型)的理解7——Baum–Welch 算法
人工智能·算法
明月_清风19 小时前
十大经典排序算法 Go 实现全解:从入门到面试通关
后端·算法·排序算法
liliangcsdn19 小时前
如何对IC时间序列进行汇总统计分析示例
人工智能·算法·机器学习
土司大王19 小时前
LeetCode hot100——缺失的第一个正数
数据结构·算法·leetcode
Cccp.12319 小时前
【leetcode】(二)认识O(NlogN)的排序
算法·leetcode