-
[Baekjoon - 8982] 수족관 1문제 풀이/Baekjoon Online Judge 2023. 6. 18. 00:04
난이도: Gold III
태그
더보기- Implementation
- Sweeping?
풀이
1. 선분보다 더 간단한 표현법이 없을까?
더보기수족관은, 위에서 내려다볼 때 바닥이 모두 보이는 형태입니다.
즉, 하나의 \( x \)좌표는 최대 하나의 수평선분이 차지하고 있다는 의미입니다.
// 엄밀히는, 수평선분을 \( [x_1, x_2) \)의 반열린 구간으로 정의할 때입니다. 앞으로도 이 문제에서는 수평선분을 반열린구간으로 정의하겠습니다.
그러니, \( H_x \) = 좌표가 \( x \)인 위치의 깊이 로 수족관의 바닥 상태를 더 간단하게 저장할 수 있습니다.
2. 각각의 구멍은, 특정 위치에 있는 물을 얼마나 빼낼 수 있을까?
더보기\( [x_1, x_2) \)의 수평 선분에 구멍이 뚫렸다고 해봅시다.
자명하게, \( [x_1, x_2) \) 위치에 있는 물은 모두 빠지게 됩니다.
하지만, 다른 위치에 있는 물들도 같이 빠질 수 있게 됩니다.
위치 \( x \)에서 물이 빠지는 양을 \( A_x \)라고 합시다. 그럼, 우리는 이 \( A_x \)의 값을 구하면 됩니다.
1. \( x_1 \le x < x_2 \)일 때의 \( A_x \)는 자명히 \( H_x \)가 됩니다.
2. 아래 그림을 생각해보면, \( x < x_1 \)일 때의 \( A_x \)는 \( \min\limits_{x < x_2} H_x \)가 됩니다.
3. \( x_2 \le x \)도 2와 비슷하게 계산할 수 있습니다.
2와 3은, \( x_1 \)에서 멀어지는 방향으로 구하면 각 위치별로 \( O(1) \), 총 \( O(N) \)에 구할 수 있습니다.
3. 최종 답은?
더보기각각의 구멍은 독립적으로 작용하므로, \( K \)개의 구멍에 대한 \( \max A_x \)를 구할 수 있습니다.
그럼, 그 위치에서 남게 되는 물은 빼내지 못한 물의 양, 즉 \( H_x - \max A_x \)가 되겠죠.
이를 모두 더해주면 됩니다.
시간 복잡도는, 구멍의 개수가 최대 2500개이고, 위치의 개수는 최대 40000이므로 정확히 1억이 나옵니다.
4. 코드
'문제 풀이 > Baekjoon Online Judge' 카테고리의 다른 글
[Baekjoon - 25682] 체스판 다시 칠하기 2 (1) 2024.01.10 [Baekjoon - 21605] 아름다운 수열 (0) 2023.06.20 [Baekjoon - 17502] 클레어와 팰린드롬 (0) 2023.06.05 [Baekjoon - 16894] 약수 게임 (0) 2023.06.03 [Baekjoon - 10037] Decorating the Pastures (0) 2023.04.17