求助关于FHQ做法中Insert操作的问题,有回则关
查看原帖
求助关于FHQ做法中Insert操作的问题,有回则关
775469
danzhu2022楼主2024/7/5 22:47
if(s[0]=='I'){
	cin>>a>>b;
	if(b==0)continue;
	if(b>0){//往右跳一格 
		int k=find(id[a]);
		int r1,r2,r3,r4;
		split(root,k+1,r3,r4);
		split(r3,k,r2,r3);
		split(r2,k-1,r1,r2);
	//	split(root,k+1,r1,r4);
	//	split(r1,k,r1,r3);
	//	split(r1,k-1,r1,r2);
		root=merge(merge(merge(r1,r3),r2),r4); 
	}
	else if(b<0){//往左跳一格
		int k=find(id[a]);
		int r1,r2,r3,r4;
		split(root,k,r3,r4);
		split(r3,k-1,r2,r3);
		split(r2,k-2,r1,r2);
	//	split(root,k,r1,r4);
	//	split(r1,k-1,r1,r3);
	//	split(r1,k-2,r1,r4);
		root=merge(merge(merge(r1,r3),r2),r4); 
		}
	}

如图所示,被注释掉的代码0pts,没有被注释的代码AC

两种代码我的思路相同,都是把要交换的两个数剪下来成为四棵树,再由题目要求顺序进行拼接

不知道错误在何处,求解答,谢谢大佬^_^

PS:如果要看全部代码我附在讨论区

2024/7/5 22:47
加载中...