A

啊这,n方能过,白用nlog了,还好有板子

hhhhhhhhhh

#include<iostream>
#include<sstream>
#include<fstream>
#include<iomanip>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<string>
#include<map>
#include<set>
#include<ctime>
#include<bitset>
#include<iterator>
#define bug cout<<"-----------"<<endl;
#define ll  long long
#define ull unsigned long long
#define pb push_back
#define mp make_pair
#define pi pair<int, int>
#define fi first
#define se second
using namespace std;
const int N=1e5+5,M=1e9+7;
const ull base=13331;
const double Pi=acos(-1.0);
const int inf=0x3f3f3f3f;
inline int read() {
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
int a[N],b[N];
struct node{
    int l,r;
    int val,id;
    #define l(x) tree[x].l
    #define r(x) tree[x].r
    #define val(x) tree[x].val
    #define id(x) tree[x].id
}tree[N*4];
void up(int p){
    if(val(p<<1)>=val(p<<1|1)){
        val(p)=val(p<<1);
        id(p)=id(p<<1);
    }
    else{
        val(p)=val(p<<1|1);
        id(p)=id(p<<1|1);
    }
}
void build(int p,int l,int r){
    l(p)=l,r(p)=r;
    if(l==r){val(p)=a[l],id(p)=l;return;}
    int mid=((l+r)>>1);
    build(p<<1,l,mid);
    build(p<<1|1,mid+1,r);
    up(p);
}
int n;
int quaryr(int p,int l,int r,int val){
    if(r(p)<l||l(p)>r)return n+1;
    int mid=((l(p)+r(p))>>1),ans=n+1;
    if(l(p)>=l&&r(p)<=r){
        if(l(p)==r(p)&&val(p)>val)return id(p);
        if(val(p<<1)>val)return quaryr(p<<1,l,r,val);
        if(val(p<<1|1)>val)return quaryr(p<<1|1,l,r,val);
        return n+1;
    }
    ans=min(ans,quaryr(p<<1,l,r,val));
    if(ans!=n+1)return ans;
    ans=min(ans,quaryr(p<<1|1,l,r,val));
    return ans;
}
int main(){
    ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    build(1,1,n);
    for(int i=n-1;i>=1;i--){
        int x=quaryr(1,i+1,n,a[i]);
        if(x==n+1)x=0;
        b[i]=x;
    }
    for(int i=1;i<=n;i++){
        cout<<b[i];
        if(i==n)cout<<endl;
        else cout<<' ';
    }
}