주석부분만 적절히 변경해주면 구간 최대,최소, 합 레이지 세그를 짤 수 있다.
[ Code ]
using ll = long long;
const int MAX = 100001;
struct segment_tree {
ll lazy[4 * MAX], tree[4 * MAX];
void propa(int node, int s, int e) {
if (lazy[node]) {
//
tree[node] += (e - s + 1) * lazy[node];
if (s != e) {
lazy[2 * node] += lazy[node];
lazy[2 * node + 1] += lazy[node];
}
lazy[node] = 0;
}
}
void upd(int node, int s, int e, int qs, int qe, ll v) {
propa(node, s, e);
if (s > qe || e < qs) return;
if (qs <= s && e <= qe) {
lazy[node] += v;
propa(node, s, e);
return;
}
int m = (s + e) / 2;
upd(2 * node, s, m, qs, qe, v);
upd(2 * node + 1, m + 1, e, qs, qe, v);
//
tree[node] = tree[2 * node] + tree[2 * node + 1];
}
ll sum(int node, int s, int e, int qs, int qe) {
propa(node, s, e);
//
if (s > qe || e < qs) return 0;
if (qs <= s && e <= qe) return tree[node];
int m = (s + e) / 2;
//
return sum(2 * node, s, m, qs, qe) + sum(2 * node + 1, m + 1, e, qs, qe);
}
}seg;
'PS > 기본구현' 카테고리의 다른 글
FFT 코드 (0) | 2022.08.23 |
---|---|
플로우 - Dinic, Edmonds-Karp 알고리즘 (0) | 2022.08.08 |
세그먼트 트리 코드 (0) | 2022.08.07 |
선분교차판정 코드 (세 점 일직선 포함) (0) | 2022.08.07 |
댓글