#include <iostream> #include <vector> #include <stack> #include <algorithm> // for std::max using namespace std; void fast_io()//提速 { ios_base::sync_with_stdio(false); //解耦C和C++的I/O,使得cin与cout的速度与scanf和printf相近 cin.tie(NULL); //解除cin与cout的绑定 cout.tie(NULL); //解除cout与其它流的绑定 } int main() { fast_io(); int n; scanf("%d",&n); vector<int> p(n); for(int j=0;j<n;j++) scanf("%d",&p[j]); vector<int> next_greater(n);//存储从p[i]到p[n-1]的最大数 next_greater[n-1]=p[n-1]; for(int i=n-2;i>=0;i--) { next_greater[i]=max(next_greater[i+1],p[i]); } stack<int>s; vector<int>result; int i=0;//遍历p while(i<n||!s.empty()) { if(!s.empty()&&(i>=n||s.top()>next_greater[i])) //贪心:若栈顶元素大于后面所有元素,则出栈,否则入栈。 { result.push_back(s.top()); s.pop(); } else { s.push(p[i]); i++; } } //打印 for(int k=0;k<result.size();k++) { if(k>0) printf(" "); printf("%d",result[k]); } }