#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include<cstring>
#include <stack>
using namespace std;
int main()
{
std::stack<int> s;
int i,n,k=1,c=1;
scanf("%d",&n);
int a[n+3],b[n+3];
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
while(c<=n)
{
if(s.empty())
{
a[0]=0;
k=1;
for(i=1;i<=n;i++)
{
if(a[0]<a[i])
{
a[0]=a[i];
k=i;
}
}
b[c++]=a[k];
a[k]=0;
for(i=1;i<k;i++)
{
if(a[i]!=0)
{
s.push(a[i]);
a[i]=0;
}
}
}
else
{
a[0]=0;
k=1;
for(i=1;i<=n;i++)
{
if(a[0]<a[i])
{
a[0]=a[i];
k=i;
}
}
if(a[0]>s.top())
{
b[c++]=a[0];
a[k]=0;
for(i=1;i<k;i++)
{
if(a[i]!=0)
{
s.push(a[i]);
a[i]=0;
}
}
}
else
{
b[c++]=s.top();
s.pop();
}
}
}
for(i=1;i<=n;i++)
{
cout<<b[i]<<" ";
}
}
SCAU 18715 出栈序列
最新推荐文章于 2024-11-02 20:39:05 发布
这篇文章介绍了如何使用C++编程语言实现一种基于栈的主元排序算法,通过比较元素与栈顶元素,将最大值推入结果数组并更新栈的状态。
摘要由CSDN通过智能技术生成