題目描述
給定乙個由n個元素構成的序列,你需要將其中的元素按順序壓入乙個大小為c的棧並彈出。元素按它們的出棧順序進行排列,會得到乙個新的序列。我們知道,這樣的序列會有很多種,請輸出所有新序列中第乙個元素最小的序列(若第乙個元素最小的序列有多個,則令第二個盡可能小;若仍有多個,則令第三個最小,以此類推)。
輸入格式
第一行,兩個數n,c
第二行n個數,為序列中n個元素的值
輸出格式
輸出n個數,為滿足要求的序列。
輸入輸出樣例
輸入 #1 複製
6 35 2 3 8 7 4
輸出 #1 複製
2 3 5 4 7 8
說明/提示
對於40%的資料,n<=12
對於100%的資料,c<=n<=10000,元素大小均在2*10^9以內。
用棧模擬 棧棧棧
#include
using
namespace std;
#define n 10005
stack<
long
long
>s;
long
long a[n]
;int
main()
int lens = s.
size()
, minp;
//lens:棧的長度 minp:棧內最小元素的下標
int len = c - lens;
//len:可入棧的元素個數
int tmp = s.
top();
//tmp:參考元素
for(
int i=x; i<=x+len-
1&& i<=n; i++)}
if(tmp != s.
top())
else
loc++
;//累計出去的數
cout <
< s.
top(
)<
<
" ";
s.pop();
}while
(!s.
empty()
)return0;
}
Luogu P1750 出棧序列
一眼 萬年 貪心 minn設小調不出來祭 首先要保證更靠前的輸出更小 那麼容易想到,對於之後可能入棧的元素 即棧的剩餘空間仍能裝下的所有元素 我們可以取其中的最小值minn,和棧頂元素 top 比較 如果minn 否則一直彈出棧頂直到棧空或top minn include include inclu...
棧(出棧序列)
已知自然數1,2,n 1 n 10000 依次入棧 即a1 c2,cn 是否為可能的出棧序列。例如 n 5時,3,4,2,1,5是乙個可能的出棧序列,因為其可以按如下操作獲得 push 1,push 2,push 3,pop,push 4,pop,pop,pop,push 5,pop input 輸...
棧 出棧序列判定
給乙個初始的入棧序列,其次序即為元素的入棧次序,棧頂元素可以隨時出棧,每個元素只能入棧依次。輸入乙個入棧序列,後面依次輸入多個序列,請判斷這些序列是否為所給入棧序列合法的出棧序列。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個出棧序列,但4,3,5,1,2就...