单调栈(c++)

干货

先讲讲单调栈

单调栈,就是只有递增或递减的栈。(单调递减栈单调递增栈

给一个数组,让它们进入单调递减栈的规则是:

如果栈为空,直接进入;

如果要进入的数小于等于栈顶的数,则直接进入;

如果要进入的数大于栈顶的数,就删除栈顶的数,重复直到进入的数小于等于栈顶的数,然后进入。

单调递增栈反之。

题目

每日温度

给定一个数 n ,接下来 n 个数,表示每天的温度,返回一个数组 c ,其中 c [ i ] 是指对于第 i 天下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0来代替。

示例 1:
输入:

8

73 74 75 71 69 72 76 73

输出

1 1 4 2 1 1 0 0

示例 2:
输入

4

30 40 50 60
输出

1 1 1 0

示例 3:
输入:

3

30 60 90
输出:

1 1 0

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
struct aaaaa
{
	int aa,ii;
};
stack<aaaaa> b;
int a[100010];
int c[100010];
int n;
int main()
{
	cin>>n;
	for(int i = 1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(int i = 1;i<=n;i++)
	{
		aaaaa w;
		w.aa = a[i];
		w.ii = i;
		if(b.empty()==true) b.push(w);
		else
		{
			if(w.aa<=b.top().aa) b.push(w);
			else
			{
				while(true)
				{
					if(b.empty()==true||w.aa<=b.top().aa) break;
					c[b.top().ii] = i-b.top().ii;
					b.pop();
				}
				b.push(w);
			}
		}
	}
	
	for(int i = 1;i<=n;i++)
	{
		cout<<c[i]<<" ";
	}
	
	return 0;
}

柱状图中的最大矩形

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
struct aaaaa
{
	int aa,ii;
};
stack<aaaaa> b;
int a[100010];
int n;
int ma,cnt;
int main()
{
	cin>>n;
	for(int i = 1;i<=n;i++)
	{
		cin>>a[i];
	}
	a[++n] = 0;
	for(int i = 1;i<=n;i++)
	{
		aaaaa w;
		w.aa = a[i];
		w.ii = i;
		if(b.empty()==true) b.push(w);
		else
		{
			if(w.aa>=b.top().aa) b.push(w);
			else
			{
				while(true)
				{
					if(b.empty()==true||w.aa>=b.top().aa) break;
					ma = max(ma,(i-b.top().ii)*b.top().aa);
					b.pop();
				}
				b.push(w);
			}
		}
	}
	cout<<ma;
	return 0;
}
相关推荐
郭涤生18 分钟前
C++模板元编程理论基础简介
c++
CheerWWW32 分钟前
C++学习笔记——栈内存与堆内存、宏、auto、std::array
c++·笔记·学习
WBluuue41 分钟前
数据结构与算法:二项式定理和二项式反演
c++·算法
yashuk1 小时前
C语言 vs. C++ ,哪个更适合初学者?
c语言·c++·面向对象编程·初学者·学习路径
-许平安-1 小时前
MCP项目笔记十(客户端 MCPClient)
c++·笔记·ai·raii·mcp·pluginapi·plugin system
一只旭宝1 小时前
【C++ 入门精讲2】函数重载、默认参数、函数指针、volatile | 手写笔记(附完整代码)
c++·笔记
泛凡(Linyongui)1 小时前
PY32F002B实践之四--宠物腹背理疗仪项目踩坑及项目总结复盘
c语言·keil·32位单片机·腹背理疗仪项目实践·普苒py32
旖-旎1 小时前
哈希表(存在重复元素||)(4)
数据结构·c++·算法·leetcode·哈希算法·散列表
Hello小赵1 小时前
C语言如何自定义链接库——编译与调用
android·java·c语言
John.Lewis1 小时前
C++进阶(8)智能指针
开发语言·c++·笔记