P16089 [ICPC 2024 NAC] MountainCraft
题目描述
在 MountainCraft 这个电子游戏的元世界中,今天是个光辉灿烂的日子!顾名思义,MountainCraft 拥有一个广阔而充满探索乐趣的开放世界,遍布着巍峨的山脉。你在游戏中的化身在一个偏远的岛屿上醒来,凝视着地平线上的群山。
地平线的景色可以建模为一个笛卡尔平面,其中 $x$ 轴($y = 0$)将陆地与海洋分隔开。每座山峰用一个点 $(x, y)$ 表示,山体两侧的坡度分别为 $+1$ 和 $-1$,形成以该山峰为顶点的等腰直角三角形。
你的化身只能看到视口内的山体部分。山脉的可见边缘(即没有被其他山脉遮挡的部分)会用粗线渲染。如果山脉之间相互遮挡,则被遮挡的部分不会被渲染为粗线。山脉之间即使边缘没有相交,也可能发生遮挡。
:::align{center}

图 H.1:第一个样例输入中所有山脉出现后的情形。
:::
不幸的是,由于图形故障,山脉可能随时出现或消失。每次变化后,你需要知道当前视口中所有粗线渲染的总长度。
输入格式
输入的第一行包含两个整数 $q$($1 \le q \le 2 \cdot 10^5$)和 $w$($1 \le w \le 10^9$),其中 $q$ 是查询次数,$w$ 是视口的宽度。视口的范围是从 $0$ 到 $w$。
接下来的 $q$ 行,每行包含两个整数 $x$($0 \le x \le w$)和 $y$($0 < y \le 10^9$),表示某座山峰的顶点。如果 $(x, y)$ 对应的山脉当前是可见的,则该山脉会消失;否则,该山脉会变为可见。
输出格式
输出 $q$ 行。对于每次查询,按顺序输出一行一个实数,表示当前粗线渲染的总长度。如果答案与标准答案的绝对误差或相对误差不超过 $10^{-6}$,则视为正确。
说明/提示
在第一个样例中,前两座山脉相交于点 $(4.5, 0.5)$。该点以下的山脉部分不会被渲染为粗线。
在第二个样例中,左侧的山脉先出现,然后消失,再出现。右侧的山脉先出现,然后消失。
翻译由 DeepSeek V3.2 完成