当日总结

链接:https://ac.nowcoder.com/acm/contest/19850/G
来源:牛客网

给定一个从
1
1 到
𝑛
n 的排列
𝑃
P,以及一个空栈。你按顺序将排列中的元素依次入栈,可以在任意时刻选择将栈顶元素出栈并将其加入输出序列。入栈顺序不可改变。

理想情况下,你想得到一个严格从大到小排序的输出序列
𝑛
,
𝑛

1
,

,
1
n,n−1,…,1,但受栈操作限制可能无法实现。当无法完全排序时,请输出字典序最大的合法出栈序列。
输入描述:
在一行中输入一个整数
𝑛
n
(
1

𝑛

1
0
6
)
(1≦n≦10
6
)。
第二行输入
𝑛
n 个整数,表示排列
𝑃
P 中的元素,用空格分隔。保证给出的是一个从
1
1 到
𝑛
n 的排列。
输出描述:
输出一行,包含若干整数,表示最终的出栈序列,用空格分隔,结尾不输出多余空格。
示例1
输入
复制
5
2 1 5 3 4
输出
复制
5 4 3 1 2
说明
入栈顺序和操作示例如下:
2 入栈;
1 入栈;
5 入栈;
5 出栈;
3 入栈;
4 入栈;
4 出栈;
3 出栈;
1 出栈;
2 出栈。

include

include

include

include

using namespace std;
using ll =long long;

int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll n;
cin>>n;
vectorvec;
for(ll i=0;i<n;i++)
{
ll x;
cin>>x;
vec.push_back(x);
}
stackst;
ll max_n=n;
for(ll i=0;i<n;i++)
{
if(vec[i]==max_n)
{
cout<<vec[i]<<" ";
max_n--;
}
else{
st.push(vec[i]);
}
}
while(!st.empty())
{
ll x=st.top();
cout<<x<<" ";
st.pop();
}
return 0;
}

posted @ 2025-11-07 23:54  lagranSun  阅读(5)  评论(0)    收藏  举报