应一些人之邀。。。发一篇代码

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring> using namespace std;
struct node
{
int data;
int key;
node* ls;
node* rs;
int size; node()
{
key=rand();
}
}no[]; void update(node* now)
{
now->size=;
if (now->ls) now->size+=now->ls->size;
if (now->rs) now->size+=now->rs->size;
} node* merge(node* a,node* b)
{
if (!a) {update(b);return b;}
if (!b) {update(a);return a;}
if (a->key<b->key)
{
a->rs=merge(a->rs,b);
update(a);
return a;
}
else
{
b->ls=merge(a,b->ls);
update(b);
return b;
}
} struct nodepair
{
node* l;
node* r; nodepair(node* a,node* b)
{
l=a;
r=b;
}
}; nodepair split(node* a,int k)
{
if (!a) return nodepair(NULL,NULL);
if (a->data<=k)
{
nodepair km=split(a->rs,k);
a->rs=km.l;
update(a);
return nodepair(a,km.r);
}
else
{
nodepair km=split(a->ls,k);
a->ls=km.r;
update(a);
return nodepair(km.l,a);
}
} nodepair splitTh(node* a,int k)
{
if (!a) return nodepair(NULL,NULL);
if (!k) return nodepair(NULL,a);
if (a->ls)
{
if (a->ls->size>=k)
{
nodepair km=splitTh(a->ls,k);
a->ls=km.r;
update(a);
return nodepair(km.l,a);
}
else
{
nodepair km=splitTh(a->rs,k-a->ls->size-);
a->rs=km.l;
update(a);
return nodepair(a,km.r);
}
}
else
{
nodepair km=splitTh(a->rs,k-);
a->rs=km.l;
update(a);
return nodepair(a,km.r);
}
} int cnt=-;
node* insert(node* root,int newdata)
{
node* q=&no[++cnt];
q->data=newdata;
nodepair km=split(root,newdata);
return merge(km.l,merge(q,km.r));
} node* delate(node* root,int newdata)
{
nodepair km=split(root,newdata-);
nodepair km2=splitTh(km.r,);
return merge(km.l,km2.r);
} int getKth(node* now,int k)
{
if (!now) return -;
if (now->ls)
{
if (now->ls->size<k-)
return getKth(now->rs,k-now->ls->size-);
if (now->ls->size==k-)
return now->data;
if (now->ls->size>k-)
return getKth(now->ls,k);
}
else
{
if (k==) return now->data;
return getKth(now->rs,k-);
}
} node* Search(node* root,int k,int* ans)
{
nodepair km=split(root,k-);
if (km.l)
*ans=km.l->size+;
else
*ans=;
return merge(km.l,km.r);
} node* getQQ(node* root,int data,int* ans)
{
nodepair km=split(root,data-);
nodepair km2=splitTh(km.l,km.l->size-);
*ans=km2.r->data;
return merge(km2.l,merge(km2.r,km.r));
} node* getHJ(node* root,int data,int* ans)
{
nodepair km=split(root,data);
nodepair km2=splitTh(km.r,);
*ans=km2.l->data;
return merge(km.l,merge(km2.l,km2.r));
} int main()
{
node* root=NULL;
int n,cmd,k;
scanf("%d",&n);
for (int i=;i<=n;++i)
{
scanf("%d%d",&cmd,&k);
if (cmd==){root=insert(root,k);}
if (cmd==){root=delate(root,k);}
if (cmd==)
{
int ans=;
root=Search(root,k,&ans);
printf("%d\n",ans);
}
if (cmd==)
{
printf("%d\n",getKth(root,k));
}
if (cmd==)
{
int ans=;
root=getQQ(root,k,&ans);
printf("%d\n",ans);
}
if (cmd==)
{
int ans=;
root=getHJ(root,k,&ans);
printf("%d\n",ans);
}
}
return ;
}

