码迷,mamicode.com
首页 > 其他好文 > 详细

单调栈

时间:2020-07-18 16:07:39      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:strong   范围   整数   color   www   个数   递增   XML   nbsp   

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

输入格式

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

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

输出格式

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

数据范围

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

输入样例:

5
3 4 2 7 5

输出样例:

-1 3 -1 2 2

 

构造单调栈

      求一个数左边比第一个比它小的数,我们就可以构造单调递增栈,如果st[tt] >= x说明栈顶元素大于新元素x,则弹栈,直到栈为空,或者栈顶元素小于新元素x,则可以构造单调递增栈,判断一下栈是否为空,若为空说明左边没有比新元素小的元素,则输出-1,否则就输出栈顶元素即可。

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 const int N = 100010;
 6 
 7 int n;
 8 int stk[N], tt;
 9 
10 int main()
11 {
12     cin >> n;
13 
14     for(int i = 0; i < n; i++)
15     {
16         int x;
17         cin >> x;
18         while(tt && stk[tt] >= x) tt--;
19         if(tt) cout << stk[tt] << " ";
20         else cout << -1 << " ";
21 
22         stk[++tt] = x;
23     }
24 
25     system("pause");
26     return 0;
27 }

 

单调栈

标签:strong   范围   整数   color   www   个数   递增   XML   nbsp   

原文地址:https://www.cnblogs.com/ZhengLijie/p/13335709.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!