CSPSMK01D. 子串

提交4 通过2
通过率50%
文件IO启用
输入文件sub.in
输出文件sub.out
时间限制300ms
内存限制512MiB
    ID: 14526 传统题 文件IO 输入文件:sub.in 输出文件:sub.out 300ms 512MiB 尝试: 4 已通过: 2 难度: 提高 上传者: 标签>C++CSP-S考前模拟

题目描述

题目描述

本题中下标是 1-indexed\texttt{1-indexed} 的。

给定一个 nn 位数 xx。你需要计算不大于 xx 的非负整数中,有多少非负整数在十进制表示下不含 1313 作为(连续)子串。

额外地,有 qq 次操作:

  • 1\texttt{1} ll rr:将 xx 视为字符串,将 xx 的子串 xlxl+1…xrx_lx_{l+1}\ldots x_r 视为数字 yy(y=xlxl+1…xr‾y=\overline{x_lx_{l+1}\ldots x_r})。计算不大于 yy 的非负整数中,有多少非负整数在十进制表示下不含 1313 作为(连续)子串。

  • 2\texttt{2} pp dd:将 xx 的第 pp 位替换成 dd。

以上所有操作答案对 (109+7)(10^9+7) 取模。

注意 xx 和 yy 可能有前导零。所有的答案都要对 (109+7)(10^9+7) 取模。

输入格式

第一行,两个整数 n,qn,q。

第二行,非负整数 xx。

接下来 qq 行,每行三个非负整数描述一个操作,格式见上。

输出格式

所有的答案都要对 (109+7)(10^9+7) 取模。

第一行,输出一个非负整数,表示不大于 xx 的非负整数中,有多少非负整数在十进制表示下不含 1313 作为子串。

接下来,对于每个 11 操作输出一行一个非负整数,表示答案。

输入样例

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

说明提示

子任务

输入样例 #2

1 0
7

输出样例 #2

8

输入样例 #3

6 0
349434

输出样例 #3

325354

数据范围

对于 100%100\% 的数据,保证:

  • 1≤n≤1051\le n\le 10^5;

  • 0≤q≤1040\le q\le 10^4;

  • 1≤l≤r≤n1\le l\le r\le n;

  • 1≤p≤n1\le p\le n,0≤d≤90\le d\le 9。

编号 n≤n\le qq 特殊性质 分值
11 66 =0=0 1414
22 1818
33 10410^4 ≤104\le 10^4 A 99
44 10510^5 2727
55 10410^4 99
66 10510^5 2727

特殊性质 A:只有操作 11。