P3369 【模板】普通平衡树 01Trie树
2024-09-06 17:27:07
P3369 【模板】普通平衡树
题目描述
您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:
- 插入xx数
- 删除xx数(若有多个相同的数,因只删除一个)
- 查询xx数的排名(排名定义为比当前数小的数的个数+1+1。若有多个相同的数,因输出最小的排名)
- 查询排名为xx的数
- 求xx的前驱(前驱定义为小于xx,且最大的数)
- 求xx的后继(后继定义为大于xx,且最小的数)
输入格式
第一行为nn,表示操作的个数,下面nn行每行有两个数optopt和xx,optopt表示操作的序号( 1 \leq opt \leq 61≤opt≤6 )
输出格式
对于操作3,4,5,63,4,5,6每行输出一个数,表示对应答案
输入输出样例
输入 #1复制
10
1 106465
4 1
1 317721
1 460929
1 644985
1 84185
1 89851
6 81968
1 492737
5 493598
输出 #1复制
106465
84185
492737
说明/提示
时空限制:1000ms,128M
1.n的数据范围: n \leq 100000n≤100000
2.每个数的数据范围: [-{10}^7, {10}^7][−107,107]
来源:Tyvj1728 原名:普通平衡树
在此鸣谢
#include<bits/stdc++.h>
#define inf 1e7
using namespace std;
const int maxn=,maxm=maxn*,N=;//2^20
int ch[maxm][],v[maxm];
int cnt=;
void Add(int pos,int qx)
{
pos+=inf;//防止负数
int p=;//把0号节点空出来
for(int i=N;i>=;i--)
{
bool b=(pos>>i)&;//判断是不是1
if(!ch[p][b])
ch[p][b]=++cnt;//动态开点
v[p]+=qx;
p=ch[p][b];
}
v[p]+=qx;//叶子结点还没有修改
}
int Sum(int pos)
{
pos+=inf+;//+1就是小于等于了
int res=,p=;
for(int i=N;i>=;i--)
{
bool b=(pos>>i)&;
if(b)// right
res+=v[ch[p][]];
p=ch[p][b];
if(!p)
break;
}
return res;
}
int Get(int rank)
{
int p=,res=;
for(int i=N;i>=;i--)
{
if(v[ch[p][]]>=rank)
p=ch[p][];
else
rank-=v[ch[p][]],p=ch[p][],res|=<<i;
}
return res-inf;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int opt,x;
scanf("%d%d",&opt,&x);
if(opt==)
{
Add(x,);
}
if(opt==)
{
Add(x,-);
}
if(opt==)
{
printf("%d\n",Sum(x-)+);
}
if(opt==)
{
printf("%d\n",Get(x));
}
if(opt==)
{
int tmp=Sum(x-)+;//rank x
printf("%d\n",Get(tmp-));
}
if(opt==)
{
int tmp=Sum(x)+;//rank x+1
printf("%d\n",Get(tmp));
}
} return ;
}
把数字转化为二进制(当做字符串)存在Trie树上 这类似权值线段树 一个二分的思想
最新文章
- js之oop <;六>;数组的crud(增删改)
- Spark 2.6.1 源代码在 eclipse 的配置
- jquery 常用插件
- 怎么判定一个mac地址是multicast还是unicast.
- play项目部署
- ThinkPHP讲解(四)——视图
- AmazeUI布局
- Unity3D音乐音效学习笔记
- thinkphp之wampserver安装
- [转] FDA批准首个莫米松植入式给药系统用于治疗慢性鼻窦炎
- cas sso单点登录系列4_cas-server登录页面自定义修改过程(jsp页面修改)
- HDU 1394 Minimum Inversion Number(线段树 或 树状数组)
- express源码分析---merge-descriptors
- VFL(Visual Format Language)语言
- 0基础学python3心得体会 - python3学习笔记 - python3基础
- mysql大小写敏感(默认为1,不敏感)
- Debug命令详解
- Spring Cloud Consul使用——配置中心
- 阿里云ECS服务器主机安装多个网站
- wx小程序碎碎念
热门文章
- thinkcmf,thinksns,thinkphp,onethink三者是什么关系?
- js cookie跨域
- presto,dremio,spark-sql与ranger的整合记录
- Team Foundation Server 2015使用教程【5】:默认团队checkin权限修改
- C++Review6_优先队列priority_queue
- kali机获取不到ip地址解决
- Java面向对象程序设计第7章1-8
- http、https、SSL、TLS的区别
- IntelliJ IDEA使用说明
- Java 从入门到进阶之路(二十)