长颈鹿累了,他开始做梦。
在梦中他下坠。他穿过草地,穿过打着转的羊群。他穿过星海,穿过漫天的火羽。
终于,他站在了一块屏幕前。屏幕上展示着某种类似楼梯的图样。
题目描述
我们首先给出一些关于楼梯的形式定义。
我们称一对正整数组成的二元组
- 若
且 ,则 。 - 若
且 ,则 。
对于一个楼梯
容易证明这一集合仍然是一个楼梯。对于一个楼梯
为了方便理解,我们接下来给出直观解释。我们在平面上可以将所有格子按从左到右
在这一解释下,若一个格子属于某个楼梯,且它上方和左方不是边界,则对应格子也属于这个楼梯。子楼梯就是生成格右下方区域格子所构成的非空楼梯,一个楼梯的边界格数是上边界或左边界上的总格数。
如下图,
长颈鹿看到屏幕上的楼梯后很好奇。他首先计算出了这一楼梯的边界格数
梦境时常变化,因此长颈鹿可能会有许多次这样的询问,楼梯也可能会发生变化。初始楼梯
- 给定正整数
和 ,在前 行的末尾插入 格。形式化地,对于 ,将 加入 。 - 给定正整数
和 ,在第 行后(包含第 行)的所有行行末尾删去 格,若不足则删空。形式化地,对于 ,将 从 中移除(不存在的则忽略)。 - 给定正整数
,撤销之前的 次操作,即将楼梯还原为 次操作前的状态,保证这 次操作均为询问或在行末尾插入。具体地,假设该操作为第 次操作,我们一定有 ,且第 次操作均为询问或在行末尾插入(即上述的第一种修改)。你只需要将楼梯还原为第 次操作前的状态即可(当然,你应该保留询问的输出)。
可以证明每次修改之后得到的集合仍然是一个楼梯。
输入格式
输入数据第一行包含一个正整数
接下来
+ a b
:在前 行的末尾插入 格。- a b
:在第 行后(包括第 行)的所有行行末尾删去 格,若不足则删空。R u
:撤销之前的 次操作,即将楼梯还原为 次操作前的状态。保证这 次操作存在且均为询问或在行末尾插入,即该行之前的 行均以+
或?
开头。? q
:询问是否有边界格数等于 的子楼梯,若有则给出任意合法生成格。保证 是当前楼梯边界格数的因子。
输出格式
对于每个询问(?
操作)输出一行。
如果存在边界格数等于 x y
,表示一个合法生成格是
样例一
input
18 + 5 1 + 2 1 ? 3 + 3 2 ? 4 ? 4 + 4 1 ? 3 R 3 - 2 2 ? 3 - 1 1 ? 2 ? 4 - 1 2 ? 1 - 9 9 ? 1
output
3 1 1 3 2 2 2 4 2 1 1 2 1 1 1 1 1 1
explanation
每次修改操作之后的楼梯如下图(排列方式同题目描述,省略了各格子的编号)。注意撤销操作实际只撤销了一个 +
操作。样例有多个合法解,给出的输出只是一种合法的输出。
样例二
见下发文件。
样例三
见下发文件。
样例四
见下发文件。
样例五
见下发文件。
样例六
见下发文件。
子任务
对于所有测试数据,
- 对于
+
和-
操作, 。 - 对于
R
操作,保证之前紧邻的 次操作存在且均为询问或在行末尾插入。 - 对于
?
操作, 且保证为当前楼梯边界格数的因子。
记 +
和 -
操作中 +
和 -
操作中
子任务1(10分):
子任务2(20分):
子任务3(10分):
子任务4(20分):
子任务5(10分):
子任务6(10分):保证 ? 操作在所有 + 和 - 操作之后。没有 R 操作。
子任务7(20分):无特殊限制。
提示
请注意选用合适的数据类型存储各结果。