单调栈模版

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

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

代码如下。

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;
}
相关推荐
alphaTao14 小时前
LeetCode 每日一题 2026/7/6-2026/7/12
算法·leetcode
想吃火锅100514 小时前
【leetcode】56.合并区间js
算法·leetcode·职场和发展
imuliuliang14 小时前
可合并堆在多任务调度中的优势与实现技巧7
算法
学究天人14 小时前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(卷6)
网络·算法·数学建模·动态规划·几何学·图论·拓扑学
wabs66614 小时前
关于动态规划【力扣72.编辑距离的思考】
算法·leetcode·动态规划
用户3332397688415 小时前
我做了一个 RepoMind:让 AI 写架构前,先去看看真实开源项目
算法
chh56315 小时前
C++--list
开发语言·数据结构·c++·学习·算法·list
killerbasd15 小时前
总结 7。10
人工智能·算法·机器学习
林间码客15 小时前
RAG系统评估指南:从入门到实践
人工智能·算法·机器学习
凌波粒15 小时前
LeetCode--47.全排列 II(回溯算法)
算法·leetcode·职场和发展