[Tyvj 1728]普通平衡树

题目

您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:
  1. 插入x数
  2. 删除x数(若有多个相同的数,因只删除一个)
  3. 查询x数的排名(若有多个相同的数,因输出最小的排名)
  4. 查询排名为x的数
  5. 求x的前驱(前驱定义为小于x,且最大的数)
  6. 求x的后继(后继定义为大于x,且最小的数)

INPUT

第一行为n,表示操作的个数,下面n行每行有两个数opt和x,opt表示操作的序号(1<=opt<=6)

OUTPUT

对于操作3,4,5,6每行输出一个数,表示对应答案

SAMPLE

INPUT

10
1 106465
4 1
1 317721
1 460929
1 644985
1 84185
1 89851
6 81968
1 492737
5 493598

OUTPUT

106465

84185
492737

解题报告

一道裸的平衡树板子题,也是我的Treap首题,留念

 #include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
using namespace std;
inline int read(){
int sum(),f();
char ch(getchar());
while(ch<''||ch>''){
if(ch=='-')
f=-;
ch=getchar();
}
while(ch>=''&&ch<=''){
sum=sum*+ch-'';
ch=getchar();
}
return sum*f;
}
struct node{
int size,key,v;
node *ch[];
node():size(),key(rand()),v(){
ch[]=ch[]=NULL;
}
node(int x):size(),key(rand()),v(x){
ch[]=ch[]=NULL;
}
}*root;
inline int get_size(node *x){
if(x==NULL)
return ;
return x->size;
}
inline void pushup(node *rt){
rt->size=get_size(rt->ch[])+get_size(rt->ch[])+;
}
inline void ro(node *&rt,int d){
node *tmp(rt->ch[d^]);
rt->ch[d^]=tmp->ch[d];
pushup(rt);
tmp->ch[d]=rt;
pushup(tmp);
rt=tmp;
}
inline void insert(node *&rt,int x){
if(!rt){
rt=new node(x);
return;
}
int d(rt->v>x);
insert(rt->ch[d^],x);
pushup(rt);
if(rt->ch[d^]->key>rt->key)
ro(rt,d);
}
inline void del(node *&rt,int x){
if(rt->v==x){
if(rt->ch[]!=NULL&&rt->ch[]!=NULL){
int d(rt->ch[]->key>rt->ch[]->key);
ro(rt,d);
del(rt->ch[d],x);
}
else{
node *tmp=NULL;
if(rt->ch[]!=NULL)
tmp=rt->ch[];
else
tmp=rt->ch[];
delete rt;
rt=tmp;
}
}
else{
int d(rt->v>x);
del(rt->ch[d^],x);
}
if(rt!=NULL)
pushup(rt);
}
inline int rk(int x){
node *rt(root);
int ret();
while(rt){
if(x>rt->v){
ret+=get_size(rt->ch[])+;
rt=rt->ch[];
}
else
rt=rt->ch[];
}
return ret;
}
inline int kth(int k){
node *rt(root);
while(rt){
if(get_size(rt->ch[])+==k)
return rt->v;
if(get_size(rt->ch[])+>k)
rt=rt->ch[];
else{
k-=get_size(rt->ch[])+;
rt=rt->ch[];
}
}
return ;
}
inline int gg(){
freopen("phs.in","r",stdin);
freopen("phs.out","w",stdout);
srand(time(NULL));
int n(read());
while(n--){
int op(read()),x(read());
if(op==){
insert(root,x);
continue;
}
if(op==){
del(root,x);
continue;
}
if(op==){
printf("%d\n",rk(x)+);
continue;
}
if(op==){
printf("%d\n",kth(x));
continue;
}
if(op==){
printf("%d\n",kth(rk(x)));
continue;
}
if(op==){
printf("%d\n",kth(rk(x+)+));
continue;
}
}
}
int k(gg());
int main(){;}

玄学板子,调的时间比打的时间还长= =
ps:参数类型一定要写对QWQ

