或许可以尝试将插入时
cin>>x>>n;
split(root,x,rt1,rt2);
for(int i=1;i<=n;i++){
int xx;cin>>xx;
t[++tot]={xx,0,0,rd(),1,xx,xx,xx,xx,0,10000};
rt1=merge(rt1,tot);
}
root=merge(rt1,rt2);
上面这一段代码中直接将新节点与原来分裂出的左树合并,常数巨大。
可以加进一颗新树中最后合并。如下。
cin>>x>>n;
split(root,x,rt1,rt2);
for(int i=1;i<=n;i++){
int xx;cin>>xx;
t[++tot]={xx,0,0,rd(),1,xx,xx,xx,xx,0,10000};
rt3=merge(rt3,tot);
}
rt1=merge(rt1,rt3);
root=merge(rt1,rt2);