题解:

单调栈

一个一个压入

然后比下面高就弹出

代码:

#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]); 
}

 

posted on 2018-01-06 11:22  宣毅鸣  阅读(94)  评论(0编辑  收藏  举报