出栈序列[1]
测试数据来自 system/2399
作业已超过截止时间,您无法递交本题目。
时间限制:1秒 内存限制:256M
【题目描述】
输入序列中有 \(n\) 个正整数,栈 \(S\) 开始为空。你每次只可以进行下面两种操作之一:
① 将输入序列头端的数据移至 \(S\) 栈顶(进 \(S\) 栈);
② 将 \(S\) 栈顶元素输出并删除(退 \(S\) 栈)。
当然,输入序列非空时才可进行 ① 操作,\(S\) 非空时才可进行 \(②\) 操作。当 \(①\) 和 \(②\) 的操作都无法执行时,一定会得到 \(n\) 个数据的一个输出序列。由于 ① 和 ② 混搭的次序不同,导致相应的输出序列也各不相同,
请你求出能够得到的输出序列中字典序最小的一个序列。所谓字典序最小可以这样理解:首元素尽量小,在首元素最小的序列中第二元素尽可能小、在前 2 数据字典序最小的序列中,第三项尽可能小…,直至 \(n\) 项全部排完。
【输入格式】
第一行仅有一个正整数 \(n\),表示输入序列中数据的个数。
第二行就是输入序列中依次排列的 \(n\) 个数据,相邻两数据间有一个空格。
【输出格式】
仅有一行 \(n\) 个数,就是字典序最小的输出序列,相邻整数间用一个空格隔开。
【输入输出样例1】
Input
4
2 3 1 4
Output
1 3 2 4
【数据限制】
对于 \(30\%\) 的数据,\(0<n≤12\)。
对于 \(60\%\) 的数据,\(0<n≤1000\)。
对于 \(100\%\) 的数据,\(0<n≤100000\),其他数据在 int 范围。
【来源】
Mr.he