struct Segt {
using T = int;
static constexpr T def = 1<<30;
int cap; vector<T> seg;
Segt(int c = 0, T d = def) : seg(2*(c+1), d), cap(c+1) {}
T segfun(T i, T j) { return min(i, j); }
void update(int i, T v) {
for (seg[i += cap] = v; i >>= 1; ) {
seg[i] = segfun(seg[i<<1], seg[(i<<1)^1]);
}
}
T ask(int l, int r) {
T r1 = def, r2 = def;
for (l += cap, r += cap; l <= r; l >>= 1, r >>= 1) {
if (l&1) r1 = segfun(r1, seg[l++]);
if (~r&1) r2 = segfun(r2, seg[r--]);
}
return segfun(r1, r2);
}
};
ask(l, r) 구간 [l, r] 에 대한 segfun 연산 수행결과를 반환
KACTL를 많이 참고하였다
'알고리즘 > 라이브러리' 카테고리의 다른 글
BIT (0) | 2021.03.22 |
---|---|
DSU (0) | 2021.03.22 |
Rabin karp (0) | 2021.02.10 |
BFS (0) | 2020.12.13 |
Suffix Array와 LCP Array (0) | 2020.09.23 |
댓글