社区讨论

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 条回复,欢迎继续交流。

正在加载回复...