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

#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. canvas学习(四):高级属性

    一:阴影 示例:绘制一个带有阴影的正方形 var canvas = document.getElementById("myCanvas") var ctx = canvas.get ...

  2. 在linux下PHP和Mysql环境搞事情

    研发部门同事开发了一个接口管理辅助工具Shepherd,要求搭建在内网环境中,遇到点小问题记一下. 将开发的文件上传只web目录下,更改数据库ip,可以正常打开 登陆用户信息,此时需要连接数据库来验证 ...

  3. ArrayList中modCount的作用

    在ArrayList中有个成员变量modCount,继承于AbstractList. 这个成员变量记录着集合的修改次数,也就每次add或者remove它的值都会加1.这到底有什么用呢? 先看下面一段测 ...

  4. Where to go from here

    Did you get through all of that content? Congratulations! You've learnt the fundamentals of algorith ...

  5. XDA-University: Getting Started

    XDA-University: Getting Started A while back, we introduced XDA-University to the world, an ongoing ...

  6. hive mapjoin优化

    默认为10MB,如果大于该值不会执行mapjoin,hive语句中直接设置的mapjoin也不再起作用. 参考hive wiki把hive.auto.convert.join.noconditiona ...

  7. sublime text 3103 怎么设置中文

    1.shift+ctrl+p调出插件管理,输入install package,按enter键,开始安装. 2.搜索chinese即可,下载安装插件包即可 原文:http://blog.csdn.net ...

  8. Swoole和Swoft的那些事 (Http/Rpc服务篇)

    https://www.jianshu.com/p/4c0f625d5e11 Swoft在PHPer圈中是一个门槛较高的Web框架,不仅仅由于框架本身带来了很多新概念和前沿的设计,还在于Swoft是一 ...

  9. string字符串比较和替换

    我用的是小写的string!! #include <string> #include <iostream> using namespace std; int main() { ...

  10. TScreen 类

    TScreen表示应用程序运行时屏幕的状态. 类关系 TObject->TPersistent->TComponent TScreen引进具有表示下列各种情况的属性 什么窗体和数据模块已经 ...