珂朵莉树维护区间

SkyMaths's Blogs / 2024-10-16 / 原文

记得赋初值

struct ODT {
    ::map <int, int> mp;
    int get(int x) {
        return prev(mp.upper_bound(x))->se;
    }
    auto split(int x) {
        return mp.insert(make_pair(x, get(x))).fi;
    }
    void assign(int l, int r, int v) {
        auto il(split(l)), ir(split(r + 1));
        mp.erase(next(il), ir);
        il->second = v;
    }
} odt;