#AG0405006. 数列分块练习3

数列分块练习3

题目描述

给定一个长度为 nn 的数列 a1,a2,,ana_1, a_2, \ldots, a_n

接下来有 mm 次操作,操作分为如下两种类型:

  • 1 l r x:将下标区间 [l,r][l, r] 范围内的所有数字(即 al,al+1,,ara_l, a_{l+1}, \ldots, a_r)的数值都增加 xx
  • 2 l r x:将下标区间 [l,r][l, r] 范围内的所有数字(即 al,al+1,,ara_l, a_{l+1}, \ldots, a_r)的数值都乘以 xx
  • 3 p:查询 apa_p 的数值,由于 apa_p 的数值可能非常大,所以你只需要输出 ap mod 10007a_p \text{ mod } 10007 的结果即可。

对于每次查询操作,你需要输出对应的结果。

输入格式

第一行,一个整数 n(1n105)n(1 \le n \le 10^5)

第二行,nn 个整数 a1,a2,,an(1ai1000)a_1, a_2, \ldots, a_n(1 \le a_i \le 1000),表示初始时数列中每个元素的数值。

第三行,一个整数 m(1m105)m(1 \le m \le 10^5),表示操作次数。

接下来 mm 行,每行包含一次操作:

  • 1 l r x1lrn,1x10001 \le l \le r \le n, 1 \le x \le 1000);或
  • 2 l r x1lrn,1x10001 \le l \le r \le n, 1 \le x \le 1000);或
  • 3 p1pn1 \le p \le n)。

输出格式

对于每次查询操作 3 p,输出一行,包含一个整数,表示 ap mod 10007a_p \text{ mod } 10007 的结果。

样例

5
1 2 3 4 5
6
3 3
2 1 3 2
3 3
1 2 5 3
3 3
3 5
3
6
9
8

说明/提示

样例解释

  • 初始时,数列为 {1,2,3,4,5}\{ 1, 2, 3, 4, 5 \}
  • 11 次操作:a3=3a_3 = 3
  • 22 次操作:将 a1,a2,a3a_1, a_2, a_3 各乘以 22,数列变为 {2,4,6,4,5}\{ 2, 4, 6, 4, 5 \}
  • 33 次操作:a3=6a_3 = 6
  • 44 次操作:将 a2,a3,a4,a5a_2, a_3, a_4, a_5 个加上 33,数列变为 {2,7,9,7,8}\{ 2, 7, 9, 7, 8 \}
  • 55 次操作:a3=9a_3 = 9
  • 66 次操作:a5=8a_5 = 8

数据规模与约定

  • 对于 30%30\% 的数据,n,m10n, m \le 10
  • 对于 60%60\% 的数据,n,m1000n, m \le 1000
  • 对于 100%100\% 的数据,1n,m105;1lrn;1pn;1ai,xn1 \le n, m \le 10^5; 1 \le l \le r \le n; 1 \le p \le n; 1 \le a_i, x \le n