单调栈模版

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

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

代码如下。

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;
}
相关推荐
垆边人似月.9 小时前
删边使每个连通块权值和为 target
算法·深度优先·图论
xxwl5859 小时前
区域赛算法模版第四章---数据结构
数据结构·c++·算法
xxwl5859 小时前
第六章---计算几何
笔记·学习·算法
Logic10110 小时前
C语言/数据结构二维数组题解:找出行列O个数均为偶数的格子——奇偶性预处理+二次遍历
c语言·数据结构·算法·二维数组·时间复杂度·动态内存分配·奇偶性
程序猿阿森11 小时前
【机器学习实战】朴素贝叶斯算法详解:从概率基础到商品评论情感分析
算法·机器学习·概率论
xxwl58511 小时前
区域赛算法模版第五章---数学与数论
c++·笔记·算法
看浪的路人11 小时前
第6讲:Agent 安全体系——Prompt 注入防御、工具调用审计与输出合规
人工智能·算法
局部有解11 小时前
LeetCode Hot100 438 找到字符串中所有字母异位词
c++·算法·leetcode
垆边人似月.11 小时前
移动长度 k 子串使字符串变成回文
数据结构·算法
pride.li12 小时前
第12章 Python 教程-流程控制:循环结构
linux·服务器·python·算法