​题目传送门​​​ 单调队列
代码:

#include<bits/stdc++.h>
using namespace std;

const int maxn=10000+100;

struct Que{

int val,id;
}que[maxn];
int ans[maxn];

int main(){

int top=0;
int n;
scanf("%d",&n);
for(int i=1,val;i<=n;i++){

scanf("%d",&val);
while(top && que[top].val<val) ans[que[top].id]=i,top--;
que[++top]=Que{val,i};
}
for(int i=1;i<=n;i++) printf("%d%c",ans[i],i==n?'\n':' ');
}