#HK4783. 「RMI 2019」Lucky Numbers

「RMI 2019」Lucky Numbers

题目描述

题目译自 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(前三位)的不含 1313 的非负整数数量,结果为 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