用的二分+st表,why WA
#include<iostream>
#define ll long long
using namespace std;
const int N=3e6+5;
int n,l,r,mid;
int a[N],log2[N],f[N][30];
int check(int l,int r){
int k=log2[r-l+1];
return max(f[l][k],f[r-(1<<k)+1][k]);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i],f[i][0]=a[i];
for(int i=2;i<=n;i++)
log2[i]=log2[i>>1]+1;
for(int j=1;j<=log2[n];j++){
for(int i=1;i<=n-(1<<j)+1;i++){
f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
}
for(int i=1;i<n;i++){
l=i,r=n;
while(l<r){
mid=l+r>>1;
if(check(i,mid)>a[i]){
r=mid;
}else{
l=mid+1;
}
}
cout<<r<<' ';
}
cout<<0;
return 0;
}