单调栈_c++


如果输入一个数以后,小于前面数字,则对于后面的数来说,当前输入的这个数字必然优于前面的数字,则将前面大于这个数的数字全部删掉,如果删为空,则证明没有结果,如此保证一个单调递增的栈

#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
stack<long long> a;
for(int i=0;i<n;i++)
{
long long m;
cin>>m;
while(!a.empty()&&a.top()>=m) a.pop();
if(a.empty()) cout<<"-1 ";
else cout<<a.top()<<" ";
a.push(m);
}
return 0;
}