#P16089. [ICPC 2024 NAC] MountainCraft

[ICPC 2024 NAC] MountainCraft

题目描述

在 MountainCraft 这个电子游戏的元世界中,今天是个光辉灿烂的日子!顾名思义,MountainCraft 拥有一个广阔而充满探索乐趣的开放世界,遍布着巍峨的山脉。你在游戏中的化身在一个偏远的岛屿上醒来,凝视着地平线上的群山。

地平线的景色可以建模为一个笛卡尔平面,其中 xx 轴(y=0y = 0)将陆地与海洋分隔开。每座山峰用一个点 (x,y)(x, y) 表示,山体两侧的坡度分别为 +1+11-1,形成以该山峰为顶点的等腰直角三角形。

你的化身只能看到视口内的山体部分。山脉的可见边缘(即没有被其他山脉遮挡的部分)会用粗线渲染。如果山脉之间相互遮挡,则被遮挡的部分不会被渲染为粗线。山脉之间即使边缘没有相交,也可能发生遮挡。

:::align{center}

图 H.1:第一个样例输入中所有山脉出现后的情形。 :::

不幸的是,由于图形故障,山脉可能随时出现或消失。每次变化后,你需要知道当前视口中所有粗线渲染的总长度。

输入格式

输入的第一行包含两个整数 qq1q21051 \le q \le 2 \cdot 10^5)和 ww1w1091 \le w \le 10^9),其中 qq 是查询次数,ww 是视口的宽度。视口的范围是从 00ww

接下来的 qq 行,每行包含两个整数 xx0xw0 \le x \le w)和 yy0<y1090 < y \le 10^9),表示某座山峰的顶点。如果 (x,y)(x, y) 对应的山脉当前是可见的,则该山脉会消失;否则,该山脉会变为可见。

输出格式

输出 qq 行。对于每次查询,按顺序输出一行一个实数,表示当前粗线渲染的总长度。如果答案与标准答案的绝对误差或相对误差不超过 10610^{-6},则视为正确。

3 10
3 2
7 3
9 6
5.656854
12.727922
12.727922
5 100
31 41
59 26
31 41
59 26
31 41
101.823376
120.208153
73.539105
0.000000
101.823376

提示

在第一个样例中,前两座山脉相交于点 (4.5,0.5)(4.5, 0.5)。该点以下的山脉部分不会被渲染为粗线。

在第二个样例中,左侧的山脉先出现,然后消失,再出现。右侧的山脉先出现,然后消失。

翻译由 DeepSeek V3.2 完成