题目描述
单调栈
判断和加入数列两种操作融为一体
用数列模拟栈(包含了进栈和出栈的两个操作)
C++ 代码
#include<iostream>
using namespace std;
const int N=100010;
int stk[N],tt; //tt为栈顶的序号,默认从0开始
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int x;
cin>>x; //因为是输出每一个数的最近的数,所以将每一个数当作独立的个体,先比较
//去掉所有比当前数大的
while(tt&&stk[tt]>=x)tt--;
if(tt)cout<<stk[tt]<<" ";
else cout<<"-1"<<" ";
//不满足以上条件则将数压入栈
stk[++tt]=x; //使数列从1开始
}
return 0;
}