济南学习 Day1 T2 pm

【问题描述】
栈是一种强大的数据结构,它的一种特殊功能是对数组进行排序。例如,借
助一个栈,依次将数组 1,3,2 按顺序入栈或出栈,可对其从大到小排序:
1 入栈;3 入栈;3 出栈;2 入栈;2 出栈;1 出栈。
在上面这个例子中,出栈序列是 3,2,1,因此实现了对数组的排序。
遗憾的是,有些时候,仅仅借助一个栈,不能实现对数组的完全排序。例如
给定数组 2,1,3,借助一个栈,能获得的字典序最大的出栈序列是 3,1,2:
2 入栈;1 入栈;3 入栈;3 出栈;1 出栈;2 出栈。
请你借助一个栈,对一个给定的数组按照出栈顺序进行从大到小排序。当无
法完全排序时,请输出字典序最大的出栈序列。
【输入格式】
输入共2行。
第一一个整数N,表示入栈序列长度。
第二行包含N个整数,表示入栈序列。输入数据保证给定的序列是1到 N 的全
排列,即不会出现重复数字。
【输出格式】
仅一行,共N个整数,表示你计算出的出栈序列。
【样例输入】
3
2 1 3
【样例输出】
3 1 2
【样例解释】
这回山里有座塔。
【数据规模与约定】
3 3 。
60%的数据,1 ≤ N ≤ 10 ^5 。
对于100%的数据,1 ≤ N ≤ 10 ^6 。

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<stack>
 5 #define MAXN 100000
 6 using namespace std;
 7 int q[MAXN];
 8 int a[MAXN],n,vis[MAXN],team;
 9 int main()
10 {
11     scanf("%d",&n);
12     for(int i=1;i<=n;i++)
13         scanf("%d",&a[i]);
14     int k=n,head=1;
15     while(k)
16     {
17         while(vis[k]) k--;
18         if(k==0)
19         {
20             for(int i=team;i>=1;i--)
21               printf("%d ",q[i]);
22
23             return 0;
24         }
25         while(q[team]>k)
26         {
27             printf("%d ",q[team]);
28             team--;
29         }
30         while(a[head]!=k)
31         {
32             q[++team]=a[head];
33             vis[a[head]]=true;
34             head++;
35         }
36         printf("%d ",a[head]);
37         head++;k--;
38     }
39     return 0;
40 }

思路:首先贪心最大的肯定要排在第一个,即最大的之前的要全部push,接下来肯定是N-1这个数最大,如果他没有进栈,那么一直push到它进栈,如果它已经进栈,那么比较栈顶与要进栈的最大数比较最大的输出。后面最大的数直接用while判断是否进栈即可。代码是手写的栈

时间: 2024-12-18 17:52:11

济南学习 Day1 T2 pm的相关文章

济南学习 Day1 T3 pm

[问题描述]小 Q 对计算几何有着浓厚的兴趣.他经常对着平面直角坐标系发呆,思考一些有趣的问题.今天,他想到了一个十分有意思的题目:首先,小 Q 会在x轴正半轴和y轴正半轴分别挑选??个点.随后,他将x轴的点与y轴的点一一连接,形成??条线段,并保证任意两条线段不相交.小 Q 确定这种连接方式有且仅有一种.最后,小 Q 会给出m个询问.对于每个询问,将会给定一个点P(Px ,Py),请回答线段 OP 与m条线段会产生多少个交点?小 Q 找到了正在钻研数据结构的你,希望你可以帮他解决这道难题.[输

济南学习 Day2 T2 am

[问题描述]有??个数,随机选择一段区间,如果这段区间的所有数的平均值在[l,r]中则你比较厉害.求你比较厉害的概率.[输入格式]第一行有三个数N,l,r,含义如上描述.接下来一行有??个数代表每一个数的值.[输出格式]输出一行一个分数 a/b代表答案,其中a,b互质.如果答案为整数则直接输出该整数即可.[样例输入 1]4 2 33 1 2 4[样例输出 1]7/10[样例输入 2]4 1 43 1 2 4[样例输出 2]1[样例解释]塔外面有棵树.[数据规模与约定]对于30%的数据,1<=N<

济南学习 Day1 T1 am

题意:给你两个日期,问这两个日期差了多少毫秒 1 #include<cstdio> 2 #include<cstring> 3 #include<ctime> 4 #include<iostream> 5 #define ll long long 6 using namespace std; 7 int mth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; 8 ll solve(){ 9 int Y=0,M=0,D

python学习—-day1.计算机基础

python学习-day1.计算机基础 一.计算机系统的硬件组成部分:电脑的三大件:内存.硬盘.cpu 二.编程语言的作用及操作系统和硬件的关系:答:1.编程语言的作用是与计算机沟通,并且可以用编程语言在操作系统上写程序,从而达到开发应用软件的目的2.操作系统是用来管理计算机硬件资源的 三.应用程序->操作系统->硬件:在硬件之上装操作系统,在操作系统上装应用程序1.应用程序是指程序员开发的可运行的软件2.操作系统的目的是用来管理计算机硬件的3.硬件:cpu.硬盘.内存.键盘.鼠标统称为电脑硬

2017 济南集训DAY1.AF

LIST T1 水题(water) T2 梦境(dream) T2 动态规划(dp) T1 水题(water) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK出了道水题. 这个水题是这样的:有两副牌,每副牌都有n张. 对于第一副牌的每张牌长和宽分别是xi和yi.对于第二副牌的每张牌长和宽分别是aj和bj.第一副牌的第i张牌能覆盖第二副牌的第j张牌当且仅当xi>=aj并且yi>=bj.(注意牌不能翻转)当然一张牌只能去覆盖最多一张牌,而不能覆盖好多

Python 学习 DAY1

是看这篇文章学习的:http://blog.csdn.net/chenguolinblog/article/details/11661233 貌似我2年前妄想自学,但是老是没下决心...今天一定要正式开始了.. 废话不多说,开始: s1:variables. 1 变量:一个变量就是一个单词,只有一个单一的值 2 练习:设置一个变量my_variable,值设置为10 my_variable=10 3 数据类型有interage , floats , boolean 3种 4 Python是一个区

洛谷P2661 信息传递==coedevs4511 信息传递 NOIP2015 day1 T2

P2661 信息传递 题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息,但是每人只会把信息告诉一个人,即自己的信息传递对象).当有人从别人口中得知自己的生日时,游戏结束.请问该游戏一共可以进行几轮? 输入输出格式 输入格式: 输入共2行. 第1

信息传递 NOIP2015 day1 T2

题文: 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息,但是每人只会把信息告诉一个人,即自己的信息传递对象).当有人从别人口中得知自己的生日时,游戏结束.请问该游戏一共可以进行几轮? 输入共2行. 第1行包含1个正整数n表示n个人. 第2行包含n个用空

英语学习Day1

  今天要开始学英语了,我这个人没什么长性,语言这种东西对我来说又是很不擅长的一种技能,那为什么要学英语呢?我要做翻译,也是呵呵了,主要是我想赚钱,这个力量能够支撑我吧,我想.   网上有很多学英语的办法,我没有太多的时间和完整的时间段来做这件事情,所以我想先从听力入手,听和读应该是我这段时间的重点,说和写应该是要放在后面的.   制定以下月度目标:     1.完成30篇VOA慢速听力的听和读,要求能够背诵,并且能够记住里面的单词:     2.坚持完成4个单元的大学英语的学习:     3.