分析:
单调栈倒着做 a n s ans ans就是栈顶到第一个找出最大的距离
CODE:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
#define reg register
using namespace std;
typedef long long ll;
const int N=3e4+5;
int n,ans[N],a[N];
stack<int> st;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=n;i>=1;i--)
{
while(!st.empty()&&a[st.top()]<=a[i]) st.pop();
(st.empty())?ans[i]=0:ans[i]=st.top()-i;
st.push(i);
}
for(int i=1;i<=n;i++)
printf("%d ",ans[i]);
return 0;
}