### Why Monotonic Stacks Matter
A monotonic stack preserves elements in either strictly ascending or descending order. This property allows finding the next greater element in O(N) amortized time instead of naive O(N^2) brute force loops.
```python
def dailyTemperatures(temperatures):
res = [0] * len(temperatures)
stack = [] # indices
for i, t in enumerate(temperatures):
while stack and t > temperatures[stack[-1]]:
prev_i = stack.pop()
res[prev_i] = i - prev_i
stack.append(i)
return res
```