# 8073번: Mo's Algorithm 핵심 발췌
block = int(n ** 0.5)
queries.sort(key=lambda x: (x[0] // block, x[1] if ... else -x[1]))
for ql, qr, qi in queries:
while r < qr: r += 1; add(r)
while l > ql: l -= 1; add(l)
while r > qr: remove(r); r -= 1
while l < ql: remove(l); l += 1
ans[qi] = cur # 현재 서로 다른 수의 개수
# 8074번: 2D 구간 합 쿼리 발췌
for i in range(1, n + 1):
for j in range(1, m + 1):
ps[i][j] = row[j-1] + ps[i-1][j] + ps[i][j-1] - ps[i-1][j-1]
# 쿼리: 포함-배제
ans = ps[r2][c2] - ps[r1-1][c2] - ps[r2][c1-1] + ps[r1-1][c1-1]
# 8075번: 최대 부분 직사각형 합 발췌
for r1 in range(n):
col_sum = [0] * m
for r2 in range(r1, n):
for c in range(m): col_sum[c] += grid[r2][c]
# 1D Kadane on col_sum
cur = 0
for v in col_sum:
cur += v
max_sum = max(max_sum, cur)
if cur < 0: cur = 0
# 8076번: D&C DP 최적화 핵심 발췌
def dc(lo, hi, opt_lo, opt_hi):
if lo > hi: return
mid = (lo + hi) // 2
# opt_lo ~ min(opt_hi, mid-1) 범위에서 최적점 탐색
best, opt = INF, opt_lo
for j in range(opt_lo, min(opt_hi, mid - 1) + 1):
c = prev[j] + range_cost(j, mid)
if c < best: best, opt = c, j
curr[mid] = best
dc(lo, mid - 1, opt_lo, opt)
dc(mid + 1, hi, opt, opt_hi)
max_sum = float('-inf')로 시작합니다.
- **D&C DP 단조성 가정:** 비용 함수가 Quadrangle Inequality를 만족해야 이 최적화가 유효합니다.