求一个数组中右边第一个比他大的数(单调栈)

题意思路如标题

int main()
{
    int n;
    cin >> n;
    int a[MAXN];
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
    }
    int dp[MAXN];
    int mie[MAXN];
    memset(dp, 0, sizeof(dp));
    int cnt = n;
    mie[cnt] = INT_MAX;
    for (int i = n - 1; i >= 0; --i) {
        if (cnt <= n && a[i] >= mie[cnt]) cnt++;
        dp[i] = mie[cnt];
        mie[--cnt] = a[i];
    }
    for (int i = 0; i < n; ++i)
        cout << dp[i] << " ";
    return 0;
}

你可能感兴趣的:(求一个数组中右边第一个比他大的数(单调栈))