#include<cstdio>
#define N 100010
#define which(x) (ls[f[(x)]]==(x))
using namespace std;
int n,m,ls[N],rs[N],val[N],sze[N],cnt[N],f[N],root,idx; int read()
{
int ans=0,fu=1;
char j=getchar();
for (;j<'0' || j>'9';j=getchar()) if (j=='-') fu=-1;
for (;j>='0' && j<='9';j=getchar()) ans*=10,ans+=j-'0';
return ans*fu;
} void updt(int x)
{
sze[x]=sze[ls[x]]+sze[rs[x]]+1;
} void Rotate(int u)
{
int v=f[u],w=f[v],b=which(u)?rs[u]:ls[u];
if (w) which(v)?rs[w]=u:ls[w]=u;
which(u)?(ls[v]=b,rs[u]=v):(rs[v]=b,ls[u]=v);
f[u]=w,f[v]=u;
if (b) f[b]=v;
updt(v),updt(u);
} void Splay(int x,int tar)
{
while (f[x]!=tar)
{
if (f[f[x]]!=tar)
{
if (which(f[x])==which(x)) Rotate(f[x]);
else Rotate(x);
}
Rotate(x);
}
if (!tar) root=x;
} int find(int x)
{
int u=root,v=0;
while (u && val[u]!=x)
{
v=u;
if (x<val[u]) u=ls[u];
else u=rs[u];
}
return u?u:v;
} void insert(int x)
{
int u=root,v=0;
while (u && val[u]!=x)
{
v=u;
if (x<=val[u]) u=ls[u];
else u=rs[u];
}
if (u && val[u]==x)
return (void)(cnt[u]++,sze[u]++,Splay(u,0));
f[++idx]=v;
sze[idx]=1;
val[idx]=x;
if (v) x<=val[v]?ls[v]=idx:rs[v]=idx;
Splay(idx,0);
} int getmn(int x)
{
while (ls[x]) x=ls[x];
return x;
} int getmx(int x)
{
while (rs[x]) x=rs[x];
return x;
} void erase(int x)
{
int tmp=find(x);
Splay(tmp,0);
if (cnt[tmp]>1) cnt[tmp]--,sze[tmp]--;
else if (!ls[tmp] || !rs[tmp]) root=ls[tmp]+rs[tmp],f[root]=0;
else
{
f[ls[tmp]]=0;
int u=getmx(ls[tmp]);
Splay(u,0);
rs[u]=rs[tmp];
f[rs[tmp]]=u;
updt(u);
}
} int getkth(int k)
{
int cur=root;
while (cur)
{
if (sze[ls[cur]]>=k) cur=ls[cur];
else if (sze[ls[cur]]+cnt[cur]>=k) return val[cur];
else k-=sze[ls[cur]]+cnt[cur],cur=rs[cur];
}
return val[cur];
} int getrank(int x)
{
int cur=find(x);
Splay(cur,0);
return sze[ls[cur]]+1;
} int getpre(int x)
{
int cur=find(x);
if (val[cur]<x) return val[cur];
Splay(cur,0);
return val[getmx(ls[cur])];
} int getnxt(int x)
{
int cur=find(x);
if (val[cur]>x) return val[cur];
Splay(cur,0);
return val[getmn(rs[cur])];
} int main()
{
n=read();
for (int i=1,op,a;i<=n;i++)
{
op=read();
a=read();
printf("%d %d\n",op,a);
if (op==1) insert(a);
if (op==2) erase(a);
if (op==3) printf("%d\n",getrank(a));
if (op==4) printf("%d\n",getkth(a));
if (op==5) printf("%d\n",getpre(a));
if (op==6) printf("%d\n",getnxt(a));
}
return 0;
}

[bzoj] 3224 Tyvj 1728 普通平衡树 || 平衡树板子题的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. BZOJ 3224: Tyvj 1728 普通平衡树 or 洛谷 P3369 【模板】普通平衡树-Splay树模板题

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 22483  Solved: 10130[Submit][S ...

  7. BZOJ 3224 Tyvj 1728 普通平衡树 | Splay 板子+SPlay详细讲解

    下面给出Splay的实现方法(复杂度证明什么的知道是 nlogn 就可以啦) 首先对于一颗可爱的二叉查找树,是不能保证最坏nlogn的复杂度(可以想象把一个升序序列插入) (二叉查找树保证左子树元素大 ...

  8. BZOJ 3224 Tyvj 1728 普通平衡树模板

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3224 题目大意: 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以 ...

  9. bzoj 3224/Tyvj 1728 普通平衡树(splay)

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

随机推荐

  1. A的B次幂

    Description 给出两个正整数A和B 请输出A的B次幂 结果可能很大,请对1000000007求模 Input A和B,两个整数均不大于10^18 Output A的B次幂对100000000 ...

  2. SEOer必读:50个网站推广方法

    1.论坛推广 这里所说的论坛推广绝对不是在论坛里一个一个版贴广告,也不是将网站地址加在签名里然后疯狂刷屏,那样既耗费精力而且效果也不见得好,论坛管理员只要点几下鼠标就能将你的帖子全部删除,顺便封掉你的 ...

  3. 如何理解MVVM?

    随着前端页面越来越复杂,用户对于交互性要求也越来越高,MVVM模型应运而生. MVVM最早由微软提出来,它借鉴了桌面应用程序的MVC思想,在前端页面中,把Model用纯JavaScript对象表示,V ...

  4. No module named 'PyQt5.sip'

    使用pyinstaller打包python文件为windows可执行程序可能遇到的问题 pyinstaller yourprogram.py打包的程序双击打开一闪而过,提示上面标题的错误 把pycom ...

  5. manjaro无法使用ifconfig查ip

    manjaro中自带的查看网络的命令是: ip addr 可以了解一下ip命令都有哪些功能 如果还是想要 ifconfig 需要安装net-tools 安装命令: sudo pacman -S net ...

  6. C++基础 对象的管理——单个对象的管理

    1. 为什么要有构造函数和析构函数 面向对象的思想是从生活中来,手机.车出厂时,是一样的. 这些对象都是被初始化后才上市的,初始化是对象普遍存在的一个状态. 普通方案: 对每个类提供一个 init 函 ...

  7. E - Nature Reserve CodeForces - 1059D

    传送门 There is a forest that we model as a plane and live nn rare animals. Animal number iihas its lai ...

  8. 17-比赛1 F - 较小元素 Weak in the Middle (set)

    Seg-El has last chance to make the final changes in order to prevent the destruction of Krypton. He ...

  9. adb logcat 日志过滤

    方法 1.采用wpa_supplicant:s   *:v 排除wpa_supplicant标签 adb -s 01d32e89cb94d599 logcat -v time -s wpa_suppl ...

  10. “管中窥豹”,MyCAT的基因缺陷

    提起MyCAT,我的脑海里,总是浮现出这样一首偈.弘忍觉得自己老了,需要找一个接班人,于是,弘忍要求弟子们每人写一个偈子,根据偈子观察各位弟子的开悟程度,从而传授正宗禅宗的衣钵.弟子们心里其实都很明白 ...