如果你像我一样用了 Treap 且 WA on #1,那么把
inline int GetRankByVal(int p,int val){
if(p == 0)
return 0;
if(val == a[p].val)
return a[a[p].l].size + 1;
if(val < a[p].val)
return GetRankByVal(a[p].l,val);
return GetRankByVal(a[p].r,val) + a[a[p].l].size + a[p].cnt;
}
改为
inline int GetRankByVal(int p,int val){
if(p == 0)
return 1;
if(val == a[p].val)
return a[a[p].l].size + 1;
if(val < a[p].val)
return GetRankByVal(a[p].l,val);
return GetRankByVal(a[p].r,val) + a[a[p].l].size + a[p].cnt;
}
《算法竞赛进阶指南》 上有错误。