在数组中求每个元素之后第一个比它严格大的数的下标
思路:
单调栈:递减,存储下标
从后往前遍历数组
#include <bits/stdc++.h>
using namespace std;
const int N=3e6+5;
int a[N],n,b[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n;
for(int i=1;i<=n;i++)
cin >> a[i];
stack<int> s;//单调递减栈,存储下标
for(int i=n;i>=1;i--)
{
while(!s.empty()&&a[i]>=a[s.top()])
s.pop();
b[i]=s.empty()?0:s.top();
s.push(i);
}
for(int i=1;i<=n;i++)
printf("%d ",b[i]);
return 0;
}