李超线段树板子

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)\) 的.

posted @ 2024-02-03 17:14  Laijinyi  阅读(2)  评论(0编辑  收藏  举报