为什么query函数写成这样只有8pts,自己测了感觉没啥问题
int query(int x, int l, int r, int len) {
if (l == r) return l;
pushdown(x, l, r);
int mid = (l + r) >> 1;
if (tr[tr[x].l].sum >= len)
return query(tr[x].l, l, mid, len);
else if (tr[tr[x].l].rval && tr[tr[x].l].rval + tr[tr[x].r].lval >= len)
return query(tr[x].l, l, mid, tr[tr[x].l].rval);
else
return query(tr[x].r, mid + 1, r, len);
}
改成这样就ac了
int query(int x, int l, int r, int len) {
if (l == r) return l;
pushdown(x, l, r);
int mid = (l + r) >> 1;
if (tr[tr[x].l].sum >= len)
return query(tr[x].l, l, mid, len);
else if (tr[tr[x].l].rval + tr[tr[x].r].lval >= len)
return mid - tr[tr[x].l].rval + 1;
else
return query(tr[x].r, mid + 1, r, len);
}
下面的代码我懂,主要是不知道上面的哪里错了,求大佬指导qaq