ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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. 코드

    더보기
    carbon.now.sh
Designed by Tistory.