[补档][Tyvj 1728]普通平衡树的更多相关文章

  1. [BZOJ3224]Tyvj 1728 普通平衡树

    [BZOJ3224]Tyvj 1728 普通平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个) ...

  2. BZOJ 3224: Tyvj 1728 普通平衡树

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 9629  Solved: 4091[Submit][Sta ...

  3. BZOJ 3224 TYVJ 1728 普通平衡树 [Treap树模板]

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 7390  Solved: 3122 [Submit][S ...

  4. BZOJ 3224: Tyvj 1728 普通平衡树 treap

    3224: Tyvj 1728 普通平衡树 Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除 ...

  5. BZOJ 3224: Tyvj 1728 普通平衡树 vector

    3224: Tyvj 1728 普通平衡树 Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除 ...

  6. bzoj3224 Tyvj 1728 普通平衡树(名次树+处理相同)

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 5354  Solved: 2196[Submit][Sta ...

  7. BZOJ 3224: Tyvj 1728 普通平衡树(BST)

    treap,算是模板题了...我中间还一次交错题... -------------------------------------------------------------------- #in ...

  8. 【bzoj】3224: Tyvj 1728 普通平衡树

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 10097  Solved: 4302[Submit][St ...

  9. BZOJ_3224 Tyvj 1728 普通平衡树 【离散化+权值线段树】

    一 题面 Tyvj 1728 普通平衡树 二 分析 比较明显是可以用平衡二叉搜索树(splay)做的. 用权值线段树做,前提就是要先离散化,因为权值线段树维护的值域信息. 板子. 三 AC代码 #in ...

随机推荐

  1. Vulkan Tutorial 20 Vertex buffer creation

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Introduction 在Vulkan中,缓冲区是内存的一块区域,该区域用于向显卡 ...

  2. JavaScript表单验证和正则表达式

    JavaScript表单验证 分为四类: 1.非空验证 常用于用户名等 2.相等验证 常用于验证两次输入的密码 3.范围验证 常用于年龄等 4.正则验证 用于手机号,邮箱号等 以下是实例: <! ...

  3. python+NLTK 自然语言学习处理:环境搭建

    首先在http://nltk.org/install.html去下载相关的程序.需要用到的有python,numpy,pandas, matplotlib. 当安装好所有的程序之后运行nltk.dow ...

  4. 探索Windows命令行系列(2):命令行工具入门

    1.理论基础 1.1.命令行的前世今生 1.2.命令执行规则 1.3.使用命令历史 2.使用入门 2.1.启动和关闭命令行 2.2.执行简单的命令 2.3.命令行执行程序使用技巧 3.总结 1.理论基 ...

  5. 如何解决苹果Mac系统无法识别U盘

       1.在Mac机上打开“磁盘工具”,将U盘重新分区, 2.格式选“exFAT”.该格式分区Win及Mac系统中都可以读和写,特别是可以支持大于4GB的大文件.但是一些高清播放机可能不支持. 3.以 ...

  6. 使用dns批量管理普通主机名相关问题

    1.dns配置 日常管理主机过程中,会有很多地方需要使用到主机名的,当主机非常多的时候,就不适合使用hosts来管理和同步的所有主机hosts了,这个时候就可以使用dns来管理主机名映射和变动 dns ...

  7. [leetcode-554-Brick Wall]

    There is a brick wall in front of you. The wall is rectangular and has several rows of bricks.The br ...

  8. awvs 中文手册详细版

    目录: 0×00.什么是Acunetix Web Vulnarability Scanner ( What is AWVS?) 0×01.AWVS安装过程.主要文件介绍.界面简介.主要操作区域简介(I ...

  9. 二、Solr单机版的搭建

    1.1. 运行环境 solr 需要运行在一个Servlet容器中,Solr4.10.3要求jdk使用1.7以上,Solr默认提供Jetty(java写的Servlet容器),本次使用Tocmat作为S ...

  10. 《javascript高级程序设计》笔记七

    第五章 引用类型(三) 今天首先说的就是Function类型.下面就是定义函数的两种方法,第一种使用函数声明语法定义,第二种使用函数表达式定义.这两种定义函数的方式几乎没有什么区别. function ...