这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 | |||
2020-2021:teams:legal_string:jxm2001:可持久化数据结构_1 [2020/07/27 22:55] jxm2001 ↷ 页面2020-2021:teams:legal_string:可持久化数据结构_1被移动至2020-2021:teams:legal_string:jxm2001:可持久化数据结构_1 |
2020-2021:teams:legal_string:jxm2001:可持久化数据结构_1 [2020/08/17 15:23] (当前版本) jxm2001 |
||
---|---|---|---|
行 205: | 行 205: | ||
int lef,rig,fa,d; | int lef,rig,fa,d; | ||
}; | }; | ||
- | Node node[MAXN*20]; | + | Node node[MAXN*30]; |
int cnt,root[MAXN<<1],n,q; | int cnt,root[MAXN<<1],n,q; | ||
inline int nodecopy(int k){ | inline int nodecopy(int k){ | ||
行 231: | 行 231: | ||
update_fa(node[k].lef,node[p].lef,lef,mid,pos,F); | update_fa(node[k].lef,node[p].lef,lef,mid,pos,F); | ||
} | } | ||
- | void update_dep(int k,int lef,int rig,int pos){ | + | void update_dep(int &k,int p,int lef,int rig,int pos){ |
+ | k=nodecopy(p); | ||
if(lef==rig){ | if(lef==rig){ | ||
node[k].d++; | node[k].d++; | ||
行 238: | 行 239: | ||
int mid=lef+rig>>1; | int mid=lef+rig>>1; | ||
if(mid<pos) | if(mid<pos) | ||
- | update_dep(node[k].rig,mid+1,rig,pos); | + | update_dep(node[k].rig,node[p].rig,mid+1,rig,pos); |
else | else | ||
- | update_dep(node[k].lef,lef,mid,pos); | + | update_dep(node[k].lef,node[p].lef,lef,mid,pos); |
} | } | ||
int query_id(int k,int lef,int rig,int pos){ | int query_id(int k,int lef,int rig,int pos){ | ||
行 263: | 行 264: | ||
update_fa(rt,p,1,n,node[x].fa,node[y].fa); | update_fa(rt,p,1,n,node[x].fa,node[y].fa); | ||
if(node[x].d==node[y].d) | if(node[x].d==node[y].d) | ||
- | update_dep(rt,1,n,node[y].fa); | + | update_dep(rt,rt,1,n,node[y].fa); |
} | } | ||
int main() | int main() |