luogu#P9711. [KMOI R1] 五五五五(Hard)

[KMOI R1] 五五五五(Hard)

题目背景

“事类相推,各有攸归,故枝条虽分而同本干知,发其一端而已。又所析理以辞,解体用图,庶亦约而能周,通而不黩,览之者思过半矣。”——刘徽

题目描述

小宋有一个序列 A={a1,a2,an}A=\{a_1,a_2\dots,a_n\},其中 i[1,n],ai[0,9]\forall i\in [1,n],a_i\in[0,9]

对于 1lrn1\le l\le r\le n,他记 f(l,r)f(l,r) 等于 ala(l+1)ar\overline{a_la_{(l+1)}\dots a_r} 的末尾连续 55 的个数。

例如:对于序列 a={1,1,4,5,1,4}a=\{1,1,4,5,1,4\}f(2,4)=1,f(1,3)=0f(2,4)=1,f(1,3)=0

不过小宋会对这个序列不断地操作,具体地,他会做以下操作:

  • (1,x,y)(1,x,y):将第 xx 个数改为 yyx[1,n],y[0,9]x\in[1,n],y\in[0,9])。

  • 22: 将序列 aa 反转,例如 {1,1,4,5}\{1,1,4,5\} 反转之后就是 {5,4,1,1}\{5,4,1,1\}

  • 33:对序列进行询问。

  • (4,l,r)(4,l,r):对序列进行询问。

对于每一种操作 33,请你输出:

$$\Big(\sum\limits_{l=1}^ {n}\sum\limits_{r=l}^{n} f(l,r)\Big) \bmod 10^9+7$$

对于每一个操作 44,请你输出:

(i=lrai)mod109+7\Big(\sum\limits_{i=l}^{r}a_i\Big) \bmod 10^9+7

输入格式

第一行两个正整数 n,qn,q,表示序列的数个数和询问的个数。

第二行 nn 个整数 a1,a2,ana_1, a_2,\dots a_n,表示序列 AA

接下来 qq 行,每行一个或三个正整数,表示一次操作。

输出格式

对于每一次操作 33 和操作 44,输出答案。

3 4
1 5 5
1 3 3
3
1 1 5
4 1 3
2
13
6 5
1 1 4 5 1 4
3
2
3
1 1 5
4 1 4
4
3
15

提示

样例 11 解释:

操作 操作后的序列 答案
(1,3,3)(1,3,3) {1,5,3}\{1,5,3\} //
33 // 22
(1,1,5)(1,1,5) {5,5,3}\{5,5,3\} //
(4,1,3)(4,1,3) // 1313

样例 22 解释:

操作 操作后的序列 答案
33 // 44
22 {4,1,5,4,1,1}\{4,1,5,4,1,1\} //
33 // 33
(1,1,5)(1,1,5) {5,1,5,4,1,1}\{5,1,5,4,1,1\} //
(4,1,4)(4,1,4) // 1515

数据范围

测试点编号 nn\le qq\le 特殊性质
11 100100 //
2,32,3 10310^3 A\mathbf{A}
44 B\mathbf{B}
5105\sim10 2×1052\times 10^5 //
111311\sim13 A\mathbf{A}
14,1514,15 //
161816\sim18 5×1055\times 10^5 B\mathbf{B}
192519\sim25 //

特殊性质 A:\mathbf{A}: 没有操作 22

特殊性质 B:\mathbf{B}: 没有操作 33

对于 100%100\% 的数据:1n5×1051\le n\le 5\times 10^51q5×1051\le q\le 5\times 10^5

i[1,n]\forall i\in [1,n],满足 ai[0,9]a_i\in[0,9]