「模板」 01 Trie实现平衡树功能
不想多说什么了。费空间,也不算太快,唯一的好处就是好写吧。
#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实现平衡树功能的更多相关文章
- 「模板」 FHQ_Treap 区间翻转
「模板」 FHQ_Treap 区间翻转 没有旋转的 Treap 实现区间操作的功能,很好理解,也很好写,只是速度不算太快. 对于要翻转的区间,把整棵 Treap(存有区间 \([1,n]\) 的信息) ...
- 「模板」 FHQ_Treap
「模板」 FHQ_Treap 我也是偶然发现我还没发过FHQ_Treap的板子. 那就发一波吧. 这个速度实在不算快,但是不用旋转,并且好写. 更重要的是,Splay 可以做的事情它都可以做!比如区间 ...
- 「模板」 线段树——区间乘 && 区间加 && 区间求和
「模板」 线段树--区间乘 && 区间加 && 区间求和 原来的代码太恶心了,重贴一遍. #include <cstdio> int n,m; long l ...
- 「模板」 树链剖分 HLD
「模板」 树链剖分 HLD 不懂OOP的OIer乱用OOP出人命了. 谨此纪念人生第一次类套类. 以及第一次OI相关代码打过200行. #include <algorithm> #incl ...
- 「模板」「讲解」Treap名次树
Treap实现名次树 前言 学平衡树的过程可以说是相当艰难.浏览Blog的过程中看到大量指针版平衡树,不擅长指针操作的我已经接近崩溃.于是,我想着一定要写一篇非指针实现的Treap的Blog. 具体如 ...
- 「模板」AC自动机
目录 说明 普通版本 询问更改版 拓扑优化版本 说明 这篇博客只挂模板,具体分析请膜拜大佬 hyfhaha 大佬. 普通版本 题目传送门 #include<cstdio> #include ...
- LG5357 「模板」AC自动机(二次加强版) AC自动机+fail树
问题描述 LG5357 题解 不是fail树的AC自动机复杂度是假的. 把AC自动机搞出来,建立Trie树,树上爆搜一遍就好了. \(\mathrm{Code}\) #include<bits/ ...
- 「模板」Splay
代码说明 对于一些变量进行说明: 变量名 说明 rt 树根 ff[u] 点 \(u\) 的父节点,特别地, ff[rt]=0 ch[u][0|1] 点 \(u\) 的 左/右儿子 siz[u] 点 \ ...
- 「模板」可持久化 HFQ-Treap
老师用的是静态数组的写法,开了很多数组- 其实个人更倾向于 struct 或者用 class 封装起来. 但是鉴于太难打 好吧,是我懒得打. 然后就借鉴了老师的模板,写出了属于自己的 压行 风格. 代 ...
随机推荐
- vue开发学习中遇到的问题以及解决方法
1:node-sass 安装失败,可使用 cnpm 安装 npm install cnpm -g --registry=https://registry.npm.taobao.org cnpm -v ...
- Java学习个人备忘录之异常
概述 异常:是在运行时期发生的不正常情况. 在java中用类的形式对不正常情况进行了描述和封装对象. 描述不正常的情况的类,就称为异常类. 以前正常流程代码和问题处理代码相结合,现在将正常流程代码和问 ...
- AndroidUI设计之 布局管理器 - 详细解析布局实现
写完博客的总结 : 以前没有弄清楚的概念清晰化 父容器与本容器属性 : android_layout...属性是本容器的属性, 定义在这个布局管理器的LayoutParams内部类中, 每个布局管理器 ...
- TCP系列27—窗口管理&流控—1、概述
在前面的内容中我们依次介绍了TCP的连接建立和终止过程和TCP的各种重传方式.接着我们在这部分首先关注交互式应用TCP连接相关内容如延迟ACK.Nagle算法.Cork算法等,接着我们引入流控机制(f ...
- winform 删除,清空指定文件夹上的所有文件或文件夹
//递归删除文件夹及子文件C#代码: public void DeleteFolder(string dir) { if (Directory.Exists(dir)) //如果存在这个文件夹删除之 ...
- SpringData——HelloWorld
1.背景 最开始了解SpringData的时候,以为他不就是ORM的一种实现方式嘛,还能有什么新的东西.从hibernate到ibatis.mybatis,也许他只不过是spring想整合一个更方便的 ...
- (转)NEST.net Client For Elasticsearch简单应用
由于最近的一个项目中的搜索部分要用到 Elasticsearch 来实现搜索功能,苦于英文差及该方面的系统性资料不好找,在实现时碰到了不少问题,现把整个处理过程的代码分享下,给同样摸索的人一些借鉴,同 ...
- python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
#vi /etc/ld.so.conf.d/python2.7.conf 加入/usr/local/python27/lib 保存退出后执行 #ldconfig
- perf使用的问题,再看perf record,perf record 设置的采样频率,采样频率是如何体现在
当perf stat -e branches 是统计 再看perf record,perf record是为了是记录时间发生的时候的调用栈, 在我的测试代码中总共有200,000,000条branch ...
- BER-TLV数据结构
本文是自身在研究学习过程中碰到的问题,整理而成. 为了便于后文的引用说明,先列出一段TLV结构的数据: [6F] 4D │ ├─[] A0000003330101 │ ├─[A5] │ │ ├─[] ...