出题人解法:交换、符号、旋转与平移专用标记。 两种表示均为
程序与署名: std.cpp 实现出题人解法;Codex(GPT-6)负责实现整理、边界处理与证明说明。Codex(GPT-6)采用的仿射矩阵见 alternative.cpp 和并列方案题解。
一个标记依次表示:交换两坐标、分别改变符号、旋转、平移。用
标记保存交换标志、两个取反标志、旋转的正弦与余弦以及两个平移分量。叶节点初始仅保存对应坐标作为平移;节点无需维护区间坐标和,本题只查询单点并在最后输出全部点。
逐项应用新标记的操作,保持规范顺序:
- 新交换:交换旧平移分量和旧取反标志,翻转交换标志,将旧旋转的正弦取反。
- 新的单轴取反:取反对应平移分量、翻转对应符号标志,并将旧正弦取反。
- 新旋转:旋转旧平移向量,再用角度和公式合并正弦、余弦。
- 新平移:直接加到已变换的旧平移量上。
前两项使用反射与旋转的恒等式
按编号建树。整段覆盖时将新操作接到当前延迟标记之后;部分覆盖或单点查询时,将父标记接到两个子标记之后,再清空父标记。
保持不变量:每个标记恰好表示其子树尚未收到的、按时间排列的操作。正确的复合公式保持这一不变量;访问叶节点时,全部相关操作均已依次作用于其初始坐标,叶标记的平移量就是答案。最终遍历一次所有叶子即可输出最终状态。
建树与最终输出为
标记使用 long double ,输出八位小数。专用表示和矩阵表示都存在浮点舍入。随题的 checker.cpp 按每坐标绝对误差
各方案的五次重复计时与峰值内存记录见评测环境与性能。