loj#P4783. 「RMI 2019」幸运数字

「RMI 2019」幸运数字

题目描述

题目译自 Romanian Master of Informatics 2019 Day1 T2 「Lucky Numbers

众所周知,在某些文化中,数字 1313 被认为会带来厄运。

现在,给你一个由 NN 个数字组成的数字 XX。你需要计算出有多少个小于或等于 XX 的数字,在它们的十进制表示中不包含子字符串 1313。由于答案可能会非常大,你需要将结果对 10000000071000000007 取模。

此外,你还需要处理 QQ 个操作,操作分为两种类型:

  1. Query(radixL, radixR)\texttt{Query(radixL, radixR)}:计算有多少个小于或等于子字符串 substr(X, radixL, radixR)\texttt{substr(X, radixL, radixR)} 的数字,在十进制表示中不包含子字符串 1313。同样,由于答案可能很大,结果需对 10000000071000000007 取模。这里,substr(X, L, R)\texttt{substr(X, L, R)} 表示 XX 从从左到右第 LL 个数字开始到第 RR 个数字结束的子字符串。
  2. Update(radix, newDigit)\texttt{Update(radix, newDigit)}:将 XX 的某个数字修改掉。具体来说,将从左到右第 radix\texttt{radix} 个数字改为 newDigit\texttt{newDigit}

注意:数字 XX 的索引从 11 开始。

注意:数字 XX 及其子字符串 substr(x, l, r)\texttt{substr(x, l, r)} 可能包含前导零。

输入格式

输入的第一行包含两个整数 NNQQ (1N105,0Q104)(1 \leq N \leq 10^5, 0 \leq Q \leq 10^4),分别表示数字 XX 的位数和你需要处理的操作数量。

第二行输入数字 XX

接下来的 QQ 行描述需要处理的查询。每行以一个整数 tt (1t2)(1 \leq t \leq 2)开头,表示操作的类型:

  • 如果 t=1t=1,则该行描述一个查询,后面跟着两个整数 radixL\texttt{radixL}radixR\texttt{radixR} $(1 \leq \texttt{radixL} \leq \texttt{radixR} \leq N)$,表示你需要考虑的子字符串的左右边界。
  • 如果 t=2t=2,则该行描述一个更新,后面跟着两个整数 radix\texttt{radix}newDigit\texttt{newDigit} $(1 \leq \texttt{radix} \leq N, 0 \leq \texttt{newDigit} \leq 9)$,表示需要更改的数字位置和新值。

输出格式

输出的第一行包含一个整数,表示有多少个小于或等于 XX 的非负整数,在十进制表示中不包含子字符串 1313。由于答案可能很大,需对 10000000071000000007 取模。

然后,对于每个类型 11 的查询,在单独一行中输出答案,并对 10000000071000000007 取模。

6 10
560484
2 6 4
2 1 4
2 5 6
2 6 1
2 3 6
1 3 6
1 1 3
1 6 6
1 2 6
2 1 7
528145
6228
452
2
63454

样例中有 528145528145 个小于或等于 560484 的非负整数,其十进制表示中不包含子字符串 1313。注意,这包括数字 00

  • 初始时,XX 为 560484。
  • 修改 2 6 4 后,XX 变为 560484
  • 修改 2 1 4 后,XX 变为 460484。
  • 修改 2 5 6 后,XX 变为 460464。
  • 修改 2 6 1 后,XX 变为 460461
  • 修改 2 3 6 后,XX 变为 466461。
  • 查询 1 3 6 要求计算小于或等于 64616461 的非负整数中有多少个不含子字符串 1313,结果为 62286228
  • 查询 1 1 3 要求计算小于或等于 466466(前三位)的不含 13 的非负整数数量,结果为 452452
  • 查询 1 6 6 要求计算小于或等于 11(第 66 位)的非负整数中不含 1313 的数量,结果为 22(即 0011)。
  • 查询 1 2 6 要求计算小于或等于 6646166461(第 2266 位)的非负整数中不含 1313 的数量,结果为 6345463454
  • 修改 2 1 7 后,XX 变为 766461。

数据范围与提示

详细子任务附加限制及分值如下表所示。

子任务 分值 附加限制
11 1N6,Q=01 \leq N \leq 6, Q=0 1414
22 1N18,Q=01 \leq N \leq 18, Q=0 1414
33 1N104,0Q1041 \leq N \leq 10^4,0 \leq Q \leq 10^4,所有操作均为类型 1 99
44 1N105,0Q1041 \leq N \leq 10^5,0 \leq Q \leq 10^4,所有操作均为类型 1 2727
55 1N104,0Q1041 \leq N \leq 10^4,0 \leq Q \leq 10^4 99
66 1N105,0Q1041 \leq N \leq 10^5,0 \leq Q \leq 10^4 2727