1 条题解

  • 0
    @ 2023-2-13 10:53:29
    #include <cstring>
    #include <list>
    #include<algorithm>
    const int N = 1.5e5+10;
    
    using namespace std;
    list<int> d[N];
    
    
    int main() {
       int n, m;
       while((scanf("%d%d", &n, &m)) != EOF)
       {
           for(int i = 1; i <= n; i++)
               d[i].clear();
            int k,u,val,w,v;
            while(m--)
            {
                scanf("%d",&k);
                switch(k)
                {
                case 1:
                    scanf("%d%d%d",&u,&w,&val);
                    if(w == 0) d[u].push_front(val);
                    else if(w == 1) d[u].push_back(val);
                    break;
                case 2:
                    scanf("%d%d",&u,&w);
                    if(d[u].empty())
                        printf("-1\n");
                    else{
                        if(w == 0)
                        {
                            printf("%d\n",d[u].front());
                            d[u].pop_front();
                        }
                        else if(w == 1)
                        {
                            printf("%d\n",d[u].back());
                            d[u].pop_back();
                        }
                        }
                        break;
                case 3:
                    scanf("%d%d%d",&u,&v,&w);
                    if(w == 0)
                       d[u].insert(d[u].end(),d[v].begin(), d[v].end());
                    else if(w == 1)
                    {
                        reverse(d[v].begin(), d[v].end());
                        d[u].insert(d[u].end(),d[v].begin(), d[v].end());
                    }
                    d[v].clear();
                    break;
                }
            }
    
       }
    
       return 0;
    }
    
    • 1

    信息

    ID
    5
    时间
    1000ms
    内存
    512MiB
    难度
    8
    标签
    递交数
    95
    已通过
    16
    上传者