# 8045번: 중복 없는 서브배열 발췌
for r in range(n):
counts[arr[r]] = counts.get(arr[r], 0) + 1
if counts[arr[r]] == 1:
unique_cnt += 1
while unique_cnt > k:
counts[arr[l]] -= 1
if counts[arr[l]] == 0:
unique_cnt -= 1
l += 1
ans += (r - l + 1)
dp |= (dp << w) 형태로 일괄 갱신
# 8047번: 부분집합의 합 발췌
dp = 1
for val in w:
# 각 물건을 추가할 수 있는 상태들을 비트 시프트로 한 줄에 병렬 계산
dp |= (dp << val)
if (dp >> x) & 1:
print("YES")
m1, m2의 비용 함수값 대소를 비교해 볼록 골짜기 구간을 3분의 2씩 압축
# 8048번: 건물 높이 통일 발췌
while high - low > 2:
m1 = low + (high - low) // 3
m2 = high - (high - low) // 3
cost1 = get_cost(m1, h, c)
cost2 = get_cost(m2, h, c)
if cost1 < cost2:
high = m2
else:
low = m1
high - low <= 2 구간 도달 시 직접 최소값 평가 수행
- **비트 연산 적용 범위**: 목표 상수 $X$가 대단히 클 때 메모리 폭발에 주의 (소규모 $X \le 10^5$ 한정 활용)
- **오버플로우 대비**: $N=200,000$일 때 가짓수가 32비트 범위를 벗어나므로 변수 정수 스케일 유의