线段树板子

#数据结构

维持区间最小值的线段树板子

const int INF = 1e9;
template<typename T>
struct SegTree {
    int n;
    vector<T> t;
    T default_value = INF;
 
    SegTree(int size) : n(size) {
        t.assign(4 * n, default_value);
    }
 
    void update(int v, int tl, int tr, int pos, T new_val) {//单点更新
        if (tl == tr) {
            t[v] = new_val;
        }
        else {
            int tm = (tl + tr) / 2;
            if (pos <= tm) {
                update(v * 2, tl, tm, pos, new_val);
            }
            else {
                update(v * 2 + 1, tm + 1, tr, pos, new_val);
            }
            t[v] = min(t[v * 2], t[v * 2 + 1]);
        }
    }
 
    T query(int v, int tl, int tr, int l, int r) {//区间查询
        if (l > r) return default_value;
        if (l == tl && r == tr) return t[v];
        int tm = (tl + tr) / 2;
        return min(query(v * 2, tl, tm, l, min(r, tm)),
            query(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
    }
 
    void update(int pos, T new_val) {//封装的简易调用
        update(1, 0, n - 1, pos, new_val);
    }
 
    T query(int l, int r) {//封装的简易调用
        if (l > r) return default_value;
        return query(1, 0, n - 1, l, r);
    }
};


联系方式 - 如果你 喜欢 我的话~

GitHubbilibiliCSDN

ZHM