본문 바로가기
PS/기본구현

레이지 프로퍼게이션 코드

by jaehoonChoi 2022. 8. 7.

주석부분만 적절히 변경해주면 구간 최대,최소, 합 레이지 세그를 짤 수 있다. 

[ 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

댓글