前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >T4312 最大出栈顺序

T4312 最大出栈顺序

作者头像
attack
发布2018-04-13 15:08:21
9360
发布2018-04-13 15:08:21
举报

题目描述

给你一个栈和n个数,按照n个数的顺序入栈,你可以选择在任何时候将数

出栈,使得出栈的序列的字典序最大。

输入输出格式

输入格式:

输入共2行。

第一行个整数n,表示入栈序列长度。

第二行包含n个整数,表示入栈序列。

输出格式:

仅一行,共n个整数,表示你计算出的出栈序列。

输入输出样例

输入样例#1:

代码语言:javascript
复制
3
2 1 3

输出样例#1:

代码语言:javascript
复制
3 1 2

说明

对于100%的数据, 1 ≤ n≤ 10 6 , 所有读入的数字互不重复即一定是个排列。

代码语言:javascript
复制
 1 #include <cstdio>
 2 #include <stack>
 3 using namespace std;
 4 int const MAX = 1e6 + 2;
 5 int cur[MAX], pos[MAX], num[MAX];
 6 stack <int> s;
 7 int main()
 8 {
 9     int n;
10     scanf("%d",&n);
11     for(int i=0;i<n;i++)
12         scanf("%d", &num[i]);
13     for(int i=n;i>0;i--) 
14     {
15         if(cur[i] > num[i - 1])
16         {
17             cur[i - 1] = cur[i];
18             pos[i - 1] = pos[i];
19         }
20         else
21         {
22             cur[i - 1] = num[i - 1];
23             pos[i - 1] = i - 1;
24         }
25     }
26     for(int j = 0, i = 0; i < n; i++)
27     {
28         if(s.empty() || s.top() < cur[j])
29         {
30             for(int k = pos[j]; j <= k; j++)
31                 s.push(num[j]);
32         }
33         if(i != n - 1)
34         {
35             printf("%d ", s.top());
36             s.pop();
37         }
38         else
39             printf("%d\n", s.top());
40     }
41 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-05-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 输入输出格式
  • 输入输出样例
  • 说明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档