其它帖子说离散化不要去重。
其实去重也是可以的,只需要记录 vr[x] 表示将 ≥x 的位置全部标 1 的根,查询的时候就查询 vr[x] 为根的树。
不过要注意 vr[x] 的更新顺序。
可以这么实现:
bdtr(root[1], 1, n);
for (int i = 2; i <= n + 1; i++) {
arr h = pq.top();
pq.pop();
if (!vr[h.v]) vr[h.v] = root[i - 1];
update(root[i - 1], root[i], 1, n, h.id);
}