首页 > 其他分享 >单调栈

单调栈

时间:2024-09-10 17:35:47浏览次数:1  
标签:cnt sta int ++ arr -- 单调

题目:

AcWing 830. 单调栈:https://www.acwing.com/problem/content/832/
B:https://codeforces.com/gym/105158


解决问题:
得到一个数左边或右边第一个≥(>)或≤(<)它的数


模板:

// AcWing 830. 单调栈
#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int arr[N], v[N], sta[N];
// 栈顶 sta[cnt]
// 入栈 sta[++ cnt] = input;
// 出栈 output = sta[cnt --];
// 栈是否为空 if !cnt <=> if sta.empty()
int cnt = 0;
int main()
{
    int n;
    cin >> n;
    for(int i = 1; i <= n; ++ i)
        scanf("%d",&arr[i]);
    for(int i = n; i >= 1; -- i)
    {
        if(!cnt || arr[i] >= arr[sta[cnt]])
            sta[++ cnt] = i;
        else
        {
            while(cnt && arr[i] < arr[sta[cnt]])
                v[sta[cnt --]] = arr[i];
            sta[++ cnt] = i;
        }
    }
    while(cnt)
        v[sta[cnt --]] = -1;
    for(int i = 1; i <= n; ++ i)
        printf("%d ",v[i]);
    return 0;
}

标签:cnt,sta,int,++,arr,--,单调
From: https://www.cnblogs.com/Frodnx/p/18406840

相关文章

  • 洛谷题单指南-常见优化技巧-P1886 滑动窗口 /【模板】单调队列
    原题链接:https://www.luogu.com.cn/problem/P1886题意解读:单调队列模版题。解题思路:采用双端队列维护单调的序列,单调队列三部曲:1、去头,当窗口内元素个数超过k,队头出队2、去尾,当要加入的元素会破坏单调性,队尾出队3、入队,将元素的下标存入队列每一次入队后,队头元素即为窗口最......
  • 告别单调,Xmind思维导图之后还有这三款神器,让学习工作更愉快
    这年头信息量爆炸,我们得想办法把事情想清楚、把活儿排排好、学点新玩意儿。思维导图这东西,因为它画出来一目了然,用起来也简单,所以特别受学生们和上班的人的欢迎。在这么多画思维导图的软件里,Xmind因为功能全、界面不复杂,挺招人喜欢的。不过,除了Xmind思维导图,还有几个软件也挺好......
  • CF1715E. Long Way Home -决策单调性、图
    link:https://codeforces.com/contest/1715/problem/E有\(n\)座城市,城市间有\(m\)条双向道路,通过第\(i\)条道路需要花费\(w_i\)的时间,任意两个城市之间都有航班,乘坐城市\(u\)和\(v\)之间的航班需要花费\((u-v)^2\)的时间。现在请对于任意城市\(i(1\lei\len)\)......
  • 单调队列
    单调队列经典用法:维持滑动窗口滑动过程中的最大值或最小值。最大值时,单调队列从头到尾降序维持求解答案的可能性单调队列里所有对象按照规定好的单调性组织当某个对象从队尾进入单调队列时,会从队头或者队尾依次淘汰单调队列里,对后续求解答案没有帮助的对象每个对象一旦弹出......
  • 第十章 单调栈 Part2
    目录任务42.接雨水思路84.柱状图中最大的矩形思路任务42.接雨水给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。思路按照横向计算,单调栈的思路得到left和right,然后得到h和w,最终累加结果。classSolution:deftrap(se......
  • 第十章 单调栈 Part1
    目录任务739.每日温度思路496.下一个更大元素I思路503.下一个更大元素II思路任务739.每日温度给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0......
  • 单调栈
    单调栈经典用法:在数组中当前元素的两侧找第一个比当前元素更大(更小)的数在哪维持求解答案的可能性单调栈里的所有对象按照规定好的单调性来组织当某个对象进入单调栈时,会从栈顶开始依次淘汰单调栈里对后续求解答案没有帮助的对象每个对象从栈顶弹出时结算当前对象参......
  • 738. 单调递增的数字(leetcode)
    https://leetcode.cn/problems/monotone-increasing-digits/description/classSolution{publicintmonotoneIncreasingDigits(intn){//返回单调递增的最大数字//思路比较巧妙的贪心题,需要仔细考虑两个相邻位之间的比较//一旦发现有前一......
  • 单调队列--滑动窗口最大值(leetcode23)
    目录一、单调队列介绍二、题目应用1.题目描述2.解题碎碎念3.代码示例三、扩展1.与优先队列区别2.单调队列其他题目一、单调队列介绍单调队列是一种特殊的队列数据结构,它能够在常数时间内找到队列中的最值。单调队列可以用来解决一些与最值相关的问题,例如滑动窗口最......
  • P5788 【模板】单调栈
    P5788【模板】单调栈传送门题目描述给出项数为\(n\)的整数数列\(a_{1\dotsn}\)。定义函数\(f(i)\)代表数列中第\(i\)个元素之后第一个大于\(a_i\)的元素的下标,即\(f(i)=\min_{i<j\leqn,a_j>a_i}\{j\}\)。若不存在,则\(f(i)=0\)。试求出\(f(1\dotsn)\)。......