普通平衡树代码。。。Treap的更多相关文章

  1. Hihocoder 1325 平衡树·Treap(平衡树,Treap)

    Hihocoder 1325 平衡树·Treap(平衡树,Treap) Description 小Ho:小Hi,我发现我们以前讲过的两个数据结构特别相似. 小Hi:你说的是哪两个啊? 小Ho:就是二叉 ...

  2. 洛谷P3369 【模板】普通平衡树(Treap/SBT)

    洛谷P3369 [模板]普通平衡树(Treap/SBT) 平衡树,一种其妙的数据结构 题目传送门 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入x数 删除 ...

  3. AC日记——【模板】普通平衡树(Treap/SBT) 洛谷 P3369

    [模板]普通平衡树(Treap/SBT) 思路: 劳资敲了一个多星期: 劳资终于a了: 劳资一直不a是因为一个小错误: 劳资最后看的模板: 劳资现在很愤怒: 劳资不想谈思路!!! 来,上代码: #in ...

  4. 初涉平衡树「treap」

    treap:一种平衡的二叉搜索树 什么是treap(带旋) treap=tree+heap,这大家都知道.因为二叉搜索树(BST)非常容易被卡成一条链而影响效率,所以我们需要一种更加平衡的树形结构,从 ...

  5. 2021.12.08 平衡树——FHQ Treap

    2021.12.08 平衡树--FHQ Treap http://www.yhzq-blog.cc/fhqtreapzongjie/ https://www.cnblogs.com/zwfymqz/p ...

  6. [luogu P3369]【模板】普通平衡树(Treap/SBT)

    [luogu P3369][模板]普通平衡树(Treap/SBT) 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入x数 删除x数(若有多个相同的数,因只删 ...

  7. 编程算法 - 推断二叉树是不是平衡树 代码(C)

    推断二叉树是不平衡树 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一颗二叉树的根结点, 推断该树是不是平衡二叉树. 二叉平衡树: 随意结 ...

  8. 数组splay ------ luogu P3369 【模板】普通平衡树(Treap/SBT)

    二次联通门 : luogu P3369 [模板]普通平衡树(Treap/SBT) #include <cstdio> #define Max 100005 #define Inline _ ...

  9. 替罪羊树 ------ luogu P3369 【模板】普通平衡树(Treap/SBT)

    二次联通门 : luogu P3369 [模板]普通平衡树(Treap/SBT) 闲的没事,把各种平衡树都写写 比较比较... 下面是替罪羊树 #include <cstdio> #inc ...

  10. 红黑树 ------ luogu P3369 【模板】普通平衡树(Treap/SBT)

    二次联通门 : luogu P3369 [模板]普通平衡树(Treap/SBT) 近几天闲来无事...就把各种平衡树都写了一下... 下面是红黑树(Red Black Tree) 喜闻乐见拿到了luo ...

随机推荐

  1. C,LINUX,数据结构部分

    1604期 第1期测试(面试精选:C,LINUX,数据结构部分) 本试卷从考试酷examcoo网站导出,文件格式为mht,请用WORD/WPS打开,并另存为doc/docx格式后再使用 试卷编号:24 ...

  2. 洛谷 2146 [NOI2015]软件包管理器

    [题解] 每个软件只依赖另一个软件,且依赖关系不构成环,那么很容易想到这是树形结构. 我们用1表示以安装,用0表示未安装或已卸载:那么安装一个软件,就是把它到树根的路径上所有的点都改为1:卸载一个软件 ...

  3. java 中序列化(Serializable)

    18年5月份,在毕业快一年的时候,我终于把自己从研发助理偏向行政打杂,偶尔写一些前端代码的处境,回归到了初衷-安安静静写前后端代码的小小程序员~过程中的心酸也就不在这里吐啦,毕竟我是小太阳,永不熄灭的 ...

  4. ds020507

    芯片输出端不加负载的时候,芯片的输出电压是9点多伏. 加上大的负载,芯片发热,电压接近输入电压. 正常负载,芯片输出7.0几伏. 版权声明:本文为博主原创文章,未经博主允许不得转载.

  5. java8 新特性 lambda过滤

    1. 定义实体类 package com.atguigu.java8; public class Employee { private int id; private String name; pri ...

  6. 我安装android studio的过程与经历

    虽然android studio已经出来两年多了,但是我一直都没真正用过.之前用Eclipse还算用得挺好.我并不是一个专职的android开发者,我是个游戏开发者,打包的时候要用到android.不 ...

  7. Spring的Java配置方式

    Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1     @Configuration 和 @Bean Spring的Java配置方式是通过 @Configuration ...

  8. Java使用JNA调用DLL库

    Java调用DLL方法有三种,JNI.JNA.JNative, 本文为JNA JNA为使用jna.jar包,下载地址:http://www.java2s.com/Code/Jar/j/Download ...

  9. MySQL主从复制邮件报警脚本

    #!/bin/shexport PATH=$PATH:/application/mysql/3306/binlogFile=`date +"%Y-%m-%d %H:%M:%S"`_ ...

  10. Ubuntu 16.04安装indicator-sysmonitor实现导航条显示上下行网速/CPU/内存使用率

    安装: sudo add-apt-repository ppa:fossfreedom/indicator-sysmonitor sudo apt-get update sudo apt-get in ...