문제 링크
- http://icpc.me/19851
사용 알고리즘
- 세그먼트 트리
시간복잡도
- $O(Q \log N)$
풀이
구간에 있는 빵을 뒤집는 쿼리가 없는 문제를 먼저 해결해봅시다.
구간 $[a,b]$에 최소한의 괄호를 더 추가해서 올바른 괄호 문자열을 만드는 문제고, Prefix Minimum과 Range Sum을 관리해야 한다는 것은 쉽게 알 수 있습니다. 구간의 Prefix Minimum을 $mn$, Range Sum을 $sum$이라고 하면, 우리가 추가해야 하는 괄호의 개수는 $sum + 2\cdot\min(mn, 0)$입니다. 이러한 형태의 값은 세그먼트 트리를 이용해 쉽게 계산할 수 있습니다.
구간에 있는 빵을 뒤집는 것은 구간에 있는 모든 원소에 -1
을 곱하는 것과 같습니다. 그러므로 Prefix Minimum 뿐만 아니라 Prefix Maximum도 관리해야 구간에 -1
을 곱하는 쿼리도 올바르게 처리할 수 있습니다. 간단한 Lazy Propagation 문제입니다.
전체 코드
1 |
|