日期:2025年11月22日
ZeroJudge 題目連結:i706. B.永遠ㄉ神(yyds)
解題想法
用堆疊 st 記錄前方的人身高及索引值,堆疊中先放入 (-float('inf'), 0) 避免遇到空堆疊的狀況。每次讀取第 i 個人的身高 h,用 while 迴圈從 st 最上方開始檢查,移除所有身高大於 h 的資料,當 while 迴圈結束之後,st 最上方的資料的索引值就是要輸出的答案,再將 (h, i) 加入 st。
Python 程式碼
使用時間約為 0.4 s,記憶體約為 165.3 MB,通過測試。
import sys
n = int(sys.stdin.readline())
st = [(-float('inf'), 0)]
ans = []
for i, h in enumerate(map(int, sys.stdin.readline().split()), start=1):
while st[-1][0] >= h: st.pop()
ans.append(str(st[-1][1]))
st.append((h, i))
sys.stdout.write(" ".join(ans) + "\n")