//输出距离目标最近的最大或最小的数时使用单调栈解决
include [HTML_REMOVED]
using namespace std;
const int N = 100010;
int stack[N],top;//定义一个栈和栈顶
int main()
{
int n;//一共有几个数
cin >> n;
for(int i = 1;i<=n;i)
{
int x;//将看作暴力做法中的数组里的每一个元素输入
cin >> x;
while(top && stack[top] >= x) top –;
//首先top != 0,即栈不能空
///其次,从栈顶开始遍历栈中元素,看是否大于x(新加入的值 & 目标值),大于就把它弹出栈(top–)
if(top) cout << stack[top] << ‘ ‘;//如果栈不为空,输出栈顶的值
else cout << -1 << ‘ ‘;//否则,输出-1
stack[ top] = x;//因为x是新加入的值,所以也要加入栈内,大不了就跟后来比删了嘛,当然也可能出现它刚好比后来的x小的情况
}
return 0;
}