**是參考一篇部落格的,然後加了一些自己的注釋,學習ing堆疊是一種經典的後進先出的線性結構,相關的操作主要有「入棧」(在堆疊頂插入乙個元素)和「出棧」(將棧頂元素返回並從堆疊中刪除)。本題要求你實現另乙個附加的操作:「取中值」——即返回所有堆疊中元素鍵值的中值。給定 n 個元素,如果 n 是偶數,則中值定義為第 n/2 小元;若是奇數,則為第 (n+1)/2 小元。
輸入格式:
輸入的第一行是正整數 n(≤10^5 )。隨後 n 行,每行給出一句指令,為以下 3 種之一:
push key其中 key 是不超過 10^5的正整數;push 表示「入棧」;pop 表示「出棧」;peekmedian 表示「取中值」。poppeekmedian
輸出格式:
對每個 push 操作,將 key 插入堆疊,無需輸出;對每個 pop 或 peekmedian 操作,在一行中輸出相應的返回值。若操作非法,則對應輸出 invalid。
輸入樣例:
17輸出樣例:poppeekmedian
push 3
peekmedian
push 2
peekmedian
push 1
peekmedian
poppop
push 5
push 4
peekmedian
poppop
poppop
invalidinvalid32
2124
453invalid
#include
#include
#include
#include
using namespace std;
intmain()
//函式lower_bound()在begin和end中的**前閉後開**區間進行二分查詢
//返回大於或等於val的第乙個元素位置。(插入的時候如果本來無這個元素就找到比val大的第乙個元素記住他的位置,把val插入這裡,後面的數依次往後推)
//如果所有元素都小於val,則返回last的位置
else
if(top ==-1
) cout<<
"invalid"
if(str ==
"pop"
)//出棧
else
}return0;
}
vector參考
lower_bound函式
特殊堆疊 30 分
堆疊是一種經典的後進先出的線性結構,相關的操作主要有 入棧 在堆疊頂插入乙個元素 和 出棧 將棧頂元素返回並從堆疊中刪除 本題要求你實現另乙個附加的操作 取中值 即返回所有堆疊中元素鍵值的中值。給定 n 個元素,如果 n 是偶數,則中值定義為第 n 2 小元 若是奇數,則為第 n 1 2 小元。輸入...
L3 002 特殊堆疊 (30 分)
堆疊是一種經典的後進先出的線性結構,相關的操作主要有 入棧 在堆疊頂插入乙個元素 和 出棧 將棧頂元素返回並從堆疊中刪除 本題要求你實現另乙個附加的操作 取中值 即返回所有堆疊中元素鍵值的中值。給定 n 個元素,如果 n 是偶數,則中值定義為第 n 2 小元 若是奇數,則為第 n 1 2 小元。輸入...
L3 002 特殊堆疊 (30 分
堆疊是一種經典的後進先出的線性結構,相關的操作主要有 入棧 在堆疊頂插入乙個元素 和 出棧 將棧頂元素返回並從堆疊中刪除 本題要求你實現另乙個附加的操作 取中值 即返回所有堆疊中元素鍵值的中值。給定 n 個元素,如果 n 是偶數,則中值定義為第 n 2 小元 若是奇數,則為第 n 1 2 小元。輸入...