在执行操作 4 时,保留最后的返回值会导致答案随机。
int get_num (int cur, int rnk) {
while (cur) {
if (t[ls].siz + 1 == rnk) return t[cur].val;
if (t[ls].siz + 1 < rnk) rnk -= (t[ls].siz + 1), cur = rs;
if (t[ls].siz + 1 > rnk) cur = ls;
}
return t[cur].val;
}
而如果删去最后一行返回值,结果正确,如下。
int get_num (int cur, int rnk) {
while (cur) {
if (t[ls].siz + 1 == rnk) return t[cur].val;
if (t[ls].siz + 1 < rnk) rnk -= (t[ls].siz + 1), cur = rs;
if (t[ls].siz + 1 > rnk) cur = ls;
}
}
最后一行不是对结果没有影响么?