在查询数 k 的排名的操作中, 若 k 不在树中, 在遇到当前节点该往左走但无左儿子, 或该往右走但没有右儿子时, 直接返回答案而不执行splay操作是否仍能保证时间复杂度?
参考代码:
/*
rt为根节点
val[x]为编号为x的节点的值
*/
int rk(int k) {
int res = 0, cur = rt;
while (true) {
if (k < val[cur]) {
if (!ch[cur][0]) // 上文所描述的操作
return res + 1;
cur = ch[cur][0];
} else {
res += sz[ch[cur][0]];
if (k == val[cur]) {
splay(cur);
return res + 1;
}
res += cnt[cur];
if (!ch[cur][1]) // 上文所描述的操作
return res + 1;
cur = ch[cur][1];
}
}
}