解释
单调栈就是一个栈中的所有元素都依次递增(或递减),若入栈元素不符合,则不断出栈(根据题目记录下需要信息),直到它符合条件,并根据题意记录需要信息,最后让元素全部出栈并记录信息.
可以先向栈加入一个为0或为无限大的元素(据增减性而定),使当栈为其他元素时,任意元素都可以进栈,而省去了对栈顶是否为空的判断.
最后让所有元素出栈时,也可采用相同方法,加入一个极端元素来实现.
例题
代码
for(i=1;i<=n+1;i++)
{
k=st.top().first;
while(a[i]<k)
{
ri[st.top().second]=i-1;
st.pop();
k=st.top().first;
}
if(a[i]==k)
le[i]=le[st.top().second];
else
le[i]=st.top().second+1;
tmp.first=a[i];
tmp.second=i;
st.push(tmp);
}