如果你TLE80/TLE+WA70&&FHQ-Treap
查看原帖
如果你TLE80/TLE+WA70&&FHQ-Treap
1037830
Ooj_bai楼主2024/9/9 19:21

或许可以尝试将插入时

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);
2024/9/9 19:21
加载中...