刚学平衡树,跟着 AcWing 打了个维护树上存在的值的排名:
int get_fake_rank(int p, int key)
{
if (!p) return 0;
if (tr[p].key == key) return tr[tr[p].l].size + 1;
if (tr[p].key > key) return get_fake_rank(tr[p].l, key);
return tr[tr[p].l].size + tr[p].cnt + get_fake_rank(tr[p].r, key);
}
rt,如何维护不存在的值呢?
我目前想到的是,求这个值的前驱,然后加上这个前驱出现的次数,但是测试加强版发现不太对,正确方法是什么呢?
问题应该很弱智