题解:

维护两个左偏树

按照左偏树模板来做

代码:

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=;
char s1[],s2[];
int rt[],tot,size[N],cas,dist[N],x,y,c[N][],n,a[N],val[N];
int merge(int x,int y)
{
if (!x||!y)return x+y;
if (val[x]<val[y])swap(x,y);
c[x][]=merge(c[x][],y);
if (dist[c[x][]]<dist[c[x][]])swap(c[x][],c[x][]);
dist[x]=dist[c[x][]]+;
return x;
}
int newnode(int x,int y)
{
val[++tot]=x;a[tot]=y;
size[tot]=;
c[tot][]=c[tot][]=dist[tot]=;
return tot;
}
int main()
{
while (~scanf("%d",&n),n)
{
printf("Case #%d:\n",++cas);
rt[]=rt[]=tot=;
memset(val,,sizeof val);
memset(size,,sizeof size);
memset(c,,sizeof c);
for (int i=;i<=n;i++)
{
scanf("%s",&s1);
if (s1[]=='u')
{
scanf("%s%d",&s2,&y);
if (s2[]=='A')x=;
else x=;
rt[]=newnode(i,y);
rt[x]=merge(rt[x],rt[]);
}
if (s1[]=='o')
{
scanf("%s",&s2);
if (s2[]=='A')x=;
else x=;
printf("%d\n",a[rt[x]]);
rt[x]=merge(c[rt[x]][],c[rt[x]][]);
}
if (s1[]=='e')
{
scanf("%s%s",&s2,&s2);
if (s2[]=='B')x=;
else x=;
rt[x]=merge(rt[x],rt[-x]);
rt[-x]=c[-x][]=c[-x][]=size[-x]=dist[-x]=;
}
}
}
}

hdu5818的更多相关文章

  1. 多校7 HDU5818 Joint Stacks

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

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

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

  3. HDU5818 Joint Stacks

    Joint Stacks                                                                       Time Limit: 8000/ ...

  4. hdu-5818 Joint Stacks(模拟)

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

  5. 【XSY2488】【HDU5818】Joint Stacks

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

  6. HDU - 5818 Joint Stacks 比较大の模拟,stack,erase

    https://vjudge.net/problem/HDU-5818 题意:给你两个栈AB,有常规push,pop操作,以及一个merge操作,merge A B 即将A.B的元素按照入栈顺序全部出 ...

随机推荐

  1. SQL基础--查询之五--查询语句一般格式

    SQL基础--查询之五--查询语句一般格式

  2. Python总结篇——知识大全

    python基础 Python开发环境搭建 Python变量和基本数据类型 python基本数据类型之操作 python的语法规范及for和while python编码 python文件操作 pyth ...

  3. android 本地通知

    NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); Notificat ...

  4. 【开发者笔记】python

    题记: 最近做Python导入接口,用到xlrd包读取excel文件信息入库,获取合并单元格信息时遇到时而成功时而失败的情况,一开始用xls文件读取不了合并单元格信息,后来换用xlsx格式可以读取.但 ...

  5. Executor框架与Thread

    Executor将线程的创建和线程的执行解耦,比较下面两个例子: 1:TaskExecutionWebServer.java package chapter06; import java.io.IOE ...

  6. gb28181的SPVMN测试环境搭建以及设备端和服务器的具体实现

    1.GB/T28181开发1之SPVMN(1.0.0.1)环境搭建 https://blog.csdn.net/hiwubihe/article/details/82910685 2.SPVMN 视频 ...

  7. Ubuntu 16.04安装Eclipse并创建桌面快捷方式

    系统:Ubuntu 16.04 JDK版本:1.8.0_121 1.官网下载eclipse,我的版本是eclipse-jee-neon-2-linux-gtk-x86_64.tar.gz,只要JDK版 ...

  8. Linux Find命令使用方法举例

    linux命令之find命令使用举例. 在当前目录和子目录下查找文件MyCProgram.c  # find . -name "MyCProgram.c" 查找文件且忽略大小写  ...

  9. uva1391 2-SAT 问题

    题意在大白书上. 有3 种工作 abc 大于等于平均年龄的可以去做a c 工作, 小于平均年龄的可以去做 bc , 同样转化为2 -sat 去做, 因为对于每个人也只有2 种情况可以作为选择 #inc ...

  10. 20155201 实验三《Java面向对象程序设计》实验报告

    20155201 实验三<Java面向对象程序设计>实验报告 一.实验内容 XP基础 XP核心实践 相关工具 二.实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门 ...