- 浏览: 120402 次
- 性别:
- 来自: 北京
最新评论
// Treap // Tested: bjtu1057, hdu1004, pku1002 typedef int KEY; typedef int VALUE; struct node_t { int ch[2], pr; KEY key; VALUE value; } T[maxn]; int size; // init: size = 0 int new_node() { T[size].ch[0] = T[size].ch[1] = -1, T[size].pr = rand(); return size++; } struct treap_t { int root; // init: root = -1 void clear() { root = -1; } void adjust(int &p, int k) { int x = T[p].ch[k]; T[p].ch[k] = T[x].ch[1 - k], T[x].ch[1 - k] = p, p = x; } void insert(int &p, const KEY &key, const VALUE &value) { if (p == -1) { p = new_node(), T[p].key = key, T[p].value = value; } else if (key == T[p].key) { T[p].value += value; } else { int k = key < T[p].key ? 0 : 1; insert(T[p].ch[k], key, value), adjust(p, k); } } void erase(int &p, const KEY &key) { if (p == -1) return; if (key == T[p].key) { int L = T[p].ch[0], R = T[p].ch[1], k = L != -1 ? 0 : -1; if (R != -1 && (k == -1 || T[R].pr < T[L].pr)) k = 1; if (k == -1) p = -1; else adjust(p, k), T[p].ch[1 - k] = -1; } else { int k = key < T[p].key ? 0 : 1; erase(T[p].ch[k], key); } } int find(int p, const KEY &key) { if (p == -1 || key == T[p].key) return p; int k = key < T[p].key ? 0 : 1; return find(T[p].ch[k], key); } int lower_bound(int p, const KEY &key) { if (p == -1 || key == T[p].key) return p; int k = key < T[p].key ? 0 : 1; if (T[p].ch[k] == -1) return k == 1 ? -1 : p; return lower_bound(T[p].ch[k], key); } int upper_bound(int p, const KEY &key) { int x = lower_bound(p, key); if (x == -1 || key < T[x].key) return x; return T[x].ch[1]; } } treap;
发表评论
-
lower_bound and upper_bound
2012-02-09 00:36 1181/** * @brief Finds the ... -
HDU 3954
2012-02-05 10:43 862线段树变种,也是在2logn段上面做文章 /* * ... -
HDU 4027
2012-02-04 22:09 884线段树变种 在2logn段上面做文章,swap(x, y)太阴 ... -
ICPC编码建议
2011-10-28 09:52 937写代码最重要的是清晰,包括思路的清晰和代码结构的清晰。我们无法 ... -
[转载]TopCoder插件
2011-09-08 22:13 1006转载自:http://acm.cugb.edu.cn/blog ... -
UVALive 5112 - Sales Prediction
2011-01-06 10:19 1219封装了矩阵类 比赛做得很郁闷,为什么别人写得很长、很罗嗦的代码 ... -
hdu 3236
2010-12-12 14:10 824终于能过这道题了,算是背包必做题之一吧 /* * Au ... -
pku 1018
2010-12-11 15:18 644写了两三个版本,最后这个效率最高 #include < ... -
布斯(Booth)乘法
2010-10-07 19:59 1168源自http://watashi.ws/blog/1515/z ... -
高斯消元
2010-10-07 14:18 832import java.util.*; import j ... -
整数划分
2010-10-07 10:38 857#include <cstdio> #inc ... -
矩阵快速幂
2010-09-18 14:24 1070typedef LL matrix[55][55]; ... -
maximum clique 最大团
2010-09-02 18:12 1165最大团模板 #include <cstdio> ... -
计算Jacobi符号
2010-08-31 13:15 1331Quadratic reciprocity The Jacob ... -
Java 高效I/O
2010-08-19 16:54 805static BufferedReader cin = ... -
DLX pku 3076
2010-08-11 23:45 917标准数独,精确覆盖 // pku3076.cpp #in ... -
DLX hust 1017
2010-08-11 16:50 877“精确覆盖”问题 #include <cstdio& ... -
DLX hdu 3498
2010-08-11 16:48 1078“多重覆盖”或“重复覆盖”问题 #include < ... -
hdu 3509
2010-08-09 11:22 1024推导公式的题目,矩阵幂关键就在于构造系数矩阵 备忘: S(n, ... -
RMQ模板
2010-07-28 11:04 1216/* * Author: rush * Creat ...
相关推荐
**Treap树堆实现** Treap,又称为“随机优先搜索树”,是一种结合了二叉查找树(BST)和堆特性的数据结构。它在保持查找树特性的同时,通过引入随机化来保证平衡,从而避免了传统平衡二叉树如AVL或红黑树等在插入和...
**Treap数据结构详解** Treap,全称是“Tree + Heap”,是由Russo在1989年提出的,是一种结合了二叉搜索树(BST)和堆(Heap)特性的数据结构。它在保持搜索树平衡的同时,通过随机化策略解决了平衡问题,使得插入...
Treap树和跳表(Skip Lists)都是平衡树结构,它们用于维持有序数据集合,保证数据的快速检索、插入和删除操作。这两种数据结构与传统的AVL树、红黑树、B树或伸展树相比,其特点在于它们以一种随机的方式进行平衡,...
基本Treap.ppt
Treap树算法,目前实现了节点插入,为算法导论上的算法
Treap树是一种自平衡二叉搜索树,由Russo在1989年提出,它的全称是“随机优先堆树”(Tree-Heap)。它结合了二叉搜索树和堆的特点,通过引入随机性来保持平衡,从而在平均情况下达到较高的查找、插入和删除操作的...
Python库Treap是数据结构和算法领域中的一个重要工具,它为Python编程提供了高效且随机访问的树形数据结构。在本文中,我们将深入探讨Treap的概念、其在Python中的实现以及如何在实际应用中利用这个库。 Treap,...
Treap的核心思想在于保证每个节点的优先级都小于其子节点的优先级,而就树中的键值来说,Treap是一颗排序二叉树;就优先级来说,Treap又构成了一个最小堆。这样就保持了树的平衡性。 三、Treap的存储与建立 文件中...
### 最简平衡树——无旋Treap(fhq_treap)详解 #### 一、简介 无旋Treap(fhq_treap),由范浩强发明,是一种高效的平衡树数据结构。它综合了Treap与Splay树的优点,支持常见的平衡树操作如插入、删除、查找等,...
指针构建非旋treap,代替线段树,可支持持久化,luogu3372可过.
avl树,bst树(二叉查找树),rbt(红黑树),sbt(size平衡树),splay(伸展树),treap树。 3.代码以一个bst_base为基础,实现通用算法。将对象特征和存储结构通过模板参数向上传递,实现特化算法。最终各个不同...
【数据结构之Treap详解】 Treap是一种结合了二叉搜索树(BST)和堆(Heap)特性的数据结构,其名称由“tree”和“heap”组合而成。Treap的特点在于每个节点不仅包含键值,还包含一个优先级,这个优先级通常是随机...
void Insert(Node * &o,int x){//0为左子树,1为右子树 if(o==NULL){o = new Node(); o->ch[0]=o->ch[1]=NULL;o->key=x;o->weight=rand();} else{ int d=o->cmp(x); Insert(o->ch[d],x);...if(o->ch[d]->weight>o->...
http://ybt.ssoier.cn:8088 信息学奥赛一本通(提高篇)测试数据\第4部分 数据结构(提高篇)\ 第6章 平衡树Treap 测试数据
FHQ无旋Treap(按值分裂)的简单学习-自己记录用的
无旋Treap(按树的大小分裂)的简单学习-自己记录用的