Joint Stacks

                                                                      Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
                                                                                                 Total Submission(s): 1815    Accepted Submission(s): 815

Problem Description
A stack is a data structure in which all insertions and deletions of entries are made at one end, called the "top" of the stack. The last entry which is inserted is the first one that will be removed. In another word, the operations perform in a Last-In-First-Out
(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.

 
Input
There are multiple test cases. For each case, the first line contains an integer N(0<N≤105),
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.
 
Output
For each case, print a line "Case #t:", where t is the case number (starting from 1). For each "pop" operation, output the element that is popped, in a single line.
 
Sample Input
4
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
 
Sample Output
Case #1:
2
1
Case #2:
1
2
3
0
Case #3:
1
2
3
0
 
Author
SYSU
 
Source
 

—————————————————————————————————

题目的意思给出两个栈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的更多相关文章

  1. 多校7 HDU5818 Joint Stacks

    多校7 HDU5818 Joint Stacks 题意:n次操作.模拟栈的操作,合并的以后,每个栈里的元素以入栈顺序排列 思路:开三个栈,并且用到了merge函数 O(n)的复杂度 #include ...

  2. hdu-5818 Joint Stacks(模拟)

    题目链接: Joint Stacks Time Limit: 8000/4000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Othe ...

  3. HDU5818 Joint Stacks 左偏树,可并堆

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - HDU5818 题意概括 有两个栈,有3种操作. 第一种是往其中一个栈加入一个数: 第二种是取出其中一个栈的顶 ...

  4. HDU 5818:Joint Stacks(stack + deque)

    http://acm.hdu.edu.cn/showproblem.php?pid=5818 Joint Stacks Problem Description   A stack is a data ...

  5. HDU 5818 Joint Stacks(联合栈)

    HDU 5818 Joint Stacks(联合栈) Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Ja ...

  6. HDU 5818 Joint Stacks

    Joint Stacks Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  7. hdu 5818 Joint Stacks (优先队列)

    Joint Stacks Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  8. HDU 5818 Joint Stacks (优先队列)

    Joint Stacks 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5818 Description A stack is a data stru ...

  9. 【XSY2488】【HDU5818】Joint Stacks

    这题合并栈让我们想到了左偏树. 我们可以维护val值为时间,dis值为size的左偏树,定义两个根root1和root2,表示两个栈的栈顶,建大根的左偏树. 接下来的插入,删除,两个栈合并都是左偏树的 ...

随机推荐

  1. 如何修复“网络路径”,错误代码0x80070035

    1.以管理员权限 运行 cmd. sc.exe config lanmanworkstation depend= bowser/mrxsmb10/nsi回车sc.exe config mrxsmb20 ...

  2. Linux运维精华面试题

    1.什么是运维?什么是游戏运维? 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护,他集合了网络.系统.数据库.开发.安全.监控于一身 ...

  3. Appium Capabilities 详解(Android适配/IOS后续再补充)

    Appium 关键字 关键字 描述 实例 automationName 你想使用的自动化测试引擎 Appium (默认) 或 Selendroid platformName 你要测试的手机操作系统 i ...

  4. bootstrap模态框手动关闭遮盖层不消失

    模态框中 加载了一个子页面 子页面中调教表单之后想根据执行结果手动关闭模态框,最初尝试了以下几种方案: 1.$("#myModal").modal('hide');//模态框关闭 ...

  5. 12条MySQL优化技巧

    应用程序慢,原因多多,可能是网络的原因.可能是系统架构的原因,还有可能是数据库的原因. 有人会说性能调优是数据库管理员(DBA)的事,然而性能调优跟程序员们也有莫大的关系. 程序中嵌入的一行行的SQL ...

  6. stm32-arduino-f103

    希望给工作中偶尔要用的一些辅助板卡(例如运行信息现场记录)找一个快速开发的手段,Arduino作为流行的开源嵌入硬件框架,组件丰富,资料众多,所以想以Arduino作为平台.但是Arduino板子基本 ...

  7. vue间通信

    1,父子组件通信 props 传递 父组件: 子组件: 2,子父组件通信 父组件: 子组件: 3,子组件与子组件传递 使用bus.js  如下 传递子组件:  接收子组件

  8. 使用QML绘制界面

    1 使用QML设计登录界面 https://www.cnblogs.com/bhlsheji/p/5324871.html 2 使用QML实现下拉列表框  https://blog.csdn.net/ ...

  9. log4j.properties配置与将异常输出到Log日志文件实例

    将异常输出到 log日志文件 实际项目中的使用: <dependencies> <dependency> <groupId>org.slf4j</groupI ...

  10. sqlserver CLR sqlserver使用C# dll

    转载地址:https://www.cnblogs.com/Brambling/p/8000911.html