P16089 [ICPC 2024 NAC] MountainCraft

题目描述

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