2018 “百度之星”程序设计大赛 - 初赛(A): 度度熊学队列

直接用STL 的 list 就可以,比赛以为不行,自己手动模拟 list 去了。。。
代码:

#include<bits/stdc++.h>
using namespace std;

const int maxn=150000+100;

list<int>List[maxn];
list<int>RevList[maxn];

int main(){

    int n,q;
    list<int>::iterator it;
    while(scanf("%d%d",&n,&q)==2){

        for(int i=1;i<=n;i++) List[i].clear(),RevList[i].clear();
        while(q--){

            int type;
            scanf("%d",&type);
            if(type==1){

                int u,w,v;
                scanf("%d%d%d",&u,&w,&v);
                if(w==1) List[u].push_back(v),RevList[u].push_front(v);
                else List[u].push_front(v),RevList[u].push_back(v);
            }
            else if(type==2){

                int u,w;
                scanf("%d%d",&u,&w);
                if(List[u].empty()){

                    printf("-1\n");
                    continue;
                }
                if(w==1){

                    printf("%d\n",List[u].back());
                    List[u].pop_back();
                    RevList[u].pop_front();
                }
                else{

                    printf("%d\n",List[u].front());
                    List[u].pop_front();
                    RevList[u].pop_back();
                }
            }
            else{

                int u,v,w;
                scanf("%d%d%d",&u,&v,&w);
                if(w==1) List[u].splice(List[u].end(),RevList[v]),RevList[u].splice(RevList[u].begin(),List[v]);
                else List[u].splice(List[u].end(),List[v]),RevList[u].splice(RevList[u].begin(),RevList[v]);
//              for(it=List[u].begin();it!=List[u].end();it++) printf("%d ",*it);
//              printf("List end\n");
//              for(it=RevList[u].begin();it!=RevList[u].end();it++) printf("%d ",*it);
//              printf("RevList end\n");
            }
        }
    }
} 

猜你喜欢

转载自blog.csdn.net/qq_37960603/article/details/81590991