830. 单调栈
维护一个单调升的栈即可。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
stack<int> st;
while(n--) {
int x;
cin>>x;
while(!st.empty() && st.top() >= x) st.pop();
if(st.empty()) cout<<-1<<" ";
else cout<<st.top()<<" ";
st.push(x);
}
return 0;
}
其实我们不仅可以求出左边第一个比它小的数,还可以求出右边第一个比它小的数。