思路:先将所有数字读入num,然后计算每个数字后面的最大的数字,存储在p数组。

接着遍历num,将每个数字入栈,如果当前num[i]等于p[i]说明找到最大数字,将它直接输出。

接着我们要看栈顶元素是否大于后面即将要入栈的元素,如果大于我们要把它优先输出。

代码实现:


#include<bits/stdc++.h>
using namespace std;
const int N=2000010;
typedef long long ll;
typedef pair<int,int> PII;
int num[N],p[N];
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	int n;
	cin >> n;
	int ma = -1;
	for(int i = 0; i < n; i ++) cin >> num[i];
	for(int i = n - 1; i >= 0; i --){
		ma = max(ma,num[i]);
		p[i] = ma;
	}
//	for(int i = 0; i < n; i ++) cout << p[i] << ' ';
	stack<int> st;
	for(int i = 0; i < n; i ++){
		st.push(num[i]);
		if(st.top() == p[i]){
			cout << st.top() << ' ';
			st.pop();
			while(!st.empty() && st.top() > p[i+1]){
				cout << st.top() << ' ';
				st.pop();
			}
		}
	}
	while(!st.empty()){
		cout << st.top() << ' ';
		st.pop();
	}
	return 0;
}