A3892 「PA 2018 Final」Nowy kontrakt 2

暂无评定 传统题 ICPC 上传者
时间限制8000ms
内存限制512MiB
通过 / 提交0/0

A3892「PA 2018 Final」Nowy kontrakt 2

暂无评定 传统题 ICPC 上传者
时间限制8000ms
内存限制512MiB
通过 / 提交0/0

题目描述

题目译自 PA 2018 Final Nowy kontrakt 2

你的游戏仍然在市场上大获成功,因此推出续集只是时间问题。不幸的是,你与著名科幻作家的合同刚刚到期,你必须协商一份新合同。当然,作者的律师提出了过高的要求,而且他们经常改变主意。

合同规定,对于你计划发行的 NN 款游戏中的每一款,你将支付一笔用 MM 位二进制数表示的金额(可能包含前导零)。当然,律师们预见到,就像之前的作品一样,这些游戏的收入会越来越多,因此他们要求这些金额构成一个严格递增的序列。每个金额必须是正数。

复杂的税务规定导致某些数字的某些位必须为 00,这些位称为固定位。其他位是不固定的(我们用 ? 表示),你可以自由设定它们的值。位的状态(固定/不固定)可能会变化,有时你必须准备新合同,以最小化支付给作者的总金额。

你将收到两种类型的指令(部分加密,以强制立即找到答案,即所谓的强制在线):

  • 1 r’ c’\texttt{1 r' c'} $(0 \leq r^{\prime} \leq N-1, 0 \leq c^{\prime} \leq M-1)$,令 r=(r′+X) mod Nr = (r^{\prime} + X) \bmod N 和 c=(c′+X) mod Mc = (c^{\prime} + X) \bmod M,其中 XX 是上次给出的非 −1-1 的答案(如果还未有此类答案,则 X=0X=0)。在第 rr 个数字中,第 cc 个位的状态会改变,从固定变为不固定,或从不固定变为固定。游戏编号从 00 到 N−1N-1。位编号从 00 到 M−1M-1,从左到右(即从最高有效位到最低有效位)。
  • 2\texttt{2} ,找到支付给作者的 NN 个金额的最小可能总和,并输出结果对 109+710^{9}+7 取模的值。如果无法满足给定条件,输出 −1-1。

初始时,所有位都是固定的(即值为 00)。

你能解决这个问题吗?请记住,这涉及到巨大的金钱!

输入格式

输入的第一行包含三个整数 N,M,QN, M, Q $(1 \leq N \leq 1000, 1 \leq M \leq 10^{9}, 1 \leq Q \leq 500000)$,分别表示游戏数量、每个报酬的位数以及要处理的查询数量。

接下来的 QQ 行包含查询,格式如任务描述中所述。

对于类型 1 的查询,满足 0≤r′≤N−10 \leq r^{\prime} \leq N-1,0≤c′≤M−10 \leq c^{\prime} \leq M-1。

至少有 11 个、最多有 10001000 个类型 2 的查询。

输出格式

对于每个类型 2 的查询,输出一个数字,表示给定场景下支付给作者的最小总报酬对 109+710^{9}+7 取模的结果,如果可以满足给定条件的话。否则输出 −1-1。

3 4 14
1 0 0
1 1 0
1 2 0
2
1 1 2
2
1 2 1
2
1 0 2
2
1 0 1
2
1 0 3
2

-1
-1
30
-1
7
21

样例中使用了输入的数字 rr 和 cc(而非加密的 r′r^{\prime} 和 c′c^{\prime}),其形式如下:

3 4 14
1 0 0
1 1 0
1 2 0
2
1 1 2
2
1 2 1
2
1 0 0
2
1 0 3
2
1 1 2
2

我们有 N=3N=3 款游戏,每笔报酬是 44 位二进制数(可能包含前导零)。前几个查询易于解密,因为尚未有类型 2 查询的非 −1-1 答案,所以 X=0X=0,即 r=r′r=r^{\prime} 和 c=c′c=c^{\prime}。

$\begin{array}{ccccccccccccccccc} \texttt{0000} & & \texttt{?000} & & \texttt{?000} & & \texttt{?000} & & & & \texttt{?000} & & & & \texttt{?000} & & \\ \texttt{0000} & \rightarrow & \texttt{0000} & \rightarrow & \texttt{?000} & \rightarrow & \texttt{?000} & \rightarrow & \texttt{(-1)} & \rightarrow & \texttt{?0?0} & \rightarrow & \texttt{(-1)} & \rightarrow & \texttt{?0?0} & \rightarrow & \texttt{(30)} \\ \texttt{0000} & & \texttt{0000} & & \texttt{0000} & & \texttt{?000} & & & & \texttt{?000} & & & & \texttt{??00} & & \\ \end{array}$

查询结果为 3030,因为最优(也是唯一可能的)金额为 100021000_{2}、101021010_{2} 和 110021100_{2}。这些数字确实是正数且严格递增。总和为 8+10+12=308 + 10 + 12 = 30。