• Mergeable Stack ZOJ


    ZOJ - 4016

    vector又T又M

    list是以链表的方式存储的 是一个双向链表

    元素转移操作中,不能一个个遍历加入到s中,list独有的splic函数可以在常数时间内实现合并(并删除源list)

    splice()有三种调用形式:
    第一种: list1.splice(it1, list2).将list2中的所有元素拷贝到list1中。在list1中的起始位置是it1.复制结束后,list2将为空。


    第二种调用形式:
    list1.splice(it1, list2, it2)
    这个功能是将list2中的元素,从it2开始,剪切到list1的it1起始的地方。


    第三种调用形式:
    list1.splice(it1, list2, it2begin, it2end)

    #include <iostream>
    #include <cstdio>
    #include <sstream>
    #include <cstring>
    #include <map>
    #include <cctype>
    #include <set>
    #include <vector>
    #include <stack>
    #include <queue>
    #include <list>
    #include <algorithm>
    #include <cmath>
    #include <bitset>
    #define rap(i, a, n) for(int i=a; i<=n; i++)
    #define rep(i, a, n) for(int i=a; i<n; i++)
    #define lap(i, a, n) for(int i=n; i>=a; i--)
    #define lep(i, a, n) for(int i=n; i>a; i--)
    #define rd(a) scanf("%d", &a)
    #define rlld(a) scanf("%lld", &a)
    #define rc(a) scanf("%c", &a)
    #define rs(a) scanf("%s", a)
    #define rb(a) scanf("%lf", &a)
    #define rf(a) scanf("%f", &a)
    #define pd(a) printf("%d
    ", a)
    #define plld(a) printf("%lld
    ", a)
    #define pc(a) printf("%c
    ", a)
    #define ps(a) printf("%s
    ", a)
    #define MOD 2018
    #define LL long long
    #define ULL unsigned long long
    #define Pair pair<int, int>
    #define mem(a, b) memset(a, b, sizeof(a))
    #define _  ios_base::sync_with_stdio(0),cin.tie(0)
    //freopen("1.txt", "r", stdin);
    using namespace std;
    const int maxn = 310000, INF = 0x7fffffff;
    
    
    list<int> G[maxn];
    
    
    int main()
    {
        int T;
        rd(T);
        while(T--)
        {
            int n, q;
            rd(n), rd(q);
            for(int i = 0; i <= n; i++) G[i].clear();
            for(int i = 0; i < q; i++)
            {
                int id, v, s, t;
                rd(id);
                if(id == 1)
                {
                    rd(s), rd(v);
                    G[s].push_back(v);
                }
                else if(id == 2)
                {
                    rd(s);
                    if(G[s].empty())
                    {
                        printf("EMPTY
    ");
                        continue;
                    }
                    printf("%d
    ", G[s].back());
                    G[s].pop_back();
                }
                else
                {
                    rd(s), rd(t);
    //                for(list<int>::iterator it = G[t].begin(); it != G[t].end(); it++)
    //                    G[s].push_back(*it);
    //                G[t].clear();
                    G[s].splice(G[s].end(), G[t]);
                }
    
            }
    
        }
    
    
        return 0;
    }
  • 相关阅读:
    PAT Advanced 1067 Sort with Swap(0, i) (25分)
    PAT Advanced 1048 Find Coins (25分)
    PAT Advanced 1060 Are They Equal (25分)
    PAT Advanced 1088 Rational Arithmetic (20分)
    PAT Advanced 1032 Sharing (25分)
    Linux的at命令
    Sublime Text3使用指南
    IntelliJ IDEA创建第一个Groovy工程
    Sublime Text3 安装ftp插件
    Sublime Text3配置Groovy运行环境
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/10779052.html
Copyright © 2020-2023  润新知