문제 링크
- http://icpc.me/17423
문제 출처
- 2019 선린 정올 5번
사용 알고리즘
- 스위핑
- 좌표압출
- 세그먼트 트리 with 레이지 프로퍼게이션
- 이분탐색
시간복잡도
- \[O(N log N log 1e6)\]
풀이
지금껏 풀어왔던 문제를 합친 느낌입니다.
먼저 BOJ2496 금강석(풀이)처럼 맵을 45도 회전시켜 각 직사각형의 변들이 x, y축에 평행하도록 만들어줍니다.
이제 최대 볼륨을 찾기 위해서 이분 탐색을 하는데, 결정 문제를 풀기 위해서 몇 가지를 처리해야 합니다.
- 현재 볼륨으로 인해 확장된 직사각형의 왼쪽/오른쪽/위/아래 좌표들을 모아서 압축을 해줍니다. 이 과정을 거치면 x, y좌표가 각각 40만 이하로 압축이 돼서 세그먼트 트리를 만들어도 메모리가 안전합니다.
- BOJ3392 화성지도비슷하게 스위핑을 해주면서 겹치는 구간이 있는지 판단을 해줍니다.
1번 과정에서 \(O(N log N)\), 2번 과정에서도 \(O(N log N)\), 이런 결정 문제를 \(O(log 1e6)\)번 풀어야 하기 때문에 \(O(N log N log 1e6)\)에 풀 수 있습니다.
전체 코드
1 |
|