만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

MountainCraft

시간 제한5초메모리 제한2048 MB

요약
산봉우리가 나타나거나 사라질 때마다 뷰포트 [0, w]에서 보이는 산의 윤곽선 총 길이를 구합니다.
난이도

어려움10점 중 9점

유형
세그먼트 트리, 기하, 구현
정답자
아직 제출이 없습니다

문제

기분 좋은 날이다. 비디오 게임 메타월드 MountainCraft는 탐험할 산이 넓게 펼쳐진 오픈 월드다. 게임 속 아바타는 외딴 섬에서 깨어나 수평선의 산들을 바라본다.

수평선은 직교 좌표평면으로 나타낸다. xx축(y=0y = 0)이 육지와 바다를 나눈다. 각 산의 봉우리는 점 (x,y)(x, y)이다. 산의 양쪽 면은 기울기 +1+1과 −1-1을 가지며, 봉우리를 꼭대기로 하는 삼각형을 이룬다.

아바타는 뷰포트 안에 있는 산의 부분만 볼 수 있다. 다른 산과 겹치지 않는 산의 보이는 모서리는 굵게 렌더링된다. 산이 겹치는 부분은 굵게 렌더링되지 않는다. 모서리가 서로 교차하지 않아도 산은 겹칠 수 있다.

그림 H.1: 모든 산이 나타난 후의 첫 번째 입력.

그래픽 오류 때문에 산이 나타났다가 사라질 수 있다. 변화가 생길 때마다 현재 뷰포트에 보이는 굵은 선의 총 길이를 구하라.

입력

첫 줄에 두 정수 qq (1≤q≤2⋅1051 \leq q \leq 2 \cdot 10^{5})와 ww (1≤w≤1091 \leq w \leq 10^{9})가 주어진다. qq는 질의 수이고 ww는 뷰포트의 너비다. 뷰포트는 0에서 ww까지 펼쳐진다.

다음 qq개 줄에는 어떤 산의 봉우리를 나타내는 두 정수 xx (0≤x≤w0 \leq x \leq w)와 yy (0<y≤1090 < y \leq 10^{9})가 주어진다. (x,y)(x, y)가 보이는 산의 봉우리이면 그 산이 사라진다. 그렇지 않으면 그 산이 나타난다.

출력

qq개 줄을 출력한다. 각 질의마다 순서대로, 렌더링되는 굵은 선의 총 길이를 한 수로 출력한다. 절대 오차 또는 상대 오차가 10−610^{-6} 이내이면 정답으로 인정한다.

힌트

첫 번째 입력에서 처음 두 산은 (4.5,0.5)(4.5, 0.5)에서 교차한다. 그 교점 아래에 있는 산의 부분은 굵게 렌더링되지 않는다.

두 번째 입력에서 왼쪽 산은 나타났다가 사라지고 다시 나타난다. 오른쪽 산은 나타났다가 사라진다.

예제2

  1. 예제 1

    입력
    3 10
    3 2
    7 3
    9 6
    
    예상 출력
    5.656854
    12.727922
    12.727922
    
  2. 예제 2

    입력
    5 100
    31 41
    59 26
    31 41
    59 26
    31 41
    
    예상 출력
    101.823376
    120.208153
    73.539105
    0.000000
    101.823376