题目:这里

题意: 两个类似于栈的列表,栈a和栈b,n个操作,push a x表示把数x放进a栈的栈底,pop b 表示将栈b的栈顶元素取出输出,并释放这个栈顶元素,merge a b表示把后面的那个

栈里的元素全部压进前面的那个栈里面,并且压入后前面的栈的所有元素按其进栈顺序排列然后后面的栈变为了空。

push和pop操作都还好,就是优先队列或者栈的操作,主要是merge操作,如果啊按照题目来模拟每次将后面的栈元素取出放入前面的栈,可能会超时,而超时的主要因素是每次都将

元素多的栈压入了元素少的栈,可以每次默认将栈1元素压入栈2,然后根据情况判断栈1和栈2到底哪个是栈a哪个是栈b,这样就解决了可能超时的问题,具体看代码。

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<stack>
#include<queue>
using namespace std; const int M = 1e5 + ;
struct node{
int x,y;
friend bool operator < (node a,node b){
return a.y<b.y;
}
}num[M];
priority_queue<node>a[]; int main()
{
int n,tem=;
while (~scanf("%d",&n)&&n){
printf("Case #%d:\n",++tem);
while (!a[].empty()) a[].pop();
while (!a[].empty()) a[].pop();
int ans=,flag=;
while (n--){
char str[],op;
scanf("%s",str);scanf(" %c",&op);
if (strcmp(str,"push")==){
scanf(" %d",&num[++ans].x);
num[ans].y=ans;
if (op=='A') a[flag].push(num[ans]);
else a[flag^].push(num[ans]);
}
else if (strcmp(str,"pop")==){
if (op=='A') printf("%d\n",a[flag].top().x),a[flag].pop();
else printf("%d\n",a[flag^].top().x),a[flag^].pop();
}
else{
char ch;
scanf(" %c",&ch);
while (!a[].empty()){
a[].push(a[].top());
a[].pop();
}
if (op=='A'&&flag==) flag=;
if (op=='B'&&flag==) flag=;
}
}
}
return ;
}

hdu 5818 (优先队列) Joint Stacks的更多相关文章

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

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

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

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

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

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

  4. HDU 5818 Joint Stacks(联合栈)

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

  5. HDU 5818 Joint Stacks

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

  6. 暑假练习赛 004 E Joint Stacks(优先队列模拟)

    Joint StacksCrawling in process... Crawling failed Time Limit:4000MS     Memory Limit:65536KB     64 ...

  7. 2016暑假多校联合---Joint Stacks (STL)

    HDU  5818 Problem Description A stack is a data structure in which all insertions and deletions of e ...

  8. 多校7 HDU5818 Joint Stacks

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

  9. HDU5818 Joint Stacks

    Joint Stacks                                                                       Time Limit: 8000/ ...

随机推荐

  1. 基于MATLAB的GUI(Graphical User Interface)音频实时显示设计

    摘要:本文章的设计主要讲基于matlab的gui音频实时显示设计,此次设计的gui相当于一个简洁的音乐播放器,界面只有”录音“和”播放“两个控件,哈哈,够简洁吧.通过”录音“按钮可以实现声音从电脑的声 ...

  2. Python入门1

    简介 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承.Python ...

  3. [platform]linux platform device/driver(三)--Platform Device和Platform_driver注册过程之代码对比

    转自:http://blog.csdn.net/thl789/article/details/6723350 Linux 2.6的设备驱动模型中,所有的device都是通过Bus相连.device_r ...

  4. (转)SQLServer_T-SQL 语句执行时间的查询

    原文地址:http://blog.csdn.net/wangjunhe/article/details/7211974 --利用getdatedeclare @beginTime datetime d ...

  5. math汇总

    **** 1/(1^2) + 1/(2^2) + … + 1/(n^2)会收敛到pi^2/6,当n的数位大于6位数字时,最后的结果就是pi^2/6 ****** &的大作用 1.先看看这个n= ...

  6. 剑指Offer:面试题24——二叉搜索树的后序遍历序列(java实现)

    问题描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true,否则返回false.假设输入的数组的任意两个数字都互不相同. 思路: 1.首先后序遍历的结果是[(左子 ...

  7. linux服务器下添加字体

    版权声明:本文为楼主原创文章,未经楼主允许不得转载,如要转载请注明来源. 引言:这两天在开发一个动态生成海报的东西(图片拼接,图片水印),开发在windows下没有问题,图片和文字都能正常的生成出来. ...

  8. Mac后台开发MNMP(nginx , mysql, php)标配

    mysql安装: 方法:1.原始方法,下载压缩文件,解压,安装,配置            2.dmp文件安装            3.brew安装 这里使用brew安装:      a.brew ...

  9. Excel 如何按条件计数和按条件求和(如按月求和)

    1.使用SUMPRODUCT进行多条件计数语法:=SUMPRODUCT((条件1)*(条件2)*(条件3)* …(条件n))作用:统计同时满足条件1.条件2到条件n的记录的个数.实例:=SUMPROD ...

  10. Failed to load the JNI shared library jvm.dll

    jdk和使用的ide版本不符合,换一个版本的jdk或者换版本的ide