原題鏈結
problem description
度度熊正在學習雙端佇列,他對其翻轉和合併產生了很大的興趣。input初始時有 n 個空的雙端佇列(編號為 1 到 n ),你要支援度度熊的 q 次操作。
①1 u w val 在編號為 u 的佇列裡加入乙個權值為 val 的元素。(w=0 表示加在最前面,w=1 表示加在最後面)。
②2 u w 詢問編號為 u 的佇列裡的某個元素並刪除它。( w=0 表示詢問並操作最前面的元素,w=1 表示最後面)
③3 u v w 把編號為 v 的佇列「接在」編號為 u 的佇列的最後面。w=0 表示順序接(佇列 v 的開頭和佇列 u 的結尾連在一起,佇列v 的結尾作為新佇列的結尾), w=1 表示逆序接(先將佇列 v 翻轉,再順序接在佇列 u 後面)。且該操作完成後,佇列 v 被清空。
有多組資料。output對於每一組資料,第一行讀入兩個數 n 和 q。
接下來有 q 行,每行 3~4 個數,意義如上。
n≤150000,q≤400000
1≤u,v≤n,0≤w≤1,1≤val≤100000
所有資料裡 q 的和不超過500000
對於每組資料的每乙個操作②,輸出一行表示答案。sample input注意,如果操作②的佇列是空的,就輸出−1且不執行刪除操作。
2 10sample output1 1 1 23
1 1 0 233
2 1 1
1 2 1 2333
1 2 1 23333
3 1 2 1
2 2 0
2 1 1
2 1 0
2 1 1
23分析:-12333
23323333
ac**
#include
#include
#include
#include
using
namespace std;
intmain()
else
}else
if(a ==2)
//包含w == 0和w == 1兩種情況
else
}else
printf
("-1\n");
}else
//v佇列非空,依次將佇列v的首元素插入佇列u的末尾
//然後刪除佇列v的首元素
while
(!deq[v]
.empty()
)}}}
return0;
}
度度熊學佇列
度度熊正在學習雙端佇列,他對其翻轉和合併產生了很大的興趣。初始時有 nn 個空的雙端佇列 編號為 11 到 nn 你要支援度度熊的 qq 次操作。11 uu ww valval 在編號為 uu 的佇列裡加入乙個權值為 valval 的元素。w 0w 0 表示加在最前面,w 1w 1 表示加在最後面 ...
度度熊學佇列
原題鏈結 度度熊正在學習雙端佇列,他對其翻轉和合併產生了很大的興趣。初始時有 nn 個空的雙端佇列 編號為 11 到 nn 你要支援度度熊的 qq 次操作。11 uu ww valval 在編號為 uu 的佇列裡加入乙個權值為 valval 的元素。w 0w 0 表示加在最前面,w 1w 1 表示加...
度度熊學佇列
題目 度度熊正在學習雙端佇列,他對其翻轉和合併產生了很大的興趣。初始時有 n 個空的雙端佇列 編號為 1 到 n 你要支援度度熊的 q 次操作。1 u w val 在編號為 u 的佇列裡加入乙個權值為 val 的元素。w 0 表示加在最前面,w 1 表示加在最後面 2 u w 詢問編號為 u 的佇列...