ここでは、数値が格納された配列において、各要素より前に出現する次に大きい数値を見つけるプログラムを python3 で実装してみます。

# Monotonic Stack
# 配列 nums の各要素において、
# その要素よりも左側に出現する、
# その要素の次に大きい値を格納する配列を作成します。

nums = [1,4,3,7,4,5]

n = len(nums)
inf = float('INF')
leftVal = [inf * -1] * n #各要素よりも左側にある、次に大きい値を格納する配列
leftBoundary = [inf * -1] * n # ↑ の index を格納する配列
leftStack = []

#右側から探索
for i in range(n-1, -1, -1):
    # 現在探索している値が、スタック(leftStack)内の値よりも小さい場合は、
    # その小さい値で配列を更新します
    while leftStack and nums[leftStack[-1]] > nums[i]:
        leftBoundary[leftStack[-1]] = i
        leftVal[leftStack[-1]] = nums[i]
        leftStack.pop()
        

    leftStack.append(i)
        
print(leftBoundary) # --> [-inf, 0, 0, 2, 2, 4] # -inf  は存在しないという意味です。
print(leftVal) # --> [-inf, 1, 1, 3, 3, 4]