BOJ 31956 MountainCraft
BOJ 31956 MountainCraft
문제 내용
최초에 비어 있는 평면에 산을 추가하고 제거하는 쿼리가 주어집니다. 매 쿼리마다, 산들이 이루는 맨 위쪽 테두리의 길이를 구하세요.
산은 산꼭대기의 좌표로 정의되며, 산꼭대기를 나타내는 점으로부터 왼쪽으로 기울기가 , 오른쪽으로 기울기가 인 반직선을 그어 축과 만나는 지점에서 종료됩니다.
입력
첫 줄에는 쿼리의 개수 와 평면의 가로 길이 가 주어집니다. (, ) 평면의 좌표는 에서 까지가 됩니다.
다음 줄에는 각각 추가하거나 제거할 산꼭대기의 좌표 가 주어집니다. (, ) 현재 그 산꼭대기가 존재하지 않는다면 추가하고, 존재한다면 제거합니다.
출력
줄에 걸쳐서 각 쿼리 이후의 문제의 정답을 출력합니다. 실제 정답과 절대 또는 상대 오차가 이하이면 통과됩니다.
문제 풀이
스포일러
여러 개의 산이 어디서 만나고 어디서 겹치고 어디서 끊어지는지는 중요하지 않다는 관찰이 필요합니다. 산이 차지하는 좌표의 범위를 알면 그 범위의 총 길이 가 정답입니다.
그 뒤에는, 모든 쿼리의 산의 시작점과 끝점의 좌표를 모아서 좌표압축을 한 뒤에 length of min 레이지 세그먼트 트리(속칭 화성지도 세그)를 사용하면 됩니다.
Last updated on