10分:
int dfs(){
int x,rt=0;
ans1=ans2=0;
read(x);
if(!x)rt=merge(dfs(),dfs(),1,n);
else update(rt,1,n,x,1);
ans+=min(ans1,ans2);
return rt;
}
100分:
int dfs(){
int x,rt=0;
read(x);
if(!x)rt=merge(dfs(),dfs(),1,n);
else update(rt,1,n,x,1);
ans+=min(ans1,ans2);
ans1=ans2=0;
return rt;
}
原因就是读完右儿子之后的ans1和ans2是右儿子的答案,如果我们再做merge的话就会挂掉...