单调栈
来源:互联网 发布:中国移动 健康大数据 编辑:程序博客网 时间:2024/06/06 19:30
解释
单调栈就是一个栈中的所有元素都依次递增(或递减),若入栈元素不符合,则不断出栈(根据题目记录下需要信息),直到它符合条件,并根据题意记录需要信息,最后让元素全部出栈并记录信息.
可以先向栈加入一个为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); }