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

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