本题的计算量较大,用暴力算法会超时,的用别的方法,我们假设在左边找第一个比它小的数,那么在左边出现一次的数如果比右边大了,那么就不会在出现了,我们将它删除掉就可以了,用这个方法我们可以的得到一个从小到大的数列。
#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开始}
}