不想多说什么了。费空间,也不算太快,唯一的好处就是好写吧。

#include <cstdio>
#include <cstring>
const int MAXN=100010<<5,INF=10000000;
int n;
class Trie
{
public:
Trie(void)
{
cnt=1;
memset(s,0,sizeof s);
}
void Insert(int x)
{
int k=1,p=x+INF;
for(int i=30,t;~i;++s[k=s[k].c[t]].size,--i)
if(!s[k].c[t=p>>i&1])
s[k].c[t]=++cnt;
s[k].v=x;
}
void Erase(int x)
{
int k=1,p=x+INF;
for(int i=30;~i;--s[k=s[k].c[p>>i&1]].size,--i);
}
int Rank(int x)
{
int k=1,p=x+INF,ans=1;
for(int i=30,t;~i;--i,k=s[k].c[t])
if(t=p>>i&1)
ans+=s[s[k].c[0]].size;
return ans;
}
int Find(int x)
{
int k=1,ans=0;
for(int i=30,t,f;~i;--i,k=s[k].c[t])
if(t=(x>(f=s[s[k].c[0]].size)))
x-=f;
return s[k].v;
}
int Pre(int x)
{
return Find(Rank(x)-1);
}
int Next(int x)
{
return Find(Rank(x+1));
}
private:
int cnt;
struct node
{
int v,size,c[2];
}s[MAXN];
}T;
int main(int argc,char *argv[])
{
freopen("testdata.in","r",stdin);
freopen("my.out","w",stdout);
scanf("%d",&n);
for(int i=1,opt,x;i<=n;++i)
{
scanf("%d %d",&opt,&x);
switch(opt)
{
case 1:
T.Insert(x);
break;
case 2:
T.Erase(x);
break;
case 3:
printf("%d\n",T.Rank(x));
break;
case 4:
printf("%d\n",T.Find(x));
break;
case 5:
printf("%d\n",T.Pre(x));
break;
case 6:
printf("%d\n",T.Next(x));
break;
}
}
fclose(stdin);
fclose(stdout);
return 0;
}

谢谢阅读。

「模板」 01 Trie实现平衡树功能的更多相关文章

  1. 「模板」 FHQ_Treap 区间翻转

    「模板」 FHQ_Treap 区间翻转 没有旋转的 Treap 实现区间操作的功能,很好理解,也很好写,只是速度不算太快. 对于要翻转的区间,把整棵 Treap(存有区间 \([1,n]\) 的信息) ...

  2. 「模板」 FHQ_Treap

    「模板」 FHQ_Treap 我也是偶然发现我还没发过FHQ_Treap的板子. 那就发一波吧. 这个速度实在不算快,但是不用旋转,并且好写. 更重要的是,Splay 可以做的事情它都可以做!比如区间 ...

  3. 「模板」 线段树——区间乘 && 区间加 && 区间求和

    「模板」 线段树--区间乘 && 区间加 && 区间求和 原来的代码太恶心了,重贴一遍. #include <cstdio> int n,m; long l ...

  4. 「模板」 树链剖分 HLD

    「模板」 树链剖分 HLD 不懂OOP的OIer乱用OOP出人命了. 谨此纪念人生第一次类套类. 以及第一次OI相关代码打过200行. #include <algorithm> #incl ...

  5. 「模板」「讲解」Treap名次树

    Treap实现名次树 前言 学平衡树的过程可以说是相当艰难.浏览Blog的过程中看到大量指针版平衡树,不擅长指针操作的我已经接近崩溃.于是,我想着一定要写一篇非指针实现的Treap的Blog. 具体如 ...

  6. 「模板」AC自动机

    目录 说明 普通版本 询问更改版 拓扑优化版本 说明 这篇博客只挂模板,具体分析请膜拜大佬 hyfhaha 大佬. 普通版本 题目传送门 #include<cstdio> #include ...

  7. LG5357 「模板」AC自动机(二次加强版) AC自动机+fail树

    问题描述 LG5357 题解 不是fail树的AC自动机复杂度是假的. 把AC自动机搞出来,建立Trie树,树上爆搜一遍就好了. \(\mathrm{Code}\) #include<bits/ ...

  8. 「模板」Splay

    代码说明 对于一些变量进行说明: 变量名 说明 rt 树根 ff[u] 点 \(u\) 的父节点,特别地, ff[rt]=0 ch[u][0|1] 点 \(u\) 的 左/右儿子 siz[u] 点 \ ...

  9. 「模板」可持久化 HFQ-Treap

    老师用的是静态数组的写法,开了很多数组- 其实个人更倾向于 struct 或者用 class 封装起来. 但是鉴于太难打 好吧,是我懒得打. 然后就借鉴了老师的模板,写出了属于自己的 压行 风格. 代 ...

随机推荐

  1. UESTC 1717 Journey(DFS+LCA)(Sichuan State Programming Contest 2012)

    Description Bob has traveled to byteland, he find the N cities in byteland formed a tree structure, ...

  2. c# 调取 c++ dll____c#调用dll

    1.以海康摄像头dll为例.(文章转载https://www.cnblogs.com/smartsensor/p/4343744.html) 海康SDK编程指南 目前使用的海康SDK包括IPC_SDK ...

  3. C语言特殊符号

    -> ->在C语言中称为间接引用运算符,是二目运算符,优先级同成员运算符“.”.用法:p->a,其中p是指向一个结构体的指针,a是这个结构体类型的一个成员.表达式p->a引用了 ...

  4. Why is setTimeout(fn, 0) sometimes useful?

    http://stackoverflow.com/questions/779379/why-is-settimeoutfn-0-sometimes-useful jquery validation s ...

  5. j2ee—框架(2):Servlet+JSP实现基本的登录功能(v2.0)

    该部分将逻辑判断在UserBean中进行处理,而且不采用配置的方式去实现,为了区分开两种实现方法的不同,在这里将之前设置的内容只是备注掉,并不会删除,也方便之后将两种方式进行对比. 第一部分 Logi ...

  6. python模拟SQL语句操作文件

    1.需求 在文本界面输入SQL语句,查询相应的数据,例如输入下面的语句 print(''' 支持大小写的SQL语句查询,大写或者小写都可以 1. select * from db1.emp 2. se ...

  7. 个人github blog环境设置

    每个人都想拥有自己的网站,但是大部分比较屌丝,不想花钱租赁服务器,哈哈,屌丝有屌丝办法.github应该都听说过吧,github.io提供了此功能,而且使用github来管理自己的代码,如果你有域名, ...

  8. 【OSG】 报错:丢失osg100-osgDB.dll

    如果你bin目录已经添加到了环境变量的path里面,还报这个错的话. 或许你重启一下电脑就可以了..我就这么解决的.

  9. activity属性设置大全

    activity属性设置大全 android:allowTaskReparenting=["true" | "false"]         是否允许activ ...

  10. GC是什么?为什么要有GC

    GC:Garbage Collection 垃圾收集器. GC就是对“不可达“的对象进行回收,释放内存. Java内存的管理实际上就是对对象的管理,其中包括对对象的分配和回收. 对于程序员来说,分配对 ...