在模板题中,splay的kth函数我是这样写的:
int kth(int k){
int p=root;
while(1){
if(tr[tr[p].son[0]].siz>=k)p=tr[p].son[0];
else if(tr[tr[p].son[0]].siz+tr[p].cnt==k)return p;
else k-=tr[tr[p].son[0]].siz+tr[p].cnt,p=tr[p].son[1];
}
}
结果 TLE,仅60pts。
但是改成这样:
int kth(int k){
int p=root;
while(1){
if(tr[tr[p].son[0]].siz>=k)p=tr[p].son[0];
else if(k>tr[tr[p].son[0]].siz+tr[p].cnt) k-=tr[tr[p].son[0]].siz+tr[p].cnt,p=tr[p].son[1];
else return p;
}
}
就能AC。
为啥?求解。