題目描述
easy的學生的《資料結構》考試掛掉了,他求著easy再給他一次機會,easy出了這麼一道題,如果他的學生做出來就給這個學生一次重新考試的機會,題目是這樣的:
維護乙個名為佇列的資料結構,支援以下四種操作:
enqueue x
將值為x的元素放入佇列的尾部
dequeue
輸出當前佇列首部的元素之後刪除佇列首部的元素
max
輸出當前佇列中的最大值,若隊列為空則輸出」empty!」(沒有引號)
min
輸出當前佇列中的最小值,若隊列為空則輸出」empty!」(沒有引號)
輸入包含多組測試資料
每組測試資料以乙個整數n作為開始(0<=n<=500000)
當1<=n<=500000時,意味著會有n次佇列操作,當n為0時意味著輸入資料結束
如果1<=n<=500000之後會有n行,每行會有一條佇列操作命令,分別是
1.enqueue x
將值為x的元素放入佇列的尾部
2.dequeue
輸出當前佇列首部的元素之後刪除佇列首部的元素
3.max
輸出當前佇列中的最大值,若隊列為空則輸出」empty!」(沒有引號)
4.min
輸出當前佇列中的最小值,若隊列為空則輸出」empty!」(沒有引號)
請按命令進行相關佇列操作或者輸出
輸出對於每一組測試資料,第一行輸出」case x:」表示第x組資料(沒有引號)之後
對每乙個要求輸出的操作進行輸出,乙個操作的輸出佔一行
樣例輸入
3樣例輸出enqueue 1
maxdequeue
5enqueue 2
maxdequeue
mindequeue
0
case 1:11題解:通過維護三個佇列, 乙個維護最大值, 乙個維護最小值, 乙個維護一般佇列, 怎麼維護最大值的和最小值的佇列呢?case 2:22
empty!
empty!
我們每插入乙個元素時, 就要與隊尾的元素比較, 如果插入的元素比隊尾的元素大, 那麼就刪除現在隊尾的元素,下乙個隊尾的元素比較,如果還比隊尾大,再刪了,再與新的隊尾元素比較,如此迴圈往復,直到隊列為空,或者隊尾的元素要大於或等於插入的元素, 那麼就將新元素插入佇列尾部。如此一來這個佇列就是乙個從隊首至隊尾 永遠單調遞減的序列,隊首即為max值。最小值佇列就是反著來 維護乙個 隊首至隊尾 永遠單調遞增的序列,隊首即為min值。佇列中的資料除了要儲存它的值還要為其分配乙個編號。為啥呢,因為還有出隊操作啊,怎麼判斷,要出隊的元素是否就是max佇列和min佇列隊首的元素的,看其編號即可。
同時也熟練了一下雙向佇列的使用。
**:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f
#define maxm 16000000 + 10
#define maxn 500000 + 10
using namespace std;
typedef
long
long ll;
const ll mod =
1e9+7;
pair<
int,
int> p[maxn]
;int
main()
else
else
q_up.
pop_back()
;}if(q_up.
empty()
)}if(q_down.
empty()
) q_down.
push_back
(p[cnt]);
else
else
q_down.
pop_back()
;}if(q_down.
empty()
)}}if
(op[0]
=='d')if
(q.front()
.second == q_up.
front()
.second)
if(q.
front()
.second == q_down.
front()
.second)
printf
("%d\n"
, q.
front()
);q.
pop_front()
;}if(op[0]
=='m'
)else
printf
("empty!\n");
}if(op[1]
=='i'
)else
printf
("empty!\n");
}}cnt ++;}
}}/*the wam is f**king interesting .
*/
單調佇列 優先佇列
dequeue int que 建立雙向佇列 que.push front 在佇列前面塞乙個元素 que.push back 在佇列後面塞乙個元素 que.pop front 刪除佇列第乙個元素 que.pop back 刪除佇列的最後乙個元素 que.clear 清空佇列 que.empty 判斷...
單調佇列 優先佇列
如果乙個人比你年輕還比你強,那你就要被踢出去了 單調佇列 來來來,神犇巨佬 金牌 au 爺 aker 站在最上面,蒟蒻都靠下站!優先佇列 顧名思義,所謂單調佇列,那麼其中的元素從隊頭到隊尾一定要具有單調性 單調公升 單調降等 它被廣泛地用於 滑動視窗 這一類 rmq 問題,其功能是 o n 維護整個...
棧和佇列 單調佇列 單調棧
講解部落格鏈結 一 單調棧 1 什麼是單調棧?單調棧是指乙個棧內部元素具有嚴格單調性 單調遞增,單調遞減 的一種資料結構。2 單調棧的兩個性質 滿足從棧頂到棧底具有嚴格的單調性 滿足後進先出的特徵,越靠近棧底的元素越早的進棧。3 元素進棧的過程 對於當前進棧元素x 如果x 棧頂元素,x 進棧。否則 ...