一个小问题

P6136 【模板】普通平衡树(数据加强版)

ChengJY_ @ 2021-11-08 20:44:34

RT

这道题拿treap打的,求rank的时候出了点小锅。

我在普通版的代码下写的是

int ran(int p,int k){
    if(!p) return 0;
    if(v[p]==k) return size[son[p][0]]+1;
    if(v[p]<k) return size[son[p][0]]+num[p]+ran(son[p][1],k);
    if(v[p]>k) return ran(son[p][0],k);
}

然后这里Wa爆了

然后把

if(!p) return 0;

改成

if(!p) return 1;

就过了。

为什么呢,是原题数据太水了吗(


by SDNetFriend @ 2021-11-08 22:50:58

rank 的定义应该是比当前数小的数的个数 +1,这样如果查一个不存在的数,那么比它小的数都会被计算,那么最后跑到空节点需要再加上 1 否则会错。


|