李超线段树板子
void upd(int u, int l, int r, int x, int y, int id) {
if (x <= l && r <= y) {
if (!tag[u]) return tag[u] = id, void();
if (val(id, mid) > val(tag[u], mid)) swap(tag[u], id);
if (val(id, l) >= val(tag[u], l)) upd(lc, l, mid, x, y, id);
else if (val(id, r) >= val(tag[u], r)) upd(rc, mid + 1, r, x, y, id);
} else {
if (x <= mid) upd(lc, l, mid, x, y, id);
if (mid < y) upd(rc, mid + 1, r, x, y, id);
}
}
时间复杂度显然是 \(\mathcal O(\log^2n)\) 的.