题解:直接使用deque进行模拟
附上代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,qq;
while(~scanf("%d%d",&n,&qq)){
deque<int>q[n+1];
int op,u,v,w,val;
for(int i=1;i<=qq;i++){
scanf("%d",&op);
if(op==1){
scanf("%d%d%d",&u,&w,&val);
if(w==0){
q[u].push_front(val);
}else{
q[u].push_back(val);
}
}else if(op==2){
scanf("%d%d",&u,&w);
if(!q[u].empty()){
if(w==0){
printf("%d\n",q[u].front());
q[u].pop_front();
}else{
printf("%d\n",q[u].back());
q[u].pop_back();
}
}else{
printf("-1\n");
}
}else{
scanf("%d%d%d",&u,&v,&w);
if(w==0){
for(deque<int>::iterator iter=q[v].begin();iter!=q[v].end();iter++){
q[u].push_back(*iter);
}
q[v].clear();
}else{
reverse(q[v].begin(),q[v].end());
for(deque<int>::iterator iter=q[v].begin();iter!=q[v].end();iter++){
q[u].push_back(*iter);
}
q[v].clear();
}
}
}
}
return 0;
}