复习了一下SBT的模板,但是BZOJ不知道为什么注册不了,所以就没交,测了样例能过!

#include <bits/stdc++.h>
#include<algorithm>
using namespace std;
#define lc ch[0]
#define rc ch[1] const int MAXN=500000;
const int INF=0x3f3f3f3f; struct node
{
node* ch[2];
int sz,v;
node(){} }SBT[MAXN+10],*NILL=new node,*root=NILL,*tot=SBT; int getint()
{
int ret=0;bool f=0;char ch;
while((ch=getchar())<'0'||ch>'9')f=!f;
while(ch>='0'&&ch<='9')ret=ret*10+(ch-'0');
return f?-ret:ret;
}
void init()
{
NILL->lc=NILL;
NILL->rc=NILL;
NILL->sz=0;
}
//更新子树大小
inline void update(node* r)
{
r->sz=r->lc->sz+rc->sz+1;
} node* newnode()
{
tot->lc=tot->rc=NILL;
tot->sz=1;
return tot++;
} void rotate(node* r,bool f)
{
node *t=r->ch[f];
r->ch[f]=t->ch[!f];
t->ch[!f]=r;
t->sz=r->sz;
update(r);
r=t;
} void mt(node* &r,bool f)//利用左右对称,带上参数f同时减去不必要的检查
{
if(r==NILL)return;//NILL为空指针
if(r->ch[f]->ch[f]->sz>r->ch[!f]->sz)//左左>右
{
rotate(r,f);
}
else if(r->ch[f]->ch[!f]->sz>r->ch[!f]->sz)//左右>右,先旋左儿子,再旋根
{
rotate(r->ch[f],!f);rotate(r,f);
}
else return;
mt(r->ch[f],f);
mt(r,f);
} void insert(node* &r,int v)
{
if(r==NILL)
{
r=newnode();
r->v=v;
return;
}
r->sz++;
bool k=v>r->v;
insert(r->ch[k],v);
mt(r,k);
} int del(node* &r,int x)
{
int ret;
r->sz--;
if(r->v==x||(r->lc==NILL&&x<r->v)||(r->rc==NILL&&x>r->v))//删除根节点的情况
{
ret=r->v;
if(r->lc==NILL||r->rc==NILL)
r=r->lc==NILL?r->rc:r->lc;
else
r->v=del(r->lc,x); }
else ret=del(r->ch[x>=r->v],x);
return ret;
} int sel(int val)//val的排位
{
int ret=1;
node* p=root;
while(p!=NILL)
{
if(val<=p->v)
{
p=p->lc;
}
else
{
ret+=p->lc->sz+1;
p=p->rc;
}
}
return ret;
} int rk(int x)//排第x的值
{
node* p=root;
while(p!=NILL)
{
if(x==p->lc->sz+1)
return p->v;
if(x<=p->lc->sz)
p=p->lc;
else
{
x-=p->lc->sz+1;
p=p->rc;
}
}
return INF;
} //查询前驱(0)后继(1)
int query(int v,bool f)
{
node* p=root;
int ret=f?INF:-INF;
while(p!=NILL)
{
if(p->v!=v&&(f==(p->v>v)&&f==(ret>p->v)))
{
ret=p->v;
}
if(v==p->v)
p=p->ch[f];
else p=p->ch[v>p->v];
}
return ret;
} int main()
{
init();
int kase=getint();
while(kase--)
{
int opt=getint(),x=getint();
switch(opt)
{
case 1:insert(root,x);break;
case 2:del(root,x);break;
case 3:printf("%d\n",sel(x));break;
case 4:printf("%d\n",rk(x));break;
case 5:printf("%d\n",query(x,0));break;
case 6:printf("%d/n",query(x,1));break;
}
}
return 0;
}

