#L4783. 「RMI 2019」Lucky Numbers

    ID: 3985 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>数位动态规划矩阵快速幂线段树自动机状态转移组合计数

「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 (1N1051 \leq N \leq 10^5, 0Q1040 \leq Q \leq 10^4),分别表示数字 XX 的位数和你需要处理的操作数量。

第二行输入数字 XX

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

  • 如果 t=1t=1,则该行描述一个查询,后面跟着两个整数 radixL\texttt{radixL}radixR\texttt{radixR} (1radixLradixRN1 \leq \texttt{radixL} \leq \texttt{radixR} \leq N),表示你需要考虑的子字符串的左右边界。
  • 如果 t=2t=2,则该行描述一个更新,后面跟着两个整数 radix\texttt{radix}newDigit\texttt{newDigit} (1radixN1 \leq \texttt{radix} \leq N, 0newDigit90 \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 个小于或等于 560484560484 的非负整数,其十进制表示中不包含子字符串 1313。注意,这包括数字 00

初始时,XX560484560484

  • 修改 2 6 4 后,XX 变为 560484560484
  • 修改 2 1 4 后,XX 变为 460484460484
  • 修改 2 5 6 后,XX 变为 460464460464
  • 修改 2 6 1 后,XX 变为 460461460461
  • 修改 2 3 6 后,XX 变为 466461466461
  • 查询 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 变为 766461766461

数据范围与提示

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

子任务 分值 附加限制
1 14 1N6,Q=01 \leq N \leq 6, Q=0
2 1N18,Q=01 \leq N \leq 18, Q=0
3 9 1N104,0Q1041 \leq N \leq 10^4, 0 \leq Q \leq 10^4,所有操作均为类型 11
4 27 1N105,0Q1041 \leq N \leq 10^5, 0 \leq Q \leq 10^4,所有操作均为类型 11
5 9 1N104,0Q1041 \leq N \leq 10^4, 0 \leq Q \leq 10^4
6 27 1N105,0Q1041 \leq N \leq 10^5, 0 \leq Q \leq 10^4