「模板」 左偏树
来源:互联网 发布:mac os界面 编辑:程序博客网 时间:2024/06/06 15:36
template<typename T, typename _Compare=std::less<T> >class leftist_tree {private: struct node { T data; int deep; node *l, *r; node(const T &d) : data(d), deep(1), l(0), r(0) {} } *root; int _size; _Compare cmp; inline int deep(node *o) { return o ? o->deep : 0; } node *Merge(node *a, node *b) { if (!a || !b)return a ? a : b; if (cmp(a->data, b->data)) { std::swap(a,b); } a->r = Merge(a->r, b); if (deep(a->l) < deep(a->r)) { std::swap(a->l, a->r); } a->deep = deep(a->l) + 1; return a; } void _clear(node *&o) { if (o)_clear(o->l), _clear(o->r), delete o; }public: leftist_tree() : root(0), _size(0) {} ~leftist_tree() { _clear(root); } inline void clear() { _clear(root); root = 0; _size = 0; } inline void merge(leftist_tree &o) { root = Merge(root, o.root); o.root = 0; _size += o._size; o._size = 0; } inline void swap(leftist_tree &o) { node *t = root; root = o.root; o.root = t; int st = _size; _size = o._size; o._size = st; } inline void push(const T &data) { _size++; root = Merge(root, new node(data)); } inline void pop() { if (_size)_size--; node *tmd = Merge(root->l, root->r); delete root; root = tmd; } inline const T &top() { return root->data; } inline int size() { return _size; } inline bool empty() { return !_size; }};
阅读全文
0 0
- 「模板」 左偏树
- 「模板」 归并排序
- 左偏树 模板
- 左偏树模板
- 左偏树模板
- 【模板】左偏树
- 左偏树模板
- 左偏树 模板
- 「模板」 随机遍历数组
- 「PyCharm」自定义文件模板
- ACM 左偏树(模板)
- HDU3031及左偏树模板
- 左偏树,原理及模板
- 回味左偏树(模板)
- 带模板的左偏树
- 模板
- 模板?
- 模板
- SSH框架搭建和整合(struts2、spring4、hibernate5)
- Mybatis快速入门——Mybatis学习总结(一)
- HelloWorld
- 最佳加法表达式(DP)
- Shader_Shader的其他属性及使用003
- 「模板」 左偏树
- 「模板」 归并排序
- ajax跨域之---服务器端代理实现
- 2017年陕西省网络空间安全技术大赛Mobile部分WriteUp
- 2017秋招编程题
- mysql 比较运算符和函数
- 轻量级网页在线聊天系统
- 「模板」 随机遍历数组
- PWN学习之[Rookiss]-[echo1]