贪心思想每次都选最大的数
如果当前位置的元素比后面的元素都大,就选择这个元素,选择之后就踢掉这个元素,因为踢掉了这个元素那么当前位置前面的元素也就有可能是最大的,所以枚举前面的元素

#include <iostream>
#include <stack>
using namespace std;
const int maxn = 1000010;
int arr[maxn];
int nums[maxn];
stack<int>s;
int main()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> nums[i];
    }
    for (int i = n; i >= 1; i--) {
        arr[i] = max(nums[i],arr[i + 1]);
    }
    for (int i = 1; i <= n; i++) {
        while (!s.empty() && s.top() > arr[i]) {
            cout << s.top() << " ";
            s.pop();
        }
        s.push(nums[i]);
    }
    while (!s.empty()) {
        cout << s.top() << " ";
        s.pop();
    }
}