AVL模板
感谢此博客
#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define de(x) cout << #x << " = " << x << endl
#define clr(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int N = 2e5 + 15;
struct AvlTree
{
int val;
int ch[2];
int hei, sz;
/*node( int _v, int _h, int _sz )
{
val = _v;
hei = _h;
sz = _sz;
ch[0] = ch[1] = 0;
}*/
};
AvlTree t[N<<2];
int cnt, rt;
void node( AvlTree &x, int v, int _h, int _sz )
{
x.val = v;
x.hei = _h;
x.sz = _sz;
x.ch[0] = x.ch[1] = 0;
}
int height( int x )
{
if ( !x ) return -1;
else
return t[x].hei;
}
int rotate( int x, int f )
{
int y = t[x].ch[f^1];
t[x].ch[f^1] = t[y].ch[f];
t[y].ch[f] = x;
t[x].hei = max( height(t[x].ch[0]), height(t[x].ch[1]) ) + 1;
t[y].hei = max( height(t[y].ch[0]), height(t[y].ch[1]) ) + 1;
return y;
}
int doubleL2R( int x )
{
t[x].ch[0] = rotate( t[x].ch[0], 0 );
return rotate( x, 1 );
}
int doubleR2L( int x )
{
t[x].ch[1] = rotate( t[x].ch[1], 1 );
return rotate( x, 0 );
}
void ins( int &x, int v )
{
if ( !x ) node( t[x=cnt++], v, 0, 0);
else if ( v < t[x].val )
{
ins( t[x].ch[0], v );
if ( height(t[x].ch[0]) - height(t[x].ch[1]) == 2 )
{
int f = v < t[t[x].ch[0]].val;
if ( f )
x = rotate( x, f );
else
x = doubleL2R( x );
}
}
else if ( v > t[x].val )
{
ins( t[x].ch[1], v );
if ( height(t[x].ch[1]) - height(t[x].ch[0]) == 2 )
{
int f = v > t[t[x].ch[1]].val;
if ( f )
x = rotate( x, f^1 );
else
x = doubleR2L( x );
}
}
t[x].hei = max( height(t[x].ch[0]), height(t[x].ch[1]) ) + 1;
}
void find( int x, int v )
{
if ( !x ) return ;
if ( t[x].val == v ) return ;
printf("%d ", t[x].val );
find( t[x].ch[ v > t[x].val ], v );
}
void init()
{
cnt = 1;
rt = 0;
node( t[rt], 0, 0, 0 );
}
int main()
{
int n;
init();
scanf("%d", &n);
for ( int i = 0; i < n; i ++ )
{
int op, now;
scanf("%d%d", &op, &now);
if ( op == 1 ) ins( rt, now );
else
{
find( rt, now );
printf("%d\n", now);
}
}
return 0;
}
AVL模板的更多相关文章
- PAT甲级1123 Is It a Complete AVL Tree【AVL树】
题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805351302414336 题意: 给定n个树,依次插入一棵AVL ...
- Codeforces Round #353 (Div. 2) D. Tree Construction 二叉搜索树
题目链接: http://codeforces.com/contest/675/problem/D 题意: 给你一系列点,叫你构造二叉搜索树,并且按输入顺序输出除根节点以外的所有节点的父亲. 题解: ...
- PAT 甲级真题题解(63-120)
2019/4/3 1063 Set Similarity n个序列分别先放进集合里去重.在询问的时候,遍历A集合中每个数,判断下该数在B集合中是否存在,统计存在个数(分子),分母就是两个集合大小减去分 ...
- 数据结构图文解析之:AVL树详解及C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- AVL树模板
///AVL树模板 typedef struct Node ///树的节点 { int val,data; int h; ///以当前结点为根结点的数的高度 int bf; ///平衡因子(左子树高度 ...
- 平衡树初阶——AVL平衡二叉查找树+三大平衡树(Treap + Splay + SBT)模板【超详解】
平衡树初阶——AVL平衡二叉查找树 一.什么是二叉树 1. 什么是树. 计算机科学里面的树本质是一个树状图.树首先是一个有向无环图,由根节点指向子结点.但是不严格的说,我们也研究无向树.所谓无向树就是 ...
- PAT甲级题解-1066. Root of AVL Tree (25)-AVL树模板题
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6803291.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- C++模板实现的AVL树
1 AVL树的定义 AVL树是一种自平衡二叉排序树.它的特点是不论什么一个节点的左子树高度和右子树的高度差在-1,0,1三者之间. AVL树的不论什么一个子树都是AVL树. 2 AVL树的实现 AVL ...
- 【PAT甲级】1066 Root of AVL Tree (25 分)(AVL树建树模板)
题意: 输入一个正整数N(<=20),接着输入N个结点的值,依次插入一颗AVL树,输出最终根结点的值. AAAAAccepted code: #define HAVE_STRUCT_TIMESP ...
随机推荐
- PHP之冒号、endif、endwhile、endfor 是什么鬼?f
解释:其实这些都是PHP的语法,只不过不常用而已,这些都是PHP流程控制的替代语法. 冒号(:)相当于是 左大括号---->{ endif.endwhile.endfor.endforeach- ...
- 通过/dev/mem只能访问高端内存以下的内核线性地址空间
http://blog.chinaunix.net/uid-20564848-id-74706.html </proc/iomem和/proc /ioports对应的fops> < ...
- SQL Server 常用分页SQL(转)
发现网上好多都是错的.网上经常查到的那个Top Not in 或者Max 大部分都不实用,很多都忽略了Order和性能问题.为此上网查了查,顺带把2000和2012版本的也补上了. 先说说网上常见SQ ...
- opencv亚像素级角点检测
一般角点检测: harris cv::cornerHarris() shi-tomasi cv::goodFeaturesToTrack() 亚像素级角点检测是在一般角点检测基础之上将检测出的角点精确 ...
- linux知识体系
0. Linux简介与厂商版本 1. Linux开机启动 2. Linux文件管理 3. Linux的架构 4. Linux命令行与命令 5. Linux文件管理相关命令 6. Linux文本流 7. ...
- 使用Custom Draw优雅的实现ListCtrl的重绘
common control 4.7版本介绍了一个新的特性叫做Custom Draw,这个名字显得模糊不清,让人有点摸不着头脑,而且MSDN里也只给出了一些如风的解释和例子,没有谁告诉你你想知道的,和 ...
- 爬虫之Xpath详解
XPath介绍 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历. XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 ...
- zabbix详解(一)
zabbix简介 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供柔软的通知机制以让系统管 ...
- 2.AS入门教程
AndroidStudio 本文是关于androidStudio的一些基础知识 介绍 Google官方的Android集成开发环境(IDE = Integrated Development Envir ...
- 从原型链看DOM--Document类型
JavaScript通过Document类型表示文档,原型链的继承关系为:document.__proto__->HTMLDocument.prototype->Document.prot ...