NC14893. 栈和排序
描述
输入描述
第一行一个数n
第二行n个数,表示入栈的顺序,用空格隔开,结尾无空格
输出描述
输出一行n个数表示答案,用空格隔开,结尾无空格
示例1
输入:
5 2 1 5 3 4
输出:
5 4 3 1 2
说明:
2入栈;1入栈;5入栈;5出栈;3入栈;4入栈;4出栈;3出栈;1出栈;2出栈Python3 解法, 执行用时: 1170ms, 内存消耗: 73288K, 提交时间: 2022-05-29 21:03:15
x=int(input()) a=input("").split() s=[] res=[] vis=[0]*(x+10) for i in a: s.append(i) vis[int(i)]=1 while x and vis[x]: x-=1 while s and x<=int(s[-1]): res.append(s[-1]) s.pop() while s: res.append(s[-1]) s.pop() for j in res: print(j,end=" ");
C++(clang++ 11.0.1) 解法, 执行用时: 155ms, 内存消耗: 12896K, 提交时间: 2022-09-23 13:06:32
#include<stdio.h> int n,k,i,a[683913],b[683913],m[683913]; int main(){ for(scanf("%d",&n),i=0;i<n;++i)scanf("%d",&a[i]); for(i=n;i;--i)m[i-1]=m[i]>a[i-1]?m[i]:a[i-1]; for(;i<n;++i,++k)for(b[k]=a[i];b[k]>m[i+1];--k)printf("%d ",b[k]); }
pypy3 解法, 执行用时: 821ms, 内存消耗: 108376K, 提交时间: 2023-04-09 15:03:41
n=int(input()) a=list(map(int,input().split())) b=[0]*(n+1) st=[] for i in range(n-1,-1,-1): b[i]=max(a[i],b[i+1]) for i in range (n): st.append(a[i]) while len(st) and st[-1]>b[i+1]: print(st.pop(),end=" ")