题意:根据输入可以添加或者删除或者合并的操作
用双端队列或者list直接写,用动态数组vector会超时
双端队列和list可以实现直接队头队尾插入,删除等操作,
双端队列可以随机访问但是list不行,,而list的插入会比双端队列快,,
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,q;
while(~scanf("%d %d",&n,&q)){
deque<int>que[n+1];
for(int pp=1;pp<=q;pp++){
int a,u,w;
scanf("%d %d %d",&a,&u,&w);
if(a==1){
int x;
scanf("%d",&x);
if(w==0){
que[u].push_front(x);
}
else{
que[u].push_back(x);
}
}
else if(a==2){
if(!que[u].empty()){
if(w==1){
printf("%d\n",que[u][que[u].size()-1]);
que[u].pop_back();
}
else{
printf("%d\n",que[u][0]);
que[u].pop_front();
}
}
else{
printf("-1\n");
}
}
else{
int v=w;
scanf("%d",&w);
if(w==1 && que[v].size()>=2){
reverse(que[v].begin(),que[v].end());
}
while(!que[v].empty()){
que[u].push_back(que[v][0]);
que[v].pop_front();
}
}
}
}
}