Monotonic Stack
- tags: Data Structures,Stack
 - source: “Monotonic Stack.” Accessed March 13, 2022. https://liuzhenglaichn.gitbook.io/algorithm/monotonic-stack.
 
A monotonic stack is a stack whose elements are monotonically increasing or descreasing.
It’s not only about the order in the stack, it’s also about remove larger/smaller elements before pushing.
Monotonically descreasing⌗
we need to pop smaller elements from the stack before pushing a new element:
vector<int> nums;
// fill nums
stack<int> st;
for (auto i = nums.size() - 1; i >= 0; i--) {
		while (!st.empty() && st.top() > nums[i]) {
				st.pop();
		}
		st.push(nums[i])
}
- To push 
3to[5, 4, 2, 1], we need pop2, 1out first. - Then the stack become 
[5, 4, 3] 
Monotonically increasing⌗
vice versa.
vector<int> nums;
// fill nums
stack<int> st;
for (auto i = nums.size() - 1; i >= 0; i--) {
		while (!st.empty() && st.top() < nums[i]) {
				st.pop();
		}
		st.push(nums[i]);
}
Increasing vs Decreasing⌗
- Mono-increasing attempt to keep the result as greater as possible.
 - Vice versa.