문제
풀이
레이저로 전함을 부수는 것은 다르게 생각하면 전함이 레이저에 맞아 부서지는 것으로 생각할 수 있습니다. 전함이 어떤 레이저에 의해서 부서졌는지는 전함을 지나가는 레이저 중 인덱스가 가장 작은 것을 구하면 알 수 있습니다.
수평 레이저와 수직 레이저를 분리해서 생각하면 각 레이저를 하나의 정수로 나타낼 수 있으므로 레이저와 인덱스를 매핑하여 세그먼트 트리를 이용하면 최솟값을 빠르게 구할 수 있습니다.
각 축에 따라 레이저 좌표를 압축한 뒤 전함이 포함하고 있는 레이저의 구간을 구해서 해당 구간의 레이저의 인덱스의 최솟값을 구해 해당 레이저가 부순 가장 큰 무게를 업데이트 해 주면 됩니다.
테스트 케이스당 시간 복잡도는 $\mathcal{O}(k\log l)$입니다.
코드
1 | |