申明
再次申明这个专栏只是分享博主学习数据结构时的顺序,给新手提供一个入门的好方法(博主现在也是新手所以博主写的代码适合C转C++的新手学习),具体算法逻辑需要自己学习,代码区域有部分解释,因此有错误可以私信或者直接在评论区骂。
前言
需要大家掌握栈的知识,单调栈顾名思义就是单调递增的栈,额额额又说废话了,单调栈解决的问题是一个数组中的数,距离他最近的比他小或者大的数是什么,因为用栈实现并且形成的栈是单调的因此叫做单调栈。。。
题目链接
P5788 【模板】单调栈 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
后续会补充,现在时间太紧了,只能半夜发文章
代码
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
#include<string>
using namespace std;
const int N=1e7+10;
int arr[N];
int zhai[N];
int mem[N];
int n,x;
int tt=0;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&arr[i]);
for(int i=n;i>=1;i--)
{
while(tt&&arr[i]>=arr[zhai[tt]]) tt--;
if(tt) mem[i]=zhai[tt];
zhai[++tt]=i;
}
for(int i=1;i<=n;i++)
printf("%d ",mem[i]);
return 0;
}