P6466 分散层叠算法(Fractional Cascading)

题目背景

`Fractional Cascading` 算法,国内多译为“分散层叠”。 本题仅提供一个简单而经典的方式给算法验证正确性,原则上会尽量卡掉比较暴力的做法,但不保证乱搞一定无法通过。

题目描述

给出 $k$ 个长度为 $n$ 的**有序数组**。 现在有 $q$ 个查询 : 给出数 $x$,分别求出每个数组中大于等于 $x$ 的最小的数(非严格后继)。 若后继不存在,则定义为 $0$。 每个查询的答案定义为 $k$ 个后继的**异或和**。 你需要**在线地**回答这些询问。 由于输出太多不好,给出参数 $d$,你只需要输出编号为 $d$ 的倍数的询问的答案。询问从 $1$ 开始编号。

输入格式

输出格式

说明/提示

#### 样例解释 对于样例 1,解密后的数据为: ```cpp 6 3 8 1 1 4 6 7 10 20 2 3 8 11 14 18 5 9 12 13 15 17 20 18 15 13 10 8 5 2 ``` --- #### 数据规模的与约定 - 对于 $20\%$ 的数据,$k\leq 10$,$n\leq 1000$,$q\leq 1000$。 - 对于 $50\%$ 的数据,$k\leq 10$,$q\leq 2\times 10^5$。 - 对于 $100\%$ 的数据,$1 \leq k\leq 100$,$2\leq n\leq 10^4$,$q\leq 5\times 10^5$,$1\leq d\leq 10$,解密后输入中出现的数均在 $[1,5\times 10^8)$ 范围内。