先开坑占位……忽然发现直接用split 和merge开树实在是蛋疼……nlgn什么的……
先来个split 和merge吧……
int size(node* a){return a?a->size:0;}
int split(node* root,int k,node* &a, node* &b)
{
if(!root){a=b=0;return 0;}
if(size(root->s[0])>=k)
{
split(root->s[0],k,a,b);
root->s[0]=b;
root->updata();
b=root;
return 0;
}
else
{
split(root->s[1],k-size(a->[0])+1,a,b);
root->s[1]=a;
root->updata();
a=root;
retrun 0;
}
}
再来一段merge
node* merge(node* a,node* b)
{
if (!a) return b;
if (!b) return a;
if(a->wei>=b->wei)
{
a->s[1]=merge(a->s[1],b);
a->updata();
return a;
}else
{
b->s[0]=merge(a,b->s[0]);
b->updata();
return b;
}
}
然后最近研究vam emde boas……