P3369 【模板】普通平衡树

题目描述

您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:

  1. 插入xx数
  2. 删除xx数(若有多个相同的数,因只删除一个)
  3. 查询xx数的排名(排名定义为比当前数小的数的个数+1+1。若有多个相同的数,因输出最小的排名)
  4. 查询排名为xx的数
  5. 求xx的前驱(前驱定义为小于xx,且最大的数)
  6. 求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树上 这类似权值线段树 一个二分的思想

最新文章

  1. js之oop &lt;六&gt;数组的crud(增删改)
  2. Spark 2.6.1 源代码在 eclipse 的配置
  3. jquery 常用插件
  4. 怎么判定一个mac地址是multicast还是unicast.
  5. play项目部署
  6. ThinkPHP讲解(四)——视图
  7. AmazeUI布局
  8. Unity3D音乐音效学习笔记
  9. thinkphp之wampserver安装
  10. [转] FDA批准首个莫米松植入式给药系统用于治疗慢性鼻窦炎
  11. cas sso单点登录系列4_cas-server登录页面自定义修改过程(jsp页面修改)
  12. HDU 1394 Minimum Inversion Number(线段树 或 树状数组)
  13. express源码分析---merge-descriptors
  14. VFL(Visual Format Language)语言
  15. 0基础学python3心得体会 - python3学习笔记 - python3基础
  16. mysql大小写敏感(默认为1,不敏感)
  17. Debug命令详解
  18. Spring Cloud Consul使用——配置中心
  19. 阿里云ECS服务器主机安装多个网站
  20. wx小程序碎碎念

热门文章

  1. thinkcmf,thinksns,thinkphp,onethink三者是什么关系?
  2. js cookie跨域
  3. presto,dremio,spark-sql与ranger的整合记录
  4. Team Foundation Server 2015使用教程【5】:默认团队checkin权限修改
  5. C++Review6_优先队列priority_queue
  6. kali机获取不到ip地址解决
  7. Java面向对象程序设计第7章1-8
  8. http、https、SSL、TLS的区别
  9. IntelliJ IDEA使用说明
  10. Java 从入门到进阶之路(二十)