아래 코드에서 적절히 트리의 식만 변형해주면 구간 최대,최소,합,곱 세그트리를 만들어줄 수 있다.
세그트리는 복붙보단 매번 직접 짜는걸 추천한다.
[ Code ]
const int MAX = 100001;
struct segment_tree {
int tree[4 * MAX];
void upd(int node, int s, int e, int idx, int v) {
if (idx<s || idx>e) return;
if (s == e) {
tree[node] = v;
return;
}
int m = (s + e) / 2;
upd(2 * node, s, m, idx, v);
upd(2 * node + 1, m + 1, e, idx, v);
tree[node] = tree[2 * node] + tree[2 * node + 1];
}
int query(int node, int s, int e, int qs, int qe) {
if (s > qe || e < qs) return 0;
if (qs <= s && e <= qe) return tree[node];
int m = (s + e) / 2;
int L = query(2 * node, s, m, qs, qe);
int R = query(2 * node + 1, m + 1, e, qs, qe);
return R + L;
}
}seg;
'PS > 기본구현' 카테고리의 다른 글
FFT 코드 (0) | 2022.08.23 |
---|---|
플로우 - Dinic, Edmonds-Karp 알고리즘 (0) | 2022.08.08 |
레이지 프로퍼게이션 코드 (0) | 2022.08.07 |
선분교차판정 코드 (세 점 일직선 포함) (0) | 2022.08.07 |
댓글