splay poj3481
三种操作
1 k p 插入一个点
2 输出p最大对应的k 删除这个点
3 输出p最小对应的k 删除这个点
splay 维护一下 一不小心就会超时
#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<string.h> using namespace std;
#define inf 1000000000
#define MAXN 1000100 int pa[MAXN],ch[MAXN][],ki[MAXN],pi[MAXN];
int root,cnt; void Rotate(int x,int kind)
{
int y=pa[x];
int z=pa[y];
ch[y][!kind]=ch[x][kind];
pa[ch[x][kind]]=y;
if(pa[y])ch[pa[y]][ch[pa[y]][]==y]=x;
pa[x]=pa[y];
ch[x][kind]=y;
pa[y]=x;
}
void splay(int x,int goal)
{
while(pa[x]!=goal)
{
if(pa[pa[x]]==goal)
{
Rotate(x,ch[pa[x]][]==x);
}
else
{
int y=pa[x];
int kind=ch[pa[y]][]==y;
if(ch[y][kind]==x)
{
Rotate(x,!kind);
Rotate(x,kind);
}
else
{
Rotate(y,kind);
Rotate(x,kind);
}
}
}
if(goal==)root=x;
} void newnode(int &x,int k,int p,int father)
{
x=++cnt;
pa[x]=father;
ch[x][]=ch[x][]=;
pi[x]=p;
ki[x]=k;
}
void Insert(int k,int p)
{
int rt=root;
int r=root;
while(rt!=)
{
r=rt;
if(pi[rt]<p)rt=ch[rt][];
else rt=ch[rt][];
}
newnode(ch[r][pi[r]<p],k,p,r);
splay(ch[r][pi[r]<p],root);
ch[][]=ch[][]=;
} int f_max(int x)
{
while(ch[x][])
x=ch[x][];
if(x==root)
root=ch[x][];
ch[pa[x]][]=ch[x][];
pa[ch[x][]]=pa[x];
return ki[x];
}
int f_min(int x)
{
while(ch[x][])
x=ch[x][];
if(x==root)
root=ch[x][];
ch[pa[x]][]=ch[x][];
pa[ch[x][]]=pa[x];
return ki[x];
}
int main()
{
root=cnt=;
int n; while(scanf("%d",&n)!=EOF&&n)
{
if(n==)
{
int k,p;
scanf("%d%d",&k,&p);
Insert(k,p);
}
else if(n==)
printf("%d\n",f_max(root));
else
printf("%d\n",f_min(root));
} return ;
}
splay poj3481的更多相关文章
- 【POJ3481】【splay】Double Queue
Description The new founded Balkan Investment Group Bank (BIG-Bank) opened a new office in Bucharest ...
- POJ-3481 Double Queue (splay)
The new founded Balkan Investment Group Bank (BIG-Bank) opened a new office in Bucharest, equipped w ...
- poj3481(splay tree 入门题)
平衡树都能做. // // main.cpp // splay // // Created by 陈加寿 on 16/3/25. // Copyright © 2016年 chenhuan001. A ...
- 三大平衡树(Treap + Splay + SBT)总结+模板[转]
Treap树 核心是 利用随机数的二叉排序树的各种操作复杂度平均为O(lgn) Treap模板: #include <cstdio> #include <cstring> #i ...
- 平衡树初阶——AVL平衡二叉查找树+三大平衡树(Treap + Splay + SBT)模板【超详解】
平衡树初阶——AVL平衡二叉查找树 一.什么是二叉树 1. 什么是树. 计算机科学里面的树本质是一个树状图.树首先是一个有向无环图,由根节点指向子结点.但是不严格的说,我们也研究无向树.所谓无向树就是 ...
- 三大平衡树(Treap + Splay + SBT)总结+模板[转]
Treap树 核心是 利用随机数的二叉排序树的各种操作复杂度平均为O(lgn) Treap模板: #include <cstdio> #include <cstring> #i ...
- 三大平衡树(Treap + Splay + SBT)总结+模板
Treap树 核心是 利用随机数的二叉排序树的各种操作复杂度平均为O(lgn) Treap模板: #include <cstdio> #include <cstring> #i ...
- BZOJ 1251: 序列终结者 [splay]
1251: 序列终结者 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 3778 Solved: 1583[Submit][Status][Discu ...
- [bzoj1269][AHOI2006文本编辑器editor] (splay模版题 or pb_ds [rope]大法)
Description 这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器.你能帮助他吗?为了明确任务目标,可可对“文本编辑器”做了一个抽象的定义: 文本:由0个或 ...
随机推荐
- Unity C# 反编译
前言 结合前篇:[反编译U3D]Decompile Unity Resources 修正 本篇说说如何查看unity项目(apk) 的源代码,前提是这个apk的代码未经过加密. 写这篇的目地就是看看别 ...
- Flex:自定义滚动条样式/隐藏上下箭头
Flex组件自定义滚动条的实现 .scrollBar{ downArrowUpSkin:Embed(source="img/mainLeftScrollBar/bar_bottom.png& ...
- IT菜鸟的3(for循环+分支语句)
第三天学的东西感觉已经不是很容易能想通了,感觉头懵懵的,难道这就是是文科生的障碍吗,我不相信,坚持!相信自己一定会做好! 1:for循环!(1)循环四要素:初始条件,循环条件,循环体,状态改变for( ...
- [No00003E]26个字母暗藏的单词秘密
个字母暗藏的单词秘密 人们普通认为:英语是拼音文字,因而与象形无关.但是,实际上,即使作为拼音文字,其字母的来源也与象形有关.根据笔者十多年的研究结果,英语中的二十六个字母每个字母都有其象形意义,而且 ...
- java 28 - 5 JDK5的新特性 之 枚举的使用
上一章,自定义了枚举类,超级麻烦.. 所以,JAVA给了一个枚举类:类 Enum<E extends Enum<E>> 注意事项 定义枚举类要用关键字enum 所有枚举类都是E ...
- Eclipse启动时选择workspace设置
由于一直习惯eclipse中只使用一个工作空间,所以一般在eclipse刚刚安装好后第一次启动时,我就钩上了弹出的工作空间选择的对话框中以后不再提示的钩选. 结果这次突然需要用到它的工作空间提示功能了 ...
- luogu2038[NOIP2014 T4]无线网络发射器选址
题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 条南北向街道所形成的网格状,并且相邻 ...
- C语言:void指针
使用前必须进行强制类型转换 #include <stdio.h> void test(const void *p); int main(){ ; int *p = &i; puts ...
- JQuery阻止事件冒泡---阻止后续代码执行
(1)什么是事件起泡 首先你要明白一点,当一个事件发生的时候,该事件总是有一个事件源,即引发这个事件的对象,一个事件不能凭空产生,这就是事件的发生. 当事件发生后,这个事件就要开始传播.为什么要传播呢 ...
- hashset hastable dictionary concurrentdictionary区别
1.HashTable 哈希表(HashTable)表示键/值对的集合.在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现 ...