本题的计算量较大,用暴力算法会超时,的用别的方法,我们假设在左边找第一个比它小的数,那么在左边出现一次的数如果比右边大了,那么就不会在出现了,我们将它删除掉就可以了,用这个方法我们可以的得到一个从小到大的数列。
#include<iostream>
using namespace std;
const int N=1e5+10;
int a[N],b=0;
int main(){
int n,x;
cin>>n;
while(n--){
cin>>x;
while(b&&a[b]>=x)b--;//从左往右删减
if(!b)cout<<"-1 ";
else cout<<a[b]<<" ";
a[++b]=x;//从1开始
}
}