题解:
单调栈
一个一个压入
然后比下面高就弹出
代码:
#include<bits/stdc++.h> using namespace std; const int N=2e5+5; int n,tot,a[N],z[N],f[N]; int main() { scanf("%d",&n); for (int i=1;i<=n;i++)scanf("%d",&a[i]); for (int i=n;i;i--) { while (tot&&a[z[tot]]<=a[i])tot--; z[++tot]=i; f[i]=z[tot-1]; } for (int i=1;i<=n;i++)printf("%d\n",f[i]); }