i & (-i)의 수학적 의의를 파악합니다.
- 레이지 전파를 통한 구간 일괄 갱신의 최적화 흐름을 내재화합니다. # 8049번: 구간 합 쿼리 발췌
prefix = [0] * (n + 1)
for i in range(1, n + 1):
prefix[i] = prefix[i - 1] + arr[i - 1]
# query(l, r)
ans = prefix[r] - prefix[l - 1]
# 8050번: 구간 최솟값 쿼리 발췌
for k in range(1, log_n):
for i in range(n - (1 << k) + 1):
sparse[k][i] = min(sparse[k - 1][i], sparse[k - 1][i + (1 << (k - 1))])
# query(l, r)
k = int(math.log2(r - l + 1))
ans = min(sparse[k][l], sparse[k][r - (1 << k) + 1])
# 8051번: 구간 합 업데이트 발췌
def update(i, diff):
while i <= n:
bit[i] += diff
i += i & (-i)
def query(i):
s = 0
while i > 0:
s += bit[i]
i -= i & (-i)
return s
r + 1 처리가 배열 경계를 넘지 않도록 크기 보정 확인
- **결합 법칙 준수**: 스파스 테이블은 중복 계산이 무관한 연산(min, max, gcd)에만 유효함을 숙지