思路:先将所有数字读入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;
}