【传送门】http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4016

【题目大意】初始有n个空栈,现在有如下三种操作:

(1) 1 s v  即 s.push(v)

(2) 2 s 即 s.pop() 输出弹出的元素,如果栈s为空则输出 "EMPTY"

(3) 3 s t 把t栈元素全部移到s栈中,使s的尾部与t的首部相连。

现在有若干上述三种类型的操作,遇到操作2则输出相应内容。

【题解】由于站的数量n和操作次数q的数量级都达到1e5,建这么多栈取模拟上述三种操作是不明智的,特别是对于操作2,还要设置一个辅助栈来把元素按序移动到s栈。其实看到操作2就应该想到这应该是用链表实现,而且是双向链表,时间复杂度O(1)

核心方法调用:

assign() 给list赋值 
back() 返回最后一个元素 
begin() 返回指向第一个元素的迭代器 
clear() 删除所有元素 
empty() 如果list是空的则返回true 
end() 返回末尾的迭代器 
erase() 删除一个元素 
front() 返回第一个元素 
get_allocator() 返回list的配置器 
insert() 插入一个元素到list中 
max_size() 返回list能容纳的最大元素数量 
merge() 合并两个list 
pop_back() 删除最后一个元素 
pop_front() 删除第一个元素 
push_back() 在list的末尾添加一个元素 
push_front() 在list的头部添加一个元素 
rbegin() 返回指向第一个元素的逆向迭代器 
remove() 从list删除元素 
remove_if() 按指定条件删除元素 
rend() 指向list末尾的逆向迭代器 
resize() 改变list的大小 
reverse() 把list的元素倒转 
size() 返回list中的元素个数 
sort() 给list排序 
splice() 合并两个list 
swap() 交换两个list 
unique() 删除list中重复的元素

【代码】

#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <list> using namespace std;
#define maxsize 300005
list <int> st[maxsize]; int main()
{
int cas;
scanf("%d",&cas);
while(cas--)
{
for(int i=;i<maxsize;i++)
{
st[i].clear();
}
int n,q;
scanf("%d%d",&n,&q);
int a,b,c;
while(q--)
{
scanf("%d",&a);
if(a == )
{
scanf("%d%d",&b,&c);
st[b].push_back(c);
}
if(a == )
{
scanf("%d",&b);
if(st[b].empty())
{
printf("EMPTY\n");
}
else
{
printf("%d\n",st[b].back());
st[b].pop_back();
} }
if(a == )
{
scanf("%d%d",&b,&c);
st[b].splice(st[b].end(),st[c]);
} }
}
return ;
}

ZOJ - 4016 Mergeable Stack (STL 双向链表)的更多相关文章

  1. ZOJ 4016 Mergeable Stack(利用list模拟多个栈的合并,STL的应用,splice函数!!!)

    Mergeable Stack Time Limit: 2 Seconds      Memory Limit: 65536 KB Given initially empty stacks, ther ...

  2. ZOJ 4016 Mergeable Stack(栈的数组实现)

    Mergeable Stack Time Limit: 2 Seconds      Memory Limit: 65536 KB Given  initially empty stacks, the ...

  3. ZOJ 4016 Mergeable Stack 链表

    Mergeable Stack Time Limit: 2 Seconds      Memory Limit: 65536 KB Given  initially empty stacks, the ...

  4. ZOJ - 4016 Mergeable Stack 【LIST】

    题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4016 题意 模拟栈的三种操作 第一种 push 将指定元素压入指 ...

  5. ZOJ 4016 Mergeable Stack(from The 18th Zhejiang University Programming Contest Sponsored by TuSimple)

    模拟题,用链表来进行模拟 # include <stdio.h> # include <stdlib.h> typedef struct node { int num; str ...

  6. [ZOJ 4016] Mergable Stack

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4016 直接用栈爆内存,看网上大神用数组实现的,构思巧妙,学习了! ...

  7. Mergeable Stack ZOJ - 4016(list)

    ZOJ - 4016 vector又T又M list是以链表的方式存储的 是一个双向链表 元素转移操作中,不能一个个遍历加入到s中,list独有的splic函数可以在常数时间内实现合并(并删除源lis ...

  8. Mergeable Stack(链表实现栈)

    C - Mergeable Stack ZOJ - 4016 一开始用stl中内置的栈来写,其中第三个操作,我先复制到一个数组,再将其倒给另一个栈 这个方法有两个错误的地方: 1.栈在内存很大需要扩容 ...

  9. C Mergeable Stack(list超好用)

    ZOJ  4016 list用法https://www.cnblogs.com/LLLAIH/p/10673068.html 一开始用普通的栈做,超内存,链表模拟栈也没写出来orz.补题发现list超 ...

随机推荐

  1. WYS APP

    UI图:http://modao.io/app/H8eZCQdV1pskjQ7z8bLh 四个tab:我要赛.赛事.运动吧.个人中心 赛事页面 1.主要是个NavigationController 2 ...

  2. sass --watch 失败bug

    NameError: uninitialized constant Sass::Plugin::Compiler::SassListen 网上说法是sass v3.2.10有bug 但是我版本3.5. ...

  3. Java 局部变量未初始化会报错,局部变量没有初始值,成员变量有初始值

    Java 成员变量有初始值,而局部变量没有初始值. 如下所示,代码不能编译通过 public static void main(String[] args){     String s;     Sy ...

  4. xadmin下设置“use_bootswatch = True”无效的解决办法

    环境: python 2.7 django 1.9 xadmin采用源代码的方式引入到项目中 问题: 在xadmin使用的过程中,设置“use_bootswatch = True”,企图调出主题菜单, ...

  5. (59)zabbix拓扑图展示链路状况Link indicators

    Link indicators介绍 上一篇已经了解了如何配置zabbix map,也提到了如何连接两个map元素,这节我们来讲两个map元素之间的链路指示配置. 我们需要在链路上配置trigger,如 ...

  6. (57)zabbix Slide shows幻灯片展示

    定义好screen之后,我们想了解服务器状况之时,一般会一个个screen点过去,zabbix提供了幻灯片展示方法,可以定义多个Slide,一个slide中可以包含多个screen. 创建slide ...

  7. UNIX环境C语言进程通信

    一.信号管理 1.函数signal signal函数是UNIX系统信号机制最简单的接口 #include <signal.h> typedef void (*sighandler_t)(i ...

  8. GIMP做成颜色蒙板

    效果图: 原始的美女图片上盖了一层的颜色,这个是想出来的效果,只是用来实践学到的技能,具体的场景还没有确定. 1/首先打开原始的美女图片: 2/然后在添加一张新的图片,作为新的图层添加进来: 这样的话 ...

  9. html块级元素和行级元素的区别和使用

    行内.块状元素区别: 1.行内元素与块级函数可以相互转换,通过修改display属性值来切换块级元素和行内元素,行内元素display:inline,块级元素display:block. 2.行内元素 ...

  10. git 常用命令及虚拟机服务器仓库搭建

    $ git config --global user.email "you@example.com" $ git config --global user.name "Y ...