SBT模版
/*Author:WNJXYK*/
#include<cstdio>
using namespace std; const int Maxn=;
struct SBT{
int left;
int right;
int size;
int key;
};
SBT tree[Maxn+];
int root,cnt; inline void rotate_l(int &x){
int y=tree[x].right;
tree[x].right=tree[y].left;
tree[y].left=x;
tree[y].size=tree[x].size;
tree[x].size=+tree[tree[x].left].size+tree[tree[x].right].size;
x=y;
} inline void rotate_r(int &x){
int y=tree[x].left;
tree[x].left=tree[y].right;
tree[y].right=x;
tree[y].size=tree[x].size;
tree[x].size=tree[tree[x].left].size++tree[tree[x].right].size;
x=y;
} void maintain(int &x,bool flag){
//printf("MainTain %d\n",x);
if (flag==false){
if (tree[tree[tree[x].left].left].size>tree[tree[x].right].size){
rotate_r(x);
}
else if (tree[tree[tree[x].left].right].size>tree[tree[x].right].size){
rotate_l(tree[x].left);
rotate_r(x);
}else return ;
}else{
if (tree[tree[tree[x].right].right].size>tree[tree[x].left].size){
rotate_l(x);
}else if (tree[tree[tree[x].right].left].size>tree[tree[x].left].size){
rotate_r(tree[x].right);
rotate_l(x);
}else return ;
}
maintain(tree[x].left,false);
maintain(tree[x].right,true);
maintain(x,true);
maintain(x,false);
}
void insert(int &x,int sp){
if (!x){
x=++cnt;
tree[x].left=tree[x].right=;
tree[x].size=;
tree[x].key=sp;
}else{
tree[x].size++;
if (sp<tree[x].key){
insert(tree[x].left,sp);
}else{
insert(tree[x].right,sp);
}
maintain(x,sp>=tree[x].key);
}
} int del(int &x,int sp){
tree[x].size--;
if (sp==tree[x].key || ( sp<tree[x].key && tree[x].left==) || (sp>tree[x].key && tree[x].right==)){
int y=tree[x].key;
if (tree[x].left== ||tree[x].right==){
x=tree[x].left+tree[x].right;
}else{
tree[x].key=del(tree[x].left,tree[x].key+);
}
return y;
}else{
if (sp<tree[x].key){
return del(tree[x].left,sp);
}else{
return del(tree[x].right,sp);
}
}
} inline int getMax(){
int i;
for (i=root;tree[i].right;i=tree[i].right);
return tree[i].key;
} inline int getMin(){
int i;
for (i=root;tree[i].left;i=tree[i].left);
return tree[i].key;
} int rank(int &x,int sp){
if (sp<tree[x].key){
return rank(tree[x].left,sp);
}else if (sp>tree[x].key){
return rank(tree[x].right,sp)+tree[tree[x].left].size+;
}
return tree[tree[x].left].size+;
} int select(int &x,int rak){
int rk=tree[tree[x].left].size+;
if (rak<rk){
return select(tree[x].left,rak);
}else if (rak>rk){
return select(tree[x].right,rak-rk);
}
return tree[x].key;
} int pred(int &x,int y,int sp){
if (x==) return y;
if (tree[x].key<sp){
return pred(tree[x].right,x,sp);
}
return pred(tree[x].left,y,sp);
} int succ(int &x,int y,int sp){
if (x==) return y;
if (tree[x].key>sp){
return succ(tree[x].left,x,sp);
}
return succ(tree[x].right,y,sp);
} inline void init(){
root=cnt=;
} int main(){
init();
return ;
}
SBT模版的更多相关文章
- 平衡树初阶——AVL平衡二叉查找树+三大平衡树(Treap + Splay + SBT)模板【超详解】
平衡树初阶——AVL平衡二叉查找树 一.什么是二叉树 1. 什么是树. 计算机科学里面的树本质是一个树状图.树首先是一个有向无环图,由根节点指向子结点.但是不严格的说,我们也研究无向树.所谓无向树就是 ...
- 创建ABPboilerplate模版项目
本文是根据角落的白板报的<通过ABPboilerplate模版创建项目>一文的学习总结,感谢原文作者角落的白板报. 1 准备 开发环境: Visual Studio 2015 update ...
- Idea下用SBT搭建Spark Helloworld
没用过IDEA工具,听说跟Eclipse差不多,sbt在Idea其实就等于maven在Eclipse.Spark运行在JVM中,所以要在Idea下运行spark,就先要安装JDK 1.8+ 然后加入S ...
- 使用boilerplate模版创建解决方案
返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 话不多说,让我们开始干吧!对于还没有接触ABP框架或者接触时间还不是很长的小伙伴来说,我建议还是使用官方建议的做法,那就是到ABP ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(29)-T4模版
系列目录 本节不再适合本系统,在58,59节已经重构.请超过本节 这讲适合所有的MVC程序 很荣幸,我们的系统有了体验的地址了.演示地址 之前我们发布了一个简单的代码生成器,其原理就是读取数据库的表结 ...
- 构建自己的PHP框架--构建模版引擎(1)
前段时间太忙,导致好久都没有更新博客了,今天抽出点时间来写一篇. 其实这个系列的博客很久没有更新了,之前想好好规划一下,再继续写,然后就放下了,今天再捡起来继续更新. 今天我们来说一下,如何构建自己的 ...
- asp.net读取模版并写入文本文件
本文要介绍的是ASP.NET怎样读写文本文件,但更重要的是实现的过程.使用的工具是Visual Studio 2015 ,.NET版本是4.6.1 .一共建立的2个项目,HoverTreePanel和 ...
- [bzoj1269][AHOI2006文本编辑器editor] (splay模版题 or pb_ds [rope]大法)
Description 这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器.你能帮助他吗?为了明确任务目标,可可对“文本编辑器”做了一个抽象的定义: 文本:由0个或 ...
- C++ 模版
函数模版 #include <iostream> using namespace std; template<typename T> T add(T t1, T t2) { r ...
随机推荐
- ajax重复提交到相同url时出现的问题
如 $.ajax({ url : url, success : function(ret) { if (!noProgress){cniia.closeProgress();} i ...
- Linux网络管理——端口作用
1. 网络基础 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB",&q ...
- WordPress下载安装简单配置实例
1.下载https://cn.wordpress.org/ 2.复制wp-config-sample.php为wp-config.php 3.创建一个wordpress数据库 4.修改wp-confi ...
- [LeetCode]题解(python):146-LRU Cache
题目来源: https://leetcode.com/problems/lru-cache/ 实现一个LRU缓存.直接上代码. 代码(python): class LRUCache(object): ...
- mongodb or操作与连接池
mongodb # 类似于sql中的in或者or操作 mulites field query: db.cool.find({$or:[{field1:'val'},{'field2':'val'}-] ...
- 移动开发之fastclick 点击穿透
穿透(点穿)是在mobile各种浏览器上发生的常见的bug.可能是由click事件的延迟(300ms)或者事件冒泡导致 现象:在A页面中有个 btn1<或a标签>,在B页面中有个 btn2 ...
- bit-map牛刀小试:数组test[X]的值所有在区间[1, 8000]中, 现要输出test中反复的数。要求:1. 不能改变原数组; 2.时间复杂度为O(X);3.除test外空间不超过1KB
先来看看这个题目:数组test[X]的值所有在区间[1, 8000]中. 现要输出test中反复的数.要求:1. 不能改变原数组; 2.时间复杂度为O(X);3.除test外空间不超过1KB. 好, ...
- html5 绘制集合图形
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- 一个解析url参数方法
function getRequestParameter(a) { var b = document.location.search || document.location.hash; if (a ...
- 配置tomcat的https通信(单向认证)
1.首先用jdk带的工具生成证书库 打开cmd命令行窗口,cd 到tomcat安装目录的bin下面执行 keytool -v -genkey -alias tomcat -keyalg RSA -ke ...