单调栈的应用,通过倒序遍历从后往前得出单调递增栈(比当前元素大的元素在栈底,小于等于的出栈),遍历的元素答案即为栈顶元素或0,
#include <stdio.h>
int main(){
    int n;
    long long arr[3000005];
    int ans[3000005];
    int p[3000005],top=-1;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%lld",&arr[i]);
    }
    for(int i=n;i>=1;i--){
            while(top>=0&&arr[i]>=arr[p[top]]) top--;
        if(top==-1){
            ans[i]=0;
            p[++top]=i;
        }else{
            ans[i]=p[top];
            p[++top]=i;
        }
            
    }
    for(int i=1;i<=n;i++){
        printf("%d ",ans[i]);
    }
    return 0;
}