单调栈

题目描述

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

【输入格式】

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

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

【输出格式】

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

【数据范围】

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

【输入样例】

5
3 4 2 7 5

【输出样例】

-1 3 -1 2 2

 

 

 1 #include <iostream>
 2 #include <stack>
 3 using namespace std;
 4 stack<int> s;
 5 int n;
 6 int main()
 7 {
 8     cin >> n;
 9     for(int i = 0;i < n;++i)
10     {
11         int num;
12         cin >> num;
13         while(s.size() && s.top() >= num)
14             s.pop();
15         if(!s.size())
16             cout << -1 << " ";
17         else
18             cout << s.top() << " ";
19         s.push(num);
20     }
21     return 0;
22 }

 

posted @ 2021-10-17 15:31  Modest-Hamilton  阅读(30)  评论(0)    收藏  举报