对题目先暴力:
for循环每一点
for从该点往前找到比它小的点


可知:当i<j时,若a[ i ]>a[ j ]时a[ i ]不会是答案(因为后不满足,该前绝对不满足),所以要使序列删掉后不满足,该前绝对不满足 的情况,这样就形成了单调栈
是序列单调递增只样就能保证后面的不满足,前面所有都不确定
#include <bits/stdc++.h>

using namespace std;

const int N=100005;
int n,stk[N],idx,x;

int main() {
	cin>>n;
	idx=0;
	while(n--){
		scanf("%d",&x);
		while(idx&&stk[idx]>=x) idx--;//向前找,直到找到头或者比它小的点 
		if(!idx) printf("-1 ");//如果到头 
		else printf("%d ",stk[idx]);//如果找到比它小的点 
		stk[++idx]=x;//因为它比它滤掉的点都小所以把滤掉的删掉 
	}
	printf("\n");
	return 0;
}