题目:这里

题意: 两个类似于栈的列表,栈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. Reflector 反编译 .NET文件后修复

    反编译后的工程文件用VS2010打开后,在打开窗体时会出现一系列错误提示: 第一种情况: “设计器无法处理第 152 行的代码: base.AutoScaleMode = AutoScaleMode. ...

  2. UVA 1395 苗条的生成树(最小生成树+并查集)

    苗条的生成树 紫书P358 这题最后坑了我20分钟,怎么想都对了啊,为什么就wa了呢,最后才发现,是并查集的编号搞错了. 题目编号从1开始,我并查集编号从0开始 = = 图论这种题真的要记住啊!!题目 ...

  3. php二维数组排序方法(转自http://www.3lian.com/edu/2013/12-26/118882.html)

    一维数组排序可以使用asort.ksort等一些方法进程排序,相对来说比较简单.二维数组的排序怎么实现呢?使用array_multisort和usort可以实现 例如像下面的数组:    代码如下: ...

  4. Django(进阶篇)之model

    Model 解析 Django的数据库,涉及相关操作时就是以下流程: 1.创建数据库,设计表结构和字段 2.使用Mysqldb来连接数据库,并编写数据访问层 3.业务逻辑层去调用数据访问层执行数据库操 ...

  5. XE6移动开发环境搭建之IOS篇(8):在Mac OSX 10.8中安装XE6的PAServer(有图有真相)

    网上能找到的关于Delphi XE系列的移动开发环境的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 安装PAServer ...

  6. Relatives

    Description Given n, a positive integer, how many positive integers less than n are relatively prime ...

  7. 八、MPxToolCommand, tool command

    1. Tool Property Sheets: 是用来更改context属性的编辑框,类似于attribute editor.(property和attribute本质上是一个意思)作用于activ ...

  8. JSP三大指令

    JSP三大指令1.page-->最复杂,<%@page language = "java" info = "xxx" ..%>  *pageE ...

  9. java学习第四天

    那些逻辑语言就基本了解下,今天想到了一个问题就是关于for和while的区别,从专业上来说,for和while基本上是相同的,但是for是只允许一次访问的,如果结束后就无法继续访问,而while则可以 ...

  10. java 动态编译

    public class Main { public static void main(String[] args) { System.out.println("Hello World!&q ...