单调栈模版

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

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

代码如下。

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;
}
相关推荐
MobotStone2 小时前
Google发布Nano Banana 2:更快更便宜,图片生成能力全面升级
算法
颜酱6 小时前
队列练习系列:从基础到进阶的完整实现
javascript·后端·算法
用户5757303346246 小时前
两数之和:从 JSON 对象到 Map,大厂面试官到底在考察什么?
算法
程序猿追6 小时前
“马”上行动:手把手教你基于灵珠平台打造春节“全能数字管家”
算法
ZPC821021 小时前
docker 镜像备份
人工智能·算法·fpga开发·机器人
ZPC821021 小时前
docker 使用GUI ROS2
人工智能·算法·fpga开发·机器人
琢磨先生David21 小时前
Day1:基础入门·两数之和(LeetCode 1)
数据结构·算法·leetcode
颜酱21 小时前
栈的经典应用:从基础到进阶,解决LeetCode高频栈类问题
javascript·后端·算法
多恩Stone21 小时前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
生信大杂烩1 天前
癌症中的“细胞邻域“:解码肿瘤微环境的空间密码 ——Nature Cancer 综述解读
人工智能·算法