社区讨论
FHQ-Treap 37pts 求条,样例已过,WA on #5~#13
P3369【模板】普通平衡树参与者 1已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mhjljbkl
- 此快照首次捕获于
- 2025/11/04 04:32 4 个月前
- 此快照最后确认于
- 2025/11/04 04:32 4 个月前
C
#include<bits/stdc++.h>
using namespace std;
std::mt19937 rnd(114514);
int n,t,opt,valu,root,x,y,z;
struct Node{
int l,r;
int val,key;
int size;
}a[100010];
int newnode(int vv)
{
a[++n].val=vv;
a[n].key=rnd();
a[n].size=1;
a[n].l=a[n].r=0;
return n;
}
void F5size(int now)
{
a[now].size=a[a[now].l].size+a[a[now].r].size+1;
}
void fenlie(int now,int vv,int &x,int &y)
{
if(!now)
{
x=y=0;
return;
}
if(a[now].val<=vv)
{
x=now;
fenlie(a[now].r,vv,a[now].r,y);
}
else
{
y=now;
fenlie(a[now].l,vv,x,a[now].l);
}
F5size(now);
}
int hebing(int x,int y)
{
if(!x||!y) return x+y;
if(a[x].key>a[y].key)
{
a[x].r=hebing(a[x].r,y);
F5size(x);
return x;
}
else
{
a[y].l=hebing(x,a[y].l);
F5size(y);
return y;
}
}
void charu(int vv)
{
fenlie(root,vv,x,y);
root=hebing(hebing(x,newnode(vv)),y);
}
void shanchu(int vv)
{
fenlie(root,vv,x,z);
fenlie(x,vv,x,y);
y=hebing(a[y].l,a[y].r);
root=hebing(hebing(x,y),z);
}
void xiaoyv(int vv)
{
fenlie(root,vv-1,x,y);
cout<<a[x].size+1<<endl;
root=hebing(x,y);
}
void paiming(int xvhao)
{
int now=root;
while(now)
{
int lsize=a[a[now].l].size;
if(lsize+1==xvhao)
{
cout<<a[now].val<<endl;
break;
}
else if(lsize>=xvhao)
now=a[now].l;
else
{
xvhao-=lsize+1;
now=a[now].r;
}
}
}
void qianqv(int vv)
{
fenlie(root,vv-1,x,y);
int now=x;
while(a[now].r)
now=a[now].r;
cout<<a[now].val<<endl;
root=hebing(x,y);
}
void houqv(int vv)
{
fenlie(root,vv,x,y);
int now=y;
while(a[now].l)
now=a[now].l;
cout<<a[now].val<<endl;
root=hebing(x,y);
}
int main()
{
cin>>t;
while(t--)
{
cin>>opt>>valu;
switch(opt)
{
case 1:
{
charu(valu);
break;
}
case 2:
{
shanchu(valu);
break;
}
case 3:
{
xiaoyv(valu);
break;
}
case 4:
{
paiming(valu);
break;
}
case 5:
{
qianqv(valu);
break;
}
case 6:
{
houqv(valu);
break;
}
}
}
return 0;
}
我恨教练才学了 FHQ-Treap 模板题都没调对就被拉着学树链剖分,所以只能上网求人调了(悲)
AI 都没发现的错误吗,有点意思。
回复
共 2 条回复,欢迎继续交流。
正在加载回复...