FHQ Treap是这么写Split的:
void split(int u,int x,int &L,int &R) { if(u==0) { L=R=0; return; } if(t[u].key<=x) { L=u; split(t[u].rs,x,t[u].rs,R); } else { R=u; split(t[u].ls,x,t[u].ls,L); } }
为什么再次分裂的时候L,RL,RL,R要这么传(split(t[u].rs,x,t[u].rs,R))?求大佬传道受业解惑之。
split(t[u].rs,x,t[u].rs,R)