bzoj#P4447. [SCOI2015] 小凸解密码

[SCOI2015] 小凸解密码

题目描述

小凸得到了一个密码盘,密码盘被等分成 nn 个扇形,每个扇形上有一个数字 (09)(0 \sim 9),和一个符号 (( +* ))。密码盘解密的方法如下:

首先,选择一个位置开始,顺时针地将数字和符号分别记在数组 AA 和数组 CC 中。解密的方法如下:

  • B0=A0B_0 = A_0
  • x>0x > 0 时:
    • CxC_x+Bx=(Ax+Ax1)%10B_x = (A_x + A_{x - 1}) \% 10
    • CxC_x*Bx=(Ax×Ax1)%10B_x = (A_x \times A_{x - 1}) \% 10

操作完成后,可以得到一个长度为 nn 的数组 BB,然后以 B0B_0 为起点将 BB 数组顺时针写成一个环,解密就完成了,称得到的环为答案环。

现在小凸得到了一份指令表,指令表上有 2 种操作。一种指令是修改操作,即改变原来密码盘上一个位置的数字和符号。另一种指令是询问操作,具体如下:

  • 首先从指令给出的位置开始完成解密,得到答案环。
  • 答案环上会有一些 00 连在一起,将这些连在一起的 00 称为零区间,找出其中距离 B0B_0 最远的那个零区间,输出这个距离(零区间和 B0B_0 的距离定义为:零区间内所有 00B0B_0 距离中的最小值)。

输入格式

第一行包含两个整数 n,mn, m,代表密码盘大小和指令个数。

接下来 nn 行,每行包含一个整数和一个字符,按顺时针顺序给出了密码盘上的数组和符号。

接下来 mm 行,依次给出指令。每行第一个整数代表指令类型:

  • 若第一个整数为 1,代表本行对应指令为修改操作,之后依次有两个整数 pos,numpos, num 和一个字符 opt\rm opt,分别代表修改的位置,以及修改后该位置的数字和字符。
  • 若第一个整数为 2,代表本行对应指令位询问操作,之后有一个整数 pospos,代表本次操作中解密的开始位置。

密码盘上的位置标号为 00n1n - 1

数据保证合法,即数据中 0pos<n,0num90 \leq pos < n, 0 \leq num \leq 9opt\rm opt+*

输出格式

对于每个询问操作 11 行,输出答案,若答案环上没有 00,输出 −1

5 8
0 *
0 *
0 *
0 *
0 *
2 0
1 0 1 +
1 2 1 +
2 3
1 1 1 +
1 3 1 +
1 4 1 +
2 4
0
2
-1

样例解释

  • 对于第 11 个询问,答案环为 {0,0,0,0,0}\{0, 0, 0, 0, 0\},仅有 11 个零区间,且 B0B_0 在其中,所以距离是 00
  • 对于第 22 个询问,答案环为 {0,0,1,0,1}\{0, 0, 1, 0, 1\},有 22 个零区间,[0,1][0, 1]B0B_0 距离是 00[3,3][3, 3]B0B_0 距离是 22,故答案为 22
  • 对于第 33 个询问,答案环为 {1,2,2,2,2}\{1, 2, 2, 2, 2\},没有零区间,答案是 −1

数据规模与约定

  • 对于 20%20 \% 数据,5n105,5m10005 \leq n \leq 10^5, 5 \leq m \leq 1000
  • 对于 60%60 \% 数据,5n105,5m1045 \leq n \leq 10^5, 5 \leq m \leq 10^4
  • 对于 100%100 \% 数据,5n,m1055 \leq n, m \leq 10^5