#include<bits/stdc++.h>
using namespace std;
int a[100005],d[100005];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
a[n+1]=0x3f3f3f3f;
d[n]=n+1;
for(int i=n-1;i>=1;i--){
if(a[i]<a[i+1]){
d[i]=i+1;
}else{
int now=d[i+1];
while(a[now]<a[i]){
now=d[now];
}
d[i]=now;
}
}
for(int i=1;i<=n;i++){
cout<<d[i]<<" ";
}
}
求本程序时间复杂度。
本萌新一开始认为它是 O(n2) 的,但交到一个数据范围是 n≤105 的题目上居然过了。