树套树

名字看上去很高端很酷炫,其实不难,说白了就是树上建树。什么是树上建树?比如一个区间【1,5】,那么建成线段树就有【1,5】【1,3】【4,5】【1,2】【3】【4】【5】【1】【2】这么多个节点,现在我们把这个节点都变成一棵树(平衡树或者线段数),然后把区间内每个点都上入这个平衡树中,比如【1,3】,那么我们就把【1,3】里面三个数都加到一棵平衡树中,这样就可以直接得到【1,3】中每个树的排名(或者一些其他的工作)。

由于treap各种短各种方便,bit各种短各种方便,线段树各种快各种常数小(对于平衡树来说,而且此时线段树多是权值线段数)。so,蒟蒻至今只写过bit套treap,bit套线段树。

 

1、线段数套treap

建树过程

procedure maketree(x,l,r:longint);

var

  i,mid:longint;

begin

  with tree[x] do begin

    left:=l;

    right:=r;

    root:=0;

    for i:=l to r do insert(root,num[i]);

  end;

  if l=r then exit;

  mid:=(l+r)>>1;

  maketree(x<<1,l,mid);

  maketree(x<<1+1,mid+1,r);

end;
View Code

相关文章:

  • 2021-05-31
  • 2021-12-10
  • 2022-12-23
  • 2021-11-24
  • 2022-12-23
  • 2022-01-18
猜你喜欢
  • 2022-01-06
  • 2021-09-06
  • 2021-08-09
  • 2021-11-12
  • 2022-01-20
  • 2021-10-07
相关资源
相似解决方案