首页 > 其他分享 >单调栈

单调栈

时间:2023-01-17 12:55:32浏览次数:34  
标签:int 元素 栈底 leq 进栈 单调

单调栈与普通栈的区别

同样作为一种FILO (后进先出)的数据结构, 单调栈在普通栈的基础上增加了一个要求: 栈内元素必须严格单调递增或单调递减
栈顶到栈底严格递增的栈叫单调递增栈, 栈顶到栈底严格递减的栈叫单调递减栈

单调栈原理

元素进栈 (以单调递增栈为例):
\(e\) 是一个待进栈的元素, 从栈顶到栈底遍历元素, 直到栈为空或找到第一个比 \(e\) 大的元素才能让 \(e\) 进栈

由于一共只需操作 \(n\) 个元素, 所以时间复杂度为 \(O(n)\)

实现

模板: 后面第一个大于

题面

有一个长度为 \(n (1\leq n\leq 30000)\) 的序列 \(a (30\leq a_i\leq 100)\) , 对于每个 \(i\) , 求最小的 \(j\) 满足 \(i+j<=n\) 且\(a_{i+j}>a_i\), 如果没有则输出 \(0\)

输入样例

8 73 74 75 71 69 72 76 73

输出样例

1 1 4 2 1 1 0 0

思路

倒着遍历, 用单调递减栈维护序列, 插入时不断弹出小于等于当前数的, 直到发现第一个大于的再进栈。时间复杂度 \(O(n)\)
(如果是正着遍历那么每个数的答案都将为0)

code
#include<bits/stdc++.h>
using namespace std;
const int N=30010;
int a[N],n,res[N];
stack<int>st;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	for(int i=n;i>=1;i--){
		while(!st.empty()&&a[st.top()]<=a[i]) st.pop();
		if(st.empty()) res[i]=0;
		else res[i]=st.top()-i;
		st.push(i);
	}
	for(int i=1;i<=n;i++) printf("%d ",res[i]);
	return 0;
}

标签:int,元素,栈底,leq,进栈,单调
From: https://www.cnblogs.com/myblog-daisy/p/17057531.html

相关文章

  • 单调栈
    单调栈和单调队列通常的做法,用栈或者队列来存储元素,用栈和队列来考虑暴力的模拟方法,然后观察栈和队列里面的元素,看看是否有一些元素完全没用,把这些元素删掉,看看剩余元素是......
  • P1886 滑动窗口 /【模板】单调队列
    滑动窗口/【模板】单调队列题目描述有一个长为\(n\)的序列\(a\),以及一个大小为\(k\)的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的......
  • 单调栈与单调队列
    目录单调栈单调队列栈与队列基础:https://www.cnblogs.com/hellohebin/p/16920864.html单调栈例题洛谷P5788【模板】单调栈洛谷P1901发射站单调队列例题洛谷......
  • 单调队列优化DP
    今天学习了单调队列优化DP,其模型为:\[f_i=\min/\max_{L(i)\lej\leR(i)}\lbracekf_j+val(i,j)\rbrace\]其中\(L,R\)是具有单调性的函数,\(val(i,j)=h_1(i)+h_2(j)\),是分......
  • 基于单调性的 dp 优化
    决策单调性决策单调性一般用于最优性问题当中,即一个状态只能从一个最优的状态转移,该最优状态称之为最优点。决策单调性就是指最优点随dp转移单调移动。一般如果能够将......
  • 23寒假集训二1月3号(单调队列+倍增)
    vjudge上面的题当天是我负责讲题所以写了一下博客,优先队列永远的敌人,一直没太整清楚前置知识倍增//倍增//给定一个数列,共有n个正数,现在有m次询问,每次询问给出一个t,求满......
  • 单调队列
    单调队列前言图床在\(Github\)中,如果访问不了\(Github\),则图片无法加载引入原题链接:P1886滑动窗口/【模板】单调队列-洛谷题意简述:有一个长度为\(n\)的数......
  • 单调队列优化的DP问题
    单调队列优化的DP问题概述单调队列就是通过排除求最值时候的冗余,从而是队列具有性质,可以方便求解问题。DP的两个阶段:朴素DP的基本原理——闫氏DP分析法对朴素DP进行......
  • 打破冬季单调 柯罗芭KLOVA在东方美学和摩登时尚间找寻平衡
    在衣着厚重的冬日,为了御寒舍弃了很多“漂亮的衣服”,但智慧的女人总能在保暖之余还留有一隅浪漫,放大服装的力量,展示个人魅力。随着冬季衣橱换新,柯罗芭KLOVA带来诚意......
  • Codeforces 1373 D. Maximum Sum on Even Positions 做题记录(单调队列)
    因为只能转一个子数组,很显然转长度为奇数的子数组,对最大化答案是没有意义的(偶数位的数字之和不会变化)。因此只考虑转偶长度的子数组。转动偶数长度的子数组,相当于......