BZOJ 3224 SBT 普通平衡树的更多相关文章

  1. 【BZOJ 3224】普通平衡树 模板题

    删除节点时把节点splay到根: 然后把根左子树的最右边节点splay到根的左孩子上: 然后删除就可以了: 我的教训是删根的时候根的右孩子的父亲指针一定要记得指向根的左孩子!!! my AC code ...

  2. 【BZOJ 3224】 普通平衡树

    [题目链接] 点击打开链接 [算法] 本题是Splay模板题,值得一做! [代码] #include<bits/stdc++.h> using namespace std; #define ...

  3. Luogu 3369 / BZOJ 3224 - 普通平衡树 - [无旋Treap]

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3224 https://www.luogu.org/problemnew/show/P3 ...

  4. BZOJ 3224 普通平衡树(Treap模板题)

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

  5. 洛谷 P3369 BZOJ 3224 【模板】普通平衡树(Treap/SBT)

    题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入x数 删除x数(若有多个相同的数,因只删除一个) 查询x数的排名(若有多个相同的数,因输出最小的排名) 查询 ...

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

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

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

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

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

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

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

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

随机推荐

  1. HDU 1215.七夕节【筛选法】【7月26】

    七夕节 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,而且和数字王国的人们说:"你们想知道你们的还有一半是谁吗?那就依照告示上的方法去找吧!" 人们纷纷来到告示前,都想知道 ...

  2. 【Nginx】负载均衡

    本文介绍的负载均衡是针对的客户端请求在多个Nginx进程之间的均衡.注意与客户端请求在多个后端服务器之间的均衡相区别. 负载均衡问题的产生 在nginx中,建立连接的时候,会设计负载均衡问题.在多个子 ...

  3. MIT 操作系统实验 MIT JOS lab1

    JOS lab1 首先向MIT还有K&R致敬! 没有非常好的开源环境我不可能拿到这么好的东西. 向每个与我一起交流讨论的programmer致谢!没有道友一起死磕.我也可能会中途放弃. 跟丫死 ...

  4. Wi-Fi无线网络(WPA2加密)快速破解 ——某公司无线设备安全隐患报告

    Wi-Fi无线网络(WPA2加密)快速破解 --某公司无线设备安全隐患报告 评估人:阿牛 2013年12月12日 文件夹 一. 导言 2 二. 背景 2 三. 无线产品应当採取的安全策略 3 四. 存 ...

  5. 答读者问(6):有关IT培训和毕业之前的迷茫等问题

    近期在微博上与一些读者朋友们交流,发现大家对自己的未来都比較的关心.有些朋友认为在大学里面没有学到什么东西,问我要不要到一些IT培训机构去"速成".另一些朋友即将毕业,不知道自己走 ...

  6. OpenCV图像处理篇之图像平滑

    图像平滑算法 图像平滑与图像模糊是同一概念,主要用于图像的去噪.平滑要使用滤波器.为不改变图像的相位信息,一般使用线性滤波器,其统一形式例如以下: %20\Large%20g(i,j)=\sum_{k ...

  7. 2 AngularJS 1 概念浓缩

    Angular Web APP 结构图: module   --> 模块     :相当于一个容器,Angular里的所有东西都得放在模块里,才能够被引用和加载. directive  --&g ...

  8. [办公自动化]计算机突然断电,微软office文档(有asd文件)如何恢复?

    今天同事使用office软件时,突然故障.结果他忙了半天的word文档内容都找不见了. 经过查找,在其硬盘根目录找到了asd文档. 但是用当前版本的word和高版本的word软件都无法打开. 又查找了 ...

  9. oracle多表关联多字段update

    多表关联多字段update 有代码有J8: update spatial_references set( auth_name, auth_srid, falsex, falsey, xyunits, ...

  10. 2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016) E.Passwords AC自动机+dp

    题目链接:点这里 题意: 让你构造一个长度范围在[A,B]之间 字符串(大小写字母,数字),问你有多少种方案 需要满足条件一下: 1:构成串中至少包含一个数字,一个大写字母,一个小写字母:   2:不 ...