import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.Stack; // 参考:https://chat.deepseek.com/share/xbfwwa19v00i85knpb public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int N = in.nextInt(); int[] arr = new int[N]; // 顺序遍历存入arr for(int i = 0;i<N;i++){ arr[i] = in.nextInt(); } // 贪心算法 // 计算每个位置之后的最大值 int[] maxAfter = new int[N+1]; maxAfter[N] = 0; // 输入:2 1 5 3 4 // maxAfter: 5 5 5 4 4 0 for(int i = N-1;i>=0;i--){ maxAfter[i] = Math.max(arr[i],maxAfter[i+1]); } Stack<Integer> st = new Stack<>(); List<Integer> res = new ArrayList<>(); // 顺序入栈 for(int i = 0;i<N;i++){ st.push(arr[i]); // 出栈时机:当栈顶元素大于后续未入栈元素,就出栈(因为这是当前能出的最大数) while(!st.isEmpty() && st.peek() >= maxAfter[i+1]){ res.add(st.pop()); } } for(int i = 0;i<res.size();i++){ System.out.printf("%d",res.get(i)); if(i != res.size()-1){ System.out.printf(" "); } } } }