问题描述
果老师给你一个到的排列和一个栈,入栈顺序已经给定 要求你要在不打乱入栈顺序的情况下,对数组进行从大到小排序 当无法完全排序时,请输出字典序最大的出栈序列
输入格式
第一行一个数 第二行个数,表示入栈的顺序,保证给的是一个排列。
输出格式
输出一行n个数表示答案
样例输入
5
2 1 5 3 4
样例输出
5 4 3 1 2
提示
本题请添加头文件 #include <stdio.h>
2入栈;1入栈;5入栈;5出栈;3入栈;4入栈;4出栈;3出栈;1出栈;2出栈
贪心+栈
贪心策略:按照输入顺序输入,并放入栈中
遇到最大的便输出,同时栈弹出此元素,并找第二大
遍历完了,就按栈中元素的先后顺序输出
#include<iostream>
#include<stack>
using namespace std;
int n,a[1000010];
stack<int> f;
int main(){
cin>>n;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
int j=n;
for(int i=0;i<n;i++){
f.push(a[i]);
if(f.top()==j){
cout<<f.top()<<' ';
f.pop();
j--;
}
}
while(f.size()){
cout<<f.top()<<' ';
f.pop();
}
}