#include <iostream>
using namespace std;
const int N = 100010;
int n;
int a[N], s[N], stk[N], tt; // stk栈中存储的是下标i
int main()
{
cin >> n;
for (int i = 1; i <= n; i ++) cin >> a[i];
for (int i = 1; i <= n; i ++)
{
while (tt && a[stk[tt]] < a[i])
{
s[stk[tt]] = i;
tt --;
}
stk[++ tt] = i;
}
for (int i = 1; i <= n; i++) cout << s[i] << endl;
return 0;
}
第二个for循环 为什么不是 for(int i = n; i > 0; i–) 对于当前的牛i 它是往右看的 所以它检查的应该是a[i+1 …n]吧?
采用的是算法基础课中 数组实现单调栈的方法