南邮 OJ 2024 入栈序列和出栈序列

探讨了如何根据给定的入栈序列找出字典序最大的出栈序列,并提供了一个具体的算法实现。该问题需要利用栈的数据结构进行解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

入栈序列和出栈序列

时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 260            测试通过 : 60 

比赛描述

给出入栈序列{A},保证{A}各个元素值各不相等,输出字典序最大的出栈序列.

如入栈序列{A} = 1, 2, 9, 4, 6, 5
则字典序最大的出栈序列为9, 6, 5, 4, 2, 1



输入

第一行一个整数n (1 <= n <= 100).
接下来是入栈序列{A}, n个正整数ai(0 < ai < 1000),且i != j则ai != aj.

输出

一行,字典序最大的出栈序列.   每个数字以空格分开。

样例输入


2 1 9 4 6 5

样例输出

9 6 5 4 1 2

提示

null

题目来源

NUPT





// AC 5MS
#include<iostream>
#include<stack>
#define MAX_N 100
using namespace std;

int main(){
//	freopen("test.txt","r",stdin);
	int a[MAX_N],n,i,j,maxIndex,maxVal;
	bool firstFlag = 1;
	stack<int> si;
	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%d",a+i);
	}
	i = 0;
	while( !si.empty() || i<n ){
		if( si.empty() ){			//栈为空,直接入栈
			si.push(a[i++]);
		}else{						//栈不为空,找到后面的最大值,若大于栈顶元素,则全部入栈
			maxVal = si.top();
			maxIndex = -1;
			for(j=i;j<n;j++){
				if(maxVal < a[j]){
					maxVal = a[j];
					maxIndex = j;
				}
			}
			if(maxIndex != -1){
				for(j=i;j<=maxIndex;j++){
					si.push(a[j]);
				}
				i = maxIndex+1;
			}
			if(firstFlag){
				firstFlag = 0;
			}else{
				printf(" ");
			}
			printf( "%d",si.top() );
			si.pop();
		}
	}
	printf("\n");
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值