解题思路
用数组存所有数,maxn数组存当前项与后面所有项的最大值
然后从左到右依次入栈,如果碰到当前项比后面的项都大,那就出栈打印出来
代码
#include<bits/stdc++.h> using namespace std; int main() { int n,a[1000100],maxn[1000100],i; //数组一定记得开这么大的,有次提交少个0就错了 cin>>n; for(i=0;i<n;i++)cin>>a[i]; for(i=n-1;i>=0;i--)maxn[i]=max(maxn[i+1],a[i]); //maxn数组存当前项与后面所有项的最大值 stack<int> st; for(i=0;i<n;i++) { st.push(a[i]); //从左到右依次入栈 while(!st.empty()&&st.top()>maxn[i+1]){cout<<st.top()<<' ';st.pop();} //如果碰到当前项比后面的项都大,那就出栈打印出来 } while(!st.empty()) { cout<<st.top()<<' '; st.pop(); } }