Size Balanced Tree Sbt模板
2016-07-31 17:20
344 查看
#include<bits/stdc++.h> using namespace std; const int maxn = 200000 + 10; struct SBT { int cnt; int c[maxn][2], key[maxn], size[maxn]; void init() { cnt = 0; memset(c, 0, sizeof(c)); memset(size, 0, sizeof(size)); } void Push_up(int u) { size[u] = size[c[u][0]] + size[c[u][1]] + 1; } //left -> 1, right -> 0 void rotate(int &u, bool t) { int k = c[u][t]; c[u][t] = c[k][!t]; c[k][!t] = u; size[k] = size[u]; Push_up(u), u = k; } void maintain(int &u, bool t) { if(!t) { if(size[c[u][1]] < size[c[c[u][0]][0]]) rotate(u, 0); else { if(size[c[u][1]] < size[c[c[u][0]][1]]) { rotate(c[u][0], 1); rotate(u, 0); }else return; } }else { if(size[c[u][0]] < size[c[c[u][1]][1]]) rotate(u, 1); else { if(size[c[u][0]] < size[c[c[u][1]][0]]) { rotate(c[u][1], 0); rotate(u, 1); }else return; } } maintain(c[u][0], false); maintain(c[u][1], true); maintain(u, false); maintain(u, true); } void insert(int &u, int v) { if(!u) { key[u = ++cnt] = v; size[u] = 1; }else { size[u]++; if(v >= key[u]) insert(c[u][1], v); else insert(c[u][0], v); maintain(u, v >= key[u]); } } void out(int n) { if(c [0]) out(c [0]); cout << key << ' '; if(c [1]) out(c [1]); } }Sbt; int main() { #ifndef ONLINE_JUDGE freopen("data.txt", "r", stdin); freopen("ans.txt", "w", stdout); #endif int n, rt = 0; cin >> n; Sbt.init(); for(int i=0; i<n; i++) { int v; cin >> v; Sbt.insert(rt, v); } Sbt.out(rt); return 0; }
相关文章推荐
- 子树大小平衡树(SizeBalancedTree,SBT)——模板
- Size Balanced Tree(SBT) 模板
- SBT(Size Balanced Tree)2016.9.6
- POJ 2761 SBT(size balanced tree)
- Size Balanced Tree(SBT)平衡二叉树
- 4000 Java基础 - 节点自平衡树(Size Balanced Tree,简称SBT)
- 数据结构-SBT(Size Balanced Tree)
- Size Balance Tree(SBT模板整理)
- 傻B树”、“Super BT” Size Balanced Tree(简称SBT)是一自平衡二叉查找树
- Size Balanced Tree(SBT) 类模板C++实现(持续更新)
- Size Balance Tree(SBT模板整理)
- SBT(size balanced tree) 和AVL 合二为一
- CQF平衡树——SBT论文——Size Balanced Tree
- Size Balanced Tree(SBT) 类模板C++实现(持续更新)
- SBT模版(Size Balanced Tree)
- SBT(Size balanced tree)
- Size Balanced Tree模板
- [转载] SBT(Size Balanced Tree)
- Size Balanced Tree(SBT)
- [置顶] splay、treap、SBT(Size Balanced Tree)那点奇诡的东东(填坑ing)