b - 佇列和棧
佇列和棧是兩種重要的資料結構,它們具有push k和pop操作。push k是將數字k加入到佇列或棧中,pop則是從佇列和棧取乙個數出來。佇列和棧的區別在於取數的位置是不同的。
佇列是先進先出的:把佇列看成橫向的乙個通道,則push k是將k放到佇列的最右邊,而pop則是從佇列的最左邊取出乙個數。
棧是後進先出的:把棧也看成橫向的乙個通道,則push k是將k放到棧的最右邊,而pop也是從棧的最右邊取出乙個數。
假設佇列和棧當前從左至右都含有1和2兩個數,則執行push 5和pop操作示例圖如下:
push 5 pop
佇列 1 2 -------> 1 2 5 ------> 2 5
push 5 pop
棧 1 2 -------> 1 2 5 ------> 1 2
現在,假設佇列和棧都是空的。給定一系列push k和pop操作之後,輸出佇列和棧中存的數字。若佇列或棧已經空了,仍然接收到pop操作,則輸出error。
input
第一行為m,表示有m組測試輸入,m<100。
每組第一行為n,表示下列有n行push k或pop操作。(n<150)
接下來n行,每行是push k或者pop,其中k是乙個整數。
(輸入保證同時在佇列或棧中的數不會超過100個)
output
對每組測試資料輸出兩行,正常情況下,第一行是佇列中從左到右存的數字,第二行是棧中從左到右存的數字。若操作過程中佇列或棧已空仍然收到pop,則輸出error。輸出應該共2*m行。
sample input
2
4push 1
push 3
poppush 5
1pop
sample output
3 5
1 5error
error
方法:這題使用雙端佇列(deque)可以很快做出來。
#include#includeusing namespace std;
int main()
else if(cnt)
else
}if(flag)
inline char minn(const char &x,const char &y)
struct node
};struct dp
dp u;
u.find(a,n,k);
return 0;
}
2021 GDUT 新生專題訓練
資料結構是利器,可以靈活運用,解決各種複雜的問題。具體內容太多不必列舉,關鍵還是思維。分析一道經典的例題 維護數列 傳送門 題目大意 給出乙個序列,要求支援插入 刪除 修改 翻轉 求和 求最大子列和。輸入運算元n 0 n 5e5 運算元量m 1 m 2e4 時間限制 1s,空間限制 128m 看我四...
2021 GDUT 新生專題訓練 資料結構
int stk n void push int value void pop int top int que n head 1,tail 0 void push int value void pop int front include include include include include ...
2019 GDUT 新生專題 I A
給定n個數字,計算出最短的連續子串行,使這個子串行的全部數字之和大於或等於給定數字s。如果不存在可以滿足題意的子串行則輸出0。這是經典的,相對比較容易的尺取問題,通過遍歷每乙個連續子串行即可得出答案。但是,由於時間的限制,要注意一些已經沒有意義的連續子串行和被重複計算的過程。include incl...