单调栈模版

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

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

代码如下。

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;
}
相关推荐
老歌老听老掉牙8 小时前
两个平面旋转平移坐标系间的坐标变换关系
python·算法·平面·旋转·平移
W.A委员会8 小时前
PID与PID整定
python·算法
冷雨夜中漫步8 小时前
YOLO快速入门——(2)YOLO V26安装与快速入门
图像处理·算法·yolo·计算机视觉
longlongzihan8 小时前
LeetCode 41. 缺失的第一个正数:从基础解法到原地哈希
c++·算法·leetcode
Omics Pro9 小时前
强生:以机理为中心!虚拟细胞世界模型
数据库·人工智能·python·深度学习·算法·机器学习·自然语言处理
FPGA信号处理9 小时前
【凸优化】第一节课(下):保凸运算、分离超平面与 Farkas 引理
人工智能·算法·机器学习
怕浪猫9 小时前
Agent 的记忆系统怎么设计?面试官想听的是这个
算法·面试·github
C++ 老炮儿的技术栈9 小时前
C++ const 的3个核心作用
服务器·c语言·c++·算法·c
有毒的教程9 小时前
Dev-C++ 避免爆栈(Stack Overflow)完整方案
c++·算法·深度优先
在所不辞兄10 小时前
刚性问题误差容限设置技巧
深度学习·神经网络·算法·机器学习