题解 | 栈和排序

栈和排序

https://www.nowcoder.com/practice/b10a7ac681e9429e89a6a510e5799647

import sys

def main():
    # 高效读取输入(适配n=1e6的大规模场景)
    data = sys.stdin.read().split()
    n = int(data[0])
    P = list(map(int, data[1:n+1]))
    
    # 1. 预处理后缀最大值数组:suffix_max[i]表示P[i..n-1]的最大值
    suffix_max = [0] * n
    suffix_max[-1] = P[-1]
    for i in range(n-2, -1, -1):
        suffix_max[i] = max(P[i], suffix_max[i+1])
    
    # 2. 栈模拟操作
    stack = []
    res = []
    for i in range(n):
        # 当前元素入栈
        stack.append(P[i])
        # 出栈判断:后续无更大元素(或已无后续元素),则出栈
        while stack and (i == n-1 or suffix_max[i+1] <= stack[-1]):
            res.append(str(stack.pop()))
    
    # 3. 输出结果(无多余空格)
    print(' '.join(res))

if __name__ == "__main__":
    main()

全部评论

相关推荐

牛客51274894...:照片认真的吗,找个专门拍证件照的几十块钱整端正点吧,要不就别加照片
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务