HDU5818 Joint Stacks
Joint Stacks
Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1815 Accepted Submission(s): 815
(LIFO) manner.
A mergeable stack is a stack with "merge" operation. There are three kinds of operation as follows:
- push A x: insert x into stack A
- pop A: remove the top element of stack A
- merge A B: merge stack A and B
After an operation "merge A B", stack A will obtain all elements that A and B contained before, and B will become empty. The elements in the new stack are rearranged according to the time when they were pushed, just like repeating their "push" operations in
one stack. See the sample input/output for further explanation.
Given two mergeable stacks A and B, implement operations mentioned above.
indicating the number of operations. The next N lines, each contain an instruction "push", "pop" or "merge". The elements of stacks are 32-bit integers. Both A and B are empty initially, and it is guaranteed that "pop" operation would not be performed to an
empty stack. N = 0 indicates the end of input.
push A 1
push A 2
pop A
pop A
9
push A 0
push A 1
push B 3
pop A
push A 2
merge A B
pop A
pop A
pop A
9
push A 0
push A 1
push B 3
pop A
push A 2
merge B A
pop B
pop B
pop B
0
2
1
Case #2:
1
2
3
0
Case #3:
1
2
3
0
—————————————————————————————————
题目的意思给出两个栈A B(初始时为空),有三种操作:
push、pop、merge.
其中merge是按照A B中元素进栈的相对顺序来重排的.
思路:因为题目说了不会对空栈弹出,所以开三个优队(栈也可以)前两个分别存A和B,第三个公用,插入删除还是对AB操作,合并把AB情况放到C中,每次输入时先判AB是否是空,不为空则输出AB顶,否则这个元素肯定在C中输出即可。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <map>
#include <cmath>
#include <set>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <functional> using namespace std; #define LL long long
const int INF = 0x3f3f3f3f; int n,x;
char s1[10],s2[5],s3[5];
int cnt [1000005],fl[1000006];
struct node
{
int t,val;
friend bool operator <(const node &a,const node &b)
{
return a.t<b.t;
}
} pre; int main()
{
int cas=0;
while(~scanf("%d",&n)&&n)
{
printf("Case #%d:\n",++cas);
priority_queue<node>q1,q2,q3;
for(int i=1; i<=n; i++)
{
scanf("%s",s1);
if(!strcmp(s1,"push"))
{
scanf("%s%d",s2,&x);
pre.t=i,pre.val=x;
if(!strcmp(s2,"A")) q1.push(pre);
else q2.push(pre);
}
else if(!strcmp(s1,"pop"))
{
scanf("%s",s2);
if(!strcmp(s2,"A"))
{
if(!q1.empty())
printf("%d\n",q1.top().val),q1.pop();
else
printf("%d\n",q3.top().val),q3.pop();
}
else
{
if(!q2.empty())
printf("%d\n",q2.top().val),q2.pop();
else
printf("%d\n",q3.top().val),q3.pop();
}
}
else
{
scanf("%s%s",s2,s3);
while(!q2.empty())
q3.push(q2.top()),q2.pop();
while(!q1.empty())
q3.push(q1.top()),q1.pop();
}
}
}
return 0;
}
HDU5818 Joint Stacks的更多相关文章
- 多校7 HDU5818 Joint Stacks
多校7 HDU5818 Joint Stacks 题意:n次操作.模拟栈的操作,合并的以后,每个栈里的元素以入栈顺序排列 思路:开三个栈,并且用到了merge函数 O(n)的复杂度 #include ...
- hdu-5818 Joint Stacks(模拟)
题目链接: Joint Stacks Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- HDU5818 Joint Stacks 左偏树,可并堆
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - HDU5818 题意概括 有两个栈,有3种操作. 第一种是往其中一个栈加入一个数: 第二种是取出其中一个栈的顶 ...
- HDU 5818:Joint Stacks(stack + deque)
http://acm.hdu.edu.cn/showproblem.php?pid=5818 Joint Stacks Problem Description A stack is a data ...
- HDU 5818 Joint Stacks(联合栈)
HDU 5818 Joint Stacks(联合栈) Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Ja ...
- HDU 5818 Joint Stacks
Joint Stacks Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- hdu 5818 Joint Stacks (优先队列)
Joint Stacks Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- HDU 5818 Joint Stacks (优先队列)
Joint Stacks 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5818 Description A stack is a data stru ...
- 【XSY2488】【HDU5818】Joint Stacks
这题合并栈让我们想到了左偏树. 我们可以维护val值为时间,dis值为size的左偏树,定义两个根root1和root2,表示两个栈的栈顶,建大根的左偏树. 接下来的插入,删除,两个栈合并都是左偏树的 ...
随机推荐
- 自己电脑组一个Wifi热点
① 在cmd窗口 ssid 是wifi名称.key是密码 netsh wlan set hostednetwork mode=allow ssid=yb key=15564130 ② ③ 运行脚本 新 ...
- Servlet第二篇(介绍、ServletConfig;ServletContext)
什么是Serlvet? Servlet其实就是一个遵循Servlet开发的java类.Serlvet是由服务器调用的,运行在服务器端. 为什么要用到Serlvet? 我们编写java程序想要在网上实现 ...
- yum与rpm常用命令
1 yum常用命令 2 rpm常用命令 1 yum常用命令 (1)列出所有可更新的软件清单命令:yum check-update (2)更新所有软件命令:yum update (4)仅安装指定的 ...
- scikit_learn,NLTK导入分类器相关流程命令
- CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-2设置SSH免密登录
因为hadoop集群在安装的时候需要集群中所有机器的权限. 所以我们需要打通所有节点的ssh无密码登陆,思路是生成每台机子的密钥,集中在一个文件中,再分发到每台机子上. 为了确保下面的命令能顺利执行, ...
- 【转载】【吵架】能力 说清自己的能力。表达清楚 ;别人发飙你也要撕b;换位思考,把自己当领导层
女上司和别人在会议室吵架,大家都说她变态.女人能当好领导吗? 治敏@为好优 2018-06-20 19:56:00 为好优姐姐: 想问问您,是不是职场女强人,都是那种彪悍的战斗机呀! 我刚来公司实习 ...
- 安装jdk设置环境变量(win10)
jdk地址: (懒得去官网找,就这个吧,反正也是玩玩) 没标的都是下一步哈 配置环境变量: 1. 新建 JAVA_HOME 值为 F:\java\jdk 安装的位置(第三张图 的那个路径) 2. 新建 ...
- Kubernetes集群升级(kubeadm升级方式)
1.升级前的版本确认(相同的大版本号下的小版本升级还是跨版本升级) 例如:从1.12.0升级到1.12.7 或者 从1.12.7升级到1.13.0 2.配置kubernetes安装源(已配置kuber ...
- SQLServer 中有五种约束, Primary Key 约束、 Foreign Key 约束、 Unique 约束、 Default 约束和 Check 约束
一直在关注软件设计方面,数据库方面就忽略了很多,最近在设计数据库时遇到了一些小麻烦,主要是数据库中约束和性能调优方面的应用,以前在学习 Sql Server 2000,还有后来的 Sql Server ...
- Fair Candy Swap LT888
Alice and Bob have candy bars of different sizes: A[i] is the size of the i-th bar of candy that Ali ...