单调栈

单调栈y总是用数组来模拟栈,据说这样比STL的效率高,但之前栈的板子都写了每一步操作的意思,在单调栈里面我还在纠结下标等等的一些问题...

实际上不用哈;

单调栈主要的应用是找出一段序列里面的任意一个数的左边离它最近小于这个数的数字

怎么说呢

单调栈本质的操作就是,如果栈不空,且满足条件那一定就是栈顶元素,最后把当前的数压到栈里面

实际上就是排除一些永远不可能被当成答案的数字

acwing上最高赞的题解里有个图,很具体,那个一看就懂

单调栈:

给定一个长度为 NN 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 1−1。

输入格式

第一行包含整数 NN,表示数列长度。

第二行包含 NN 个整数,表示整数数列。

输出格式

共一行,包含 NN 个整数,其中第 ii 个数表示第 ii 个数的左边第一个比它小的数,如果不存在则输出 1−1。

数据范围

1N1051≤N≤105
11091≤数列中元素≤109

输入样例:

5
3 4 2 7 5

输出样例:

-1 3 -1 2 2
好像明白了,唔。
复制代码
#include<iostream>
using namespace std;
const int N=100010;
int stk[N],tt;
int main(){
    int n;
    cin>>n;
    while(n--)
    {
        int x;
        cin>>x;
        while(tt&&stk[tt]>=x) tt--;//开始检查如果大于x就出栈,求最靠近的数,出栈的这些数也用不到 
        if(!tt) printf("-1 ");
        else printf("%d ",stk[tt]);//栈顶的数字 
        stk[++tt]=x;//新的数压到栈里面 
    }
    return 0;
}
复制代码

Orz

 
posted @   小志61314  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示