线段树板子
#数据结构
维持区间最小值的线段树板子
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);
}
};