【bzoj3224】Tyvj 1728 普通平衡树 01Trie姿势+平衡树的四种姿势 :splay,旋转Treap,非旋转Treap,替罪羊树
2017-07-12 11:56
513 查看
直接上代码 正所谓 人傻自带大常数
平衡树的几种姿势: AVL Red&Black_Tree 码量爆炸,不常用;SBT 出于各种原因,不常用。
常用:
Treap 旋转 基于旋转操作和随机数堆 但不支持区间操作。
非旋转 基于随机数堆和拆分合并操作 常数较大
时间复杂度:很难被卡,均摊O(logN)
01Trie
平衡树的几种姿势: AVL Red&Black_Tree 码量爆炸,不常用;SBT 出于各种原因,不常用。
常用:
Treap 旋转 基于旋转操作和随机数堆 但不支持区间操作。
非旋转 基于随机数堆和拆分合并操作 常数较大
时间复杂度:很难被卡,均摊O(logN)
#include <cstdio> using namespace std; const int A=24,fix=10000000; inline void read (int &now){ register char word=getchar();bool temp=false; for(now=0;word<'0'||word>'9';word=getchar())if(word=='-')temp=true; for(;word>='0'&&word<='9';now=(now<<1)+(now<<3)+word-'0',word=getchar()); if(temp)now=-now; } struct Trie{ Trie *ch[2];int size; void* operator new(size_t); }*root,*null,*C,*mempool; void* Trie :: operator new(size_t){ if(C==mempool)C=new Trie[(1<<21)+10],mempool=C+(1<<21)+10; return C++; } inline Trie *New(){ register Trie *p=new Trie; p->ch[0]=p->ch[1]=null,p->size=0; return p; } int n; inline void Insert(int x,int size){ register Trie *p=root;x+=fix; for(int i=A;i>=0;i--){ if(p->ch[(x>>i)&1]==null)p->ch[(x>>i)&1]=New(); p=p->ch[(x>>i)&1];p->size+=size; } } inline int get_Rank(int x){ register int ret=0;x+=fix;register Trie *p=root; for(register int i=A;i>=0&&p!=null;i--) if(x&(1<<i))ret+=p->ch[0]->size,p=p->ch[1]; else p=p->ch[0]; return ret; } inline int get_Kth(int k){ register Trie *p=root;register int ret=0; for(register int i=A;i>=0;i--) if(p->ch[0]->size>=k)p=p->ch[0]; else ret|=(1<<i),k-=p->ch[0]->size,p=p->ch[1]; return ret-fix; } int main(){ freopen("phs.in","r",stdin);freopen("phs.out","w",stdout); null=new Trie,null->ch[0]=null->ch[1]=null,null->size=0,root=new Trie,root->ch[0]=root->ch[1]=null,root->size=0; read(n);register int opt,x; while(n--){ read(opt),read(x); switch(opt){ case 1:Insert(x,1);break; case 2:Insert(x,-1);break; case 3:printf("%d\n",get_Rank(x)+1);break; case 4:printf("%d\n",get_Kth(x));break; case 5:printf("%d\n",get_Kth(get_Rank(x)));break; case 6:printf("%d\n",get_Kth(get_Rank(x+1)+1));break; } } }
01Trie
相关文章推荐
- 【Treap】[BZOJ 3224]Tyvj 1728 普通平衡树 & 非旋转实现
- BZOJ 3224 Tyvj 1728 普通平衡树 (Splay)
- BZOJ 3224: Tyvj 1728 普通平衡树 [Splay]【数据结构】
- (treap)[bzoj3224][洛谷3369][cogs1829]Tyvj 1728 普通平衡树
- _bzoj3224 Tyvj 1728 普通平衡树【Splay】
- [bzoj 3224] Tyvj 1728 普通平衡树(Splay)
- Treap模板 BZOJ 3224: Tyvj 1728 普通平衡树
- BZOJ 3224 Tyvj 1728 普通平衡树 | Splay 板子+SPlay详细讲解
- BZOJ3224[Tyvj 1728 普通平衡树]题解--Treap
- 【Treap】[BZOJ 3224]Tyvj 1728 普通平衡树
- BZOJ 3224 普通平衡树 平衡树 ( Treap , SBT , Splay ,替罪羊树 ,非旋转 Treap )
- [bzoj3224]Tyvj 1728 普通平衡树——splay模板
- [置顶] BZOJ 3224 Tyvj 1728 普通平衡树(替罪羊树)
- bzoj 3224: Tyvj 1728 普通平衡树 (Splay模板)
- 【bzoj3224】【Tyvj1728】【普通平衡树】【splay】
- [替罪羊树 模板题] BZOJ 3224 Tyvj 1728 普通平衡树
- bzoj3224 Tyvj 1728 普通平衡树(splay/treap)
- BZOJ-3224 普通平衡树 TYVJ-1728 Treap + Vector
- bzoj 3224: Tyvj 1728 普通平衡树(splay 模板题)
- BZOJ 3224: Tyvj 1728 普通平衡树 替罪羊树