[补档][Tyvj 1728]普通平衡树
[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 493598OUTPUT
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]普通平衡树的更多相关文章
- [BZOJ3224]Tyvj 1728 普通平衡树
[BZOJ3224]Tyvj 1728 普通平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个) ...
- BZOJ 3224: Tyvj 1728 普通平衡树
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 9629 Solved: 4091[Submit][Sta ...
- BZOJ 3224 TYVJ 1728 普通平衡树 [Treap树模板]
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 7390 Solved: 3122 [Submit][S ...
- BZOJ 3224: Tyvj 1728 普通平衡树 treap
3224: Tyvj 1728 普通平衡树 Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除 ...
- BZOJ 3224: Tyvj 1728 普通平衡树 vector
3224: Tyvj 1728 普通平衡树 Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除 ...
- bzoj3224 Tyvj 1728 普通平衡树(名次树+处理相同)
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5354 Solved: 2196[Submit][Sta ...
- BZOJ 3224: Tyvj 1728 普通平衡树(BST)
treap,算是模板题了...我中间还一次交错题... -------------------------------------------------------------------- #in ...
- 【bzoj】3224: Tyvj 1728 普通平衡树
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 10097 Solved: 4302[Submit][St ...
- BZOJ_3224 Tyvj 1728 普通平衡树 【离散化+权值线段树】
一 题面 Tyvj 1728 普通平衡树 二 分析 比较明显是可以用平衡二叉搜索树(splay)做的. 用权值线段树做,前提就是要先离散化,因为权值线段树维护的值域信息. 板子. 三 AC代码 #in ...
随机推荐
- Jenkin-持续集成
1.Jenkins安装 本文将会介绍如何在windows 中安装Jenkins,并且使用Jenkins进行项目的构建. 首先我们进入到Jenkins 的官网下载地址:https://jenkins.i ...
- memcache常用命令
一.memcached的基本命令(安装.卸载.启动.配置相关): -p 监听的端口 -l 连接的IP地址, 默认是本机 -d start 启动memcached服务 -d restart 重起m ...
- 简单轻量级的一套JS 类库(RapidDevelopmentFramework.JS)
1.最近好久没有更新自己的博客了,一直在考虑自己应该写一些什么.4.2日从苏州回到南京的路上感觉自己的内心些崩溃和失落,我就不多说了? 猛然之间我认为自己需要找一下内心的平衡.决定开发属于自己一套快速 ...
- js将时间戳转成格式化的时间
function getLocalTime(nS){ return new Date(parseInt(nS) * 1000).toLocaleString().replace(/年|月/g, &qu ...
- Linux下pecl命令无法执行的解决
pecl install swoole 提示如下错误:bash: pecl: command not found执行yum install php-pear生效
- Solr6.6 Tomcat8部署
原文:https://github.com/x113773/testall/issues/6 准备工作:[solr-6.6.0](http://www.apache.org/dyn/closer.lu ...
- 【Android Developers Training】 25. 保存文件
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 22. 与其他fragment通信
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【前端】一步一步使用webpack+react+scss脚手架重构项目
前言 前几天做了一个项目:[node]记录项目的开始与完成——pipeline_kafka流式数据库管理项目:因为开发时间紧迫,浅略的使用了一下react,感觉这个ui库非常的符合我的口味,现在趁着有 ...
- Java多线程中join方法详解
join()方法用于让当前执行线程等待join线程执行结束.其实现原理是不停的检查join线程是否存活,如果join线程存活则让当前线程永远等待. join()方法部分实现细节 while(isAli ...