首页 > 其他 > 详细

5.单调栈

时间:2020-07-11 22:09:38      阅读:77      评论:0      收藏:0      [点我收藏+]

技术分享图片

 单调栈题型

技术分享图片

 暴力做法

技术分享图片

 技术分享图片

 然后寻找性质

技术分享图片

 横轴是下标,纵轴是值

技术分享图片

a[i] 之后要插进来

如果栈顶元素stk[tt] >= a[i]的话,那么stk[tt]就可以被删掉

一直删到找到了一个小于a[i]的栈顶元素为止

如果stk[tt] < a[i]了,那么此时stk[tt]就是我要找的a[i]的左边,离a[i]最近的,且比它小的元素了

输出后,然后再把a[i]插到栈里面去

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N = 100010;
 4 int stk[N], tt;
 5 int main() {
 6     int n;
 7     cin >> n;
 8     for (int i = 0; i < n; i++) {
 9         int x;
10         cin >> x; //每次读入一个x
11         while (tt > 0 && stk[tt] >= x) { //只要栈是不空的,且栈顶元素大于等于x
12             tt--;
13         }
14         if (tt) { //如果还是不空的
15             cout << stk[tt] << " "; //那么栈顶元素就是答案
16         } else {
17             cout << -1 << " "; 
18         }
19         stk[++tt] = x; //加进去
20     }
21     return 0;
22 }

 

5.单调栈

原文:https://www.cnblogs.com/fx1998/p/13285444.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!